sipdroid 接听电话流程

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表示所有;

 

你可能感兴趣的:(sipdroid 接听电话流程)