#!/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)
