FileDocCategorySizeDatePackage
TestPrack.javaAPI DocphoneME MR2 API (J2ME)7956Wed May 02 18:00:40 BST 2007javax.microedition.sip

TestPrack

public class TestPrack extends com.sun.midp.i3test.TestCase implements SipClientConnectionListener, SipServerConnectionListener
Tests for end-to-end SIP client-server communication

Fields Summary
SipConnectionNotifier
scn
Connection notifier.
SipClientConnection
scc
Client connection.
boolean
done
Boolean flag to indicate that test was successful
String
clientMsg
SIP request message from client to server
String
serverMsg
SIP response message from server to client
Constructors Summary
Methods Summary
voidcleanup()
Close all connections.

        // System.out.println("cleanup called");
        try {
            if (scc != null) {
                scc.close();
            }

            if (scn != null) {
                scn.close();
            }
        } catch (IOException ioe) {
            assertNull("Unexpected IOException during cleanup", ioe);
            ioe.printStackTrace();
        } 
    
public voidnotifyRequest(SipConnectionNotifier scnLocal)
Accept a new connection request and process the request from client. Send "OK" to client This method is declared in SipServerConnectionListener

param
scnLocal Local SIP connection notifier

        try {
            // block and wait for incoming request.
            // SipServerConnection is establised and returned
            // when new request is received.
            SipServerConnection ssc = scnLocal.acceptAndOpen();
            assertNotNull("ssc is null", ssc);

            if (ssc.getMethod().equals("INVITE")) {
                ssc.initResponse(180);
                ssc.setHeader("RSeq", "1");
                ssc.send();
            } else if (ssc.getMethod().equals("PRACK")) {
                ssc.initResponse(200);
                ssc.send();
            }
            ssc.close();
        } catch (SipException sipex) {
            assertNull("Unexpected SipException", sipex);
            sipex.printStackTrace();
            cleanup();
        } catch (IOException ioe) {
            assertNull("Unexpected IOException", ioe);
            ioe.printStackTrace();
            cleanup();
        }
    
public voidnotifyResponse(SipClientConnection sccLocal)
Received the response from user agent server This method is declared in SipClientConnectionListener

param
sccLocal Local SIP Client (UAC)

        try {

           boolean ok = sccLocal.receive(0);

           if (ok) {  // response received
            
               if (sccLocal.getStatusCode() == 180) {
                    // scc.initPrack();
                    // scc.initRequest("PRACK", scn);    
                    SipClientConnection sccPrack = 
                            sccLocal.getDialog().getNewClientConnection("PRACK");
                    // scc.setHeader("Content-Type", "text/plain");
                    String rSeq = sccLocal.getHeader("RSeq");
                    sccPrack.setHeader("RAck", rSeq + " " +
                                    sccLocal.getHeader("CSeq"));
                    sccPrack.setListener(this);
                    sccPrack.send();
                    synchronized (this) {
                        done = true;
                        notify();
                    }
               //} else if (sccLocal.getStatusCode() == 200) {
                    // System.out.println("ACK received at server");
               }
           }
        } catch (Exception ex) {
            // handle Exceptions
            ex.printStackTrace();
        } 
    
public voidrunTests()
Tests execute.

        declare("Test TestPrack ");

        setup();
        testPrack();        

        synchronized (this) {
            while (!done) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    System.out.println("Catch interrupt");
                }
            }
        }

        cleanup();
    
        assertTrue("Failure in TestPrack", done);
    
voidsetup()
Open the connection and start the thread to call the run method. It waits until the InputStream is open before returning.


                               
      
        try {
            // Open SIP server connection and listen to port 6789
            scn = (SipConnectionNotifier) Connector.open("sip:6789");
        } catch (Exception ex) {
            assertNull("Exception during scn open", scn);
            ex.printStackTrace();
        }

        assertNotNull("scn is null", scn);

        try {
            scn.setListener(this);
        
            // Open SIP client connection to the local SIP server
            scc = (SipClientConnection) 
                Connector.open("sip:sippy.tester@localhost:6789");
        
            scc.setListener(this);
        } catch (Exception ex) {
            assertNull("Exception during sc open", scc);
            ex.printStackTrace();
            cleanup();
        }

        assertNotNull("sc is null", scc);

    
public voidtestPrack()
Send a SIP message from user agent client to user agent server SipConnectionNotifier queues the incoming requests if the instance of SipServerConnection is not available yet

        
        try {
            scc.initRequest("INVITE", scn);
            // scc.setHeader("From", "sip:sippy.tester@localhost");
            scc.setHeader("From", "sip:alice@some.server");
            scc.setHeader("To", "sip:bob@some.other.server");
            scc.setHeader("Subject", "Hello...");
            scc.setHeader("Contact", "sip:user@"+scn.getLocalAddress() + 
                    ":" + scn.getLocalPort()); 

            // write message body
            scc.setHeader("Content-Type", "text/plain");
            scc.setHeader("Content-Length", 
                    Integer.toString(clientMsg.length()));
            scc.setHeader("Require", "event, path, 100rel");
            OutputStream os = scc.openContentOutputStream();
            os.write(clientMsg.getBytes());
            os.close(); // close stream and send the message
       
            // System.out.println("Inviting..." + scc.getHeader("To"));
        } catch (IOException ioe) {
            ioe.printStackTrace();
            cleanup();
            fail("IOException in testPrack");
        }