// Process transaction timeout
 public void processTimeOut(jain.protocol.ip.sip.SipEvent transactionTimeOutEvent) {
   if (transactionTimeOutEvent.isServerTransaction()) {
     System.out.println(
         "Server transaction " + transactionTimeOutEvent.getTransactionId() + " timed out");
   } else {
     System.out.println(
         "Client transaction " + transactionTimeOutEvent.getTransactionId() + " timed out");
   }
 }
  // Process Request received
  public void processRequest(jain.protocol.ip.sip.SipEvent requestReceivedEvent) {
    Request request = (Request) requestReceivedEvent.getMessage();
    long serverTransactionId = requestReceivedEvent.getTransactionId();
    System.out.println(
        "\n\nRequest received with server transaction id " + serverTransactionId + ":\n" + request);
    try {
      // If request is not an ACK then try to send an OK Response
      if ((!Request.ACK.equals(request.getMethod()))
          && (!Request.REGISTER.equals(request.getMethod()))) {

        String body = request.getBodyAsString();
        getSipProvider().sendResponse(serverTransactionId, Response.OK, body, "application", "sdp");
      }
    } catch (TransactionDoesNotExistException e) {
      e.printStackTrace();
      System.out.println(e.getMessage());
      System.exit(-1);
    } catch (SipParseException e) {
      e.printStackTrace();
      System.out.println(e.getMessage());
      System.exit(-1);
    } catch (SipException e) {
      e.printStackTrace();
      System.out.println(e.getMessage());
      System.exit(-1);
    }
    System.out.println("Completed processing request!");
  }
  // Process Response received
  public void processResponse(jain.protocol.ip.sip.SipEvent responseReceivedEvent) {
    Response response = (Response) responseReceivedEvent.getMessage();
    long clientTransactionId = responseReceivedEvent.getTransactionId();
    System.out.println(
        "Response received with client transaction id " + clientTransactionId + ":\n" + response);

    try {
      // Get method of response
      String method = response.getCSeqHeader().getMethod();

      // Get status code of response
      int statusCode = response.getStatusCode();
      // If response is a 200 INVITE response, try to send an ACK
      if ((statusCode == Response.OK) && (method.equals(Request.INVITE))) {

        getSipProvider().sendAck(clientTransactionId);
      }
    } catch (SipException e) {
      e.printStackTrace();
      System.err.println(e.getMessage());
      System.exit(-1);
    }
  }