Portions created by the Initial Developer are Copyright (C) 2008-2016 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes require_once "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('gateway_add') || permission_exists('gateway_edit')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //action add or update if (isset($_REQUEST["id"])) { $action = "update"; if (isset($_POST["id"])) { $gateway_uuid = check_str($_REQUEST["id"]); } if (isset($_POST["gateway_uuid"])) { $gateway_uuid = check_str($_POST["gateway_uuid"]); } } else { $action = "add"; $gateway_uuid = uuid(); } //get total gateway count from the database, check limit, if defined if ($action == 'add') { if ($_SESSION['limit']['gateways']['numeric'] != '') { $sql = "select count(gateway_uuid) as num_rows from v_gateways "; $sql .= "where ( domain_uuid = '".$_SESSION['domain_uuid']."' "; if (permission_exists('gateway_domain')) { $sql .= "or domain_uuid is null "; } $sql .= ");"; $prep_statement = $db->prepare($sql); if ($prep_statement) { $prep_statement->execute(); $row = $prep_statement->fetch(PDO::FETCH_ASSOC); $total_gateways = $row['num_rows']; } unset($prep_statement, $row); if ($total_gateways >= $_SESSION['limit']['gateways']['numeric']) { $_SESSION['message_mood'] = 'negative'; $_SESSION['message'] = $text['message-maximum_gateways'].' '.$_SESSION['limit']['gateways']['numeric']; header('Location: gateways.php'); return; } } } //get http post variables and set them to php variables if (count($_POST) > 0) { $domain_uuid = check_str($_POST["domain_uuid"]); $gateway = check_str($_POST["gateway"]); $username = check_str($_POST["username"]); $password = check_str($_POST["password"]); $distinct_to = check_str($_POST["distinct_to"]); $auth_username = check_str($_POST["auth_username"]); $realm = check_str($_POST["realm"]); $from_user = check_str($_POST["from_user"]); $from_domain = check_str($_POST["from_domain"]); $proxy = check_str($_POST["proxy"]); $register_proxy = check_str($_POST["register_proxy"]); $outbound_proxy = check_str($_POST["outbound_proxy"]); $expire_seconds = check_str($_POST["expire_seconds"]); $register = check_str($_POST["register"]); $register_transport = check_str($_POST["register_transport"]); $retry_seconds = check_str($_POST["retry_seconds"]); $extension = check_str($_POST["extension"]); $ping = check_str($_POST["ping"]); $channels = check_str($_POST["channels"]); $caller_id_in_from = check_str($_POST["caller_id_in_from"]); $supress_cng = check_str($_POST["supress_cng"]); $sip_cid_type = check_str($_POST["sip_cid_type"]); $codec_prefs = check_str($_POST["codec_prefs"]); $extension_in_contact = check_str($_POST["extension_in_contact"]); $context = check_str($_POST["context"]); $profile = check_str($_POST["profile"]); $hostname = check_str($_POST["hostname"]); $enabled = check_str($_POST["enabled"]); $description = check_str($_POST["description"]); } //prevent the domain_uuid from not being set by someone without this permission if (!permission_exists('gateway_domain')) { $domain_uuid = $_SESSION['domain_uuid']; } //process the HTTP POST if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { //check for all required data $msg = ''; //if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-domain_uuid']."
\n"; } if (strlen($gateway) == 0) { $msg .= $text['message-required']." ".$text['label-gateway']."
\n"; } if ($register == "true") { if (strlen($username) == 0) { $msg .= $text['message-required']." ".$text['label-username']."
\n"; } if (strlen($password) == 0) { $msg .= $text['message-required']." ".$text['label-password']."
\n"; } } //if (strlen($distinct_to) == 0) { $msg .= $text['message-required']." ".$text['label-distinct_to']."
\n"; } //if (strlen($auth_username) == 0) { $msg .= $text['message-required']." ".$text['label-auth_username']."
\n"; } //if (strlen($realm) == 0) { $msg .= $text['message-required']." ".$text['label-realm']."
\n"; } //if (strlen($from_user) == 0) { $msg .= $text['message-required']." ".$text['label-from_user']."
\n"; } //if (strlen($from_domain) == 0) { $msg .= $text['message-required']." ".$text['label-from_domain']."
\n"; } //if (strlen($proxy) == 0) { $msg .= $text['message-required']." ".$text['label-proxy']."
\n"; } //if (strlen($register_proxy) == 0) { $msg .= $text['message-required']." ".$text['label-register_proxy']."
\n"; } //if (strlen($outbound_proxy) == 0) { $msg .= $text['message-required']." ".$text['label-outbound_proxy']."
\n"; } if (strlen($expire_seconds) == 0) { $msg .= $text['message-required']." ".$text['label-expire_seconds']."
\n"; } if (strlen($register) == 0) { $msg .= $text['message-required']." ".$text['label-register']."
\n"; } //if (strlen($register_transport) == 0) { $msg .= $text['message-required']." ".$text['label-register_transport']."
\n"; } if (strlen($retry_seconds) == 0) { $msg .= $text['message-required']." ".$text['label-retry_seconds']."
\n"; } //if (strlen($extension) == 0) { $msg .= $text['message-required']." ".$text['label-extension']."
\n"; } //if (strlen($ping) == 0) { $msg .= $text['message-required']." ".$text['label-ping']."
\n"; } if (strlen($channels) == 0) { //$msg .= $text['message-required']." ".$text['label-channels']."
\n"; $channels = 0; } //if (strlen($caller_id_in_from) == 0) { $msg .= $text['message-required']." ".$text['label-caller_id_in_from']."
\n"; } //if (strlen($supress_cng) == 0) { $msg .= $text['message-required']." ".$text['label-supress_cng']."
\n"; } //if (strlen($sip_cid_type) == 0) { $msg .= $text['message-required']." ".$text['label-sip_cid_type']."
\n"; } //if (strlen($codec_prefs) == 0) { $msg .= $text['message-required']." ".$text['label-codec_prefs']."
\n"; } //if (strlen($extension_in_contact) == 0) { $msg .= $text['message-required']." ".$text['label-extension_in_contact']."
\n"; } if (strlen($context) == 0) { $msg .= $text['message-required']." ".$text['label-context']."
\n"; } if (strlen($profile) == 0) { $msg .= $text['message-required']." ".$text['label-profile']."
\n"; } if (strlen($enabled) == 0) { $msg .= $text['message-required']." ".$text['label-enabled']."
\n"; } //if (strlen($description) == 0) { $msg .= $text['message-required']." ".$text['label-description']."
\n"; } if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) { require_once "resources/header.php"; require_once "resources/persist_form_var.php"; echo "
\n"; echo "
\n"; echo $msg."
"; echo "
\n"; persistformvar($_POST); echo "
\n"; require_once "resources/footer.php"; return; } //remove the invalid characters from the gateway name $gateway = str_replace(" ", "_", $gateway); $gateway = str_replace("/", "", $gateway); //add or update the database if ($_POST["persistformvar"] != "true") { //build the gateway array $x = 0; if (strlen($domain_uuid) == 0) { $array['gateways'][$x]["domain_uuid"] = null; } else { $array['gateways'][$x]["domain_uuid"] = $domain_uuid; } $array['gateways'][$x]["gateway_uuid"] = $gateway_uuid; $array['gateways'][$x]["gateway"] = $gateway; $array['gateways'][$x]["username"] = $username; $array['gateways'][$x]["password"] = $password; $array['gateways'][$x]["distinct_to"] = $distinct_to; $array['gateways'][$x]["auth_username"] = $auth_username; $array['gateways'][$x]["realm"] = $realm; $array['gateways'][$x]["from_user"] = $from_user; $array['gateways'][$x]["from_domain"] = $from_domain; $array['gateways'][$x]["proxy"] = $proxy; $array['gateways'][$x]["register_proxy"] = $register_proxy; $array['gateways'][$x]["outbound_proxy"] = $outbound_proxy; $array['gateways'][$x]["expire_seconds"] = $expire_seconds; $array['gateways'][$x]["register"] = $register; $array['gateways'][$x]["register_transport"] = $register_transport; $array['gateways'][$x]["retry_seconds"] = $retry_seconds; $array['gateways'][$x]["extension"] = $extension; $array['gateways'][$x]["ping"] = $ping; $array['gateways'][$x]["channels"] = $channels; $array['gateways'][$x]["caller_id_in_from"] = $caller_id_in_from; $array['gateways'][$x]["supress_cng"] = $supress_cng; $array['gateways'][$x]["sip_cid_type"] = $sip_cid_type; $array['gateways'][$x]["codec_prefs"] = $codec_prefs; $array['gateways'][$x]["extension_in_contact"] = $extension_in_contact; $array['gateways'][$x]["context"] = $context; $array['gateways'][$x]["profile"] = $profile; if (strlen($hostname) == 0) { $array['gateways'][$x]["hostname"] = null; } else { $array['gateways'][$x]["hostname"] = $hostname; } $array['gateways'][$x]["enabled"] = $enabled; $array['gateways'][$x]["description"] = $description; //update gateway session variable if ($enabled == 'true') { $_SESSION['gateways'][$gateway_uuid] = $gateway; } else { unset($_SESSION['gateways'][$gateway_uuid]); } //save to the data $database = new database; $database->app_name = 'gateways'; $database->app_uuid = '297ab33e-2c2f-8196-552c-f3567d2caaf8'; if (strlen($gateway_uuid) > 0) { $database->uuid($gateway_uuid); } $database->save($array); $message = $database->message; //remove xml file (if any) if not enabled if ($enabled != 'true' && $_SESSION['switch']['sip_profiles']['dir'] != '') { $gateway_xml_file = $_SESSION['switch']['sip_profiles']['dir']."/".$profile."/v_".$gateway_uuid.".xml"; if (file_exists($gateway_xml_file)) { unlink($gateway_xml_file); } } //syncrhonize configuration save_gateway_xml(); //delete the sip profiles from memcache $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); if ($fp) { $hostname = trim(event_socket_request($fp, 'api switchname')); $switch_cmd = "memcache delete configuration:sofia.conf:".$hostname; $switch_result = event_socket_request($fp, 'api '.$switch_cmd); } //rescan the external profile to look for new or stopped gateways //create the event socket connection $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); $tmp_cmd = 'api sofia profile external rescan'; $response = event_socket_request($fp, $tmp_cmd); unset($tmp_cmd); usleep(1000); //close the connection fclose($fp); //clear the apply settings reminder $_SESSION["reload_xml"] = false; } //if ($_POST["persistformvar"] != "true") //redirect the user if (isset($action)) { if ($action == "add") { $_SESSION["message"] = $text['message-add']; } if ($action == "update") { $_SESSION["message"] = $text['message-update']; } header("Location: gateways.php"); return; } } //(count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) //pre-populate the form if (count($_GET) > 0 && $_POST["persistformvar"] != "true") { $gateway_uuid = check_str($_GET["id"]); $sql = "select * from v_gateways "; $sql .= "where gateway_uuid = '".$gateway_uuid."' "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); foreach ($result as &$row) { $domain_uuid = $row["domain_uuid"]; $gateway = $row["gateway"]; $username = $row["username"]; $password = $row["password"]; $distinct_to = $row["distinct_to"]; $auth_username = $row["auth_username"]; $realm = $row["realm"]; $from_user = $row["from_user"]; $from_domain = $row["from_domain"]; $proxy = $row["proxy"]; $register_proxy = $row["register_proxy"]; $outbound_proxy = $row["outbound_proxy"]; $expire_seconds = $row["expire_seconds"]; $register = $row["register"]; $register_transport = $row["register_transport"]; $retry_seconds = $row["retry_seconds"]; $extension = $row["extension"]; $ping = $row["ping"]; $channels = $row["channels"]; $caller_id_in_from = $row["caller_id_in_from"]; $supress_cng = $row["supress_cng"]; $sip_cid_type = $row["sip_cid_type"]; $codec_prefs = $row["codec_prefs"]; $extension_in_contact = $row["extension_in_contact"]; $context = $row["context"]; $profile = $row["profile"]; $hostname = $row["hostname"]; $enabled = $row["enabled"]; $description = $row["description"]; } unset ($prep_statement); } //get the sip profiles $sql = "select sip_profile_name from v_sip_profiles "; $sql .= "where sip_profile_enabled = 'true' "; $sql .= "order by sip_profile_name asc "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $sip_profiles = $prep_statement->fetchAll(); unset ($prep_statement, $sql); //set defaults if (strlen($enabled) == 0) { $enabled = "true"; } if (strlen($register) == 0) { $register = "true"; } if (strlen($retry_seconds) == 0) { $retry_seconds = "30"; } //show the header require_once "resources/header.php"; //show the content echo ""; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; //--- begin: show_advanced ----------------------- echo "\n"; echo "\n"; echo "\n"; //--- end: show_advanced ----------------------- echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo " "; echo "
\n"; echo "\n"; echo " \n"; echo " "; echo " \n"; echo " "; echo " "; echo " \n"; echo " \n"; echo "
\n"; echo " ".$text['title-gateway']."
\n"; echo "
\n"; echo " \n"; if ($action == "update") { echo " \n"; } echo " \n"; echo "
\n"; echo " ".$text['description-gateway-edit']."\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo " ".$text['label-gateway']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-gateway-name']."\n"; echo "
\n"; echo " ".$text['label-username']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-username']."\n"; echo "
\n"; echo " ".$text['label-password']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo " ".$text['description-password']."\n"; echo "
\n"; echo " ".$text['label-from_user']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-from_user']."\n"; echo "
\n"; echo " ".$text['label-from_domain']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-from_domain']."\n"; echo "
\n"; echo " ".$text['label-proxy']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-proxy']."\n"; echo "
\n"; echo " ".$text['label-realm']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-realm']."\n"; echo "
\n"; echo " ".$text['label-expire_seconds']."\n"; echo "\n"; if (strlen($expire_seconds) == 0) { $expire_seconds = "800"; } echo " \n"; echo "
\n"; echo $text['description-expire_seconds']."\n"; echo "
\n"; echo " ".$text['label-register']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-register']."\n"; echo "
\n"; echo " ".$text['label-retry_seconds']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-retry_seconds']."\n"; echo "
\n"; echo "
\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
 \n"; echo " \n"; echo "
\n"; echo "
\n"; echo "
\n"; echo " \n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('gateway_domain')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "
\n"; echo " ".$text['label-distinct_to']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-distinct_to']."\n"; echo "
\n"; echo " ".$text['label-auth_username']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-auth_username']."\n"; echo "
\n"; echo " ".$text['label-extension']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-extension']."\n"; echo "
\n"; echo " ".$text['label-register_transport']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-register_transport']."\n"; echo "
\n"; echo " ".$text['label-register_proxy']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-register_proxy']."\n"; echo "
\n"; echo " ".$text['label-outbound_proxy']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-outbound_proxy']."\n"; echo "
\n"; echo " ".$text['label-caller_id_in_from']."\n"; echo " \n"; echo " \n"; echo "
\n"; echo $text['description-caller_id_in_from']."\n"; echo "
\n"; echo " ".$text['label-supress_cng']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-supress_cng']."\n"; echo "
\n"; echo " ".$text['label-sip_cid_type']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-sip_cid_type']."\n"; echo "
\n"; echo " ".$text['label-codec_prefs']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-codec_prefs']."\n"; echo "
\n"; echo " ".$text['label-extension_in_contact']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-extension_in_contact']."\n"; echo "
\n"; echo " ".$text['label-ping']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-ping']."\n"; echo "
\n"; echo " ".$text['label-channels']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-channels']."\n"; echo "
\n"; echo " ".$text['label-domain']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-domain_name']."\n"; echo "
\n"; echo "
"; echo "
\n"; echo " ".$text['label-context']."\n"; echo "\n"; if (strlen($context) == 0) { $context = "public"; } echo " \n"; echo "
\n"; echo $text['description-context']."\n"; echo "
\n"; echo " ".$text['label-profile']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-profile']."\n"; echo "
\n"; echo " ".$text['label-hostname']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-hostname']."\n"; echo "
\n"; echo " ".$text['label-enabled']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-enabled']."\n"; echo "
\n"; echo " ".$text['label-description']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-description']."\n"; echo "
\n"; if ($action == "update") { echo " \n"; } echo "
"; echo " \n"; echo "
"; echo "

"; echo "
"; echo "\n"; //include the footer require_once "resources/footer.php"; ?>