1. Freeswitch轉發文本消息流程如下流程圖所示:
1.1 chat_thread_run函數
該函數從消息隊列中pop消息,並把消息傳遞給chat_process_event函數進行處理
1.2 chat_process_event函數,定義如下:
1.3 sofia_presence_chat_send函數
sofia_presence_chat_send函數對參數message_event進行解釋,並重新組裝成nua_message函數需要的參數,最終由nua_message函數把文本消息發送到目的客戶端,如下圖:
1.4 nua_message函數
nua_message函數使用宏NUA_SIGNAL對nua_signal函數進行調用
1.5 nua_signal函數
nua_signal函數對參數重新進行封裝,然後調用su_msg_send_to函數把消息發送到sofia-sip,並由sofia-sip轉發到目的客戶端
2. 客戶端和FreeSwitch之間收發文本消息使用的是sip的擴展simple,消息內容放在SIP的“Message Body”中,如下圖所示:
3. simple協議簡介
由IETF制定的SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensions)協議簇對SIP協議進行了擴展,以使其支持IM服務。SIMPLE增加了MESSAGE、SUBSCRIBE和NOTIFY方法。