Package com.ericsson.ssa.sip

Examples of com.ericsson.ssa.sip.Header


    private String extractHashKey(SipServletRequest request) {
     
        String bekey = null;
       
        // is there a bekey in topmost Route?
        Header routeHeader = ((SipServletMessageImpl) request).getRawHeader(Header.ROUTE);

        if (routeHeader != null) {
            if (logger.isLoggable(Level.FINER)) {
                logger.log(Level.FINER,
                    "The request contains a Route header: " + routeHeader);
            }

            ListIterator<Address> routeIterator;

            try {
                routeIterator = routeHeader.getAddressValues();
            } catch (ServletParseException e) {
                logger.log(Level.WARNING,
                    "clb.sip.address_parse_error", e.getMessage());
                if(logger.isLoggable(Level.FINE)){
                    logger.log(Level.FINE, "clb.caught_an_exception", e);
View Full Code Here


    }

    void handleIncomingResponse(SipServletResponseImpl response)
            throws SipRoutingException {
        // Get topmost header
        Header viaHeader = response.getRawHeader(Header.VIA);

        if (viaHeader != null) {
            ListIterator<String> viaIterator;
            viaIterator = viaHeader.getValues();

            if (viaIterator.hasNext()) {
                ViaImpl via = new ViaImpl(viaIterator.next());
                // Extract connection
                Connection connection = LoadbalancerUtil.getConnection(via);
View Full Code Here

                    new Object[]{response});
        }
        if (hashkey != null) {
            if (response.isContactIndicated()) {
                // This is a UAS.
                Header contactHeader = response.getRawHeader(Header.CONTACT);

                if (contactHeader != null) {
                    AddressImpl contactAddress;

                    try {
                        contactAddress = (AddressImpl) (contactHeader.getAddressValue());
                    } catch (ServletParseException e) {
                        throw new SipRoutingException("Malformed Contact", e);
                    }

                    URIImpl contactUri = ((URIImpl) contactAddress.getURI());

                    contactAddress = ((AddressImpl) contactAddress.clone(true, true));
                    contactUri = (URIImpl) contactUri.clone();
                    contactUri.encodeBeKey(hashkey);
                    // Allow writes on cloned Address object
                    contactAddress.setReadOnly(false);
                    contactAddress.setURI(contactUri);
                    contactHeader.setReadOnly(false);
                    contactHeader.removeValues();
                    contactHeader.setValue(contactAddress.toString(), true);
                    contactHeader.setReadOnly(true);
                }
            } else if (response.getMethod().equalsIgnoreCase("INVITE") && response.getStatus() >= 300){
                // This is a non-2xx response to an INVITE, set bekey in the To-header
                Header toHeader = response.getRawHeader(Header.TO);

                if (toHeader != null) {
                    AddressImpl toAddress;

                    try {
                        toAddress = (AddressImpl) (toHeader.getAddressValue());
                    } catch (ServletParseException e) {
                        throw new SipRoutingException("Malformed To-header", e);
                    }

                    URIImpl toUri = ((URIImpl) toAddress.getURI());

                    toAddress = ((AddressImpl) toAddress.clone(true, true));
                    toUri = (URIImpl) toUri.clone();
                    toUri.encodeBeKey(hashkey);
                    // Allow writes on cloned Address object
                    toAddress.setReadOnly(false);
                    toAddress.setURI(toUri);
                    toHeader.setReadOnly(false);
                    toHeader.removeValues();
                    toHeader.setValue(toAddress.toString(), true);
                    toHeader.setReadOnly(true);
                }
            }
        }

        // Get the connection that was extracted from the Via in the (possible) incoming response
View Full Code Here

    private ViaImpl getTopVia(SipServletMessageImpl msg) {
        return new ViaImpl(msg.getRawHeader(Header.VIA).getValue());
    }
   
    private void popTopVia(SipServletMessageImpl msg) {
        Header viaHeader = msg.getRawHeader(Header.VIA);
        viaHeader.setReadOnly(false);
        ListIterator<String> viaIter = viaHeader.getValues();

        while (viaIter.hasNext()) {
            viaIter.next();
            viaIter.remove();

            break;
        }
        viaHeader.setReadOnly(true);
    }
View Full Code Here

        }
        viaHeader.setReadOnly(true);
    }

    private void replaceTopVia(SipServletMessageImpl msg, ViaImpl newTopVia) {
        Header viaHeader = msg.getRawHeader(Header.VIA);
        viaHeader.setReadOnly(false);

        ListIterator<String> viaIter = viaHeader.getValues();

        while (viaIter.hasNext()) {
            viaIter.next();
            viaIter.remove();

            break;
        }

        viaHeader.setValue(newTopVia.toString(), true);
        viaHeader.setReadOnly(true);
    }
View Full Code Here

    public void checkRouteHeader(SipServletRequestImpl req, boolean remove) {
        // loose route support: remove first route header which should refer to
        // this sipstack
        // TODO implement support for strict route
        Header r = req.getRawHeader(Header.ROUTE);

        if (r == null) {
            req.setFragmentId(((URIImpl) req.getRequestURI()).getFragmentId());

            // Session Case handling
            req.setSessionCase(SessionCase.EXTERNAL);

            // end Session Case handling

            // Populate Parameters from Request URI if initial request
            if (req.isInitial()) {
                req.setRequestParams((URIImpl) req.getRequestURI());
            }
        } else {
            r.setReadOnly(false);

            ListIterator<Address> it_a = null;

            try {
                it_a = r.getAddressValues();
            } catch (ServletParseException e) {
                // TR HH52078
                SipServletResponseImpl failureResp = req.createTerminatingResponse(400);

                if (failureResp == null) {
                    return;
                }

                if (logger.isLoggable(Level.FINE)) {
                    logger.log(Level.FINE,
                        "failed to parse top route , send 400 response");
                }

                failureResp.popDispatcher().dispatch(failureResp);

                return;
            }

            Address a = it_a.next();
            URIImpl uri = (URIImpl) a.getURI();

            // Session Case handling
            // TODO move constants
            final String CALL_PARAM = "call";
            final String CALL_PARAM_ORIG = "orig";
            final String CALL_PARAM_TERMINATING = "term_registered";
            final String CALL_PARAM_TERMINATING_UNREG = "term_unregistered";

            String callParam = uri.getParameter(CALL_PARAM);

            // if(callParam == null) callParam = uri.getParameter(CALL_PARAM);
            if (callParam == null) {
                req.setSessionCase(SessionCase.EXTERNAL);
            } else {
                if (callParam.equals(CALL_PARAM_ORIG)) {
                    req.setSessionCase(SessionCase.ORIGINATING);
                } else if (callParam.equals(CALL_PARAM_TERMINATING)) {
                    req.setSessionCase(SessionCase.TERMINATING);
                } else if (callParam.equals(CALL_PARAM_TERMINATING_UNREG)) {
                    req.setSessionCase(SessionCase.TERMINATING_UNREGISTERED);
                } else {
                    req.setSessionCase(SessionCase.EXTERNAL);
                    logger.log(Level.WARNING,
                        "Assigned SessionCase external due to unknown value of " +
                        CALL_PARAM + " :" + callParam);
                }
            }

            // end Session Case handling
            if (uri.getLrParam()) {
                // Before removing the Route header extract the fragment-id.
                // This code needs BASIC TESTING in an extended
                // spiraling scenario, such as
                //
                // UAC/EAS --> proxy/external --> proxy/EAS --> UAS/external
                //
                // logger.log(Level.FINE, "+++ Route header with ;lr seen in resolver");
                // logger.log(Level.FINE, "+++ try setting frag info from the Route header
                // URI");
                // logger.log(Level.FINE, "+++ URI: "+(SipURIImpl)a.getURI());
                // logger.log(Level.FINE, "+++ and the id is:
                // "+((SipURIImpl)a.getURI()).getFragmentId());
                // logger.log(Level.FINE, "+++ let's set it in the request then");
                req.setFragmentId(((URIImpl) a.getURI()).getFragmentId());

                if (remove) {
                    if (logger.isLoggable(Level.FINE)) {
                        logger.log(Level.FINE, "Removing route = " + a);
                    }

                    it_a.remove();


                    // support of popped route added.
                    req.setInitialPoppedRoute(a);
                    req.setRecordRouteURI(uri);
                }
            } else {
                throw new IllegalAccessError(
                    "we do not support strict routes yet");
            }

            r.setReadOnly(true);
        }
    }
View Full Code Here

            if (SipMonitoring.isEnabled(SipMonitoring.NETWORK_MANAGER)) {
                _networkManager.incrEasReceivedSipRequests();
            }
        } else {
            SipServletResponseImpl resp = (SipServletResponseImpl) message;
            Header cseq = resp.getRawHeader(Header.CSEQ);

            if (cseq == null) {
                if (SipMonitoring.isEnabled(SipMonitoring.NETWORK_MANAGER)) {
                    _networkManager.incrEasInvalidSipMessages();
                }

                return; // Drop since missing required header
            }

            String c = cseq.getValue();
            int index = c.indexOf(' ');
            resp.setMethod(c.substring(index + 1));

            if (_log.isLoggable(Level.FINE)) {
                _log.log(Level.FINE,
View Full Code Here

       
        return false;
    }   
   
    private void processOutboundRequest(SipServletRequestImpl req) {
        Header contactHeader = req.getRawHeader(Header.CONTACT);   

        if ("REGISTER".equals(req.getMethod())) {
            if (isFirstHop(req)) {
                if (isRegisterOutbound(contactHeader) && isOutboundSupported(req)) {
                    // add path header as RFC3327 so we are included in
                    // subsequent request to the UAC
                    addPathHeader(req);
                }
            }
            LayerHelper.next(req, this, _nextLayer);
        } else {
            Header routeHeader = req.getRawHeader(Header.ROUTE);
           
            if (isOutboundForwardIndicated(routeHeader)) {
                forwardRequest(req);
                   
            } else {
View Full Code Here

                }
                LayerHelper.next(resp, this, _nextLayer);
            } else {
              
                // Get topmost header
                Header viaHeader = resp.getRawHeader(Header.VIA);
               
                if (viaHeader != null) {
                    ListIterator<String> viaIterator;
                    viaIterator = viaHeader.getValues();
   
                    if (viaIterator.hasNext()) {
                        ViaImpl via = new ViaImpl(viaIterator.next());
                       
                        String outboundIndicated = via.getParameter(OUTBOUND_PARAM);
   
                        if (outboundIndicated != null) {
                            // This response was received from the back-end,
                            // pop Via, extract connection and forward it to the client.
                            viaHeader.setReadOnly(false);
                            viaIterator.remove();
                            viaHeader.setReadOnly(true);
   
   
                            // Alter connection and dispatch
                            LayerHelper.resetDispatcher(resp, NetworkManager.getInstance());
                            resp.popDispatcher().dispatch(resp); //will be resolved by via
View Full Code Here

            LayerHelper.next(resp, this, _nextLayer);
        }
    }
   
    private void pushVia(SipServletRequestImpl request)  {
        Header viaHeader = request.getRawHeader(Header.VIA);
       
        ViaImpl topVia = null;
        String branchId;
        if (viaHeader == null) {
           
        } else {
            topVia = new ViaImpl(viaHeader.getValue());
            branchId = createBranchId(request, topVia);
            ViaImpl via = new ViaImpl("SIP", SipTransports.TCP_PROT.name(), getContainerAddress().toString());
            via.setParameter(OUTBOUND_PARAM, "");
           
            via.setParameter(ViaImpl.PARAM_BRANCH, branchId);
            viaHeader.setValue(via.toString(), true);
        }
    }
View Full Code Here

TOP

Related Classes of com.ericsson.ssa.sip.Header

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.