aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/contrib/mgcp_server.py
blob: cf3ef3845207e2e21cf15dc9aa7ab3dc61465e75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python
# Simple server for mgcp... send audit, receive response..

import socket, time

MGCP_GATEWAY_PORT = 2427
MGCP_CALLAGENT_PORT = 2727

rsip_resp = """200 321321332\r\n"""
audit_packet = """AUEP %d 13@mgw MGCP 1.0\r\n"""
crcx_packet = """CRCX %d 14@mgw MGCP 1.0\r\nC: 4a84ad5d25f\r\nL: p:20, a:GSM-EFR, nt:IN\r\nM: recvonly\r\n"""
dlcx_packet = """DLCX %d 14@mgw MGCP 1.0\r\nC: 4a84ad5d25f\r\nI: %d\r\n"""
mdcx_packet = """MDCX %d 14@mgw MGCP 1.0\r\nC: 4a84ad5d25f\r\nI: %d\r\nL: p:20, a:GSM-EFR, nt:IN\r\nM: recvonly\r\n\r\nv=0\r\no=- 258696477 0 IN IP4 172.16.1.107\r\ns=-\r\nc=IN IP4 172.16.1.107\r\nt=0 0\r\nm=audio 4400 RTP/AVP 127\r\na=rtpmap:127 GSM-EFR/8000/1\r\na=ptime:20\r\na=recvonly\r\nm=image 4402 udptl t38\r\na=T38FaxVersion:0\r\na=T38MaxBitRate:14400\r\n"""

def hexdump(src, length=8):
    """Recipe is from http://code.activestate.com/recipes/142812/"""
    result = []
    digits = 4 if isinstance(src, unicode) else 2
    for i in xrange(0, len(src), length):
       s = src[i:i+length]
       hexa = b' '.join(["%0*X" % (digits, ord(x))  for x in s])
       text = b''.join([x if 0x20 <= ord(x) < 0x7F else b'.'  for x in s])
       result.append( b"%04X   %-*s   %s" % (i, length*(digits + 1), hexa, text) )
    return b'\n'.join(result)

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("127.0.0.1", MGCP_CALLAGENT_PORT))
server_socket.setblocking(0)


def send_receive(packet):
    server_socket.sendto(packet, ("127.0.0.1", MGCP_GATEWAY_PORT))
    try:
        data, addr = server_socket.recvfrom(4096)
        print hexdump(data), addr
    except socket.error:
        pass

def generate_tid():
    import random
    return random.randint(0, 65123)



i = 1
while True:
    send_receive(rsip_resp)
    send_receive(audit_packet)
    send_receive(crcx_packet % generate_tid() )
    send_receive(mdcx_packet % (generate_tid(), i))
    send_receive(dlcx_packet % (generate_tid(), i))
    i = i + 1

    time.sleep(3)