Holger Hans Peter Freyther | f67945f | 2009-10-09 07:08:11 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Simple server for mgcp... send audit, receive response.. |
| 3 | |
| 4 | import socket, time |
| 5 | |
| 6 | MGCP_GATEWAY_PORT = 2427 |
| 7 | MGCP_CALLAGENT_PORT = 2727 |
| 8 | |
| 9 | rsip_resp = """200 321321332\r\n""" |
| 10 | audit_packet = """AUEP %d 13@mgw MGCP 1.0\r\n""" |
| 11 | 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""" |
| 12 | dlcx_packet = """DLCX %d 14@mgw MGCP 1.0\r\nC: 4a84ad5d25f\r\nI: %d\r\n""" |
| 13 | 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""" |
| 14 | |
| 15 | def hexdump(src, length=8): |
| 16 | """Recipe is from http://code.activestate.com/recipes/142812/""" |
| 17 | result = [] |
| 18 | digits = 4 if isinstance(src, unicode) else 2 |
| 19 | for i in xrange(0, len(src), length): |
| 20 | s = src[i:i+length] |
| 21 | hexa = b' '.join(["%0*X" % (digits, ord(x)) for x in s]) |
| 22 | text = b''.join([x if 0x20 <= ord(x) < 0x7F else b'.' for x in s]) |
| 23 | result.append( b"%04X %-*s %s" % (i, length*(digits + 1), hexa, text) ) |
| 24 | return b'\n'.join(result) |
| 25 | |
| 26 | server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
| 27 | server_socket.bind(("127.0.0.1", MGCP_CALLAGENT_PORT)) |
| 28 | server_socket.setblocking(0) |
| 29 | |
| 30 | |
| 31 | def send_receive(packet): |
| 32 | server_socket.sendto(packet, ("127.0.0.1", MGCP_GATEWAY_PORT)) |
| 33 | try: |
| 34 | data, addr = server_socket.recvfrom(4096) |
| 35 | print hexdump(data), addr |
| 36 | except socket.error: |
| 37 | pass |
| 38 | |
| 39 | def generate_tid(): |
| 40 | import random |
| 41 | return random.randint(0, 65123) |
| 42 | |
| 43 | |
| 44 | |
| 45 | i = 1 |
| 46 | while True: |
| 47 | send_receive(rsip_resp) |
| 48 | send_receive(audit_packet) |
| 49 | send_receive(crcx_packet % generate_tid() ) |
| 50 | send_receive(mdcx_packet % (generate_tid(), i)) |
| 51 | send_receive(dlcx_packet % (generate_tid(), i)) |
| 52 | i = i + 1 |
| 53 | |
| 54 | time.sleep(3) |