Skip to content

Instantly share code, notes, and snippets.

@spicyramen
Created October 15, 2014 04:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spicyramen/aa73c7376381c66c1054 to your computer and use it in GitHub Desktop.
Save spicyramen/aa73c7376381c66c1054 to your computer and use it in GitHub Desktop.
Send SIP Register message via Secure Web Sockets
__author__ = 'gogasca'
#!/usr/bin/python
import websocket
import thread
import time
import ssl
register = "REGISTER sip:open-ims.test SIP/2.0\r\n" +\
"Test-Header: 0\r\n" + \
"v: SIP/2.0/UDP [::]:1988;test=1234;comp=sigcomp;rport=254;ttl=457;received=192.0.2.101;branch=z9hG4bK1245420841406\r\n" +\
"f: \"Mamadou\" <sip:mamadou@open-ims.test>;tag=29358\r\n" +\
"t: <sip:mamadou@open-ims.test>;tag= 12345\r\n" +\
"i: M-fa53180346f7f55ceb8d8670f9223dbb\r\n" +\
"CSeq: 201 REGISTER\r\n" +\
"Max-Forwards: 70\r\n" +\
"Allow: INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK\r\n" +\
"Allow: REFER, UPDATE\r\n" +\
"u: talk, hold, conference, LocalModeStatus\r\n" +\
"m: <sip:hubert@127.0.0.1:5060;rtcweb-breaker=yes>;impi=78@sip2sip"+ "\r\n" +\
"m: <sip:mamadou@[::]:1988;comp=sigcomp;transport=udp>;expires=600000;+deviceID=\"3ca50bcb-7a67-44f1-afd0-994a55f930f4\";mobility=\"fixed\";+g.3gpp.cs-voice;+g.3gpp.app%5fref=\"urn%3Aurnxxx%3A3gpp-application.ims.iari.gsmais\";+g.oma.sip-im.large-message;+g.oma.sip-im\r\n" +\
"User-Agent: IM-client/OMA1.0 doubango/v0.0.0\r\n" +\
"Require: pref, path\r\n" +\
"Service-Route: <sip:orig@open-ims.test:6060;lr>,<sip:orig2@open-ims.test:6060;lr>\r\n" +\
"Path: <sip:term@open-ims.test:4060;lr>\r\n" +\
"Require: 100rel\r\n" +\
"P-Preferred-Identity: <sip:mamadou@open-ims.test>\r\n" +\
"k: path\r\n" +\
"k: gruu, outbound, timer\r\n" +\
"P-Access-Network-Info: 3GPP-UTRAN-TDD;utran-cell-id-3gpp=00000000\r\n" +\
"Privacy: none;user;id\r\n" +\
"Supported: gruu, outbound, path, timer\r\n" +\
"Expires12: 1983\r\n" +\
"l: 180\r\n" +\
"\r\n"
InitRegister = "REGISTER sip:ramenlabs.io SIP/2.0\r\n" +\
"Via: SIP/2.0/WSS df7jal23ls0d.invalid;branch=z9hG4bKe4gxQOl912qKBnwlzpo5ocWdnpGGvRwQ\r\n" + \
"From: \"Gonzalo Gasca Meza\"<sip:gogasca@ramenlabs.io>;tag=APNcg8x8meV9cQElA4zr\r\n" +\
"To: \"Gonzalo Gasca Meza\"<sip:gogasca@ramenlabs.io>\r\n" +\
"Contact: \"Gonzalo Gasca Meza\"<sips:gogasca@df7jal23ls0d.invalid;rtcweb-breaker=no;transport=wss>;expires=200;click2call=no;cic=000\r\n" +\
"Call-ID: ed038f1c-558a-0a2c-25c1-9bb7dfcea331\r\n" +\
"CSeq: 38481 REGISTER\r\n" +\
"Content-Length: 0\r\n" +\
"Max-Forwards: 70\r\n" +\
"User-Agent: Llamato client\r\n" +\
"Organization: Ramen Labs\r\n" +\
"Supported: path\r\n" + \
"\r\n"
def on_message(ws, message):
print message
def on_error(ws, error):
print error
def on_close(ws):
print "### closed ###"
def on_open(ws):
def run(*args):
for i in range(10000):
time.sleep(1)
ws.send(InitRegister)
time.sleep(1)
ws.close()
print "thread terminating..."
thread.start_new_thread(run, ())
if __name__ == "__main__":
custom_protocol = "sip"
protocol_str = "Sec-WebSocket-Protocol: " + custom_protocol
websocket.enableTrace(True)
wss = websocket.WebSocketApp("wss://ramenlabs.io:5063",
on_message = on_message,
on_error = on_error,
on_close = on_close,
header = [protocol_str])
wss.on_open = on_open
wss.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
@spicyramen
Copy link
Author

For SIP Authorization support need to add SIP state machine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment