星号:PJSIP_HEADER和Websocket

时间:2017-10-23 13:08:53

标签: websocket header asterisk pjsip

我需要在调用客户端的webrtc时添加自定义标头。由星号13 + siphtml5使用。 拨号方案:

exten => 198,1,Answer()
same => n,Set(PJSIP_HEADER(add,X-DRP)=71234567890)
same => n,DIAL(PJSIP/${EXTEN})

星号日志:

Connected to Asterisk 13.17.2 currently running on ubuntu-xenial (pid = 8895)
  == WebSocket connection from '192.168.0.44:58096' forcefully closed due to fatal write error
  == WebSocket connection from '192.168.0.44:58595' for protocol 'sip' accepted using version '13'
    -- Added contact 'sip:a9gn89sg@192.168.0.44:58595;transport=ws' to AOR '199' with expiration of 450 seconds
  == Contact 199/sip:a9gn89sg@192.168.0.44:58595;transport=ws has been created
  == Contact 199/sip:3qogi2fo@192.168.0.44:58096;transport=ws has been deleted
    -- Contact 199/sip:a9gn89sg@192.168.0.44:58595;transport=ws is now Unknown.  RTT: 0.000 msec
  == Setting global variable 'SIPDOMAIN' to 'aster13'
  == DTLS ECDH initialized (automatic), faster PFS enabled
    -- Executing [198@default:1] Answer("PJSIP/199-00000008", "") in new stack
       > 0x7f0ea0071960 -- Strict RTP learning after remote address set to: 123.135.239.111:58827
[Oct 23 16:02:31] ERROR[8943]: pjproject:0 <?>:            icess0x7f0ea000ce18 ..Error sending STUN request: Network is unreachable
[Oct 23 16:02:31] ERROR[8943]: pjproject:0 <?>:            icess0x7f0ea000ce18 ..Error sending STUN request: Network is unreachable
       > 0x7f0ea0071960 -- Strict RTP learning after ICE completion
       > 0x7f0ea0071960 -- Strict RTP switching to RTP target address 192.168.100.97:58827 as source
    -- Executing [198@default:2] SIPAddHeader("PJSIP/199-00000008", "X-DRP: 79161234567") in new stack
    -- Executing [198@default:3] Set("PJSIP/199-00000008", "PJSIP_HEADER(add,X-DRP)=79161234567") in new stack
    -- Executing [198@default:4] Verbose("PJSIP/199-00000008", "Set(OldContact="199" <sips:199@192.168.100.97:54514;transport=ws;rtcweb-breaker=no;click2call=no>;+g.oma.sip-im;language="en,fr")") in new stack
Set(OldContact=199 <sips:199@192.168.100.97:54514;transport=ws;rtcweb-breaker=no;click2call=no>;+g.oma.sip-im;language=en,fr)
    -- Executing [198@default:5] Dial("PJSIP/199-00000008", "PJSIP/198") in new stack
    -- Called PJSIP/198
    -- PJSIP/199-00000008 requested media update control 26, passing it to PJSIP/198-00000009
  == DTLS ECDH initialized (automatic), faster PFS enabled
    -- PJSIP/198-00000009 is ringing
       > 0x7f0ea0071960 -- Strict RTP learning complete - Locking on source address 192.168.100.97:58827
  == Everyone is busy/congested at this time (1:0/0/1)
    -- Executing [198@default:7] Hangup("PJSIP/199-00000008", "") in new stack
  == Spawn extension (default, 198, 7) exited non-zero on 'PJSIP/199-00000008'
    -- Added contact 'sips:199@192.168.100.97:54514;transport=ws;rtcweb-breaker=no' to AOR '199' with expiration of 200 seconds
  == Contact 199/sips:199@192.168.100.97:54514;transport=ws;rtcweb-breaker=no has been created
  == Contact 199/sip:a9gn89sg@192.168.0.44:58595;transport=ws has been deleted
    -- Contact 199/sips:199@192.168.100.97:54514;transport=ws;rtcweb-breaker=no is now Unknown.  RTT: 0.000 msec

我无法在浏览器的调试日志中找到标题X-DRP:

recv=INVITE sips:198@192.168.100.97:54445;transport=ws;rtcweb-breaker=no SIP/2.0

Via: SIP/2.0/WSS 192.168.100.97:54445;rport;branch=z9hG4bKPja4ca4b5b-62c2-4953-a761-d13d34696007;alias

From: "199"<sip:199@ubuntu-xenial>;tag=a1b0c71d-f89b-4226-a84e-82e7db8b2b21

To: <sips:198@192.168.100.97;rtcweb-breaker=no>

Contact: <sips:asterisk@ubuntu-xenial:5060;transport=ws>

Call-ID: a47911b2-c6d4-4222-961b-f0418a4e00c0

CSeq: 30108 INVITE

Content-Type: application/sdp

Content-Length: 1085

Allow: OPTIONS,SUBSCRIBE,NOTIFY,PUBLISH,INVITE,ACK,BYE,CANCEL,UPDATE,PRACK,REGISTER,MESSAGE,REFER

Supported: 100rel,timer,replaces,norefersub

Session-Expires: 1800;refresher=uac

Min-SE: 90

Max-Forwards: 70

User-Agent: Asterisk PBX 13.17.2



v=0

o=- 780155122 780155122 IN IP4 192.168.49.32

s=Asterisk

c=IN IP4 192.168.49.32

t=0 0

m=audio 15018 UDP/TLS/RTP/SAVPF 0 101

a=connection:new

a=setup:actpass

a=fingerprint:SHA-256 AA:94:9A:8F:24:9A:BD:C2:6B:BA:57:4D:E2:D3:1F:1E:B1:F9:87:B1:96:C7:29:93:B8:75:16:D6:73:9D:1E:3E

a=ice-ufrag:3e3de33532c2fcdc32d71b2f086be032

a=ice-pwd:78e4b4b93a861933107a205a10cac6dd

a=candidate:Hc92a8000 1 UDP 2130706431 fe80::14:68ff:fe3e:8447 15018 typ host

a=candidate:H6893915f 1 UDP 2130706431 fe80::a00:27ff:feeb:a9e 15018 typ host

a=candidate:Ha00020f 1 UDP 2130706431 10.0.2.15 15018 typ host

a=candidate:Hc0a83120 1 UDP 2130706431 192.168.49.32 15018 typ host

a=candidate:Hc92a8000 2 UDP 2130706430 fe80::14:68ff:fe3e:8447 15019 typ host

a=candidate:H6893915f 2 UDP 2130706430 fe80::a00:27ff:feeb:a9e 15019 typ host

a=candidate:Ha00020f 2 UDP 2130706430 10.0.2.15 15019 typ host

a=candidate:Hc0a83120 2 UDP 2130706430 192.168.49.32 15019 typ host

a=rtpmap:0 PCMU/8000

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-16

a=ptime:20

a=maxptime:150

a=sendrecv

a=rtcp-mux

PJSIP是否支持WebSocket的PJSIP_HEADER?有没有其他方法可以为INVOTE为webrtc客户端添加自定义标头?

我使用asterisk 13和siphtml5 web客户端。我还检查了与wireshark的wss流量,解密它仍然无法找到X-DRP标头。

1 个答案:

答案 0 :(得分:0)

在星号设置标题中使用:

same => n,SIPAddHeader(HEADERNAME: ${SOMEVAR})

您需要在客户端使用更新的库,如jsSip。在这种情况下,你不能得到这样的服务器头:

phone.on('newRTCSession', function(e){
   if (e.originator == 'remote') {
       console.log(e.request.headers);
   }
});