在简绍sip消息的接收与处理之前我先们说一点意外获取到的信息(不知正确否?)Sipstack与DialogUsageManager(FIFO是其父类TransactionUser的成员变量)中各维护一个fifo但两个fifo本质上不是同一个fifo。但是里面存放的消息都是同一个类型,一般情况下要发送的消息都会放在sipstack的FIFO中,而从远端接收到的响应一般情况下会放在DialogUsageManager的FIFO中。
sipStack的线程会不停调用SipStack::process(FdSet& fdset)函数,去检查是否有新消息收到,如果有最终将其放入DUM的FIFO中(本质上该FIFO是DUM从其父类TransactionUser处继承来的)。
应用程序应当不停地去调用DialogUsageManager::process(int timeoutMs, resip::Lockable* mutex)方法,去检测是否有消息被放入FIFO队列中,如果有process()函数会调用相应的逻辑去处理,详细的处理流程如下图所示: