Package com.ericsson.ssa.sip

Examples of com.ericsson.ssa.sip.SipServletResponseImpl


                ((NetworkManager) _networkHandler).incrReqInMethodCounter(req.getMethod());
            }


        } else {
            SipServletResponseImpl resp = (SipServletResponseImpl) message;
            Header cseq = resp.getRawHeader(Header.CSEQ);
            /*
             * this should never be null
             */
            if ((cseq == null) || (cseq.getValue() == null)) {
                logger.log(Level.SEVERE, "sip.network.grizzlu.request.cseq.null");
                if (SipMonitoring.isEnabled(SipMonitoring.NETWORK_MANAGER)) {
                    if (((TCPSelectorHandler) handler).getInet() != null){
                    ((NetworkManager) _networkHandler).incrEasInvalidSipMessages(
                            ((TCPSelectorHandler) handler).getInet().getHostAddress(),
                            ((TCPSelectorHandler) handler).getPort());
                    } else {
                        ((NetworkManager) _networkHandler).incrEasReceivedSipRequests(
                            message.getLocal().getAddress().getHostAddress(), -1);
                    }
                }
                return;
            }

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

            if (logger.isLoggable(Level.FINEST)) {
                logger.log(Level.FINEST, "sip.network.grizzly.in.response",
                        new Object[]{resp.getStatus(), resp.getMethod(),
                    resp.toString()
                });
            }

            //_networkHandler.next(resp);
            LayerHelper.next(resp, _networkHandler, _networkHandler);


            if (SipMonitoring.isEnabled(SipMonitoring.NETWORK_MANAGER)) {
                if (((TCPSelectorHandler)handler).getInet() != null){
                ((NetworkManager) _networkHandler).incrEasReceivedSipResponses(((TCPSelectorHandler)handler).getInet().getHostAddress(),
                        ((TCPSelectorHandler)handler).getPort());
                } else {
                    ((NetworkManager) _networkHandler).incrEasReceivedSipResponses(
                    message.getLocal().getAddress().getHostAddress(), -1);
                }
                ((NetworkManager) _networkHandler).incrRespInStatCodeCounter(resp.getStatus());
            }

        }
    }
View Full Code Here


                            "sip.network.grizzly.missing.content.type");
                }

                SipServletRequestImpl req = (SipServletRequestImpl) message;
                String phraze = "Missing Content-Type header field";
                SipServletResponseImpl resp = req.createTerminatingResponse(400,
                        phraze);

                sendErrorResponse(resp);
            } catch (Exception ignore) {
                if (logger.isLoggable(Level.FINEST)) {
View Full Code Here

             * Add some monitoring info here.
             */
            SipServletRequestImpl req =
                    (SipServletRequestImpl) parsedmessage;

            SipServletResponseImpl resp = req.createTerminatingResponse(500);
            sendErrorResponse(resp);
        }
    }
View Full Code Here

      return;
    }

    if (req.isInitial()) {
      if (isInitialOverload()) {
        SipServletResponseImpl resp = req
            .createTerminatingResponse(503);

        setRetryAfter(resp, TrafficType.SIP_INITIAL);

        if (LOGGER.isLoggable(Level.FINE)) {
          LOGGER
              .log(Level.FINE,
                  "Method next (req): rejecting initial request with 503");
        }
        incrEasOverloadRejectedSipRequests(TrafficType.SIP_INITIAL, req
            .getMethod());

        if (resp != null) {
          resp.popDispatcher().dispatch(resp);
        }

        return;
      }
    } else {
      // lets handle ACK as an initial request, it's a risk otherwise
      // that INVITE is stopped but ACK is sent to next layer...
      if (req.getMethod().equals("ACK")) {
        if (isInitialOverload()) {
          // drop ACK
          if (LOGGER.isLoggable(Level.FINE)) {
            LOGGER.log(Level.FINE,
                "Method next (req): dropping ACK ");
          }
          incrEasOverloadRejectedSipRequests(
              TrafficType.SIP_SUBSEQUENT, req.getMethod());

          return;
        }
      } else if (isSubsequentOverload()) {
        SipServletResponseImpl resp = req
            .createTerminatingResponse(503);
        setRetryAfter(resp, TrafficType.SIP_SUBSEQUENT);

        if (LOGGER.isLoggable(Level.FINE)) {
          LOGGER
              .log(Level.FINE,
                  "Method next (req): rejecting subsequent request with 503");
        }
        incrEasOverloadRejectedSipRequests(TrafficType.SIP_SUBSEQUENT,
            req.getMethod());

        if (resp != null) {
          resp.popDispatcher().dispatch(resp);
        }

        return;
      }
    }
View Full Code Here

    public @Override
    void handleError(SipServletRequestImpl req, int code, String errorStr) {
        if (getErrorResponseEnabled()) {
            req.pushTransactionDispatcher(getMyDispatcher());

            SipServletResponseImpl resp = req.createResponseImpl(code, errorStr);

            // Add to tag if there is a to header and there is not yet a to tag
            if ((resp.getHeader(Header.TO) != null) && (resp.getToImpl() != null) &&
                    (resp.getToImpl().getParameter(AddressImpl.TAG_PARAM) == null)) {
                resp.createTag(Header.TO);
            }

            try {
                TargetResolver tr = TargetResolver.getInstance();
                TargetTuple tt = tr.resolveResponse(resp);
                resp.setRemote(tt);
            } catch (Exception e) {
                e.printStackTrace();
                // Fallback if resolve failed, possibly because of Via missing or not parsable.
                resp.setRemote(req.getRemote());
            }

            resp.popDispatcher().dispatch(resp);
        }
    }
View Full Code Here

                if (cancelPendingTrigger.getCancelVia() != null) {
                    // create new cancel from the Invite
                    SipServletRequestImpl newCancel = getRequest().createCancelImpl();

                    // lets answer incoming cancel with 200 OK
                    SipServletResponseImpl resp = cancel.createTerminatingResponse(200);
                    resp.setRemote(cancel.getRemote());
                    resp.popDispatcher().dispatch(resp);

                    // forward the Cancel
                    // assign via from saved top via of provisional response
                    // (i.e. the cancelTrigger)
                    // resolve it and send it out on the network
View Full Code Here

    void handleCancel(ServerTransaction st) {
        SipServletRequestImpl cancel = st.getRequest();

        if (_state != PROCEEDING) {
            SipServletResponseImpl resp = cancel.createTerminatingResponse(481);
            resp.setRemote(cancel.getRemote());
            resp.popDispatcher().dispatch(resp);

            return;
        }
       
        // is this a cancel on a re-invite?
        if (getRequest().isInitial() == false && getRequest().getDialog() != null) {
            // In case of cancel on re-invite we might immediately act on the
            // cancel without waiting for the provisional response
            DialogFragment dialog = getRequest().getDialog();
            Dispatcher firstPathNode = dialog.getFirst();
            if (firstPathNode == null) {
                throw new IllegalStateException("Dialog reference for cancel on re-invite does not contain a pathnode");
            }

            dispatchInUOW(firstPathNode, cancel, dialog);
            return;
        }

        SipServletResponseImpl cancelPendingTrigger = getPendingCancelTrigger();

        if (cancelPendingTrigger != null) {
            handleCancel(st.getRequest(), cancelPendingTrigger);
        } else {
            // save cancel request to enable cancel forwarding
View Full Code Here

    }

    public void timeout(GeneralTimer timer) {
        TransactionTimer tt = (TransactionTimer) timer.getInfo();
        Dispatcher d = null;
        SipServletResponseImpl resp = null;
        SipServletRequestImpl req = null;

        switch (tt) {
        case TimerA:

            synchronized (this) {
                if (_state == CALLING) {
                    // Have to dirty cast in order not to reimplement hole
                    // structure
                    long delay = ((GeneralTimerBase) timer).getDelay();
                    // calculate next timer*2
                    delay *= 2;
                    // schedule new timer
                    _timerA = _timerService.createTimer(this, delay, TimerA);
                    // resend the request
                    getRequest().restoreRetransmissionApplicationStack();
                    req = (SipServletRequestImpl) getRequest().clone();
                }
            }

            if (req != null) {
                // dispatch after synch block...
                d = req.popDispatcher();

                if (d != null) {
                    d.dispatch(req);
                }

                if (SipMonitoring.isEnabled(SipMonitoring.TRANSACTION_MANAGER)) {
                    updateLastAccessTimestamp();
                }
            }

            break;

        case TimerB:

            if (_log.isLoggable(Level.FINE)) {
                _log.log(Level.FINE, "Timer B fired - terminating()");
            }

            synchronized (this) {
                resp = getRequest().createTerminatingResponse(408);
                popVia(resp);
                resp.setInternalTransportFailure(true);
                terminate(false);
            }
           
            // NEW: act as if received from the network (but skip the transaction manager layer)
            // better to start a new thread???
            final SipServletResponseImpl respToSend = resp;
            SipContainerThreadPool.getInstance().execute(new Callable() {
                public Object call() throws Exception {
                    try {
                      // UOW will be set by the Replication manager
                      TransactionManager.getInstance().invokeNextLayer(respToSend);
View Full Code Here

            return null;
        }
    }

    private SipServletResponseImpl sendRequestTimeout() {
        SipServletResponseImpl resp = getRequest().createTerminatingResponse(408);

        popVia(resp);

        // set session...
        SipServletRequestImpl req = getRequest().getTransactionRequest();

        //    TR HH52078
        if ((req != null) && (resp != null)) {
            resp.setRequest(req);
            resp.setSession(req.getSessionImpl());
        }

        return resp;
    }
View Full Code Here

    private void invokeCreatedOrFetchedServerTransaction(
        SipServletRequestImpl req, String branchId) {
        boolean isTransactionCreated = false;
        ServerTransaction st = null;
        ServerTransaction stCancel = null;
        SipServletResponseImpl resp = null;      
        String branchIdCancel=null;      
       
        Object newMutex = new Object();
        Object mutex=null;
       
        if (req.getMethod().equals("CANCEL")) {
          // to distinguish cancel from original transaction add method to branch id...
          branchIdCancel=branchId + req.getMethod();
      mutex = stLockMap.putIfAbsent(branchIdCancel, newMutex);
    } else {
      mutex = stLockMap.putIfAbsent(branchId, newMutex);
    }

        if (mutex == null) {
            mutex = newMutex;
        }

        synchronized (mutex) {
            st = stMap.get(branchId);

            if (req.getMethod().equals("CANCEL")) {
                stCancel = stMap.get(branchIdCancel);
                if (st != null) {
                    if (stCancel == null || !NonInviteServerTransaction.class.isInstance(stCancel)) {
                         stCancel = new NonInviteServerTransaction(branchIdCancel, req);
                        putServerTransaction(stCancel);
                        req.pushTransactionDispatcher(stCancel);
                        req.pushApplicationDispatcher(this);
                        isTransactionCreated = true;
                    }
                } else if (stCancel == null) {
                     // orginal transaction to cancel is gone...
                     resp = req.createTerminatingResponse(481);
                     resp.setRemote(req.getRemote());
                }
            } else if (st == null) {
                st = req.getMethod().equals("INVITE")
                    ? new InviteServerTransaction(branchId, req)
                    : new NonInviteServerTransaction(branchId, req);
                req.pushTransactionDispatcher(st); // Push the new ST
                req.pushApplicationDispatcher(this);
                putServerTransaction(st);
                isTransactionCreated = true;
            }
        }

        // invoke outside synchronization block...
        if (resp != null) {
            // orginal transaction to cancel is gone, lets reply...
            resp.popDispatcher().dispatch(resp);
        } else if (stCancel != null) {
            // lets inform the original transaction
            // that a cancel request is pending...
            if (isTransactionCreated) {
                st.handleCancel(stCancel);
View Full Code Here

TOP

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

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.