public boolean equals(Object other) { if (other==this) return true; if (other instanceof ViaHeader) { final ViaHeader o = (ViaHeader) other; return getProtocol().equalsIgnoreCase( o.getProtocol() ) && getTransport().equalsIgnoreCase( o.getTransport() ) && getHost().equalsIgnoreCase( o.getHost() ) && getPort() == o.getPort() && equalParameters( o ); } return false; }
topVia.setTransport(transport); } catch (ParseException e) { InternalErrorHandler.handleException(e);
/** * Removes all via headers from <tt>request</tt> and replaces them with a new one, equal to * the one that was top most. * * @param request the Request whose branchID we'd like to remove. * */ private void removeBranchID(Request request) { ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); viaHeader.removeParameter("branch"); }
/** * Check if the via header is external * @param viaHeader the via header to check * @return true if the via header is external, false otherwise */ public final boolean isViaHeaderExternal(ViaHeader viaHeader) { if (viaHeader != null) { return isExternal(viaHeader.getHost(), viaHeader.getPort(), viaHeader.getTransport()); } return true; }
int port = sipUri.getPort(); if(sipFactoryImpl.getSipApplicationDispatcher().isExternal(host, port, transport)) { viaHeader.setHost(sipConnector.getStaticServerAddress()); viaHeader.setPort(sipConnector.getStaticServerPort()); if(!viaHeader.getHost().equalsIgnoreCase(ipAddressToCheckAgainst) || !viaHeader.getTransport().equalsIgnoreCase(sipConnector.getTransport()) || viaHeader.getPort() != sipConnector.getPort()) { if(logger.isTraceEnabled()) { logger.trace("Via " + viaHeader + " different than outbound SIP Connector picked by the container " + sipConnector + " , updating it"); viaHeader.setHost(ipAddressToCheckAgainst); viaHeader.setPort(sipConnector.getPort()); viaHeader.setTransport(sipConnector.getTransport()); if(logger.isTraceEnabled()) { logger.trace("Via updated to outbound SIP Connector picked by the container " + viaHeader);
if(viaHeader.getBranch() == null) { final String branch = JainSipUtils.createBranch(sipApplicationSession.getKey().getId(), sipFactoryImpl.getSipApplicationDispatcher().getHashFromApplicationName(session.getKey().getApplicationName())); viaHeader.setBranch(branch); hopTransport = hop.getTransport(); String viaTransport = viaHeader.getTransport(); if(logger.isDebugEnabled()) { logger.debug("viaHeader transport " + viaTransport + logger.debug("updating via transport to hopTransport " + hopTransport); viaHeader.setTransport(hopTransport); } else if (transportFromRouteOrRequestUri != null && !viaTransport.equalsIgnoreCase(transportFromRouteOrRequestUri)) { if(logger.isDebugEnabled()) { logger.debug("updating via transport to transportFromRouteOrRequestUri " + transportFromRouteOrRequestUri); viaHeader.setTransport(transportFromRouteOrRequestUri);
String viaTransport = topmostViaHeader.getTransport(); if(viaTransport != null && viaTransport.length() > 0) { transport = viaTransport;
SipConnector connector = StaticServiceHolder.sipStandardService.findSipConnector(transport); String branch = ((ViaHeader)sipServletRequest.getMessage().getHeader(ViaHeader.NAME)).getBranch(); ViaHeader via = JainSipUtils.createViaHeader(sipContext.getSipApplicationDispatcher().getSipNetworkInterfaceManager(), request, JainSipUtils.createBranch("orphan", if(connector.isUseStaticAddress()) { try { via.setHost(connector.getStaticServerAddress()); via.setPort(connector.getStaticServerPort()); } catch (Exception e) { throw new RuntimeException(e);
sipSession.getKey().getApplicationSessionId(), sipApplicationDispatcher.getHashFromApplicationName(sipSession.getKey().getApplicationName())); viaHeader.setBranch(branch); } catch (ParseException pe) { logger.error("A problem occured while setting the via branch while proxying a request", pe); int port = sipUri.getPort(); if(sipFactoryImpl.getSipApplicationDispatcher().isExternal(host, port, transport)) { viaHeader.setHost(sipConnector.getStaticServerAddress()); viaHeader.setPort(sipConnector.getStaticServerPort());
public static void optimizeViaHeaderAddressForStaticAddress(SipConnector sipConnector, Request request, SipFactoryImpl sipFactoryImpl, String transport) throws ParseException, InvalidArgumentException { javax.sip.address.URI uri = request.getRequestURI(); ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); RouteHeader route = (RouteHeader) request.getHeader(RouteHeader.NAME); if(route != null) { uri = route.getAddress().getURI(); } if(uri.isSipURI()) { javax.sip.address.SipURI sipUri = (javax.sip.address.SipURI) uri; String host = sipUri.getHost(); int port = sipUri.getPort(); if(sipFactoryImpl.getSipApplicationDispatcher().isExternal(host, port, transport)) { viaHeader.setHost(sipConnector.getStaticServerAddress()); viaHeader.setPort(sipConnector.getStaticServerPort()); } } } }
return null; } else { return via.getHost();
public void putTransaction(SipServletRequestImpl request) { final String txId = ((ViaHeader) request.getMessage().getHeader(ViaHeader.NAME)).getBranch(); final TransactionApplicationData txData = request.getTransactionApplicationData(); if(txData != null && this.transactionMap.put(txId, txData) == null) { if(logger.isDebugEnabled()) { logger.debug("Transaction "+txId+" added to proxy."); } } } // https://code.google.com/p/sipservlets/issues/detail?id=238
public void processRequest(RequestEvent requestReceivedEvent) { Request request = requestReceivedEvent.getRequest(); ServerTransaction serverTransactionId = requestReceivedEvent .getServerTransaction(); String viaBranch = ((ViaHeader)(request.getHeaders(ViaHeader.NAME).next())).getParameter("branch"); LOG.debug("Request: {}", request.getMethod()); LOG.debug("Server Transaction Id: {}", serverTransactionId); LOG.debug("Received From Branch: {}", viaBranch); if (request.getMethod().equals(Request.NOTIFY)) { processNotify(requestReceivedEvent, serverTransactionId); } }
/** * {@inheritDoc} */ public String getInitialTransport() { if(getTransaction() != null) { return ((SIPTransaction)getTransaction()).getTransport(); } else { ViaHeader via = (ViaHeader) message.getHeader(ViaHeader.NAME); if(via == null || // https://github.com/Mobicents/sip-servlets/issues/47 // check if the via is container generated, if it is then it means // this is an outgoing request or response and thus should return null !sipFactoryImpl.getSipApplicationDispatcher().isViaHeaderExternal(via) ) { return null; } else { return via.getTransport(); } } }
@Override public void sendMessage(SIPMessage message) throws IOException { final SIPResponse response = (SIPResponse) message; if(response != null && Request.INVITE.equals(getMethod()) && response.getStatusCode() > 100 && response.getStatusCode() < 200) { this.localDialogId = response.getDialogId(true); if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) { logger.logDebug(transactionId + " : local dialog Id " + localDialogId); } if(isReliable()) { this.peerReliablePort = ((ResponseExt)response).getTopmostViaHeader().getPort(); if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) { logger.logDebug(transactionId + " : peer Reliable Port " + peerReliablePort); } } // store the tx when the response will be sent try { ((ClusteredSipStack)sipStack).getSipCache().putServerTransaction(this); } catch (SipCacheException e) { logger.logError("problem storing server transaction " + transactionId + " into the distributed cache", e); } } super.sendMessage(message); }
public String getRemoteHost() { if(getTransaction() != null) { if(((SIPTransaction)getTransaction()).getPeerPacketSourceAddress() != null && ((SIPTransaction)getTransaction()).getPeerPacketSourceAddress().getHostAddress() != null) { return ((SIPTransaction)getTransaction()).getPeerPacketSourceAddress().getHostAddress(); } else { return ((SIPTransaction)getTransaction()).getPeerAddress(); } } else { ViaHeader via = (ViaHeader) message.getHeader(ViaHeader.NAME); if(via == null) { return null; } else { return via.getHost(); } } }
public void onBranchTerminated() { if(outgoingRequest != null) { String txid = ((ViaHeader) outgoingRequest.getMessage().getHeader(ViaHeader.NAME)).getBranch(); proxy.removeTransaction(txid); } }