⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions.inc.php

📁 最近在做软交换时研究的一个软交换的东东
💻 PHP
📖 第 1 页 / 共 5 页
字号:
		$routes = array();	foreach ($results as $row) {		$routes[$row[0]] = $row[1];	}		// array(routename=>priority)	return $routes;}function core_trunks_deleteDialRules($trunknum) {	$conf = core_trunks_readDialRulesFile();		// remove rules for this trunk	unset($conf["trunk-".$trunknum]);		core_trunks_writeDialRulesFile($conf);}/* end page.trunks.php functions *//* begin page.routing.php functions *///get unique outbound route namesfunction core_routing_getroutenames() {	global $amp_conf;		if ( $amp_conf["AMPDBENGINE"] == "sqlite")	{		// TODO: sqlite work arround - diego		$results = sql("SELECT DISTINCT context FROM extensions WHERE context LIKE 'outrt-%' ORDER BY context ","getAll");	}	else	{		// we SUBSTRING() to remove "outrt-"		$results = sql("SELECT DISTINCT SUBSTRING(context,7) FROM extensions WHERE context LIKE 'outrt-%' ORDER BY context ","getAll");	}	if (count($results) == 0) {		// see if they're still using the old dialprefix method		$results = sql("SELECT variable,value FROM globals WHERE variable LIKE 'DIAL\\\_OUT\\\_%'","getAll");		// we SUBSTRING() to remove "outrt-"				if (count($results) > 0) {			// yes, they are using old method, let's update						// get the default trunk			$results_def = sql("SELECT value FROM globals WHERE variable = 'OUT'","getAll");						if (preg_match("/{OUT_(\d+)}/", $results_def[0][0], $matches)) {				$def_trunk = $matches[1];			} else {				$def_trunk = "";			}						$default_patterns = array(	// default patterns that used to be in extensions.conf						"NXXXXXX",						"NXXNXXXXXX",						"1800NXXXXXX",						"1888NXXXXXX",						"1877NXXXXXX",						"1866NXXXXXX",						"1NXXNXXXXXX",						"011.",						"911",						"411",						"311",						);						foreach ($results as $temp) {				// temp[0] is "DIAL_OUT_1"				// temp[1] is the dial prefix								$trunknum = substr($temp[0],9);								$name = "route".$trunknum;								$trunks = array(1=>"OUT_".$trunknum); // only one trunk to use								$patterns = array();				foreach ($default_patterns as $pattern) {					$patterns[] = $temp[1]."|".$pattern;				}								if ($trunknum == $def_trunk) {					// this is the default trunk, add the patterns with no prefix					$patterns = array_merge($patterns, $default_patterns);				}								// add this as a new route				core_routing_add($name, $patterns, $trunks,"new");			}									// delete old values			sql("DELETE FROM globals WHERE (variable LIKE 'DIAL\\\_OUT\\\_%') OR (variable = 'OUT') ");			// we need to re-generate extensions_additional.conf			// i'm not sure how to do this from here						// re-run our query			$results = sql("SELECT DISTINCT SUBSTRING(context,7) FROM extensions WHERE context LIKE 'outrt-%' ORDER BY context ","getAll");			// we SUBSTRING() to remove "outrt-"		}			} // else, it just means they have no routes.		return $results;}function core_routing_setroutepriority($routepriority, $reporoutedirection, $reporoutekey){	global $db;	$counter=-1;	foreach ($routepriority as $tresult) 	{		$counter++;		if (($counter==($reporoutekey-1)) && ($reporoutedirection=="up")) {			// swap this one with the one before (move up)			$temproute = $routepriority[$counter];			$routepriority[ $counter ] = $routepriority[ $counter+1 ];			$routepriority[ $counter+1 ] = $temproute;					} else if (($counter==($reporoutekey)) && ($reporoutedirection=="down")) {			// swap this one with the one after (move down)			$temproute = $routepriority[ $counter+1 ];			$routepriority[ $counter+1 ] = $routepriority[ $counter ];			$routepriority[ $counter ] = $temproute;		}	}	unset($temptrunk);	$routepriority = array_values($routepriority); // resequence our numbers	$counter=0;	foreach ($routepriority as $tresult) 	{		$order=core_routing_setroutepriorityvalue($counter++);		$sql = sprintf("Update extensions set context='outrt-%s-%s' WHERE context='outrt-%s'",$order,substr($tresult[0],4), $tresult[0]);		$result = $db->query($sql); 		if(DB::IsError($result)) {     			die($result->getMessage()); 		}	}	// Delete and readd the outbound-allroutes entries	$sql = "delete from  extensions WHERE context='outbound-allroutes'";	$result = $db->query($sql);	if(DB::IsError($result)) {        	die($result->getMessage().$sql);	}	$sql = "SELECT DISTINCT context FROM extensions WHERE context like 'outrt-%' ORDER BY context";	$results = $db->getAll($sql);	if(DB::IsError($results)) {		die($results->getMessage());	}	$priority_loops=1;		foreach ($results as $row) {		$sql = "INSERT INTO extensions (context, extension, priority, application, args, descr, flags) VALUES ";		$sql .= "('outbound-allroutes', ";		$sql .= "'include', ";		$sql .= "'".$priority_loops++."', ";		$sql .= "'".$row[0]."', ";		$sql .= "'', ";		$sql .= "'', ";		$sql .= "'2')";			//$sql = sprintf("Update extensions set application='outrt-%s-%s' WHERE context='outbound-allroutes' and  application='outrt-%s'",$order,substr($tresult[0],4), $tresult[0]);		$result = $db->query($sql); 		if(DB::IsError($result)) {     			die($result->getMessage(). $sql);  		}	}	$sql = "SELECT DISTINCT SUBSTRING(context,7) FROM extensions WHERE context LIKE 'outrt-%' ORDER BY context ";        // we SUBSTRING() to remove "outrt-"        $routepriority = $db->getAll($sql);        if(DB::IsError($routepriority))        {                die($routepriority->getMessage());        }        return ($routepriority);	}function core_routing_setroutepriorityvalue($key){	$key=$key+1;	if ($key<10)		$prefix = sprintf("00%d",$key);	else if ((9<$key)&&($key<100))		$prefix = sprintf("0%d",$key);	else if ($key>100)		$prefix = sprintf("%d",$key);	return ($prefix);}function core_routing_add($name, $patterns, $trunks, $method, $pass, $emergency = "") {	global $db;	$trunktech=array();	//Retrieve each trunk tech for later lookup	$sql="select * from globals WHERE variable LIKE 'OUT\\_%'";        $result = $db->getAll($sql);        if(DB::IsError($result)) {		die($result->getMessage());	}	foreach($result as $tr) {		$tech = strtok($tr[1], "/");		$trunktech[$tr[0]]=$tech;	}	 	if ($method=="new")	{	            $sql="select DISTINCT context FROM extensions WHERE context LIKE 'outrt-%' ORDER BY context";            $routepriority = $db->getAll($sql);            if(DB::IsError($result)) {                    die($result->getMessage());            }            $order=core_routing_setroutepriorityvalue(count($routepriority));	 	$name = sprintf ("%s-%s",$order,$name);	}	$trunks = array_values($trunks); // probably already done, but it's important for our dialplan		foreach ($patterns as $pattern) {				if (false !== ($pos = strpos($pattern,"|"))) {			// we have a | meaning to not pass the digits on			// (ie, 9|NXXXXXX should use the pattern _9NXXXXXX but only pass NXXXXXX, not the leading 9)						$pattern = str_replace("|","",$pattern); // remove all |'s			$exten = "EXTEN:".$pos; // chop off leading digit		} else {			// we pass the full dialed number as-is			$exten = "EXTEN"; 		}				if (!preg_match("/^[0-9*]+$/",$pattern)) { 			// note # is not here, as asterisk doesn't recoginize it as a normal digit, thus it requires _ pattern matching						// it's not strictly digits, so it must have patterns, so prepend a _			$pattern = "_".$pattern;		}				// 1st priority is emergency dialing variable (if set)		if(!empty($emergency)) {			   $startpriority = 1;			   $sql = "INSERT INTO extensions (context, extension, priority, application, args, descr) VALUES ";			   $sql .= "('outrt-".$name."', ";			   $sql .= "'".$pattern."', ";			   $sql .= "'".$startpriority."', ";			   $sql .= "'SetVar', ";			   $sql .= "'EMERGENCYROUTE=YES', ";			   $sql .= "'Use Emergency CID for device')";			   $result = $db->query($sql);				if(DB::IsError($result)) {					   die($result->getMessage());				}		} else {			   $startpriority = 0;		}		$first_trunk = 1;		foreach ($trunks as $priority => $trunk) {			$priority += $startpriority;			$priority += 1; // since arrays are 0-based, but we want priorities to start at 1						$sql = "INSERT INTO extensions (context, extension, priority, application, args) VALUES ";			$sql .= "('outrt-".$name."', ";			$sql .= "'".$pattern."', ";			$sql .= "'".$priority."', ";			$sql .= "'Macro', ";			if ($first_trunk)				$pass_str = $pass;			else				$pass_str = "";			if ($trunktech[$trunk] == "ENUM")				$sql .= "'dialout-enum,".substr($trunk,4).",\${".$exten."},".$pass_str."'"; // cut off OUT_ from $trunk			else				$sql .= "'dialout-trunk,".substr($trunk,4).",\${".$exten."},".$pass_str."'"; // cut off OUT_ from $trunk			$sql .= ")";						$result = $db->query($sql);			if(DB::IsError($result)) {				die($result->getMessage());			}			//To identify the first trunk in a pattern			//so that passwords are in the first trunk in			//each pattern			$first_trunk = 0;		}				$priority += 1;		$sql = "INSERT INTO extensions (context, extension, priority, application, args, descr) VALUES ";		$sql .= "('outrt-".$name."', ";		$sql .= "'".$pattern."', ";		$sql .= "'".$priority."', ";		$sql .= "'Macro', ";		$sql .= "'outisbusy', ";		$sql .= "'No available circuits')";				$result = $db->query($sql);		if(DB::IsError($result)) {			die($result->getMessage());		}	}		// add an include=>outrt-$name  to [outbound-allroutes]:		// we have to find the first available priority.. priority doesn't really matter for the include, but	// there is a unique index on (context,extension,priority) so if we don't do this we can't put more than	// one route in the outbound-allroutes context.	$sql = "SELECT priority FROM extensions WHERE context = 'outbound-allroutes' AND extension = 'include'";	$results = $db->getAll($sql);	if(DB::IsError($results)) {		die($results->getMessage());	}	$priorities = array();	foreach ($results as $row) {		$priorities[] = $row[0];	}	for ($priority = 1; in_array($priority, $priorities); $priority++);		// $priority should now be the lowest available number		$sql = "INSERT INTO extensions (context, extension, priority, application, args, descr, flags) VALUES ";	$sql .= "('outbound-allroutes', ";	$sql .= "'include', ";	$sql .= "'".$priority."', ";	$sql .= "'outrt-".$name."', ";	$sql .= "'', ";	$sql .= "'', ";	$sql .= "'2')";		$result = $db->query($sql);	if(DB::IsError($result)) {		die($priority.$result->getMessage());	}	}function core_routing_edit($name, $patterns, $trunks, $pass, $emergency="") {	core_routing_del($name);	core_routing_add($name, $patterns, $trunks,"edit", $pass, $emergency);}function core_routing_del($name) {	global $db;	$sql = "DELETE FROM extensions WHERE context = 'outrt-".$name."'";	$result = $db->query($sql);	if(DB::IsError($result)) {		die($result->getMessage());	}		$sql = "DELETE FROM extensions WHERE context = 'outbound-allroutes' AND application = 'outrt-".$name."' ";	$result = $db->query($sql);	if(DB::IsError($result)) {		die($result->getMessage());	}		return $result;}function core_routing_rename($oldname, $newname) {	global $db;	$route_prefix=substr($oldname,0,4);	$newname=$route_prefix.$newname;	$sql = "SELECT context FROM extensions WHERE context = 'outrt-".$newname."'";	$

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -