sipdroid 内部有一个任务在等待接收sip消息,收到消息后并不处理,而是通过监听器的回调返回。
1.run() -----------udpProvider.java
|
listener.onReceivedPacket(this, packet);
||
2.onReceivedPacket(UdpProvider udp, UdpPacket packet) ---------- udpTransport.java
|
listener.onReceivedMessage(this, msg);
||
3.onReceivedMessage(Transport transport, Message msg) ---------- sipProvider.java
|
processReceivedMessage(msg);
|
sip_listener.onReceivedMessage( this, msg);
这个sip_listener是其他应用通过addSipProviderListener()方法注册进来的,搜索一下:
Dialog.java (src\org\zoolu\sip\dialog): sip_provider.addSipProviderListener(dialog_id, this);
InviteTransactionClient.java (src\org\zoolu\sip\transaction): sip_provider.addSipProviderListener(transaction_id, this);
NotifierDialog.java (src\org\zoolu\sip\dialog): sip_provider.addSipProviderListener(new MethodIdentifier(
RegisterAgent.java (src\org\sipdroid\sipua): sip_provider.addSipProviderListener(new TransactionIdentifier(
SipInterface.java (src\org\zoolu\sip\provider): sip_provider.addSipProviderListener(id, this);
TransactionClient.java (src\org\zoolu\sip\transaction): sip_provider.addSipProviderListener(transaction_id, this);
TransactionServer.java (src\org\zoolu\sip\transaction): sip_provider.addSipProviderListener(transaction_id, this);
我们看一下这个方法的定义:public boolean addSipProviderListener(Identifier id, SipProviderListener listener)
第一个参数Identifier id,非常关键,他表明我要注册的这个listener 响应哪些类型的sip信令,可以是某一种,如invite,也可以是很多,甚至是所有,用ANY表示所有;