public void sendReliably() throws Rel100Exception { final int statusCode = getStatus(); if(statusCode == 100 || statusCode >= 200) { throw new Rel100Exception(Rel100Exception.NOT_1XX); } if(!Request.INVITE.equals(originalRequest.getMethod())) { throw new Rel100Exception(Rel100Exception.NOT_INVITE); } if(!containsRel100(originalRequest.getMessage())) { throw new Rel100Exception(Rel100Exception.NO_REQ_SUPPORT); } try { send(true); } catch (IOException e) { // sendReliably doesn't throw IOException where send() does... throw new IllegalStateException(e); } }
throw new NullPointerException("Null message"); this.proxyImpl = proxyImpl; SipServletRequest request = proxiedResponse.getRequest(); SIPResponse nistResponse = (SIPResponse) ((SipServletResponseImpl) proxiedResponse).getResponse(); SIPRequest nistRequest = (SIPRequest) ((SipServletRequestImpl) request).getMessage(); callerRouteSet = new LinkedList<javax.sip.address.Address>(); callId = proxiedResponse.getCallId(); i = proxiedResponse.getRequest().getAddressHeaders(RecordRouteHeader.NAME); } catch (ServletParseException e) { throw new IllegalArgumentException("Couldn't get the RecordRoute Headers from the request " + proxiedResponse.getRequest(), e); i = proxiedResponse.getAddressHeaders(RecordRouteHeader.NAME); } catch (ServletParseException e) { throw new IllegalArgumentException("Couldn't get the RecordRoute Headers from the response " + proxiedResponse, e);
@Override public ModifiableRule getModifiableRule(String headerName) { ModifiableRule overriden = retrieveModifiableOverriden(); if ( overriden != null ) { return overriden; String hName = getFullHeaderName(headerName);
/** * @param response the finalResponse to set */ public void setResponse(SipServletResponseImpl response) { if(response.getStatus() >= 200 && (lastFinalResponse == null || lastFinalResponse.getStatus() < response.getStatus())) { if(logger.isDebugEnabled()) { logger.debug("last final response " + response + " set on " + this); } this.lastFinalResponse = response; } // we keep the last informational response for noPrackReceived only if(containsRel100(response.getMessage()) && (response.getStatus() > 100 && response.getStatus() < 200) && (lastInformationalResponse == null || lastInformationalResponse.getStatus() < response.getStatus())) { if(logger.isDebugEnabled()) { logger.debug("last informational response " + lastInformationalResponse + " set on " + this); } this.lastInformationalResponse = response; } }
public boolean isCommitted() { Transaction tx = getTransaction(); if(tx instanceof ClientTransaction && getStatus() >= 101 && getStatus() <= 199 && getHeader("RSeq") == null) { if(this.proxyBranch == null) { // Make sure this is not a proxy. Proxies are allowed to modify headers. return true; if(tx instanceof ClientTransaction && getStatus() >= 101 && getStatus() <= 199 && getHeader("RSeq") != null && TransactionState.TERMINATED.equals(tx.getState())) { if(this.proxyBranch == null) { // Make sure this is not a proxy. Proxies are allowed to modify headers. return true; if(tx instanceof ClientTransaction && getStatus() >= 200 && getStatus() <= 999 && !Request.INVITE.equals(((SIPClientTransaction)tx).getMethod())) { if(this.proxyBranch == null) { // Make sure this is not a proxy. Proxies are allowed to modify headers. return true; if(tx instanceof ClientTransaction && getStatus() >= 200 && getStatus() <= 999 && TransactionState.TERMINATED.equals(tx.getState()) && isAckGenerated) { return true;
final SipFactoryImpl sipFactoryImpl = (SipFactoryImpl) sipApplicationDispatcher.getSipFactory(); final SipServletResponseImpl sipServletResponse = (SipServletResponseImpl) sipServletMessage; final Response response = sipServletResponse.getResponse(); final ListIterator<ViaHeader> viaHeaders = response.getHeaders(ViaHeader.NAME); final ViaHeader viaHeader = viaHeaders.next(); final ClientTransaction clientTransaction = (ClientTransaction) sipServletResponse.getTransaction(); final Dialog dialog = sipServletResponse.getDialog(); sipServletResponse.setOriginalRequest(originalRequest); int indexOfUnderscore = strippedBranchId.indexOf("_"); if(indexOfUnderscore == -1) { if(sipServletResponse.getStatus() == Response.TRYING) return; throw new DispatcherException("the via header branch " + branch + " for the response is wrong the response does not reuse the one from the original request"); SipServletResponseImpl orphanResponse = (SipServletResponseImpl) sipFactoryImpl.getMobicentsSipServletMessageFactory().createSipServletResponse(response, null, null, dialog, true, false); request.setOrphan(true); orphanResponse.setAppSessionId(appId); orphanResponse.setOriginalRequest(request); callServletForOrphanResponse(sipContext, orphanResponse); stx.sendMessage((SIPMessage) response); } else { if(sipServletResponse.getRequest() == null) { ToHeader toHeader = ((ToHeader)response.getHeader(ToHeader.NAME)); FromHeader fromHeader = ((FromHeader)response.getHeader(FromHeader.NAME)); SipServletRequestImpl req = (SipServletRequestImpl) sipFactoryImpl.getMobicentsSipServletMessageFactory().createSipServletRequest(r, null, null, dialog, false); req.setOrphan(true);
public void dispatch() throws DispatcherException { final int status = sipServletResponse.getStatus(); boolean batchStarted = false; if(status != Response.TRYING) { if(Request.SUBSCRIBE.equals(sipServletResponse.getMethod()) && status >= 200 && status <= 300 && session.getProxy() == null) { session.addSubscription(sipServletResponse); sipServletResponse.setProxyBranch(proxyBranch); if(sipServletResponse.getMethod().equals(Request.INVITE) && sipServletResponse.getRequest() != null && sipServletResponse.getRequest().isInitial() && proxy.getBestResponseSent() >= 200 && (status <= 200 || status >= 300)) { if(logger.isDebugEnabled()) { logger.debug("best final response sent " + proxy.getBestResponseSent() + ", response status " + status + " not forwarding response"); if(sipServletResponse.isRetransmission()) { if(logger.isDebugEnabled()) { logger.debug("the following response is dropped since this is a retransmission " + response); if(sipServletResponse.getTransaction() == null && sipServletResponse.getDialog() == null) { if(logger.isDebugEnabled()) { logger.debug("the following response is dropped since there is no client transaction nor dialog for it : " + response);
final Response response = getResponse(); final int statusCode = response.getStatusCode(); final MobicentsSipSession session = getSipSession(); final MobicentsSipApplicationSession sipApplicationSession = session.getSipApplicationSession(); final MobicentsSipApplicationSessionKey sipAppSessionKey = sipApplicationSession.getKey(); final ServerTransaction transaction = (ServerTransaction) getTransaction(); if(Request.SUBSCRIBE.equals(getMethod()) && statusCode >= 200 && statusCode <= 300 && session.getProxy() == null) { session.addSubscription(this); if(!containsRel100(response)) { final Header requireHeader = SipFactoryImpl.headerFactory.createRequireHeader(REL100_OPTION_TAG); response.addHeader(requireHeader); final Header rseqHeader = SipFactoryImpl.headerFactory.createRSeqHeader(getTransactionApplicationData().getRseqNumber().getAndIncrement()); response.addHeader(rseqHeader); || RoutingState.RELAYED.equals(originalRequest.getRoutingState())) && transaction.getDialog() == null && JainSipUtils.DIALOG_CREATING_METHODS.contains(getMethod())) { final String transport = JainSipUtils.findTransport(transaction.getRequest()); final SipProvider sipProvider = sipFactoryImpl.getSipNetworkInterfaceManager().findMatchingListeningPoint( final String transport = JainSipUtils.findTransport(((SipServletRequestImpl)this.getRequest()).getMessage()); final SipProvider sipProvider = sipFactoryImpl.getSipNetworkInterfaceManager().findMatchingListeningPoint( transport, false).getSipProvider();
ProxyUtils.createProxiedResponse(response, proxyBranch); if(proxiedResponse == null || proxiedResponse.getMessage() == null) { if(logger.isDebugEnabled()) logger.debug("Response was dropped because getProxyUtils().createProxiedResponse(response, proxyBranch) returned null"); String branch = ((Via)proxiedResponse.getMessage().getHeader(Via.NAME)).getBranch(); Transaction transaction = null; synchronized(proxyBranch.ongoingTransactions) { ((SipServletResponseImpl)proxiedResponse).setTransaction(transaction); ((SipServletResponseImpl)proxiedResponse).setOriginalRequest(tr.request); break; proxiedResponse.send(); bestResponseSent = proxiedResponse.getStatus(); proxyBranches.clear(); originalRequest = null; if (storeTerminationInfo && proxiedResponse.getRequest().isInitial() && getRecordRouteURI() != null) { if(logger.isDebugEnabled()) { logger.debug("storing termination Info for request " + proxiedResponse.getRequest()); ((MessageExt)((MobicentsSipServletRequest)proxiedResponse.getRequest()).getMessage()).getCSeqHeader().getSeqNumber()); final Message message = proxiedResponse.getMessage(); String transport = JainSipUtils.findTransport(message); SipProvider sipProvider = getSipFactoryImpl().getSipNetworkInterfaceManager().findMatchingListeningPoint(
@SuppressWarnings("unchecked") public SipServletRequest createAck() { final Response response = getResponse(); if(logger.isDebugEnabled()) { logger.debug("transaction " + getTransaction()); logger.debug("originalRequest " + originalRequest); if(((getTransaction() == null && originalRequest != null && !Request.INVITE.equals(getMethod()) && !Request.INVITE.equals(originalRequest.getMethod()))) || (getTransaction() != null && !Request.INVITE.equals(((SIPTransaction)getTransaction()).getMethod())) || (response.getStatusCode() >= 100 && response.getStatusCode() < 200) || isAckGenerated) { if(logger.isDebugEnabled()) { logger.debug("transaction state " + ((SIPTransaction)getTransaction()).getMethod() + " status code " + response.getStatusCode() + " isAckGenerated " + isAckGenerated); final MobicentsSipSession session = getSipSession(); Dialog dialog = session.getSessionCreatingDialog(); CSeqHeader cSeqHeader = (CSeqHeader)response.getHeader(CSeqHeader.NAME); routeAppName = sipFactoryImpl.getSipApplicationDispatcher().getApplicationNameFromHash(routeAppNameHashed); if(routeAppName == null || !sipFactoryImpl.getSipApplicationDispatcher().getApplicationServerId().equalsIgnoreCase(serverId) || !routeAppName.equals(getSipSession().getKey().getApplicationName())) { ackRequest.addHeader(routeHeader); this.getSipSession(), this.getTransaction(), dialog, false);
String branch = ((Via)proxiedResponse.getMessage().getHeader(Via.NAME)).getBranch(); synchronized(this.ongoingTransactions) { for(TransactionRequest tr : this.ongoingTransactions) { if(tr.branchId.equals(branch)) { ((SipServletResponseImpl)proxiedResponse).setTransaction(tr.request.getTransaction()); ((SipServletResponseImpl)proxiedResponse).setOriginalRequest(tr.request); break; proxiedResponse.send(); if(logger.isDebugEnabled()) logger.debug("Proxy response sent out sucessfully");
final Response response = sipServletResponse.getResponse(); final ListIterator<ViaHeader> viaHeadersLeft = response.getHeaders(ViaHeader.NAME); final ClientTransaction clientTransaction = (ClientTransaction) sipServletResponse.getTransaction(); final Dialog dialog = sipServletResponse.getDialog(); final Response newResponse = (Response) response.clone(); ((MessageExt)newResponse).setApplicationData(null);
public void onFinalResponse(ProxyBranchImpl branch) throws DispatcherException { final int status = response.getStatus(); if(!isNoCancel && response.getTransaction() != null) { if(this.getParallel()) { if( (status >= 200 && status < 300) response.getMessage().getHeaders(ContactHeader.NAME); while(headers.hasNext()) { final ContactHeader contactHeader = (ContactHeader) headers.next(); if(bestResponse == null || bestResponse.getStatus() < 600) status < bestResponse.getStatus()) { bestResponse = response; bestBranch = branch; sendFinalResponse(bestResponse, bestBranch); } else if (!parallel) { final int bestResponseStatus = bestResponse.getStatus(); if(bestResponseStatus >= 200 && bestResponseStatus < 300) { finalBranchForSubsequentRequests = bestBranch;
public SipServletRequest createPrack() throws Rel100Exception { final Response response = getResponse(); if((response.getStatusCode() == 100 && response.getStatusCode() >= 200) || isPrackGenerated) { throw new IllegalStateException("the transaction state is such that it doesn't allow a PRACK to be sent now, or this response is provisional only, or a PRACK has already been generated"); if(!Request.INVITE.equals(getTransaction().getRequest().getMethod())) { throw new Rel100Exception(Rel100Exception.NOT_INVITE); final MobicentsSipSession session = getSipSession(); Dialog dialog = session.getSessionCreatingDialog(); SipServletRequestImpl sipServletPrackRequest = null; routeAppName = sipFactoryImpl.getSipApplicationDispatcher().getApplicationNameFromHash(routeAppNameHashed); if(routeAppName == null || !sipFactoryImpl.getSipApplicationDispatcher().getApplicationServerId().equalsIgnoreCase(serverId) || !routeAppName.equals(getSipSession().getKey().getApplicationName())) { prackRequest.addHeader(routeHeader); this.getSipSession(), this.getTransaction(), dialog, false);
public void setStatus(int statusCode) { try { getResponse().setStatusCode(statusCode); } catch (ParseException e) { throw new IllegalArgumentException(e); } }
Response cancelJsipResponse = (Response) cancelResponse.getMessage(); cancelTransaction.sendResponse(cancelJsipResponse); sipApplicationDispatcher.updateResponseStatistics(cancelJsipResponse, false);
/** * {@inheritDoc} */ public void addSubscription(MobicentsSipServletMessage sipServletMessageImpl) throws SipException { EventHeader eventHeader = null; if(sipServletMessageImpl instanceof SipServletResponseImpl) { eventHeader = (EventHeader) ((SipServletRequestImpl)((SipServletResponseImpl)sipServletMessageImpl).getRequest()).getMessage().getHeader(EventHeader.NAME); } else { eventHeader = (EventHeader) sipServletMessageImpl.getMessage().getHeader(EventHeader.NAME); } if(eventHeader != null) { if(logger.isDebugEnabled()) { logger.debug("adding subscription " + eventHeader + " to sip session " + getId()); } if(subscriptions == null) { this.subscriptions = new CopyOnWriteArraySet<String>(); } subscriptions.add(eventHeader.toString()); if(logger.isDebugEnabled()) { logger.debug("Request from Original Transaction is " + originalMethod); logger.debug("Dialog is " + sessionCreatingDialog); } if(subscriptions.size() < 2 && Request.INVITE.equals(originalMethod)) { sessionCreatingDialog.terminateOnBye(false); } } }
public String getReasonPhrase() { return getResponse().getReasonPhrase(); }
Response requestTerminatedResponse = (Response) inviteResponse.getMessage(); SipContext context = SipApplicationSessionCreationThreadLocal.lookupContext(); if (context != null) {
public int getStatus() { return getResponse().getStatusCode(); }