欧美,精品,综合,亚洲,好吊妞视频免新费观看,免费观看三级吃奶,一级a片女人自慰免费看

您當(dāng)前的位置是:  首頁(yè) > 新聞 > 文章精選 >
 首頁(yè) > 新聞 > 文章精選 >

FreeSWITCH:不按規(guī)矩出牌

2019-01-08 16:36:26   作者:   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  WRONG_CALL_STATE
  在使用FreeSWITCH的過(guò)程中,經(jīng)常會(huì)看到日志中顯示W(wǎng)RONG_CALL_STATE,如:
  2018-02-12 13:00:30.734977 [WARNING]
  switch_core_state_machine.c:687
  sofia/internal/41@1.2.3.4 Abandoned
  2018-02-12 13:00:30.734977 [NOTICE]
  switch_core_state_machine.c:690
  Hangup sofia/internal/41@1.2.3.4
  [CS_NEW] [WRONG_CALL_STATE]
  好多同學(xué)都問這個(gè)問題,不知道是什么原因。其實(shí),要檢查這個(gè)問題也很簡(jiǎn)單,只需要用sofia profile internal siptrace on打開SIP Trace,跟蹤下信令就知道原因了。不過(guò),這種事情比較麻煩的是,你不知道它什么時(shí)候會(huì)出現(xiàn)。
  好在,F(xiàn)reeSWITCH是開源軟件,直接打開源代碼查看日志中描述文件的687~690行就好了,大致是這樣的:
  while ((state = switch_channel_get_state(session->channel)) != CS_DESTROY) {
  uint32_t new_loops = 500;
  …
  if (endstate == CS_NEW) {
  switch_yield(20000);
  switch_ivr_parse_all_events(session);
  if (!--new_loops) {
  switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s %s Abandoned\n",
  session->uuid_str, switch_core_session_get_name(session));
  switch_channel_set_flag(session->channel, CF_NO_CDR);
  switch_channel_hangup(session->channel, SWITCH_CAUSE_WRONG_CALL_STATE);
  }
  } else {
  …
  }
  }
  從代碼上看,問題發(fā)生在FreeSWITCH的核心狀態(tài)機(jī),核心狀態(tài)機(jī)是一個(gè)循環(huán),里面有個(gè)計(jì)數(shù)器,如果狀態(tài)機(jī)連續(xù)有500次處于CS_NEW狀態(tài),則打印錯(cuò)誤日志W(wǎng)RONG_CALL_STATE,掛機(jī)。
  switch_yield(20000)是等待20毫秒,因?yàn)檠h(huán)500次的時(shí)間大約是20毫秒 x 500 = 20000毫秒 = 10秒。
  從日志中我們倒回10秒查找日志,果然能找到電話初始化時(shí)候的日志:
  2018-02-12 13:00:20.714977 [NOTICE]
  switch_channel.c:1104 New Channel sofia/…
  也就是說(shuō),從電話初始化,到釋放,Channel的狀態(tài)一直處于CS_NEW狀態(tài),當(dāng)然至于為什么一直處于這個(gè)狀態(tài),還得進(jìn)一步的看代碼,那就不好找了。
  所以,最終分析該分題比較好的方法還是要配合SIP消息進(jìn)行分析。
  此處省略5000字 …
  好吧,既然我知道這個(gè)問題的原因我就不賣關(guān)子了。
  問題的原因在于SIP消息不完整,正常的SIP流程一般是:
  --> 主叫發(fā)送INVITE
  <-- FreeSWITCH回復(fù)100 Trying
  <-- 401 需要Challenge 驗(yàn)證
  --> ACK
  --> 主叫發(fā)送帶認(rèn)證信息的INVITE
  … 繼續(xù)
  而此處的問題在于,主叫在收到401后,沒有回ACK,或者回了但沒有繼續(xù)發(fā)送INVITE消息,也就是,沒有按規(guī)矩出牌,導(dǎo)致FreeSWITCH一直處于等待狀態(tài),10秒后FreeSWITCH超時(shí)掛機(jī)。
  如果你的FreeSWITCH服務(wù)器部署在公網(wǎng)上,上面的問題多半是來(lái)自壞人的攻擊,小半是由于NAT問題等導(dǎo)致客戶端發(fā)送的ACK或INVITE到不了FreeSWITCH,小概率事件是你自己寫了個(gè)SIP客戶端半道崩潰了。
  具體的SIP消息我這里也沒有,大家不妨自己驗(yàn)證下。
  有的同學(xué)說(shuō)了,怎么驗(yàn)證呢?嗯,就是不好驗(yàn)證所以我才沒有SIP消息。因?yàn),大家手頭的SIP客戶端都是按規(guī)矩出牌的,一下子想不按規(guī)矩出牌還真不容易做到。
  有沒有工具能發(fā)送任意我想要的SIP呢?還真有,你直接用nc,或者sipsak,或sipp都可以發(fā)送任意的SIP消息。不過(guò),今天我就寫到這里了,有沒有人接龍呢?
  如果你想學(xué)好SIP,歡迎參加5月1-4日在阿姆斯特丹舉辦的OpenSIPS大會(huì),查看如下網(wǎng)址或點(diǎn)擊「閱讀原文」直達(dá)。
  http://www.opensips.org/events/Summit-2018Amsterdam/
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

相關(guān)熱詞搜索: FreeSWITCH

上一篇:AI時(shí)代、FreeSWITCH能做什么?

下一篇:最后一頁(yè)

專題

CTI論壇會(huì)員企業(yè)