Sipdroid信令代码结构是其实现客户端和服务器通信的基本;通过分析其结构可以很好的完成代码层次概念的学习;同时使用SIPdroid的信令代码可以实现与大部分SIP服务器的交互通信。初次写博客,如有谬误还望指正。
TcpTransport(extends Transport): 调用TcpConnection类 ConnectedTransport类等主要功能是创建TCP连接发送数据和监听端口将得到的回复返回上层结构。
关键方法:void sendMessage(Message msg){}将上层传递到下面的消息发送到初始化的IP和端口
void onReceivedData(TcpConnection tcp_conn, byte[] data, int len){}
监听初始化IP和端口的回复消息,并将其转化为String返回给上层
SipProvider:public SipProvider(String via_addr, int port, String[] protocols,String ifaddr) {}初始化时建立对指定地址和端口的连接,V3平台指定端口是5070;管理SipProviderListener监听组;创建TcpTransport发送上层传递的Sip消息;从TcpTransport得到V3的回复消息,并对其进行初步的解析分析。
关键方法:
public boolean addSipProviderListener(SipProviderListener listener){}加载新的监听;
public ConnectionIdentifier sendMessage(Message msg) {}发送从上层得到的sip消息。
注意:由于要从客户端得到平台地址所以创建SipProvider在SipdroidEngine处就创建实例了。
TransactionClient: public TransactionClient(SipProvider sip_provider, Message req,TransactionClientListener listener){}
是对SipProvider的封装,基本上就是将消息的传递到SipProvider层,主要工作时对会话回复消息的进一步处理和分析,并根据消息的code进行分类,将关键的消息(成功的消息)传递到上面的Dialog层;可能封装成不同消息类型的TransactionClient
例如InviteTranstionClient和AckTransationClient
关键方法:
public void request() {}建立SipProvider监听,发送sip消息
public void onReceivedMessage(SipProvider provider, Message msg){}对会话回复消息的进一步处理和分析,并根据消息的code进行分类,将关键的消息(成功的消息)传递到上面的Dialog层;
public void onTimeout(Timer to){}对于超时的会话进行处理,根据状态重发或结束
public void terminate() {}结束传输,还原状态
Dialog:Dialog是Client和服务端的基本通信方式,其标识是Call-ID;该标识和remote_tag,local_tag共同标识着Client是和服务端的同一个PU进行通话的。
public class InviteDialog extends Dialog implements TransactionClientListener,InviteTransactionServerListener,AckTransactionServerListener,SipProviderListener接口代表了完成各种监听后处理函数 ;这是改写程序响应时要改的地方。
public void onReceivedMessage(SipProvider sip_provider, Message msg){}:Dialog作为SipProviderListener时的响应处理函数
public void onTransFailureResponse(TransactionClient tc, Message msg){}:Dialog作为TransactionClientListener时消息是失败时的响应处理函数(消息代码是300到700)
public void onTransProvisionalResponse(TransactionClient tc, Message msg) :Dialog作为TransactionClientListener时回复消息代码是100到200时的响应处理函数
public void onTransSuccessResponse(TransactionClient tc, Message msg){}:Dialog作为TransactionClientListener时回复消息代码是200到300时的响应处理函数
显然,上述结构是从上到下的层次结构,Dialog是最上层的封装,TcpTransport是最低层的通信层。