2017-05-30 72 views
0

要求: 將SIP Qualify發送到dialplan的分機號碼。我們可以從DialPlan Ping延伸嗎?

爲什麼? 如果擴展名爲NOT_IN_USE,那麼不同的一組函數將被稱爲&,如果擴展名爲UNREACHABLE則不同。

但是,如果我的設備突然中斷連接,星號需要時間來更改狀態,則時間取決於此時間之間的qualifyfreq值&,如果其他設備使其調用錯誤的功能集。因此,我想在dialplan中的所有內容上調用Peer_poke,以使擴展的正確狀態更新爲&,然後轉到正確的函數調用集。

請記住,我無法降低低於60秒的qualifyfreq值。

儘可能地嘗試讀取撥號規則中的所有可用函數,沒有爲我的目的服務,我可以檢查擴展的狀態,但狀態不是當前依賴於Asterisk服務器發送的最後一個ping的當前狀態&我需要星號ping設備並給我目前的狀態。

+0

爲什麼你不能將合格率降低到60以下? – miken32

+0

@ miken32:由於電池限制,有許多設備不喜歡頻繁ping服務器。即使我減少5秒,仍然會有5秒的差距,在那裏它可以顯示錯誤的狀態,只是減少了問題的可能性沒有解決它。 –

+0

正確的設置應該ping設備,而不是向後。 – arheops

回答

2

是的,你可以使用SIP消息命令(但其他方應該忽略消息或不支持它)。

您也可以在sip.conf中設置qualify,qualifyfreq,然後檢查SIPPEER函數。

當然你也可以編寫一個特殊的函數來執行ping操作,但是使用這個函數你會遇到同樣的問題(例如,如果沒有連接,響應的等待時間不可預知),並且你已經重寫了ALOT源代碼。

目前沒有辦法做到這一點在chan_sip沒有太多的編碼,所以這個功能沒有實現。

作爲其他選項,您可以使用外部應用程序ping設備,使用libpcap獲取捕獲響應並在udp數據包中發送星號端口(udp不檢查源端口)。無論如何,這將需要特殊的編碼和一些技能。

+0

哇,這很快,真的很感謝你的回答,我得出的結論相同,但都看起來非常複雜的代碼,消息的想法接縫良好,明天會嘗試。 –

+0

在所有其他邏輯都爲我工作之前發送空消息,它並沒有完全按照我以爲它會改變DEVICE_STATE的方式進行,但我只是尋找要成功傳遞的消息,然後進行邏輯處理,如果它不在X秒內成功交付,然後掛斷。 –

+0

這裏也有IOS和Android的PUSH機制。它在不符合呼叫之前要求遠程設備重新註冊。 – arheops