Lines 1-42
Link Here
|
1 |
import operator |
|
|
2 |
import socket |
3 |
from time import strftime; |
4 |
|
5 |
def SipSocket(host='localhost', port=5300): |
6 |
so = socket.socket() |
7 |
so.connect((host, port)) |
8 |
return so |
9 |
|
10 |
def login(so, uname='scclient', passwd='clientpwd', locn='The basement', |
11 |
seqno=0): |
12 |
port = so.getpeername()[1] |
13 |
if port == 5300: |
14 |
resp = send(so, '9300CN%s|CO%s|CP%s|' % (uname, passwd, locn), seqno) |
15 |
print "Received", repr(resp) |
16 |
print "Verified: ", verify(resp) |
17 |
else: |
18 |
raise "Logging in is only support for the raw transport on port 5300" |
19 |
|
20 |
def send(so, msg, seqno=0): |
21 |
if seqno: |
22 |
msg += 'AY' + str(seqno)[0] + 'AZ' |
23 |
msg += ('%04X' % calculate_cksum(msg)) |
24 |
msg += '\r' |
25 |
print 'Sending', repr(msg) |
26 |
so.send(msg) |
27 |
resp = so.recv(1000) |
28 |
return resp, verify(resp) |
29 |
|
30 |
def calculate_cksum(msg): |
31 |
return (-reduce(operator.add, map(ord, msg)) & 0xFFFF) |
32 |
|
33 |
def sipdate(): |
34 |
return(strftime("%Y%m%d %H%M%S")) |
35 |
|
36 |
def verify(msg): |
37 |
if msg[-1] == '\r': msg = msg[:-2] |
38 |
if msg[-6:-4] == 'AZ': |
39 |
cksum = calculate_cksum(msg[:-4]) |
40 |
return (msg[-4:] == ('%04X' % cksum)) |
41 |
# If there's no checksum, then the message is ok |
42 |
return True |