sipml5实现SIP MESSAGE方法(一)

来源:互联网 发布:java仪表盘代码 编辑:程序博客网 时间:2024/05/16 02:21

        在做个基于SIP企业会议通信终端,在web端要实现即时通信(IM)功能,需要用到SIP MESSAGE方法,这个方法在RFC3428中扩展。

sipml5中已经有了SIP MESSAGE实现的API,http://sipml5.org/docgen/#sendMessage,然而在sipml5的DEMO中,没有对其进行实现。根据官方指南,在sipml5 demo(https://code.google.com/p/sipml5/)的基础文件call.htm上开始实现。

        首先需要添加一个按钮,用于发送MESSAE,先做简单点,就接在HangUp后头吧,并添加一个MESSAGE显示区域。

<!-- 添加发送MESSAE按钮 --><div class="btn-group">    <input type="button" id="btnSendMessage" style="margin: 0; vertical-align:middle; height: 100%;" class="btn btn-primary" value="Send Message" onclick='sipSendMessage();' disabled /></div><!-- ---------------------- --><!-- 添加MESSAGE显示区域 --><label style="width: 100%;" align="center" id="txtMessage" ></label><!----------------------------->
        然后在javascript中实现sipSendMessage方法,需要先定义一个变量oSipSessionSendMessage用于创建这个MESSAGE Session,然后发送文本消息。
//send message (SIP MESSAGE)function sipSendMessage() {    if(oSipStack && !oSipSessionSendMessage && !tsk_string_is_null_or_empty(txtPhoneNumber.value)) {oSipSessionSendMessage=oSipStack.newSession('message',oConfigSendMessage);//send messageif(oSipSessionSendMessage.send(txtPhoneNumber.value,'你好,世界!','text/plain;charset=utf-8')==0){txtMessage.innerHTML = txtMessage.innerHTML+txtDisplayName.value+'<i>:你好,世界!</i><br>';}}}
消息发送过去后,还要监听对端的响应,在onSipEventSession这个回调函数中,event type为'i_ao_request'时,判断oSipSessionSendMessage的响应,202 Accepted时表示网关接收了,200 OK则表示目的地已经接收了。

//SEND SIP MESSAGE, The Responseif(e.session==oSipSessionSendMessage){    var iSipResonseCode=e.getSipResponseCode();    if(iSipResonseCode==202){        txtMessage.innerHTML = txtMessage.innerHTML+'<i>Gateway Accepted!</i><br>';    }    if(iSipResonseCode==200){        txtMessage.innerHTML = txtMessage.innerHTML+'<i>Destination Accepted!</i><br>';    }}

接下来实现接收消息,在SIP Stack的回调函数onSipEventStack中,实现消息的监听和实现,接收新消息的type是'i_new_message',添加这个case。

//Receive messagecase 'i_new_message':{    oSipSessionSendMessage=e.newSession;    oSipSessionSendMessage.setConfiguration(oConfigSendMessage);    var sRemoteNumber = (oSipSessionSendMessage.getRemoteFriendlyName() || 'unknown');    oSipSessionSendMessage.accept();    txtMessage.innerHTML = txtMessage.innerHTML+'<i>'+sRemoteNumber+':'+e.getContentString()+'</i><br>';    break;}
oConfigSendMessage是SIP MESSAGE Session的Config结构体,这边就只配置了events_listener。
oConfigSendMessage={    events_listener: { events: '*', listener: onSipEventSession }};
至此,就实现了SIP MESSAGE的接收发送以及简单的显示,后面将对显示模块进行设计,以及发送框的添加。
下面是测试截图。

测试截图


0 0