package org.mobicents.mgcp.stack.test.commandparsing; import jain.protocol.ip.mgcp.CreateProviderException; import jain.protocol.ip.mgcp.JainMgcpProvider; import jain.protocol.ip.mgcp.message.Constants; import jain.protocol.ip.mgcp.message.CreateConnection; import jain.protocol.ip.mgcp.message.CreateConnectionResponse; import jain.protocol.ip.mgcp.message.DeleteConnection; import jain.protocol.ip.mgcp.message.DeleteConnectionResponse; import jain.protocol.ip.mgcp.message.ModifyConnection; import jain.protocol.ip.mgcp.message.NotificationRequest; import jain.protocol.ip.mgcp.message.Notify; import jain.protocol.ip.mgcp.message.parms.CallIdentifier; import jain.protocol.ip.mgcp.message.parms.CompressionAlgorithm; import jain.protocol.ip.mgcp.message.parms.ConnectionDescriptor; import jain.protocol.ip.mgcp.message.parms.ConnectionIdentifier; import jain.protocol.ip.mgcp.message.parms.ConnectionMode; import jain.protocol.ip.mgcp.message.parms.EndpointIdentifier; import jain.protocol.ip.mgcp.message.parms.EventName; import jain.protocol.ip.mgcp.message.parms.LocalOptionValue; import jain.protocol.ip.mgcp.message.parms.NotifiedEntity; import jain.protocol.ip.mgcp.message.parms.PacketizationPeriod; import jain.protocol.ip.mgcp.message.parms.RequestIdentifier; import jain.protocol.ip.mgcp.message.parms.RequestedAction; import jain.protocol.ip.mgcp.message.parms.RequestedEvent; import jain.protocol.ip.mgcp.message.parms.ReturnCode; import jain.protocol.ip.mgcp.pkg.MgcpEvent; import jain.protocol.ip.mgcp.pkg.PackageName; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.ParseException; import org.mobicents.mgcp.stack.CreateConnectionHandler; import org.mobicents.mgcp.stack.DeleteConnectionHandler; import org.mobicents.mgcp.stack.JainMgcpStackImpl; import org.mobicents.mgcp.stack.ModifyConnectionHandler; import org.mobicents.mgcp.stack.NotificationRequestHandler; import org.mobicents.mgcp.stack.NotifyHandler; import org.mobicents.mgcp.stack.test.TestHarness; public class CommandParseTest extends TestHarness { private JainMgcpStackImpl jainMgcpStack = null; InetAddress inetAddress; int port; public CommandParseTest() { super("CommandParseTest"); } @Override public void setUp() { try { inetAddress = InetAddress.getByName("127.0.0.1"); jainMgcpStack = new JainMgcpStackImpl(inetAddress, 2729); port = jainMgcpStack.getPort(); JainMgcpProvider provider = jainMgcpStack.createProvider(); } catch (UnknownHostException e) { e.printStackTrace(); fail("Could not setUp the CommandParseTest"); } catch (CreateProviderException e) { e.printStackTrace(); fail("Could not setUp the CommandParseTest"); } } @Override public void tearDown() { jainMgcpStack.close(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // public void testNotificationRequestDecode() { // String command = "RQNT 1201 aaln/1@rgw-2567.whatever.net MGCP 1.0 \nN: ca@ca1.whatever.net:5678 \nX: 16AC \nR: L/hd(N) \nS: L/rg"; // // NotificationRequest notificationCommand = null; // NotificationRequestHandler rqntHandler = new NotificationRequestHandler(jainMgcpStack, inetAddress, port); // try { // notificationCommand = (NotificationRequest) rqntHandler.decodeCommand(command); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // fail("Parsing of RQNT failed"); // } // // assertNotNull(" RQNT Command created", notificationCommand); // assertEquals(new Integer(Constants.CMD_NOTIFICATION_REQUEST), new Integer(notificationCommand // .getObjectIdentifier())); // // RequestIdentifier X = notificationCommand.getRequestIdentifier(); // assertNotNull(" RQNT Command RequestIdentifier", X); // // NotifiedEntity N = notificationCommand.getNotifiedEntity(); // assertNotNull(" RQNT NotifiedEntity", N); // assertEquals(N.getLocalName(), "ca"); // assertEquals(N.getDomainName(), "ca1.whatever.net"); // assertEquals(N.getPortNumber(), 5678); // // RequestedEvent[] R = notificationCommand.getRequestedEvents(); // assertNotNull(" RQNT RequestedEvent[]", R); // RequestedEvent requestedEvent = R[0]; // assertNotNull("RequestedEvent ", requestedEvent); // // EventName eventName = requestedEvent.getEventName(); // assertNotNull(eventName); // // PackageName packageName = eventName.getPackageName(); // assertNotNull(packageName); // assertEquals(packageName.intValue(), PackageName.LINE); // // MgcpEvent mgcpEvent = eventName.getEventIdentifier(); // assertNotNull(mgcpEvent); // assertEquals(mgcpEvent.intValue(), MgcpEvent.OFF_HOOK_TRANSITION); // // EventName[] eventNames = notificationCommand.getSignalRequests(); // assertNotNull(eventNames); // // EventName signalEventName = eventNames[0]; // assertNotNull(signalEventName); // // PackageName signalPackageName = signalEventName.getPackageName(); // assertNotNull(signalPackageName); // assertEquals(signalPackageName.intValue(), PackageName.LINE); // // MgcpEvent signalMgcpEvent = signalEventName.getEventIdentifier(); // assertNotNull(signalMgcpEvent); // assertEquals(signalMgcpEvent.intValue(), MgcpEvent.RINGING); // // // requestedEvent.getEventName() // // } public void testNotificationRequestEncode() { String originalCommand = "RQNT 155 ann/1@rgw-2567.whatever.net MGCP 1.0\nX:16AC\nS:A/ann@17AC(http://127.0.0.1:8080/mms-load-test/mms.wav)\nR:A/oc@17AC (N),A/of@17AC (N)"; EndpointIdentifier endpointIdentifier = new EndpointIdentifier("ann/1", "rgw-2567.whatever.net"); RequestIdentifier R = new RequestIdentifier("16AC"); NotificationRequest notificationRequest = new NotificationRequest(new Object(), endpointIdentifier, R); ConnectionIdentifier connectionIdentifier = new ConnectionIdentifier("17AC"); EventName[] signalRequests = { new EventName(PackageName.Announcement, MgcpEvent.ann .withParm("http://127.0.0.1:8080/mms-load-test/mms.wav"), connectionIdentifier) }; notificationRequest.setSignalRequests(signalRequests); RequestedAction[] actions = new RequestedAction[] { RequestedAction.NotifyImmediately }; RequestedEvent[] requestedEvents = { new RequestedEvent(new EventName(PackageName.Announcement, MgcpEvent.oc, connectionIdentifier), actions), new RequestedEvent(new EventName(PackageName.Announcement, MgcpEvent.of, connectionIdentifier), actions) }; notificationRequest.setRequestedEvents(requestedEvents); notificationRequest.setTransactionHandle(155); NotificationRequestHandler rqntHandler = new NotificationRequestHandler(jainMgcpStack, inetAddress, port); String command = rqntHandler.encode(notificationRequest); // assertEquals(originalCommand, command); System.out.println(command); } // public void testNotifyDecode() { // String command = "NTFY 2002 aaln/1@rgw-2567.whatever.net MGCP 1.0\nN: ca@ca1.whatever.net:5678\nX: 16AC\nO: L/hd,D/9,D/1,D/2,D/0,D/1,D/8,D/2,D/9,D/4,D/2,D/6,D/6"; // // Notify notify = null; // NotifyHandler ntfyHandler = new NotifyHandler(jainMgcpStack, inetAddress, port); // try { // notify = (Notify) ntfyHandler.decodeCommand(command); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // fail("Parsing of NTFY failed"); // } // // assertNotNull(" NTFY Command created", notify); // assertEquals(new Integer(Constants.CMD_NOTIFY), new Integer(notify.getObjectIdentifier())); // // RequestIdentifier X = notify.getRequestIdentifier(); // assertNotNull(" NTFY Command RequestIdentifier", X); // // X.toString(); // // NotifiedEntity N = notify.getNotifiedEntity(); // assertNotNull(" NTFY NotifiedEntity", N); // assertEquals(N.getLocalName(), "ca"); // assertEquals(N.getDomainName(), "ca1.whatever.net"); // assertEquals(N.getPortNumber(), 5678); // // EventName[] O = notify.getObservedEvents(); // assertNotNull(" NTFY ObservedEvents", O); // // EventName offHookEvent = O[0]; // assertNotNull(offHookEvent); // // PackageName linePackageName = offHookEvent.getPackageName(); // assertNotNull(linePackageName); // assertEquals(linePackageName.intValue(), PackageName.LINE); // // MgcpEvent offHook = offHookEvent.getEventIdentifier(); // assertNotNull(offHook); // assertEquals(offHook.intValue(), MgcpEvent.OFF_HOOK_TRANSITION); // // // DTMF 9 // EventName DTMFEvent9 = O[1]; // assertNotNull(DTMFEvent9); // // PackageName DTMFPackageName9 = DTMFEvent9.getPackageName(); // assertNotNull(DTMFPackageName9); // assertEquals(PackageName.DTMF, DTMFPackageName9.intValue()); // // MgcpEvent DTMFMgcpEvent9 = DTMFEvent9.getEventIdentifier(); // assertNotNull(DTMFMgcpEvent9); // assertEquals("9", DTMFMgcpEvent9.getName()); // // // DTMF 1 // EventName DTMFEvent1 = O[2]; // assertNotNull(DTMFEvent1); // // PackageName DTMFPackageName1 = DTMFEvent1.getPackageName(); // assertNotNull(DTMFPackageName1); // assertEquals(PackageName.DTMF, DTMFPackageName1.intValue()); // // MgcpEvent DTMFMgcpEvent1 = DTMFEvent1.getEventIdentifier(); // assertNotNull(DTMFMgcpEvent1); // assertEquals("1", DTMFMgcpEvent1.getName()); // // // DTMF 2 // EventName DTMFEvent2 = O[3]; // assertNotNull(DTMFEvent2); // // PackageName DTMFPackageName2 = DTMFEvent2.getPackageName(); // assertNotNull(DTMFPackageName2); // assertEquals(PackageName.DTMF, DTMFPackageName2.intValue()); // // MgcpEvent DTMFMgcpEvent2 = DTMFEvent2.getEventIdentifier(); // assertNotNull(DTMFMgcpEvent2); // assertEquals("2", DTMFMgcpEvent2.getName()); // // // DTMF 0 // EventName DTMFEvent0 = O[4]; // assertNotNull(DTMFEvent0); // // PackageName DTMFPackageName0 = DTMFEvent0.getPackageName(); // assertNotNull(DTMFPackageName0); // assertEquals(PackageName.DTMF, DTMFPackageName0.intValue()); // // MgcpEvent DTMFMgcpEvent0 = DTMFEvent0.getEventIdentifier(); // assertNotNull(DTMFMgcpEvent0); // assertEquals("0", DTMFMgcpEvent0.getName()); // // // DTMF 1 - Again // EventName DTMFEvent11 = O[5]; // assertNotNull(DTMFEvent11); // // PackageName DTMFPackageName11 = DTMFEvent11.getPackageName(); // assertNotNull(DTMFPackageName11); // assertEquals(PackageName.DTMF, DTMFPackageName11.intValue()); // // MgcpEvent DTMFMgcpEvent11 = DTMFEvent11.getEventIdentifier(); // assertNotNull(DTMFMgcpEvent11); // assertEquals("1", DTMFMgcpEvent11.getName()); // // // requestedEvent.getEventName() // // } // public void testCreateConnectionDecode() { // String command = "CRCX 1204 aaln/1@rgw-2567.whatever.net MGCP 1.0\nC: A3C47F21456789F0\nL: p:10, a:PCMU\nM: recvonly"; // System.out.println(command); // // CreateConnection createConnectionCommand = null; // CreateConnectionHandler crcxHandler = new CreateConnectionHandler(jainMgcpStack, inetAddress, port); // try { // createConnectionCommand = (CreateConnection) crcxHandler.decodeCommand(command); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // fail("Parsing of CRCX failed"); // } // // assertNotNull(" CRCX Command created", createConnectionCommand); // assertEquals(new Integer(Constants.CMD_CREATE_CONNECTION), new Integer(createConnectionCommand // .getObjectIdentifier())); // // EndpointIdentifier endpointIdentifier = createConnectionCommand.getEndpointIdentifier(); // assertEquals("aaln/1", endpointIdentifier.getLocalEndpointName()); // assertEquals("rgw-2567.whatever.net", endpointIdentifier.getDomainName()); // // int tx = createConnectionCommand.getTransactionHandle(); // assertEquals(1204, tx); // // CallIdentifier C = createConnectionCommand.getCallIdentifier(); // assertNotNull(" CRCX Command CallIdentifier", C); // assertEquals("A3C47F21456789F0", C.toString()); // // LocalOptionValue[] localOptionValues = createConnectionCommand.getLocalConnectionOptions(); // // PacketizationPeriod p = (PacketizationPeriod) localOptionValues[0]; // assertEquals(10, p.getPacketizationPeriodLowerBound()); // assertEquals(10, p.getPacketizationPeriodUpperBound()); // // CompressionAlgorithm c = (CompressionAlgorithm) localOptionValues[1]; // String[] names = c.getCompressionAlgorithmNames(); // assertNotNull(names); // assertEquals("PCMU", names[0]); // // ConnectionMode M = createConnectionCommand.getMode(); // assertNotNull(M); // assertEquals(ConnectionMode.RECVONLY, M.getConnectionModeValue()); // // } public void testCreateConnectionResponseDecode() { String response = "200 1204 OK\nI: FDE234C8\n\nv=0\no=- 25678 753849 IN IP4 128.96.41.1\ns=-\nc=IN IP4 128.96.41.1\nt=0 0\nm=audio 3456 RTP/AVP 0"; CreateConnectionResponse createConnectionResponse = null; CreateConnectionHandler crcxHandler = new CreateConnectionHandler(jainMgcpStack, inetAddress, port); try { createConnectionResponse = (CreateConnectionResponse) crcxHandler.decodeResponse(response); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); fail("Parsing of CRCX Response failed"); } assertNotNull(" CRCX Response created", createConnectionResponse); assertEquals(1204, createConnectionResponse.getTransactionHandle()); ReturnCode returnCode = createConnectionResponse.getReturnCode(); assertNotNull(returnCode); assertEquals(ReturnCode.TRANSACTION_EXECUTED_NORMALLY, returnCode.getValue()); ConnectionIdentifier I = createConnectionResponse.getConnectionIdentifier(); assertNotNull(I); assertEquals("FDE234C8", I.toString()); ConnectionDescriptor connectionDescriptor = createConnectionResponse.getLocalConnectionDescriptor(); assertNotNull(connectionDescriptor); // TODO : Add the JAIN SIP SDP Api for testing System.out.println(connectionDescriptor.toString()); } public void testCreateConnectionProvisionalResponseDecode() { String response = "100 1206 Pending\nI: DFE233D1\nv=0\no=- 4723891 7428910 IN IP4 128.96.63.25\ns=-\nc=IN IP4 128.96.63.25\nt=0 0\nm=audio 3456 RTP/AVP 0"; CreateConnectionResponse createConnectionProvisionalResponse = null; CreateConnectionHandler crcxHandler = new CreateConnectionHandler(jainMgcpStack, inetAddress, port); try { createConnectionProvisionalResponse = (CreateConnectionResponse) crcxHandler.decodeResponse(response); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); fail("Parsing of CRCX Response failed"); } assertNotNull(" CRCX Provisional Response created", createConnectionProvisionalResponse); assertEquals(1206, createConnectionProvisionalResponse.getTransactionHandle()); ReturnCode returnCode = createConnectionProvisionalResponse.getReturnCode(); assertNotNull(returnCode); assertEquals(ReturnCode.TRANSACTION_BEING_EXECUTED, returnCode.getValue()); } // public void testModifyConnectionDecode() { // String command = "MDCX 1209 aaln/1@rgw-2567.whatever.net MGCP 1.0\nC: A3C47F21456789F0\nI: FDE234C8\nN: ca@ca1.whatever.net\nM: sendrecv"; // // ModifyConnection modifyConnectionCommand = null; // ModifyConnectionHandler mdcxHandler = new ModifyConnectionHandler(jainMgcpStack, inetAddress, port); // try { // modifyConnectionCommand = (ModifyConnection) mdcxHandler.decodeCommand(command); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // fail("Parsing of CRCX failed"); // } // // assertNotNull(" MDCX Command created", modifyConnectionCommand); // assertEquals(new Integer(Constants.CMD_MODIFY_CONNECTION), new Integer(modifyConnectionCommand // .getObjectIdentifier())); // // EndpointIdentifier endpointIdentifier = modifyConnectionCommand.getEndpointIdentifier(); // assertEquals("aaln/1", endpointIdentifier.getLocalEndpointName()); // assertEquals("rgw-2567.whatever.net", endpointIdentifier.getDomainName()); // // int tx = modifyConnectionCommand.getTransactionHandle(); // assertEquals(1209, tx); // // CallIdentifier C = modifyConnectionCommand.getCallIdentifier(); // assertNotNull(" MDCX Command CallIdentifier", C); // assertEquals("A3C47F21456789F0", C.toString()); // // ConnectionIdentifier I = modifyConnectionCommand.getConnectionIdentifier(); // assertNotNull(I); // assertEquals("FDE234C8", I.toString()); // // NotifiedEntity N = modifyConnectionCommand.getNotifiedEntity(); // assertNotNull(" MDCX NotifiedEntity", N); // assertEquals(N.getLocalName(), "ca"); // assertEquals(N.getDomainName(), "ca1.whatever.net"); // // // ConnectionMode M = modifyConnectionCommand.getMode(); // assertNotNull(M); // assertEquals(ConnectionMode.SENDRECV, M.getConnectionModeValue()); // } // public void testDeleteConnectionDecode() { // String command = "DLCX 1210 aaln/1@rgw-2567.whatever.net MGCP 1.0\nC: A3C47F21456789F0\nI: FDE234C8\n"; // // DeleteConnection deleteConnectionCommand = null; // DeleteConnectionHandler dlcxHandler = new DeleteConnectionHandler(jainMgcpStack, inetAddress, port); // try { // deleteConnectionCommand = (DeleteConnection) dlcxHandler.decodeCommand(command); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // fail("Parsing of CRCX failed"); // } // // assertNotNull(" DLCX Command created", deleteConnectionCommand); // assertEquals(new Integer(Constants.CMD_DELETE_CONNECTION), new Integer(deleteConnectionCommand // .getObjectIdentifier())); // // EndpointIdentifier endpointIdentifier = deleteConnectionCommand.getEndpointIdentifier(); // assertEquals("aaln/1", endpointIdentifier.getLocalEndpointName()); // assertEquals("rgw-2567.whatever.net", endpointIdentifier.getDomainName()); // // int tx = deleteConnectionCommand.getTransactionHandle(); // assertEquals(1210, tx); // // CallIdentifier C = deleteConnectionCommand.getCallIdentifier(); // assertNotNull(" DLCX Command CallIdentifier", C); // assertEquals("A3C47F21456789F0", C.toString()); // // ConnectionIdentifier I = deleteConnectionCommand.getConnectionIdentifier(); // assertNotNull(I); // assertEquals("FDE234C8", I.toString()); // // } public void testDeleteConnectionResponseDecode() { String response = "250 1210 OK\nP: PS=1245, OS=62345, PR=780, OR=45123, PL=10, JI=27, LA=48"; DeleteConnectionResponse deleteConnectionResponse = null; DeleteConnectionHandler dlcxHandler = new DeleteConnectionHandler(jainMgcpStack, inetAddress, port); try { deleteConnectionResponse = (DeleteConnectionResponse) dlcxHandler.decodeResponse(response); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); fail("Parsing of CRCX Response failed"); } assertNotNull(" DLCX Response created", deleteConnectionResponse); assertEquals(1210, deleteConnectionResponse.getTransactionHandle()); ReturnCode returnCode = deleteConnectionResponse.getReturnCode(); assertNotNull(returnCode); assertEquals(ReturnCode.CONNECTION_WAS_DELETED, returnCode.getValue()); } }