发明内容
(一)发明目的
鉴于上述问题,本发明的目的是提出一种语音网关报障呼叫方法和***,可替代TR069远程管理、插件管理的方式实现网关的质量监控,进而可减少云平台服务器购置投入成本以及减少网关适配开发成本,降低了运营成本和软件开发成本,本发明公开了以下技术方案。
(二)技术方案
作为本发明的第一方面,本发明公开了一种语音网关报障呼叫方法,包括:
检测网络连通状态、客户操作状态、设备物理状态的异常行为,并将异常行为生成异常事件;
对所述异常事件进行处理,获得故障信息;
将所述故障信息写入SIP请求中,构造报障请求;
查看所述报障请求中的故障信息。
在一种可能的实施方式中,所述将异常行为生成异常事件,具体包括:
所述异常事件包括异常行为和异常行为代码。
在一种可能的实施方式中,所述对所述异常事件进行处理,获得故障信息,具体包括:
初始化socket库;
创建服务器端套接字;
建立所述服务器端套接字地址;
将所述套接字与所述套接字地址绑定。
在一种可能的实施方式中,所述将所述故障信息写入SIP请求中,构造报障请求,具体包括:
T0字段写入语音网关的服务端通讯层URI;
T0字段写入语音网关的客户端通讯层URI;
Cseq字段写入INVITE;
Call-ID写入密码乱序随机串;
Max-Forwards字段写入缺省值70;
Via字段写入z9h64bK;
Call-Info字段写入故障消息。
在一种可能的实施方式中,所述查看所述报障请求中的故障信息,具体包括:
客户端初始化一个会话;
使用构造的INVITE;
发送INVITE请求;
语音服务端通讯层抓包查看客户端发来INVITE类型信息;
查看INVITE报文Call-Info字段,即可看到故障信息。
作为本发明的第二方面,本发明还公开了一种语音网关报障呼叫***,包括:
用户操作异常检测模块,所述用户操作异常检测模块用于检测网络连通状态、客户操作状态、设备物理状态的异常行为,并将异常行为生成异常事件;
语音网关报障呼叫消息服务器,所述语音网关报障呼叫消息服务器用于对所述异常事件进行处理,获得故障信息;
报障请求构造模块,所述报障请求构造模块用于将所述故障信息写入SIP请求中,构造报障请求;
语音发送模块,所述语音发送模块用于查看所述报障请求中的故障信息。
在一种可能的实施方式中,所述异常事件包括异常行为和异常行为代码。
在一种可能的实施方式中,所述用户操作异常检测模块包括:
异常检测单元,所述异常检测单元用于检测网络连通状态、客户操作状态、设备物理状态中任一项或多项异常行为;
ID生成单元,所述ID生成单元用于对每一项的所述异常行为赋值异常状态ID,生成异常事件;
发送异常事件单元,所述发送异常事件单元用于将所述异常事件发送至所述语音网关报障呼叫消息服务器。
在一种可能的实施方式中,所述语音网关报障呼叫消息服务器包括:
异常事件接收单元,所述异常事件接收单元用于接收所述异常事件;
消息处理单元,所述消息处理单元用于处理并分类处理所述异常事件,获得故障信息;
发送报障单元,所述发送报障单元用于将所述故障信息发送至所述报障请求构造模块。
在一种可能的实施方式中,所述报障请求构造模块包括:所述报障请求构造模块用于将所述故障信息写入SIP请求中,构造报障请求
接收报障单元,所述接收报障单元用于接收故障信息;
构造请求单元,所述构造请求单元用于将所述故障信息写去SIP请求中,构造报障请求;
发送构造单元,所述发送构造单元用于将所述报障请求发送至所述语音发送模块。
(三)有益效果
本发明公开的一种语音网关报障呼叫方法和***,具有如下有益效果:检测用户操作的异常行为,并将异常行为通过语音网关构造语音请求头部信息,语音服务端的通讯层通过抓包查看INVITE类型报文中Call-Info字段携带的故障信息,并提供必要的技术支援工作,通过本方法可替代TR069远程管理、插件管理的方式实现网关的质量监控,进而可减少云平台服务器购置投入成本以及减少网关适配开发成本,降低了运营成本和软件开发成本。
具体实施方式
为使本发明实施的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行更加详细的描述。
需要说明的是:在附图中,自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。所描述的实施例是本发明一部分实施例,而不是全部的实施例,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制。
下面参考图1-4详细描述本发明公开的一种语音网关报障呼叫方法的第一实施例。本实施例主要应用于网关报障,对网关的质量进行监控,从而可减少云平台服务器购置投入成本以及减少网关适配开发成本,降低了运营成本和软件开发成本。
如图1-4所示,本实施例主要包括以下步骤:
S100、检测网络连通状态、客户操作状态、设备物理状态的异常行为,并将异常行为生成异常事件。
在步骤100中,异常事件包括异常行为和异常行为代码,其中异常事件包括:
当用户登录语音网关GUI次数超过一定次数失败后,将记录客户的登录失败行为,定义该异常行为代码为001;
当用户配置网关的INTERNET业务后,INTERNET业务无法正常使用,定义该异常行为为002;
当用户配置网关的无线业务后,无线业务无法正常使用,定义该异常为003;
当网关的CPU使用率超过80%时并且持续时间在605以上,定义该异常行为为004;
当网关的内存使用率超过95%时并且持续60S以上,定义该异常行为为005;
当网关的芯片温度达到70摄氏度以上持续5分钟以上,定义该异常行为为006;
当网关Internet业务出现失去连接时,定义该异常行为为007;
当网关发生进程奔溃时,定义该行为为008;
当网关的部分应用程序的CPU使用率或者内存使用率超过自定义阈值时,定义该异常行为为009。
本申请实施例中,网关是H.323***的一个可选件,网关能把不同***所用的协议、音频、视频编码算法以及控制信号进行变换以适应***终端互通。如基于PSTN的H.324***和基于窄带ISDN的H.320***与H.323***进行通信,就需要配置网关。
在检测到客户、网络、设备中任一项或多项中存在异常行为时,根据异常行为的内容,生成异常状态ID,也就是异常行为代码,将异常行为内容和异常行为ID合并成异常事件。
S200、对异常事件进行处理,获得故障信息。
如图2所示,在步骤200中,采用进程间通信中的消息队列方式,对异常事件进行处理,其具体步骤包括:
S210、初始化socket库;
S220、创建服务器端套接字;
S230、建立服务器端套接字地址;
S240、将套接字与套接字地址绑定。
消息队列就是一个消息的链表,是一系列保存在内核中消息的列表,用户进行可以向消息队列添加消息,也可以向消息队列读取消息,且可对每个消息指定特定的消息类型,接收的时候需要按照队列次序,可根据自定义条件接收特定类型的消息。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息。进程间通过消息队列通信,主要是:创建或打开消息队列,添加消息,读取消息和控制消息队列。
一个消息队列由一个标识符(即队列ID)来标识。消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级,消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
本申请实施例中,先初始化socket(套接字)库,并创建服务器端套接字以及建立服务器端套接字地址,将服务器端套接字与服务器端套接字地址进行绑定之后,接收函数,且一直处于侦听模式,在收到异常事件后,对异常事件进行消息处理,最终得到故障信息,该故障信息包括异常事件和异常事件地址。例如当检测到“客户登陆失败行为和异常行为代码001”异常事件后,也就是网关的web服务器检测用户登录网关,连续3次失败后,将异常事件通过进程间通信的方式发送给进程间通信的服务进程,对异常事件进行消息处理。
S300、将故障信息写入SIP请求中,构造报障请求。
如图3所示,在步骤300中,将故障信息写入SIP请求中,构造报障请求,具体包括以下步骤:
S310、T0字段写入语音网关的服务端通讯层URI;
S320、T0字段写入语音网关的客户端通讯层URI;
S330、Cseq字段写入INVITE;
S340、Call-ID写入密码乱序随机串;
S350、Max-Forwards字段写入缺省值70;
S360、Via字段写入z9h64bK;
S370、Call-Info字段写入故障消息。
其中:z9h64bK为RFC标准里面的一个字段,Call-Info头域提供了对呼叫方或者被叫方的附加信息,如果出现在请求中则是呼叫方的信息,如果出现在应答中则是被叫方的。“purpose”参数中存放了效果图URI。“icon”参数包含了一个呼叫方或者被叫方的图标。“info”参数描述了简要的呼叫方或者被叫方的信息,例如,通过放置一个网页进行介绍等。“card”参数提供了一个名片,比如,基于vCard[36]或者LDIF[37]格式。如果附加新的标记,那么可以通过27节描述的步骤通过在IANA注册来附加。
对Call-Info的使用可能会带来一些安全隐患。如果一个被叫方接到一个恶意呼叫方提供的URI,被叫方可能会由显示一个不合适的内容,或者危险的或者非法的内容,等等。因此,我们建议UA只显示那些它能够检验并且信任发送方身份的Call-Info头域中的内容。这个对于对方UA来说不需要。proxy可以在请求中加入这个头域。通过在填写call-info的value,获得了一个完整的数据报文。
本申请实施例中,基于“客户登陆失败行为和异常行为代码001”故障信息的基础上,进行构造SIP请求信息的具体步骤为:收到故障信息之后,取出异常事件信息,并通过下述内容,获得构造报障请求。
sip_message_init(request);//初始化;
sip_message_set_method(request)//prepare the request-line;
sip_message_set_version(request,sip_strdup(″SIP/2.0″));
sip_message_set_status_code(request);
sip_message_set_to(request,to);//INVITE sip:to@[to]SIP/2.0;
sip_message_set_from(request,from);//INVITE sip:from@[from]SIP/2.0;
sip_from_set_tag(request);//from:<sip:from@[from]>;tag=[tag]″;
sip_call_id_set_number(request);//″Call-ID:[call-id]″;
sip_cseq_set_method(cseq,sip_strdup(method_name));
request->cseq=cseq;//″CSeq:20INVITE″;
sip_message_set_max_forwards(request,″70″);//Max-Forwards:70;
sip_message_set_via(request,tmp);
//″Via:SIP/2.0/UDP[from]:5060;rport;branch=z9hG4bK2195″;
sip_message_set_contact(request,contact);//″Contact:<sip:from@from:5060>″;
sip_message_set_user_agent(request,eXsip.user_agent);//″User-Agent:QuteCom2.2.1(eXsip2/3.3.0)″;
sip_message_set_call_info(request,info);//″Call-info:故障文本″。
根据设置可获得如下内容:
//Via:SIP/2.0/UDP192.168.105.5∶5060;rport;branch=z9hG4bK2195;
//Call-ID:8103;
//Call-Info:故障文本;
//CSeq:20INVITE;
//Max-Forwards:70;
//User-Agent:Linphone/3.2.1(eXsip2/3.3.0);
//Subject:Phone call;
//subject在eXsip_build_initial_invite中被设置。在本函数调用后随即调用。
通过构造报障请求,在sip通讯服务端可以抓包看到设备发来的故障消息,且可以通过故障信息发现现网设备中的故障设备,及时对设备维护。
S400、查看报障请求中的故障信息。
如图4所示,在步骤400中,查看报障请求中的故障信息具体包括以下步骤:
S410、客户端初始化一个会话;
S420、使用构造的INVITE;
S430、发送INVITE请求;
S440、语音服务端通讯层抓包查看客户端发来INVITE类型信息;
S450、查看INVITE报文Call-Info字段,即可看到故障信息。
其中,在查看报障请求中包括INVITE事务和服务端事务,INVITE事务是用来发送请求,服务端事务用来接收请求。
INVITE请求包含了一个三方的握手。客户端事务发送一个INVITE,服务端事务回送一个应答,客户端事务发送一个ACK。对于非可靠传输(比如UDP),客户端事务每隔T1重发请求,每次重发后间隔时间加倍。T1是一个估计的循环时间(round-trip time,RTT),缺省设置成为500ms。几乎所有的事务定时器都以T1为单位,并且调整T1的值也就调整了那些定时器的值。请求不会在可靠的通讯协议上重新发送。在接收到1xx应答以后,重发机制完全停止,并且客户端等待更进一步的应答。服务端事务可以发送附加的1xx应答,这个应答并非由服务端事务可靠传输。最后,服务端事务会发送一个终结应答。对于非可靠的传输协议,应答会间隔时间来重发,对于可靠的传输协议,它只发送1次。对于客户端事务所接收的每一个终结应答,客户端事务都发送一个ACK,用于终止应答的重发送。
接收请求中一个服务器应当能够接收从任何IP地址、端口和协议上过来的请求。通过对这个服务器的SIP或者SIPS URI的DNS查找,得到这个服务器的地址然后连接和发送的请求的。其中,“handing out”(发布)包含了在REGISTER请求或者转发应答的Contact头域中放一个URI,或者在请求或者应答的“Record-Route”头域中放一个URI。这个URI可以通过放在网页或者名片上被“handing out”(发布)。同样的也建议服务器在公网上监听缺省的SIP端口(TCP/UDP是5060,5061是在TCP上的TLS)。对于服务器监听UDP的任何端口和界面,都必须在TCP上也进行同样的监听。如果一个服务器在TCP监听了,那么它不一定需要在UDP上也进行相应的监听。当然服务器也可以因为某些原因在特定地址和端口上监听UDP。当服务端事务从任意一个通讯层上接收到一个请求的时候,它必须检查最上的Via头域的“sent-by”参数。如果“sent-by”参数的主机部分包含了一个主机名,或者它包含的IP地址和包的源地址不同,服务器必须增加一个“received”参数到这个Via头域值中。这个参数必须包含收到的包的原地址。由于服务端必须把应答发送给收到请求的那个源IP地址,所以这个可以用来帮助服务端通讯层发送应答。
例如:一个服务端通讯层收到的请求可能是这样的(部分):
Via:SIP/2.0/UDP bobspc.biloxi.com:5060;
请求是从源IP:192.0.2.4收到的。在请求转交到上层之前,通讯层增加了一个“received”参数,这样请求的部分就是:
Via:SIP/2.0/UDP bobspc.biloxi.com:5060;received=192.0.2.4;
接着,服务端通讯层尝试和服务端事务做匹配。如果匹配上一个服务端事务,那么请求就交给那个事务去处理。如果没有匹配到事务,请求就交给核心去处理,可能会创建一个新的服务端事务来处理。注意当UAS核心给INVITE请求发送一个2xx应答的时候,服务端事务已经销毁了。这就是说,当ACK收到的时候,不会有匹配的服务端事务,并且基于这个规则,ACK回交给UAS核心来处。
本申请实施例中,检测将当前设备故障并生成异常事件,且对异常事件进行分析,定位客户异常使用行为,语音网关构造语音请求头部信息,将故障信息写入SIP请求中,语音服务端通讯层就可以通过抓包看看到设备发来的SIP报文,查看INVITE类型报文中Call-Info字段携带的故障信息,可有效的减少云平台服务器购置投入成本、减少网关适配开发成本以及显著降低了软件开发成本,不需要采取tr069远程管理、插件管理的方式实现网关的质量监控,降低运营成本。
下面参考图1-5详细描述,基于同一发明构思,本发明实施例还提供了一种语音网关报障呼叫***的第一实施例。由于该***所解决问题的原理与前述一种语音网关报障呼叫方法相似,因此该***的实施可以参见前述方法的实施,重复之处不再赘述。本实施例主要应用于网关报障,对网关的质量进行监控,从而可减少云平台服务器购置投入成本以及减少网关适配开发成本,降低了运营成本和软件开发成本。
如图1-5所示,本实施例主要包括用户操作异常检测模块500、语音网关报障呼叫消息服务器600、报障请求构造模块700和语音发送模块800,具体报障呼叫包括以下步骤:
S100、检测网络连通状态、客户操作状态、设备物理状态的异常行为,并将异常行为生成异常事件;
S200、对异常事件进行处理,获得故障信息;
S300、将故障信息写入SIP请求中,构造报障请求;
S400、查看报障请求中的故障信息。
其中用户操作异常检测模块500用于检测网络连通状态、客户操作状态、设备物理状态的异常行为,并将异常行为生成异常事件,其异常事件包括如下内容:
当用户登录语音网关GUI次数超过一定次数失败后,将记录客户的登录失败行为,定义该异常行为代码为001;
当用户配置网关的INTERNET业务后,INTERNET业务无法正常使用,定义该异常行为为002;
当用户配置网关的无线业务后,无线业务无法正常使用,定义该异常为003;
当网关的CPU使用率超过80%时并且持续时间在60S以上,定义该异常行为为004;
当网关的内存使用率超过95%时并且持续60S以上,定义该异常行为为005;
当网关的芯片温度达到70摄氏度以上持续5分钟以上,定义该异常行为为006;
当网关Internet业务出现失去连接时,定义该异常行为为007;
当网关发生进程奔溃时,定义该行为为008;
当网关的部分应用程序的CPU使用率或者内存使用率超过自定义阈值时,定义该异常行为为009。
语音网关报障呼叫消息服务器600用于对异常事件进行处理,获得故障信息,具体包括以下步骤,获得故障信息:
S210、初始化socket库;
S220、创建服务器端套接字;
S230、建立服务器端套接字地址;
S240、将套接字与套接字地址绑定。
报障请求构造模块700用于将故障信息写入SIP请求中,构造报障请求,具体通过以下步骤获得构造报障请求:
S310、T0字段写入语音网关的服务端通讯层URI;
S320、T0字段写入语音网关的客户端通讯层URI;
S330、Cseq字段写入INVITE;
S340、Call-ID写入密码乱序随机串;
S350、Max-Forwards字段写入缺省值70;
S360、Via字段写入z9h64bK;
S370、Call-Info字段写入故障消息。
语音发送模块800用于查看报障请求中的故障信息,具体通过以下步骤查看故障信息:
S410、客户端初始化一个会话;
S420、使用构造的INVITE;
S430、发送INVITE请求;
S440、语音服务端通讯层抓包查看客户端发来INVITE类型信息;
S450、查看INVITE报文Call-Info字段,即可看到故障信息。
在一种可能的事实方式中,异常事件包括异常行为和异常行为代码。
在一种可能的事实方式中,用户操作异常检测模块500包括:异常检测单元510、ID生成单元520和发送异常事件单元530。
其中,异常检测单元510用于检测网络连通状态、客户操作状态、设备物理状态中任一项或多项异常行为;ID生成单元520用于对每一项的异常行为赋值异常状态ID,生成异常事件;发送异常事件单元530用于将异常事件发送至语音网关报障呼叫消息服务器600。
在一种可能的事实方式中,语音网关报障呼叫消息服务器600包括:异常事件接收单元610、消息处理单元620和发送报障单元630。
其中,异常事件接收单元610用于接收异常事件;消息处理单元620用于处理并分类处理异常事件,获得故障信息;发送报障单元630用于将故障信息发送至报障请求构造模块700。
在一种可能的事实方式中,报障请求构造模块700包括:接收报障单元710、构造请求单元720和发送构造单元730。
其中,接收报障单元710用于接收故障信息;构造请求单元720用于将故障信息写去SIP请求中,构造报障请求;发送构造单元730用于将报障请求发送至语音发送模块800。
本申请中,用户操作异常检测模块500用于检测网络连通状态、客户操作状态、设备物理状态发生的异常,通过异常检测单元510对网络连通状态、客户操作状态、设备物理状态进行检测,ID生成单元520将异常检测单元510检测到的异常行为生成异常事件,并利用发送异常事件单元530将异常事件发送至语音网关报障呼叫消息服务器600,其中,异常事件包括异常行为、异常行为代码。
语音网关报障呼叫消息服务器600中的接收异常事件单元接收到异常事件后,处理消息单元对异常事件进行处理,利用发送报障单元630将故障信息发送至报障请求构造模块700。
报障请求构造模块700中接收报障单元710将接收到的故障信息后,对故障信息初始化,利用构造请求单元720将故障信息写去SIP请求中,构造报障请求,并通过发送构造单元730将报障请求发送至语音发送模块800,语音发送模块800接收到报障请求后,利用抓包查看INVITE报文中Call-Info字段,即可看到故障信息。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。