//创建基础的 呼叫源,路由规则,呼叫源规则,*000的被叫规则 public static bool CreateCalinglSourceRule() { //创建呼叫源,1,任何类型,任何类型 DB_Talk.Model.m_CallingSource modelCs = new DB_Talk.Model.m_CallingSource(); modelCs.ID = 1; modelCs.i_MainType = 6; //任何类型 modelCs.i_SubType = 1; //任何类型 modelCs.BoxID=Global.Params.BoxID; List<DB_Talk.Model.m_CallingSource> list = new DB_Talk.BLL.m_CallingSource().GetModelList( string.Format(" i_Flag=0 and ID='{0}' and i_MainType='{1}' and i_SubType='{2}' and BoxID='{3}'", modelCs.ID, modelCs.i_MainType, modelCs.i_SubType, modelCs.BoxID)); if (list.Count == 0) //不存在才创建 { if (!CreateCallSource(modelCs)) return false; } //创建路由规则0,0,0 DB_Talk.Model.m_RouteRule modelRRule = new DB_Talk.Model.m_RouteRule(); modelRRule.ID = 0; modelRRule.OriRouteID = 0; modelRRule.DestRouteID = 0; modelRRule.BoxID = Global.Params.BoxID; List<DB_Talk.Model.m_RouteRule> listModelRRule = new DB_Talk.BLL.m_RouteRule().GetModelList( string.Format(" i_Flag=0 and ID='{0}' and OriRouteID='{1}' and DestRouteID='{2}' and BoxID='{3}'", modelRRule.ID, modelRRule.OriRouteID, modelRRule.DestRouteID, modelRRule.BoxID)); if (listModelRRule.Count == 0) { if (!CreateRoutingRule(modelRRule)) return false; } //创建呼叫源规则,1,不限,0,1,0 DB_Talk.Model.m_CalinglSourceRule CalinglSourceRule = new DB_Talk.Model.m_CalinglSourceRule(); CalinglSourceRule.CallingOrigID = 1; //呼叫源索引1 CalinglSourceRule.i_ServerType = 1; //服务类型不限 CalinglSourceRule.i_MinReLength = 0; //最小收号长度0 CalinglSourceRule.CalledRuleID = 1; //被叫分析规则索引1 CalinglSourceRule.OriRouteID = 0; //目的路由索引 CalinglSourceRule.BoxID = Global.Params.BoxID; List<DB_Talk.Model.m_CalinglSourceRule> listCallingSource = new DB_Talk.BLL.m_CalinglSourceRule().GetModelList( string.Format(" i_Flag=0 and CallingOrigID='{0}' and CalledRuleID='{1}' and i_ServerType='{2}' and OriRouteID='{3}' and BoxID='{4}'", CalinglSourceRule.CallingOrigID, CalinglSourceRule.CalledRuleID,CalinglSourceRule.i_ServerType, CalinglSourceRule.OriRouteID, CalinglSourceRule.BoxID)); if (listCallingSource.Count == 0) { if (!CreateCallSourceRule(CalinglSourceRule)) return false; } //设置默认的被叫规则 DB_Talk.Model.m_CalledRule CalledRule = new DB_Talk.Model.m_CalledRule(); CalledRule.BoxID = Global.Params.BoxID; CalledRule.CalledID = 1; CalledRule.CallingOriID = 1; CalledRule.DestRouteID = 0; CalledRule.vc_CalledNumber = "*000"; CalledRule.i_CalledType = MBoxSDK.ConfigSDK.CALLED_RULE_TYPE.SERVICE.GetHashCode(); CalledRule.i_CalledSubType = MBoxSDK.ConfigSDK.CALLED_SUB_RULE_TYPE.话务员.GetHashCode(); List<DB_Talk.Model.m_CalledRule> listCall = new DB_Talk.BLL.m_CalledRule().GetModelList( string.Format(" i_Flag=0 and vc_CalledNumber='{0}' and BoxID='{1}'", CalledRule.vc_CalledNumber, CalledRule.BoxID)); if (listCall.Count == 0) { if (CreateCalledRule(CalledRule)) new DB_Talk.BLL.m_CalledRule().Add(CalledRule); else return false; } //默认400的规则 DB_Talk.Model.m_CalledRule CalledRule400 = new DB_Talk.Model.m_CalledRule(); CalledRule400.BoxID = Global.Params.BoxID; CalledRule400.CalledID = 1; CalledRule400.CallingOriID = 1; CalledRule400.DestRouteID = 0; CalledRule400.vc_CalledNumber = "400"; CalledRule400.i_CalledType = MBoxSDK.ConfigSDK.CALLED_RULE_TYPE.SERVICE.GetHashCode(); CalledRule400.i_CalledSubType = MBoxSDK.ConfigSDK.CALLED_SUB_RULE_TYPE.FD.GetHashCode(); CalledRule400.i_CalledChangeType = 2; CalledRule400.i_CalledChangeLength = 3; List<DB_Talk.Model.m_CalledRule> listCall400 = new DB_Talk.BLL.m_CalledRule().GetModelList( string.Format(" i_Flag=0 and vc_CalledNumber='{0}' and BoxID='{1}'", CalledRule400.vc_CalledNumber, CalledRule400.BoxID)); if (listCall400.Count == 0) { if (CreateCalledRule(CalledRule400)) new DB_Talk.BLL.m_CalledRule().Add(CalledRule400); else return false; } return true; }
//删除中继 public static bool DeletePRI(DB_Talk.Model.m_PRIInterface model) { //去激活PRI中继 if (!SetPRITrunkDective(model)) { CommControl.Tools.WriteLog.AppendErrorLog("去激活PRI失败"); return false; } //删除信令信道 DB_Talk.Model.m_PRISigLink PRISigLinkModel = new DB_Talk.Model.m_PRISigLink(); PRISigLinkModel.PRIID = model.PRIID; if (!DeleteAllSigChannel(PRISigLinkModel.PRIID)) { CommControl.Tools.WriteLog.AppendErrorLog("删除信令信道失败"); return false; } //删除承载信道 if (!DeleteT1Channel(model.PRIID)) { CommControl.Tools.WriteLog.AppendErrorLog("删除承载信道失败"); return false; } //删除中继 if (!DeletePriTrunkByID(model)) { CommControl.Tools.WriteLog.AppendErrorLog("删除PRI失败"); return false; } //删除路由规则0,PRIID,PRIID DB_Talk.Model.m_RouteRule modelRRule = new DB_Talk.Model.m_RouteRule(); modelRRule.OriRouteID = 0; modelRRule.DestRouteID = model.RouteID; modelRRule.ID = model.RouteID; modelRRule.BoxID = Global.Params.BoxID; if (!DeleteRoutingRule(modelRRule)) { CommControl.Tools.WriteLog.AppendErrorLog("删除路由规则失败"); return false; } //删除路由 DB_Talk.Model.m_Route mR = new DB_Talk.Model.m_Route(); mR.ID = model.RouteID; mR.vc_Name = "PRI" + model.PRIID.ToString(); mR.RouteGroupID = model.RouteID; mR.i_RouteType = 1; //1: btw(1)双向(默认) if (!DeleteRoute(mR)) return false; //删除路由组 DB_Talk.Model.m_RouteGroup mRg = new DB_Talk.Model.m_RouteGroup(); mRg.vc_Name = "PRI" + model.PRIID.ToString(); mRg.ID = model.RouteID; if (!DeleteRouteGroup(mRg)) { return false; } //删除呼叫规则 return true; }
//查询路由规则 private static bool QueryRoutingRule(out List<DB_Talk.Model.m_RouteRule> lst) { bool b = false; lst = new List<DB_Talk.Model.m_RouteRule>(); byte[] byteArray = new byte[ArraySizeBig]; int len = ArraySizeBig; b = MBoxSDK.ConfigSDK.MBOX_GetRoutingRule(Global.Params.BoxHandle, byteArray, (uint)byteArray.Length, ref len); //if (b) { string str = System.Text.Encoding.Default.GetString(byteArray); str = str.Replace("\0", ""); string[] strArray = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strArray.Length; i++) { DB_Talk.Model.m_RouteRule m = new DB_Talk.Model.m_RouteRule(); string[] strArray2 = strArray[i].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); m.OriRouteID = (int.Parse(strArray2[0])); m.DestRouteID = (int.Parse(strArray2[1])); m.ID = (int.Parse(strArray2[2])); m.BoxID = Global.Params.BoxID; lst.Add(m); } } return b; }
//创建中继 public static bool createPRI(DB_Talk.Model.m_PRIInterface newmodel, List<DB_Talk.Model.m_CalledRule> lstRuleAdd, List<DB_Talk.Model.m_CalledRule> lstRuleDelete) { //创建路由组 DB_Talk.Model.m_RouteGroup mRg = new DB_Talk.Model.m_RouteGroup(); mRg.vc_Name = "PRI" + newmodel.PRIID.ToString(); int routeGroupID = 0; if (!CreateRouteGroup(mRg, out routeGroupID)) { CommControl.Tools.WriteLog.AppendErrorLog("添加PRI路由组失败"); return false; } newmodel.RouteID = routeGroupID; //创建路由 DB_Talk.Model.m_Route mR = new DB_Talk.Model.m_Route(); mR.ID = routeGroupID; mR.RouteGroupID = routeGroupID; mR.vc_Name = "PRI" + newmodel.PRIID.ToString(); mR.i_RouteType = MBoxSDK.ConfigSDK.EnumRouteType.btw.GetHashCode(); if (!CreateRoute(mR)) { CommControl.Tools.WriteLog.AppendErrorLog("添加PRI路由失败"); return false; } //创建路由规则0,PRIID,PRIID DB_Talk.Model.m_RouteRule modelRRule = new DB_Talk.Model.m_RouteRule(); modelRRule.OriRouteID = 0; modelRRule.DestRouteID = newmodel.RouteID; modelRRule.ID = newmodel.RouteID; modelRRule.BoxID = Global.Params.BoxID; if (!CreateRoutingRule(modelRRule)) { CommControl.Tools.WriteLog.AppendErrorLog("添加路由规则失败"); return false; } //创建PRI中继 if (!CreatePriTrunk(newmodel)) { CommControl.Tools.WriteLog.AppendErrorLog("添加PRI失败"); return false; } //创建承载新道 DB_Talk.Model.m_PRIChannel PRIChannelModel = new DB_Talk.Model.m_PRIChannel(); PRIChannelModel.i_E1Port = newmodel.i_E1Port; PRIChannelModel.i_LinkID = newmodel.i_LinkID; PRIChannelModel.PRIID = newmodel.PRIID; if (!CreateT1Channel(PRIChannelModel)) { CommControl.Tools.WriteLog.AppendErrorLog("添加承载信道失败"); return false; } //创建信令新道 DB_Talk.Model.m_PRISigLink PRISigLinkModel = new DB_Talk.Model.m_PRISigLink(); PRISigLinkModel.i_E1Port = newmodel.i_E1Port; PRISigLinkModel.i_LinkID = newmodel.i_LinkID; PRISigLinkModel.PRIID = newmodel.PRIID; PRISigLinkModel.i_UNIType = newmodel.i_UNIType; if (!CreateSigChannel(PRISigLinkModel)) { CommControl.Tools.WriteLog.AppendErrorLog("添加信令信道失败"); return false; } //激活PRI中继 if (!SetPRITrunkActive(newmodel)) { CommControl.Tools.WriteLog.AppendErrorLog("激活PRI失败"); return false; } //添加被叫规则 foreach (DB_Talk.Model.m_CalledRule d in lstRuleAdd) { d.DestRouteID = routeGroupID; if (!CreateCall_OutRule(d)) { CommControl.Tools.WriteLog.AppendErrorLog("添加被叫规则失败,被叫号码为:" + d.vc_CalledNumber); DeletePRI(newmodel); return false; } } if (!Delete_Rule(lstRuleAdd, lstRuleDelete)) return false; return true; }
public static bool DeleteSIP(DB_Talk.Model.m_SIPInterface model) { //去激活SIP if (!SetSipTrunkDective(model)) return false; //删除SIP if (!DeleteSipTrunkByID(model)) return false; //删除SAP接入点 DB_Talk.Model.m_SAPPoint msap = new DB_Talk.Model.m_SAPPoint(); msap.SAPID = model.SIPID + 1; msap.i_Port = model.i_Port; msap.i_Type = 1; //默认1=udp if (!DeleteSipSap(msap)) return false; //删除路由规则0,PRIID,PRIID DB_Talk.Model.m_RouteRule modelRRule = new DB_Talk.Model.m_RouteRule(); modelRRule.OriRouteID = 0; modelRRule.DestRouteID = model.RouteID; modelRRule.ID = model.RouteID; modelRRule.BoxID = Global.Params.BoxID; if (!DeleteRoutingRule(modelRRule)) { CommControl.Tools.WriteLog.AppendErrorLog("删除路由规则失败"); return false; } //删除路由 DB_Talk.Model.m_Route mR = new DB_Talk.Model.m_Route(); mR.ID = model.RouteID; mR.vc_Name = "SIP" + model.SIPID.ToString(); mR.RouteGroupID = model.RouteID; mR.i_RouteType = 1; //1: btw(1)双向(默认) if (!DeleteRoute(mR)) return false; //删除路由组 DB_Talk.Model.m_RouteGroup mRg = new DB_Talk.Model.m_RouteGroup(); mRg.vc_Name = "SIP" + model.SIPID.ToString(); mRg.ID = model.RouteID; if (!DeleteRouteGroup(mRg)) { return false; } return true; }
private static bool createSIP(DB_Talk.Model.m_SIPInterface newmodel, List<DB_Talk.Model.m_CalledRule> lstRuleAdd, List<DB_Talk.Model.m_CalledRule> lstRuleDelete) { //创建路由组 DB_Talk.Model.m_RouteGroup mRg = new DB_Talk.Model.m_RouteGroup(); mRg.vc_Name = "SIP" + newmodel.SIPID.ToString(); int routeGroupID = 0; if (!CreateRouteGroup(mRg, out routeGroupID)) { CommControl.Tools.WriteLog.AppendErrorLog("添加路由组失败"); return false; } newmodel.RouteID = routeGroupID; //创建路由 DB_Talk.Model.m_Route mR = new DB_Talk.Model.m_Route(); mR.ID = routeGroupID; mR.RouteGroupID = routeGroupID; mR.vc_Name = "SIP" + newmodel.SIPID.ToString(); mR.i_RouteType = MBoxSDK.ConfigSDK.EnumRouteType.btw.GetHashCode(); if (!CreateRoute(mR)) { CommControl.Tools.WriteLog.AppendErrorLog("添加路由失败"); return false; } //创建路由规则0,PRIID,PRIID DB_Talk.Model.m_RouteRule modelRRule = new DB_Talk.Model.m_RouteRule(); modelRRule.OriRouteID = 0; modelRRule.DestRouteID = newmodel.RouteID; modelRRule.ID = newmodel.RouteID; modelRRule.BoxID = Global.Params.BoxID; if (!CreateRoutingRule(modelRRule)) { CommControl.Tools.WriteLog.AppendErrorLog("添加路由规则失败"); return false; } //创建SAP接入点 DB_Talk.Model.m_SAPPoint msap = new DB_Talk.Model.m_SAPPoint(); msap.SAPID = newmodel.SIPID +1; msap.i_Port = newmodel.i_Port; msap.i_Type = 1; //默认1=udp if (!CreateSipSap(msap)) { CommControl.Tools.WriteLog.AppendErrorLog("添加SAP失败"); return false; } //创建SIP if (!CreateSipTrunk(newmodel)) { CommControl.Tools.WriteLog.AppendErrorLog("添加SIP失败"); return false; } //激活SIP if (!SetSipTrunkActive(newmodel)) { CommControl.Tools.WriteLog.AppendErrorLog("激活SIP失败"); return false; } //添加被叫规则 foreach (DB_Talk.Model.m_CalledRule d in lstRuleAdd) { d.DestRouteID = routeGroupID; if (!CreateCall_OutRule(d)) { CommControl.Tools.WriteLog.AppendErrorLog("添加被叫规则失败,被叫号码为:" + d.vc_CalledNumber); DeleteSIP(newmodel); return false; } } if (!Delete_Rule(lstRuleAdd, lstRuleDelete)) return false; return true; }
/// <summary> /// 获得数据列表 /// </summary> public List<DB_Talk.Model.m_RouteRule> DataTableToList(DataSet ds) { List<DB_Talk.Model.m_RouteRule> modelList = new List<DB_Talk.Model.m_RouteRule>(); if (ds == null) return modelList; DataTable dt = ds.Tables[0]; int rowsCount = dt.Rows.Count; if (rowsCount > 0) { DB_Talk.Model.m_RouteRule model; for (int n = 0; n < rowsCount; n++) { model = new DB_Talk.Model.m_RouteRule(); if(dt.Rows[n]["ID"]!=null && dt.Rows[n]["ID"].ToString()!="") { model.ID=int.Parse(dt.Rows[n]["ID"].ToString()); } if(dt.Rows[n]["BoxID"]!=null && dt.Rows[n]["BoxID"].ToString()!="") { model.BoxID=int.Parse(dt.Rows[n]["BoxID"].ToString()); } if(dt.Rows[n]["OriRouteID"]!=null && dt.Rows[n]["OriRouteID"].ToString()!="") { model.OriRouteID=int.Parse(dt.Rows[n]["OriRouteID"].ToString()); } if(dt.Rows[n]["DestRouteID"]!=null && dt.Rows[n]["DestRouteID"].ToString()!="") { model.DestRouteID=int.Parse(dt.Rows[n]["DestRouteID"].ToString()); } if(dt.Rows[n]["vc_Code"]!=null && dt.Rows[n]["vc_Code"].ToString()!="") { model.vc_Code= dt.Rows[n]["vc_Code"].ToString(); } if(dt.Rows[n]["vc_Name"]!=null && dt.Rows[n]["vc_Name"].ToString()!="") { model.vc_Name= dt.Rows[n]["vc_Name"].ToString(); } if(dt.Rows[n]["vc_Memo"]!=null && dt.Rows[n]["vc_Memo"].ToString()!="") { model.vc_Memo= dt.Rows[n]["vc_Memo"].ToString(); } if(dt.Rows[n]["i_Flag"]!=null && dt.Rows[n]["i_Flag"].ToString()!="") { model.i_Flag=int.Parse(dt.Rows[n]["i_Flag"].ToString()); } modelList.Add(model); } } return modelList; }
/// <summary> /// 根据条件得到一个对象实体 /// </summary> public DB_Talk.Model.m_RouteRule GetModel(string strWhere) { StringBuilder strSql=new StringBuilder(); strSql.Append(" select top 1 "); strSql.Append(" ID, BoxID, OriRouteID, DestRouteID, vc_Code, vc_Name, vc_Memo, i_Flag "); strSql.Append(" from m_RouteRule "); if(strWhere.Trim()!="") { strSql.Append(" where "+strWhere); } DB_Talk.Model.m_RouteRule model=new DB_Talk.Model.m_RouteRule(); DataSet ds=GetDataSet(strSql.ToString()); if(ds!=null && ds.Tables[0].Rows.Count>0) { model=DataTableToList(ds)[0]; return model; } else { return null; } }