Package test.unit.gov.nist.javax.sip.stack

Source Code of test.unit.gov.nist.javax.sip.stack.NoAutoDialogTest$Client

package test.unit.gov.nist.javax.sip.stack;


import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.ParseException;
import java.util.Properties;
import java.util.Random;
import java.util.TooManyListenersException;

import javax.sip.ClientTransaction;
import javax.sip.Dialog;
import javax.sip.DialogTerminatedEvent;
import javax.sip.IOExceptionEvent;
import javax.sip.InvalidArgumentException;
import javax.sip.ListeningPoint;
import javax.sip.RequestEvent;
import javax.sip.ResponseEvent;
import javax.sip.ServerTransaction;
import javax.sip.SipException;
import javax.sip.SipFactory;
import javax.sip.SipListener;
import javax.sip.SipProvider;
import javax.sip.SipStack;
import javax.sip.TimeoutEvent;
import javax.sip.TransactionTerminatedEvent;
import javax.sip.address.Address;
import javax.sip.address.AddressFactory;
import javax.sip.address.SipURI;
import javax.sip.header.Header;
import javax.sip.header.HeaderFactory;
import javax.sip.header.RouteHeader;
import javax.sip.header.ToHeader;
import javax.sip.header.ViaHeader;
import javax.sip.message.MessageFactory;
import javax.sip.message.Request;
import javax.sip.message.Response;
import junit.framework.TestCase;

public class NoAutoDialogTest extends TestCase {

    protected boolean testFail = false;
   
    protected StringBuffer errorBuffer = new StringBuffer();
   
    protected int myPort;

    protected int remotePort = 5060;
   
    protected String testProtocol = "udp";

    protected Address remoteAddress;

    protected SipURI requestUri;

    protected MessageFactory messageFactory = null;

    protected HeaderFactory headerFactory = null;

    protected AddressFactory addressFactory = null;

    protected static String host = null;
   
    protected Client client;
   
    protected Server server;
   
    public final int SERVER_PORT = 5600;
   
    public final int CLIENT_PORT = 6500;
  
    public NoAutoDialogTest() {

    }

    protected void doFail(String message) {
        testFail = true;
        errorBuffer.append(message + "\n");

    }

    public boolean isFailed() {
        return testFail;
    }

    public String generateFromTag() {
        return new Integer(Math.abs(new Random().nextInt())).toString();
    }

    protected void setUp() throws Exception {

        this.client = new Client();
        this.server = new Server();
    }

    protected void tearDown() throws Exception {
      
       this.client.stop();
       this.server.stop();

    }

    protected ViaHeader getLocalVia(SipProvider _provider) throws ParseException,
            InvalidArgumentException {
        return headerFactory.createViaHeader(_provider.getListeningPoint(testProtocol)
                .getIPAddress(), _provider.getListeningPoint(testProtocol).getPort(), _provider
                .getListeningPoint(testProtocol).getTransport(), null);

    }

  
    public String doMessage(Throwable t) {
        StringBuffer sb = new StringBuffer();
        int tick = 0;
        Throwable e = t;
        do {
            StackTraceElement[] trace = e.getStackTrace();
            if (tick++ == 0)
                sb.append(e.getClass().getCanonicalName() + ":" + e.getLocalizedMessage() + "\n");
            else
                sb.append("Caused by: " + e.getClass().getCanonicalName() + ":"
                        + e.getLocalizedMessage() + "\n");

            for (StackTraceElement ste : trace)
                sb.append("\t" + ste + "\n");

            e = e.getCause();
        } while (e != null);

        return sb.toString();

    }

    public class Server implements SipListener {
        protected SipStack sipStack;

        protected SipFactory sipFactory = null;

        protected SipProvider provider = null;

        private boolean i_receivedInvite;

        private boolean i_sent180;

        private boolean i_receivedCancel;

        private boolean i_sent200Cancel;

        private ServerTransaction inviteStx;

        private Request inviteRequest;

        private boolean i_inviteTxTerm;

      
        public Server() {
            try {
                final Properties defaultProperties = new Properties();
                host = "127.0.0.1";
                defaultProperties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT", "off");
                defaultProperties.setProperty("javax.sip.STACK_NAME", "server");
                defaultProperties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG");
                defaultProperties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "server_debug.txt");
                defaultProperties.setProperty("gov.nist.javax.sip.SERVER_LOG", "server_log.txt");
                defaultProperties.setProperty("gov.nist.javax.sip.READ_TIMEOUT", "1000");
                defaultProperties.setProperty("gov.nist.javax.sip.CACHE_SERVER_CONNECTIONS",
                        "false");
                this.sipFactory = SipFactory.getInstance();
                this.sipFactory.setPathName("gov.nist");
                this.sipStack = this.sipFactory.createSipStack(defaultProperties);
                this.sipStack.start();
                ListeningPoint lp = this.sipStack.createListeningPoint(host, SERVER_PORT, testProtocol);
                this.provider = this.sipStack.createSipProvider(lp);
                headerFactory = this.sipFactory.createHeaderFactory();
                messageFactory = this.sipFactory.createMessageFactory();
                addressFactory = this.sipFactory.createAddressFactory();
                this.provider.addSipListener(this);
            } catch (Exception e) {
                e.printStackTrace();
                fail("unexpected exception ");
            }

        }

      
      
        public void stop() {
            this.sipStack.stop();
        }

        public void processDialogTerminated(DialogTerminatedEvent dte) {
            fail("Unexpected Dialog Terminated Event");
        }

        public void processIOException(IOExceptionEvent arg0) {

        }

        public void processRequest(RequestEvent requestEvent) {

            Request request = requestEvent.getRequest();
            SipProvider provider = (SipProvider) requestEvent.getSource();
            if (request.getMethod().equals(Request.INVITE)) {
                try {
                    System.out.println("Received invite");
                    this.i_receivedInvite = true;
                    this.inviteStx = provider
                            .getNewServerTransaction(request);
                    this.inviteRequest = request;
                    Response response = messageFactory.createResponse(100, request);
                    inviteStx.sendResponse(response);

                    response = messageFactory.createResponse(180, request);
                    ((ToHeader) response.getHeader(ToHeader.NAME)).setTag("asdgaeyvewacyta"
                            + Math.random());
                    inviteStx.sendResponse(response);
                    System.out.println("Sent 180:\n" + response);
                    i_sent180 = true;
                } catch (Exception e) {
                    e.printStackTrace();
                    fail("Unexpected exception");
                }

            } else if (request.getMethod().equals(Request.CANCEL)) {

                System.out.println("Received CANCEL");
                try {
                    i_receivedCancel = true;
                    Response response = messageFactory.createResponse(200, requestEvent
                            .getRequest());
                    requestEvent.getServerTransaction().sendResponse(response);
                    i_sent200Cancel = true;
                   
                    Response inviteResponse =
                        messageFactory.createResponse(Response.REQUEST_TERMINATED,inviteRequest);
                    inviteStx.sendResponse(inviteResponse);
                   
                } catch (Exception e) {
                    e.printStackTrace();
                    fail("Unexpected exception ");
                }

            }

        }

        public void processResponse(ResponseEvent arg0) {

        }

        public void processTimeout(TimeoutEvent arg0) {

        }

        public void processTransactionTerminated(TransactionTerminatedEvent tte) {
            ClientTransaction ctx = tte.getClientTransaction();
            String method = ctx.getRequest().getMethod();
            if (method.equals(Request.INVITE)) {
                i_inviteTxTerm = true;
                System.out.println("Invite term TERM");
            }
        }

    }

    public class Client implements SipListener {

        private SipFactory sipFactory;
        private SipStack sipStack;
        private SipProvider provider;
        private boolean o_sentInvite, o_received180, o_sentCancel, o_receiver200Cancel,
                o_inviteTxTerm, o_dialogTerinated;

        public Client() {
            try {
                final Properties defaultProperties = new Properties();
                host = "127.0.0.1";
                defaultProperties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT", "off");
                defaultProperties.setProperty("javax.sip.STACK_NAME", "client");
                defaultProperties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG");
                defaultProperties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "client_debug.txt");
                defaultProperties.setProperty("gov.nist.javax.sip.SERVER_LOG", "client_log.txt");
                defaultProperties.setProperty("gov.nist.javax.sip.READ_TIMEOUT", "1000");
                defaultProperties.setProperty("gov.nist.javax.sip.CACHE_SERVER_CONNECTIONS",
                        "false");
                this.sipFactory = SipFactory.getInstance();
                this.sipFactory.setPathName("gov.nist");
                this.sipStack = this.sipFactory.createSipStack(defaultProperties);
                this.sipStack.start();
                ListeningPoint lp = this.sipStack.createListeningPoint(host, CLIENT_PORT, testProtocol);
                this.provider = this.sipStack.createSipProvider(lp);
                headerFactory = this.sipFactory.createHeaderFactory();
                messageFactory = this.sipFactory.createMessageFactory();
                addressFactory = this.sipFactory.createAddressFactory();
                this.provider.addSipListener(this);
            } catch (Exception e) {
                e.printStackTrace();
                fail("unexpected exception ");
            }

        }
       
        public void checkState() {
            if (!o_sentInvite || !o_received180 || !o_sentCancel || !o_receiver200Cancel
                    || !o_inviteTxTerm || !o_dialogTerinated) {
                fail("FAILED o_sentInvite[" + o_sentInvite + "] o_received180[" + o_received180
                        + "] o_sentCancel[" + o_sentCancel + "] o_receiver200Cancel["
                        + o_receiver200Cancel + "] o_inviteTxTerm[" + o_inviteTxTerm
                        + "] o_dialogTerinated[" + o_dialogTerinated + "]  ");
              
            }
        }

     
        public void stop() {
            this.sipStack.stop();
        }

        public void processDialogTerminated(DialogTerminatedEvent arg0) {
            System.out.println("Dialog term TERM");
            o_dialogTerinated = true;

        }

        public void processIOException(IOExceptionEvent ioexception) {
            fail("Unexpected IO Exception");

        }

        public void processRequest(RequestEvent arg0) {

        }

        public void processResponse(ResponseEvent responseEvent) {
            Response response = responseEvent.getResponse();
            int code = response.getStatusCode();
            if (code == 180) {
                try {

                    o_received180 = true;
                    Request cancel = responseEvent.getClientTransaction().createCancel();
                    ClientTransaction cancelTX = provider.getNewClientTransaction(cancel);
                    cancelTX.sendRequest();
                    System.out.println("Send CANCEL:\n" + cancel);
                    o_sentCancel = true;

                } catch (SipException e) {
                    e.printStackTrace();
                    doFail(doMessage(e));
                }
            } else if (code == 200) {
                System.out.println("Receive Cancel200");
                o_receiver200Cancel = true;
            }
        }

        public void processTimeout(TimeoutEvent arg0) {

        }

        public void processTransactionTerminated(TransactionTerminatedEvent arg0) {
            ClientTransaction ctx = arg0.getClientTransaction();
            String method = ctx.getRequest().getMethod();
            if (method.equals(Request.INVITE)) {
                System.out.println("Invite TERM");
                o_inviteTxTerm = true;

            }

        }

      

        protected void sendLocalInvite() throws Exception {

            Request inviteRequest = messageFactory.createRequest(null);
            String _host = this.provider.getListeningPoint(testProtocol).getIPAddress();
            SipURI requestUri = addressFactory.createSipURI(null, _host);
            requestUri.setPort(SERVER_PORT);
            inviteRequest.setMethod(Request.INVITE);
            inviteRequest.setRequestURI(requestUri);
           
            SipURI _remoteUri = addressFactory.createSipURI(null, "there.com");
            Address _remoteAddress = addressFactory.createAddress(_remoteUri);
          
           
            inviteRequest.addHeader(provider.getNewCallId());
            inviteRequest.addHeader(headerFactory.createCSeqHeader((long) 1, Request.INVITE));
           
            SipURI _localUri = addressFactory.createSipURI(null, "here.com");
            Address localAddress = addressFactory.createAddress(_localUri);
           
            inviteRequest.addHeader(headerFactory.createFromHeader(localAddress,
                    generateFromTag()));

            inviteRequest.addHeader(headerFactory.createToHeader(_remoteAddress, null));

            SipURI contactUri = addressFactory.createSipURI(null, _host);
            contactUri.setPort(CLIENT_PORT);
            inviteRequest.addHeader(headerFactory.createContactHeader(addressFactory.createAddress(contactUri)));

            inviteRequest.addHeader(getLocalVia(provider));

            // create and add the Route Header
            Header h = headerFactory.createRouteHeader(_remoteAddress);
           
            inviteRequest.setMethod(Request.INVITE);
            inviteRequest.addHeader(headerFactory.createMaxForwardsHeader(5));
            ClientTransaction inviteTransaction = this.provider
                    .getNewClientTransaction(inviteRequest);
            provider.getNewDialog(inviteTransaction);

            inviteTransaction.sendRequest();
            System.out.println("Sent INVITE:\n" + inviteRequest);
            o_sentInvite = true;

        }

    }
   
    public void testSendInvite() {
        try {
            this.client.sendLocalInvite();
            Thread.sleep(50000);
        } catch (Exception ex) {
            ex.printStackTrace();
            fail("Unexpected exception ");
        }
        this.client.checkState();
       
    }

}
TOP

Related Classes of test.unit.gov.nist.javax.sip.stack.NoAutoDialogTest$Client

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.