0) { $response .= $buffer; } if ($contentlength == 0) { //if contentlenght is already don't process again if (strlen(trim($buffer)) > 0) { //run only if buffer has content $temparray = split(":", trim($buffer)); if ($temparray[0] == "Content-Length") { $contentlength = trim($temparray[1]); } } } usleep(100); //allow time for reponse //optional because of script timeout //don't let while loop become endless if ($i > 10000) { break; } if ($contentlength > 0) { //is contentlength set //stop reading if all content has been read. if (strlen($response) >= $contentlength) { break; } } $i++; } return $response; } else { echo "no handle"; } } function event_socket_request_reloadxml() { global $config; $password = $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_password']; $port = $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_port']; $host = $config['interfaces']['lan']['ipaddr']; if (pkg_is_service_running('freeswitch')) { $fp = event_socket_create($host, $port, $password); $cmd = "api reloadxml"; $response = event_socket_request($fp, $cmd); fclose($fp); } unset($host, $port, $password); } function sync_package_freeswitch_settings() { global $config; if($config['installedpackages']['freeswitchsettings']['config'] != "") { conf_mount_rw(); config_unlock(); foreach($config['installedpackages']['freeswitchsettings']['config'] as $rowhelper) { $fout = fopen("/usr/local/freeswitch/conf/directory/default/default.xml","w"); $tmpxml = "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= "\n"; fwrite($fout, $tmpxml); unset($tmpxml); fclose($fout); $fout = fopen("/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml","w"); $tmpxml = "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= ""; fwrite($fout, $tmpxml); unset($tmpxml, $event_socket_password); fclose($fout); $fout = fopen("/usr/local/freeswitch/conf/autoload_configs/xml_rpc.conf","w"); $tmpxml = "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= "\n"; fwrite($fout, $tmpxml); unset($tmpxml, $event_socket_password); fclose($fout); } conf_mount_ro(); event_socket_request_reloadxml(); } } function sync_package_freeswitch_dialplan() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchdialplan']['config'][0]['dialplan_default_xml']) == 0) { /* dialplan not found in the pfsense config.xml get the default dialplan and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/dialplan/default.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchdialplan']['config'][0]['dialplan_default_xml'] = base64_encode($tmpxml); unset($filename, $dialplan); fclose($fout); } else { /* found the dialplan in the pfsense config.xml save it to default.xml. */ $fout = fopen("/usr/local/freeswitch/conf/dialplan/default.xml","w"); $tmpxml = $config['installedpackages']['freeswitchdialplan']['config'][0]['dialplan_default_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch_extensions() { global $config; if($config['installedpackages']['freeswitchextensions']['config'] != "") { conf_mount_rw(); config_unlock(); /* delete all old extensions to prepare for new ones */ unlink_if_exists("/usr/local/freeswitch/conf/directory/default/1*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/2*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/3*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/4*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/5*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/6*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/7*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/8*.xml"); unlink_if_exists("/usr/local/freeswitch/conf/directory/default/9*.xml"); foreach($config['installedpackages']['freeswitchextensions']['config'] as $rowhelper) { $fout = fopen("/usr/local/freeswitch/conf/directory/default/".$rowhelper['extension'].".xml","w"); $tmpxml = "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; /* Disabled until further testing */ /* if (strlen($rowhelper['vm-mailto']) > 0) { */ /* $tmpxml .= " \n"; */ /* $tmpxml .= " \n"; */ /* $tmpxml .= " \n"; */ /* } */ /* */ /* Voicemail Mail To */ /* vm-mailto */ /* Optional: Enter the email address to send voicemail to. */ /* input */ /* */ $tmpxml .= " >\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; if (strlen($rowhelper['effective_caller_id_number']) > 0) { $tmpxml .= " \n"; $tmpxml .= " \n"; } if (strlen($rowhelper['outbound_caller_id_number']) > 0) { $tmpxml .= " \n"; $tmpxml .= " \n"; } $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= "\n"; fwrite($fout, $tmpxml); unset($tmpxml); fclose($fout); } conf_mount_ro(); event_socket_request_reloadxml(); } } function sync_package_freeswitch_gateways() { global $config; if($config['installedpackages']['freeswitchgateways']['config'] != "") { conf_mount_rw(); config_unlock(); /* delete all old gateways to prepare for new ones */ unlink_if_exists("/usr/local/freeswitch/conf/sip_profiles/external/*.xml"); foreach($config['installedpackages']['freeswitchgateways']['config'] as $rowhelper) { $fout = fopen("/usr/local/freeswitch/conf/sip_profiles/external/".$rowhelper['gateway'].".xml","w"); $tmpxml .= "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= ""; fwrite($fout, $tmpxml); unset($tmpxml); fclose($fout); } conf_mount_ro(); event_socket_request_reloadxml(); } } function sync_package_freeswitch_modules() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchmodules']['config'][0]['modules_conf_xml']) == 0) { /* dialplan not found in the pfsense config.xml get the default dialplan and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchmodules']['config'][0]['modules_conf_xml'] = base64_encode($tmpxml); unset($filename, $dialplan); fclose($fout); } else { /* found the dialplan in the pfsense config.xml save it to default.xml. */ $fout = fopen("/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml","w"); $tmpxml = $config['installedpackages']['freeswitchmodules']['config'][0]['modules_conf_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch_public() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchpublic']['config'][0]['public_xml']) == 0) { /* dialplan_public_xml not found in the pfsense config.xml get the default public.xml and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/dialplan/public/00_inbound_did.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchpublic']['config'][0]['public_xml'] = base64_encode($tmpxml); unset($filename, $tmpxml); fclose($fout); } else { /* found dialplan_public_xml in the pfsense config.xml save it to public.xml. */ $fout = fopen("/usr/local/freeswitch/conf/dialplan/public/00_inbound_did.xml","w"); $tmpxml = $config['installedpackages']['freeswitchpublic']['config'][0]['public_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch_vars() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchvars']['config'][0]['vars_xml']) == 0) { /* dialplan not found in the pfsense config.xml get the default dialplan and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/vars.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchvars']['config'][0]['vars_xml'] = base64_encode($tmpxml); unset($filename, $dialplan); fclose($fout); } else { /* found the dialplan in the pfsense config.xml save it to default.xml. */ $fout = fopen("/usr/local/freeswitch/conf/vars.xml","w"); $tmpxml = $config['installedpackages']['freeswitchvars']['config'][0]['vars_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch_internal() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchinternal']['config'][0]['internal_xml']) == 0) { /* internal_xml not found in the pfsense config.xml get the internal.xml and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/sip_profiles/internal.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchinternal']['config'][0]['internal_xml'] = base64_encode($tmpxml); unset($filename, $dialplan); fclose($fout); } else { /* found the internal_xml in the pfsense config.xml save it to internal.xml. */ $fout = fopen("/usr/local/freeswitch/conf/sip_profiles/internal.xml","w"); $tmpxml = $config['installedpackages']['freeswitchinternal']['config'][0]['internal_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch_external() { global $config; conf_mount_rw(); config_unlock(); if(strlen($config['installedpackages']['freeswitchexternal']['config'][0]['external_xml']) == 0) { /* external_xml not found in the pfsense config.xml get the external.xml and save to config.xml. */ $filename = "/usr/local/freeswitch/conf/sip_profiles/external.xml"; $fout = fopen($filename,"r"); $tmpxml = fread($fout, filesize($filename)); $config['installedpackages']['freeswitchexternal']['config'][0]['external_xml'] = base64_encode($tmpxml); unset($filename, $dialplan); fclose($fout); } else { /* found the external_xml in the pfsense config.xml save it to external.xml. */ $fout = fopen("/usr/local/freeswitch/conf/sip_profiles/external.xml","w"); $tmpxml = $config['installedpackages']['freeswitchexternal']['config'][0]['external_xml']; fwrite($fout, base64_decode($tmpxml)); fclose($fout); unset($tmpxml); } conf_mount_ro(); event_socket_request_reloadxml(); } function sync_package_freeswitch() { global $config; sync_package_freeswitch_settings(); sync_package_freeswitch_dialplan(); sync_package_freeswitch_extensions(); sync_package_freeswitch_gateways(); sync_package_freeswitch_modules(); sync_package_freeswitch_public(); sync_package_freeswitch_vars(); sync_package_freeswitch_internal(); sync_package_freeswitch_external(); } function freeswitch_php_install_command() { global $config; conf_mount_rw(); config_lock(); if (!is_dir('/usr/local/www/freeswitch/')) { exec("mkdir /usr/local/www/freeswitch/"); } exec("cp /tmp/freeswitch_status.tmp /usr/local/www/freeswitch/freeswitch_status.php"); unlink_if_exists("/tmp/freeswitch_status.tmp"); exec("tar zxvf /tmp/freeswitch.tgz -C /usr/local/"); unlink_if_exists("/tmp/freeswitch.tgz"); /* set default numbering_plan */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['numbering_plan']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['numbering_plan'] = "US"; } /* set default event_socket_password */ if(strlen($config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_password']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_password'] = "ClueCon"; } /* set default event_socket_port */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_port']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_port'] = "8021"; } /* set default xml_rpc_http_port */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_http_port']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_http_port'] = "8787"; } /* set default xml_rpc_auth_realm */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_realm']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_realm'] = "freeswitch"; } /* set default xml_rpc_auth_user */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_user']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_user'] = "freeswitch"; } /* set default xml_rpc_auth_pass */ if (strlen($config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_pass']) == 0) { $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_pass'] = "works"; } $numbering_plan = $config['installedpackages']['freeswitchsettings']['config'][0]['numbering_plan']; $event_socket_password = $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_password']; $event_socket_port = $config['installedpackages']['freeswitchsettings']['config'][0]['event_socket_port']; $xml_rpc_http_port = $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_http_port']; $xml_rpc_auth_realm = $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_realm']; $xml_rpc_auth_user = $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_user']; $xml_rpc_auth_pass = $config['installedpackages']['freeswitchsettings']['config'][0]['xml_rpc_auth_pass']; $fout = fopen("/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml","w"); $tmpxml = "\n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= " \n"; $tmpxml .= ""; fwrite($fout, $tmpxml); unset($tmpxml); fclose($fout); write_rcfile(array( "file" => "freeswitch.sh", "start" => "/usr/local/freeswitch/bin/./freeswitch -nc", "stop" => "/usr/local/freeswitch/bin/./freeswitch -stop" ) ); sync_package_freeswitch(); $handle = popen("/usr/local/etc/rc.d/freeswitch.sh start", "r"); pclose($handle); $config['installedpackages']['freeswitchsettings']['config'][0]['freeswitch_version'] = "1.0.1 revision 9759."; $config['installedpackages']['freeswitchsettings']['config'][0]['freeswitch_package_version'] = "0.1"; conf_mount_ro(); config_unlock(); } function freeswitch_deinstall_command() { conf_mount_rw(); config_lock(); exec("killall -9 freeswitch"); unlink_if_exists("/usr/local/pkg/freeswitch.xml"); unlink_if_exists("/usr/local/pkg/freeswitch.inc"); unlink_if_exists("/usr/local/pkg/freeswitch_dialplan.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_extensions.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_external.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_gateways.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_internal.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_modules.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_public.xml"); unlink_if_exists("/usr/local/pkg/freeswitch_vars.xml"); unlink_if_exists("/usr/local/www/freeswitch/freeswitch_status.xml"); exec("rm -R /usr/local/freeswitch/"); exec("rm -R /usr/local/www/freeswitch/"); unlink_if_exists("/usr/local/etc/rc.d/freeswitch.sh"); unlink_if_exists("/tmp/freeswitch.tar.gz"); unlink_if_exists("/tmp/pkg_mgr_FreeSWITCH.log"); conf_mount_ro(); config_unlock(); } ?>