Package performance.uas_uac

Source Code of performance.uas_uac.One

package performance.uas_uac;

import gov.nist.javax.sip.stack.SIPClientTransaction;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Properties;
import java.util.TooManyListenersException;
import java.util.Vector;
import java.util.Map.Entry;

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.ObjectInUseException;
import javax.sip.PeerUnavailableException;
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.TransactionUnavailableException;
import javax.sip.TransportNotSupportedException;
import javax.sip.address.Address;
import javax.sip.address.AddressFactory;
import javax.sip.address.SipURI;
import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader;
import javax.sip.header.ContactHeader;
import javax.sip.header.FromHeader;
import javax.sip.header.HeaderFactory;
import javax.sip.header.MaxForwardsHeader;
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;


public class One implements SipListener{
  private static SipStack sipStack;
  private static ListeningPoint listeningPoint;
  private static SipProvider sipProvider;
  private static AddressFactory addressFactory;
  private static MessageFactory messageFactory;
  private static HeaderFactory headerFactory;
  private static ContactHeader contactHeader = null;
  private static String transport="udp";
 
  public static void main(String[] args) {
    //Factorys
    SipFactory sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
   
    try {
    headerFactory = sipFactory.createHeaderFactory();
    addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();
    } catch (PeerUnavailableException e) {
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
    //Stack
    try{
      Properties properties = new Properties();
      properties.setProperty("javax.sip.STACK_NAME", "send");
//      properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER", "true");
//      properties.setProperty("gov.nist.javax.sip.THREAD_POOL_SIZE", "2");
//      properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "debug.txt");
////      properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "log.txt");
      properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "0");
//      properties.setProperty("gov.nist.javax.sip.AGGRESSIVE_CLEANUP", "true");
      sipStack = sipFactory.createSipStack(properties);
    }
    catch (PeerUnavailableException e) {
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
   
    //Listening Point
    try{
      listeningPoint = sipStack.createListeningPoint("127.0.0.1", 5070, transport);
    }
    catch(InvalidArgumentException e){
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
    catch(TransportNotSupportedException e){
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
   
    //SIP Provider
    try{
      sipProvider = sipStack.createSipProvider(listeningPoint);
    }
    catch(ObjectInUseException e){
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
    try
    {
      sipProvider.addSipListener(new One());
    }
    catch(TooManyListenersException e)
    {
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
   
   
   
    //File
    BufferedReader reader;
    String lines=null;

    try {
//      reader = new BufferedReader(new FileReader("Info.txt"));
//      lines = reader.readLine();   
        lines ="send1 | empf1";
     
      Vector<String> callInformation = new Vector<String>();
     
      //Read the file
//      while (lines != null) {       
        callInformation.add(lines);
//        lines = reader.readLine();
//      }
     
      String[] currentLine = null;
      SIPClientTransaction sct = null;
     
      //Search the CalledNumber
      for(int u = 0; u < 100000; u++){
          for (int i = 0; i < callInformation.size(); i++) {
              //Get the Line
              currentLine = callInformation.get(i).replaceAll(" ","").split("\\|");
              //Get the Numbers
              Request request = createMessage(currentLine[0],currentLine[1],i);
     
              //Send
              ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(request);
             
              sct = (SIPClientTransaction) clientTransaction;
    //          System.out.println(sct.getMessageChannel().getSIPStack().getActiveClientTransactionCount());
             
              //clientTransaction.setRetransmitTimer(10000);
              clientTransaction.sendRequest();
              //System.out.println("INVITE sent");
              Thread.sleep(10);
          }
          if(u != 0 && u%1500 == 0){
            System.out.println("I'll sleep..with ActiveClientTransactions: " +sct.getMessageChannel().getSIPStack().getActiveClientTransactionCount());
            Thread.sleep(60000);
//            System.out.println("ActiveClientTransactions: " +sct.getMessageChannel().getSIPStack().getActiveClientTransactionCount());
//            System.out.println("ClientSize: "+sct.getMessageChannel().getSIPStack().getClientTransactionTableSize());
//            System.out.println("ServerSize: "+sct.getMessageChannel().getSIPStack().getServerTransactionTableSize());
//            System.out.println("DialogSize: "+sct.getMessageChannel().getSIPStack().dialogTable.size());
//            System.out.println("EarlyDialogSize: "+sct.getMessageChannel().getSIPStack().earlyDialogTable.size());
//            System.out.println("ForkedClientSize: "+sct.getMessageChannel().getSIPStack().forkedClientTransactionTable.size());
//            System.out.println("MergeSize: "+sct.getMessageChannel().getSIPStack().mergeTable.size());
//            System.out.println("TerminatedServerTxPendingAckSize: "+sct.getMessageChannel().getSIPStack().terminatedServerTransactionsPendingAck.size());
//            System.out.println("ServerDialogMergeTestTableSize: "+sct.getMessageChannel().getSIPStack().serverDialogMergeTestTable.size());
//            if(sct.getMessageChannel().getSIPStack().getActiveClientTransactionCount() > 0) {
//                for (Entry<String, SIPClientTransaction> entry : sct.getMessageChannel().getSIPStack().clientTransactionTable.entrySet()) {
//                    System.out.println("Ctw: "+entry.getKey() + " , ctx " + entry.getValue() + ", method " + entry.getValue().getMethod() + ", state " + entry.getValue().getState());
//                        }           
//            }
          }
      }
//      System.out.println("last: "+System.currentTimeMillis());
     
    } catch (TransactionUnavailableException e) { 
      e.printStackTrace();
      System.err.println(e.getMessage());
    } catch (SipException e) { 
      e.printStackTrace();
      System.err.println(e.getMessage());
//    } catch (IOException e) {
//      e.printStackTrace();
//      System.err.println(e.getMessage());
    } catch (InterruptedException e){
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
  }

  private static Request createMessage(String from, String to, long id){
    Request request = null;
    id += 1;//0 not allowed
    //Invite
    try
      // create From Header
      SipURI fromAddress = addressFactory.createSipURI(from, "send.com");
      Address fromNameAddress = addressFactory.createAddress(fromAddress);
      fromNameAddress.setDisplayName(from);
      FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress,"12345");

      // create To Header
      SipURI toAddress = addressFactory.createSipURI(to, "empf.com");
      Address toNameAddress = addressFactory.createAddress(toAddress);
      toNameAddress.setDisplayName(to);
      ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null);

      // create Request URI
      SipURI requestURI = addressFactory.createSipURI(from, "127.0.0.1:5080");

      // Create ViaHeaders
      ArrayList viaHeaders = new ArrayList();
      ViaHeader viaHeader = headerFactory.createViaHeader("127.0.0.1",
          sipProvider.getListeningPoint(transport).getPort(), transport, null);
      viaHeaders.add(viaHeader);

      // Create a new CallId header
      CallIdHeader callIdHeader = sipProvider.getNewCallId();
      //callIdHeader.setCallId("1");
      // Create a new Cseq header
      CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(id, Request.INVITE);

      // Create a new MaxForwardsHeader
      MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70);
      // Create the request.
      request = messageFactory.createRequest(requestURI,Request.INVITE,
          callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards);
      // Create contact headers
      String host = "127.0.0.1";
      SipURI contactUrl = addressFactory.createSipURI(from, host);
      contactUrl.setPort(listeningPoint.getPort());

      // Create the contact name address.
      SipURI contactURI = addressFactory.createSipURI(from, host);
      contactURI.setPort(sipProvider.getListeningPoint(transport).getPort());
      contactURI.setTransportParam(transport);
      Address contactAddress = addressFactory.createAddress(contactURI);

      // Add the contact address.
      contactAddress.setDisplayName(from);
      contactHeader = headerFactory.createContactHeader(contactAddress);
      request.addHeader(contactHeader);
     
    } catch (ParseException e) {
      e.printStackTrace();
      System.err.println(e.getMessage());
    } catch (InvalidArgumentException e){
      e.printStackTrace();
      System.err.println(e.getMessage());
    }
   
    return request;
  }
 
  public void processDialogTerminated(DialogTerminatedEvent arg0) { 
  }

  public void processIOException(IOExceptionEvent arg0) { 
      System.err.println("processIOException----------------------------------");
  }

  public void processRequest(RequestEvent requestEvent) {
    //Invite received
    if(requestEvent.getRequest().getMethod().equals(Request.INVITE)){
      //System.out.println("INVITE bekommen");
      try
        ServerTransaction serverTransaction = requestEvent.getServerTransaction();
        if(serverTransaction==null){
          serverTransaction = sipProvider.getNewServerTransaction(requestEvent.getRequest());
        }
        Response responseRing = messageFactory.createResponse(Response.RINGING, requestEvent.getRequest());
        responseRing.addHeader(contactHeader);
        serverTransaction.sendResponse(responseRing);
        //System.out.println("Ringing sent");
        //System.out.println("Ringing sent");
        Response responseOk = messageFactory.createResponse(Response.OK, requestEvent.getRequest());
        responseOk.addHeader(contactHeader);
        serverTransaction.sendResponse(responseOk);
        //System.out.println("OK sent");
        //System.out.println("Ok sent");
      } catch (SipException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (InvalidArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    if(requestEvent.getRequest().getMethod().equals(Request.ACK))
    {
      //System.out.println("ACK bekommen");
      //System.out.println("ACK bekommen");
      //System.out.println(requestEvent.getDialog());
    }
    if(requestEvent.getRequest().getMethod().equals(Request.BYE))
    {
      //System.out.println("BYE bekommen");
      //System.out.println("Bye bekommen");
      //System.out.println(requestEvent.getDialog());
     
      Response responseOk;
      try {
        responseOk = messageFactory.createResponse(Response.OK, requestEvent.getRequest());
        ServerTransaction serverTransaction = requestEvent.getServerTransaction();
        serverTransaction.sendResponse(responseOk);
       
      } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (SipException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (InvalidArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     
      //System.out.println("Ok (bye) sent");
      //System.out.println("OK (bye) sent");
    }
  }

  public void processResponse(ResponseEvent responseEvent) {
    if(responseEvent.getResponse().getStatusCode() == 180){
      //System.out.println("Ringing bekommen");
      //System.out.println("RINGING bekommen");
      CallIdHeader callID = (CallIdHeader) responseEvent.getResponse().getHeader(CallIdHeader.NAME);
    }
    CSeqHeader cseq2 = (CSeqHeader) responseEvent.getResponse().getHeader(CSeqHeader.NAME);

    if(responseEvent.getResponse().getStatusCode() == 200 && cseq2.getMethod().equals("INVITE")){
      //System.out.println("confirmed OK bekommen");
      //System.out.println("confirmed OK bekommen");
      CallIdHeader callID = (CallIdHeader) responseEvent.getResponse().getHeader(CallIdHeader.NAME);
      CSeqHeader cseq = (CSeqHeader) responseEvent.getResponse().getHeader(CSeqHeader.NAME);
     
      try{
        Dialog dialog = responseEvent.getClientTransaction().getDialog();
        Request ack = dialog.createAck(cseq.getSeqNumber());

        //System.out.println("Ack sent");
        //System.out.println("ACK sent");
        dialog.sendAck(ack);
        //A sends a BYE
        Request byeRequest = dialog.createRequest(Request.BYE);
        dialog.sendRequest(sipProvider.getNewClientTransaction(byeRequest));
        //System.out.println("BYE sent");
        //System.out.println("Bye sent");
       
      }catch (SipException e) {
        e.printStackTrace();
        System.err.println(e.getMessage());
      }catch (InvalidArgumentException e) {
        e.printStackTrace();
        System.err.println(e.getMessage());
      }
    }
    else if(responseEvent.getResponse().getStatusCode() == 200 && cseq2.getMethod().equals("BYE")){
      //System.out.println("terminated OK bekommen");
      //System.out.println("terminated OK bekommen");
    }
   
  }

  public void processTimeout(TimeoutEvent arg0) {
    //System.out.println("Timeout----------------------------------");
      System.err.println("Timeout---------------------------------- CTX : " + arg0.getClientTransaction() + " STX : " + arg0.getServerTransaction());
      new Exception().printStackTrace();
  }

  public void processTransactionTerminated(TransactionTerminatedEvent arg0) {
  }
}
TOP

Related Classes of performance.uas_uac.One

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.