Esempio n. 1
0
  private void sendResponse(
      SipRequestVerb verb,
      final int sipResponseCode,
      final Request incomingRequest,
      final Response response,
      final ServerTransaction associatedTransactionWithIncomingRequest,
      final SipProfile sipProfile) {

    try {
      if (null == associatedTransactionWithIncomingRequest) {
        // Create the contact name address
        SipURI contactURI =
            addressFactory.createSipURI(sipProfile.getUsername(), sipProfile.getLocalIpAddress());
        contactURI.setPort(sipProfile.getLocalSipPort());
        Address contactAddress = addressFactory.createAddress(contactURI);
        contactAddress.setDisplayName(sipProfile.getDisplayName());

        // Create a new Contact header
        ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
        contactHeader.setExpires(300); // 5 minutes
        response.addHeader(contactHeader);

        ContentTypeHeader contentTypeHeader = null;
        Object content = null;
        if (SipRequestVerb.INVITE == verb) {
          contentTypeHeader = headerFactory.createContentTypeHeader("application", "sdp");
          SessionDescription sdp = SipRequestUtils.createSDP(incomingRequest, sipProfile);
          content = sdp.toString();
        } else if (SipRequestVerb.MESSAGE == verb) {
          contentTypeHeader = headerFactory.createContentTypeHeader("text", "plain");
          content = incomingRequest.getContent().toString();
        }
        response.setContent(content, contentTypeHeader);

        // Send the created response
        if (sipConnection.getServerTransaction() == null)
          sipConnection.setServerTransaction(
              sipConnection.getProvider().getNewServerTransaction(incomingRequest));

        Thread transactionHandler =
            new Thread() {
              public void run() {
                try {
                  sipConnection.getServerTransaction().sendResponse(response);
                } catch (Exception e) {
                  e.printStackTrace();
                }
              }
            };
        transactionHandler.start();
      } else {
        Thread associatedTransactionHandler =
            new Thread() {
              public void run() {
                try {
                  associatedTransactionWithIncomingRequest.sendResponse(response);
                } catch (Exception e) {
                  e.printStackTrace();
                }
              }
            };
        associatedTransactionHandler.start();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }