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(); } }