欧美,精品,综合,亚洲,好吊妞视频免新费观看,免费观看三级吃奶,一级a片女人自慰免费看

您當(dāng)前的位置是:  首頁 > 新聞 > 國內(nèi) >
 首頁 > 新聞 > 國內(nèi) >

Kamailio/OpenSIPS學(xué)習(xí)筆記-如何使用數(shù)據(jù)庫實現(xiàn)撥號規(guī)則控制

2018-04-17 11:01:12   作者:james.zhu    來源:Asterisk開源派   評論:0  點擊:


  在我們前面的系列筆記中,我們的撥號規(guī)則是使用腳本寫死的代碼。這樣的代碼不利于管理維護(hù),F(xiàn)在我們介紹如何通過撥號控制模塊來實現(xiàn)撥號管理。
  這里,為了實現(xiàn)撥號規(guī)則模塊化管理,我們需要引用兩個概念來支持撥號規(guī)則的管理。一個概念是使用AUTH_DB的參數(shù)dpid(Dialplan Identification),我們可以設(shè)置不同的用戶走不同的路由。另外一個概念是通過DIALPLAN模塊來管理路由,通過一個腳本管理不同用戶位置,不同路由和不同媒體服務(wù)器轉(zhuǎn)發(fā)設(shè)置。
  1、我們需要通過幾個步驟來實現(xiàn)以上管理功能。首先,我們需要在subscriber表中添加dpid,通過以下命令執(zhí)行:
  mysql –u root –p // 登錄mysql 服務(wù)器
  >use opensips
  >alter table subscriber add column dpid int default 0; // 添加dpid
  然后在cfg文件中,添加以下兩個模塊:
  loadmodule "avpops.so"
  loadmodule "dialplan.so"
  設(shè)置模塊加載參數(shù):
  modparam("avpops", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
  modparam("avpops", "avp_table", "usr_preferences")
  #------ load the dpid field to a pseudo-variable $avp(dpid) ------
  modparam("auth_db", "load_credentials", "$avp(rpid)=rpid ;$avp(dpid)= dpid")
  modparam("dialplan", "db_url","mysql://opensips:opensipsrw@localhost/opensips")
  添加撥號規(guī)則處理流程:
  if( !is_avp_set("$avp(dpid)") ) {
  $avp(dpid)=0;
  }
  if(!dp_translate("$avp(dpid)",("$ruri.user/$ruri.user"),"$avp(dest)") {
  sl_send_reply("420", "Invalid Extension");
  exit;
  }
  xlog("Dialplan: Subscriber’s dpid: $(avp(dpid))");
  xlog("Dialplan: Destination: $avp(dest)");
  if ($avp(dest)=="3") {
  #Route to usrloc
  route(3);
  }
  if ($avp(dest)=="4") {
  #route to drouting
  route(4);
  }
  if ($avp(dest)=="5") {
  #route to media server
  route(5);
  }
  sl_send_reply("420", "Invalid Extension");
  exit;
  添加最終路由管理策略:
  route[3]{
  if (!lookup("location")) {
  switch ($retcode) {
  case -1:
  case -3:
  t_newtran();
  t_reply("404", "Not Found");
  exit;
  case -2:
  sl_send_reply("405", "Method Not Allowed");
  exit;
  }
  }
  # when routing via usrloc, log the missed calls also
  setflag(2);
  route(1);
  }
  route[5] {
  rewritehostport("媒體服務(wù)器IP:5061");
  route(1);
  }
  2、設(shè)置cfg腳本以后,用戶需要通過源代碼添加幾個路由設(shè)置:使用文本編輯器,vi,執(zhí)行 vi /var/www/opensips-cp/config/tools/system/dialplan/local.inc.php,修改后保存。
  $config->attrs_cb=array(
  // name , description
  array("3","usrloc"),
  array("4","routing"),
  array("5","service"),
  #array("d","Descr d"),
  #array("e","Descr e"),
  #array("f","Descr f"),
  通過界面設(shè)置撥號規(guī)則的路由表,在設(shè)置界面時,需要注意以下幾個撥號匹配方式的不同, 另外,這里的屬性就是在上面代碼中所添加到用戶location, routing和媒體服務(wù)器路由設(shè)置。
  這里的路由規(guī)則通過號碼匹配和屬性實現(xiàn)了統(tǒng)一管理:
  • 如果用戶撥打了國際長途(011),國內(nèi)長途(01),本地號碼(7位匹配),則通過路由屬性4出局。
  • 如果撥打的1XXXX則通過屬性3呼叫,查詢user location。
  • 如果用戶撥打以×為前綴的號碼,或者熱鍵撥號功能,則通過屬性5媒體服務(wù)器出局。
  3、保存以上設(shè)置以后,如果配置成功的話,用戶可以分別測試呼叫流程:
  • 從PSTN呼叫,撥打以011為前綴的號碼,呼叫到PSTN網(wǎng)關(guān)出局。
  • 任何內(nèi)部號碼,呼叫以1XXX測試。
  • 任何以功能熱鍵×開始的撥號,都發(fā)送到媒體服務(wù)器。
  4、在本章節(jié)的分享中,我們討論了如何使用數(shù)據(jù)庫存儲來實現(xiàn)呼叫路由的管理。大家知道,通過數(shù)據(jù)庫管理會比強行在代碼中寫死路由規(guī)則更加方便管理和維護(hù)。但是,在創(chuàng)建數(shù)據(jù)庫管理時,用戶需要添加幾個相應(yīng)的數(shù)據(jù)庫表單,軟交換通過表單查詢獲得用戶的location信息,并且需要修改php代碼來支持3種路由屬性。完成這些工作后,用戶需要通過界面來設(shè)置不同的路由屬性對撥號規(guī)則進(jìn)行一定的規(guī)范。通過以上步驟,用戶基本上完成了通過數(shù)據(jù)庫配置路由管理的方式,用戶可以通過撥號規(guī)則來做進(jìn)一步的測試驗證。
  關(guān)注微信公眾號:asterisk-cn,獲得有價值的行業(yè)分享
  freepbx 技術(shù)論壇:www.ippbx.org.cn
  Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
  歐米(Omni)智能客服解決方案
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
【免責(zé)聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題