blob: 05c489db518238469263243a10555fddeaf7c0fe [file] [log] [blame]
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +02001#!/usr/bin/env python
2# Simple server for mgcp... send audit, receive response..
3
4import socket, time
5
6MGCP_GATEWAY_PORT = 2427
7MGCP_CALLAGENT_PORT = 2727
8
9rsip_resp = """200 321321332\r\n"""
10audit_packet = """AUEP %d 13@mgw MGCP 1.0\r\n"""
11crcx_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"""
12dlcx_packet = """DLCX %d 14@mgw MGCP 1.0\r\nC: 4a84ad5d25f\r\nI: %d\r\n"""
Holger Hans Peter Freytheref8253c2010-04-05 09:01:28 +020013mdcx_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 6666 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"""
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020014
15def 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
26server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
27server_socket.bind(("127.0.0.1", MGCP_CALLAGENT_PORT))
Holger Hans Peter Freythere125d402010-04-04 18:39:56 +020028server_socket.setblocking(1)
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020029
Holger Hans Peter Freythere125d402010-04-04 18:39:56 +020030last_ci = 1
31def send_and_receive(packet):
32 global last_ci
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020033 server_socket.sendto(packet, ("127.0.0.1", MGCP_GATEWAY_PORT))
34 try:
35 data, addr = server_socket.recvfrom(4096)
Holger Hans Peter Freythere125d402010-04-04 18:39:56 +020036
37 # attempt to store the CI of the response
38 list = data.split("\n")
39 for item in list:
40 if item.startswith("I: "):
41 last_ci = int(item[3:])
42
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020043 print hexdump(data), addr
Holger Hans Peter Freythere125d402010-04-04 18:39:56 +020044 except socket.error, e:
45 print e
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020046 pass
47
48def generate_tid():
49 import random
50 return random.randint(0, 65123)
51
52
53
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020054while True:
Holger Hans Peter Freythere125d402010-04-04 18:39:56 +020055 send_and_receive(audit_packet % generate_tid())
56 send_and_receive(crcx_packet % generate_tid() )
57 send_and_receive(mdcx_packet % (generate_tid(), last_ci))
58 send_and_receive(dlcx_packet % (generate_tid(), last_ci))
Holger Hans Peter Freytherf67945f2009-10-09 07:08:11 +020059
60 time.sleep(3)