Package javax.sip.message

Examples of javax.sip.message.Response

  • 2xx: Success -- the action was successfully received, understood, and accepted.
  • 3xx: Redirection -- further action needs to be taken in order to complete the request; 3xx responses give information about the user's new location, or about alternative services that might be able to satisfy the call.
  • 4xx: Client Error -- the request contains bad syntax or cannot be fulfilled at this server; 4xx responses are definite failure responses from a particular server. The client SHOULD NOT retry the same request without modification. However, the same request to a different server might be successful.
  • 5xx: Server Error -- the server failed to fulfill an apparently valid request; 5xx responses are failure responses given when a server itself has erred.
  • 6xx: Global Failure -- the request cannot be fulfilled at any server; 6xx responses indicate that a server has definitive information about a particular user, not just the particular instance indicated in the Request-URI. SIP status codes are extensible. The response codes are consistent with, and extend, HTTP/1.1 response codes. Not all HTTP/1.1 response codes are appropriate, and only those that are appropriate are given here. Other HTTP/1.1 response codes SHOULD NOT be used. Also, SIP defines a new class, 6xx.

    SIP applications are not required to understand the meaning of all registered response codes, though such understanding is obviously desirable. However, applications must understand the class of any status code, as indicated by the first digit and outlined above. Applications treat any unrecognized status code as being equivalent to the x00 status code of that class, with the exception that an unrecognized status code must not be cached. For example, if a client receives an unrecognized status code of 431, it can safely assume that there was something wrong with its request and treat the Response as if it had received a BAD_REQUEST(400) status code. In such cases, user agents should present to the user the message body returned with the Response, since that message body is likely to include human-readable information which will explain the unusual status.

    This specification supports the response codes defined in RFC3261 and also the response code extensions for the event notification framework and PUBLISH, documented in RFC3265 and RFC3909, these are highlighted in italic. Class status codes (x00, i.e. 100) are are highlighted in bold.

    Class Code
    PROVISIONAL (1xx)
  • TRYING - 100
  • RINGING - 180
  • CALL_IS_BEING_FORWARDED - 181
  • QUEUED - 182
  • SESSION_PROGRESS - 183
  • SUCCESS (2xx)
  • OK - 200
  • ACCEPTED - 202 (Extension RFC3265)
  • REDIRECTION (3xx)
  • MULTIPLE_CHOICES - 300
  • MOVED_PERMANENTLY - 301
  • MOVED_TEMPORARILY - 302
  • USE_PROXY - 305
  • ALTERNATIVE_SERVICE - 380
  • CLIENT_ERROR (4xx)
  • BAD_REQUEST - 400
  • UNAUTHORIZED - 401
  • PAYMENT_REQUIRED - 402
  • FORBIDDEN - 403
  • NOT_FOUND - 404
  • METHOD_NOT_ALLOWED - 405
  • NOT_ACCEPTABLE - 406
  • PROXY_AUTHENTICATION_REQUIRED - 407
  • REQUEST_TIMEOUT - 408
  • GONE - 410
  • CONDITIONAL_REQUEST_FAILED - 412 (Extension RFC3909)
  • REQUEST_ENTITY_TOO_LARGE - 413
  • REQUEST_URI_TOO_LONG - 414
  • UNSUPPORTED_MEDIA_TYPE - 415
  • UNSUPPORTED_URI_SCHEME - 416
  • BAD_EXTENSION - 420
  • EXTENSION_REQUIRED - 421
  • INTERVAL_TOO_BRIEF - 423
  • TEMPORARILY_UNAVAILABLE - 480
  • CALL_OR_TRANSACTION_DOES_NOT_EXIST - 481
  • LOOP_DETECTED - 482
  • TOO_MANY_HOPS - 483
  • ADDRESS_INCOMPLETE - 484
  • AMBIGUOUS - 485
  • BUSY_HERE - 486
  • REQUEST_TERMINATED - 487
  • NOT_ACCEPTABLE_HERE - 488
  • BAD EVENT - 489 (Extension RFC3265)
  • REQUEST_PENDING - 491
  • UNDECIPHERABLE - 493
  • SERVER_ERROR (5xx)
  • SERVER_INTERNAL_ERROR - 500
  • NOT_IMPLEMENTED - 501
  • BAD_GATEWAY - 502
  • SERVICE_UNAVAILABLE - 503
  • SERVER_TIMEOUT - 504
  • VERSION_NOT_SUPPORTED - 505
  • MESSAGE_TOO_LARGE - 513
  • GLOBAL_ERROR (6xx)
  • BUSY_EVERYWHERE - 600
  • DECLINE - 603
  • DOES_NOT_EXIST_ANYWHERE - 604
  • SESSION_NOT_ACCEPTABLE - 606
  • @author BEA Systems, NIST @version 1.2

  •             logger.info("Dialog state after NOTIFY: " + dialog.getState());
        }

        public void processResponse(ResponseEvent responseReceivedEvent) {
            logger.info("Got a response");
            Response response = (Response) responseReceivedEvent.getResponse();
            Transaction tid = responseReceivedEvent.getClientTransaction();

            if(tid != null) {
              logger.info("Response received with client transaction id "
                      + tid + ":\n" + response.getStatusCode() +
                      " cseq = " + response.getHeader(CSeqHeader.NAME) +
                      " dialog " + tid.getDialog());
            } else {
              logger.info("Response received with client transaction id "
                      + tid + ":\n" + response.getStatusCode() +
                      " cseq = " + response.getHeader(CSeqHeader.NAME) +
                      " dialog " + responseReceivedEvent.getDialog());
            }

            CSeqHeader cseq = (CSeqHeader) response.getHeader( CSeqHeader.NAME );
            if (cseq.getMethod().equals(Request.INVITE)) {

                try {
                    sendNotify( response.getStatusCode(), response.getReasonPhrase() );
                } catch (Exception e1) {
                    TestHarness.fail("Failed to send notify, because of " + e1.getMessage());
                }

                if (response.getStatusCode() >= 200 && response.getStatusCode() < 300) {
                    try {
                        Request ack = tid.getDialog().createAck( cseq.getSeqNumber() );
                        tid.getDialog().sendAck( ack );

                        // kill it right away
    View Full Code Here


                    try {
                        if (sipStack.isLoggingEnabled(LogLevels.TRACE_DEBUG)) {
                            sipStack.getStackLogger().logDebug(
                                    "Could not find Subscription for Notify Tx.");
                        }
                        Response errorResponse = sipRequest
                                .createResponse(Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST);
                        errorResponse
                                .setReasonPhrase("Subscription does not exist");
                        sipProvider.sendResponse(errorResponse);
                        return;

                    } catch (Exception ex) {
    View Full Code Here

        }
        if(requestEvent.getRequest().getMethod().equals(Request.BYE))
        {
          //System.out.println("Bye bekommen");
          //System.out.println(requestEvent.getDialog());
          Response responseOk;
          try {
            responseOk = messageFactory.createResponse(Response.OK, requestEvent.getRequest());
            ServerTransaction serverTransaction = requestEvent.getServerTransaction();
            serverTransaction.sendResponse(responseOk);
          } catch (ParseException e) {
    View Full Code Here

          try
            ServerTransaction serverTransaction = requestEvent.getServerTransaction();
            if(serverTransaction==null){
              serverTransaction = sipProvider.getNewServerTransaction(requestEvent.getRequest());
            }
            Response responseRing = messageFactory.createResponse(Response.RINGING, requestEvent.getRequest());
            responseRing.addHeader(contactHeader);
            serverTransaction.sendResponse(responseRing);
            //System.out.println("Ringing sent");
            //System.out.println("Ringing sent");
            Response responseOk = messageFactory.createResponse(Response.OK, requestEvent.getRequest());
            responseOk.addHeader(contactHeader);
            serverTransaction.sendResponse(responseOk);
            //System.out.println("OK sent");
            //System.out.println("Ok sent");
          } catch (SipException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (InvalidArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
        if(requestEvent.getRequest().getMethod().equals(Request.ACK))
        {
          //System.out.println("ACK bekommen");
          //System.out.println("ACK bekommen");
          //System.out.println(requestEvent.getDialog());
        }
        if(requestEvent.getRequest().getMethod().equals(Request.BYE))
        {
          //System.out.println("BYE bekommen");
          //System.out.println("Bye bekommen");
          //System.out.println(requestEvent.getDialog());
         
          Response responseOk;
          try {
            responseOk = messageFactory.createResponse(Response.OK, requestEvent.getRequest());
            ServerTransaction serverTransaction = requestEvent.getServerTransaction();
            serverTransaction.sendResponse(responseOk);
           
    View Full Code Here

                    try {
                        if (sipStack.isLoggingEnabled(LogLevels.TRACE_DEBUG)) {
                            sipStack.getStackLogger().logDebug(
                                    "Could not find Subscription for Notify Tx.");
                        }
                        Response errorResponse = sipRequest
                                .createResponse(Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST);
                        errorResponse
                                .setReasonPhrase("Subscription does not exist");
                        sipProvider.sendResponse(errorResponse);
                        return;

                    } catch (Exception ex) {
    View Full Code Here

                    logger.info("shootist:  null TID.");
                    return;
                }
                Dialog dialog = serverTransactionId.getDialog();
                logger.info("Dialog State = " + dialog.getState());
                Response response = protocolObjects.messageFactory.createResponse(200, request);
                serverTransactionId.sendResponse(response);
                logger.info("shootist:  Sending OK.");
                logger.info("Dialog State = " + dialog.getState());

            } catch (Exception ex) {
    View Full Code Here

            }
        }

        public synchronized void processResponse(ResponseEvent responseReceivedEvent) {
            logger.info("Got a response");
            Response response = (Response) responseReceivedEvent.getResponse();
            ClientTransaction tid = responseReceivedEvent.getClientTransaction();
            CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);

            logger.info("Response received : Status Code = " + response.getStatusCode() + " " + cseq);
            logger.info("Response = " + response + " class=" + response.getClass());

            Dialog dialog = responseReceivedEvent.getDialog();
            TestHarness.assertNotNull(dialog);

            if (tid != null)
                logger.info("transaction state is " + tid.getState());
            else
                logger.info("transaction = " + tid);

            logger.info("Dialog = " + dialog);

            logger.info("Dialog state is " + dialog.getState());

            try {
                if (response.getStatusCode() == Response.OK) {
                    if (cseq.getMethod().equals(Request.INVITE)) {
                        TestHarness.assertEquals(DialogState.CONFIRMED, dialog.getState());
                        Request ackRequest = dialog.createAck(cseq.getSeqNumber());

                        TestHarness.assertNotNull(ackRequest.getHeader(MaxForwardsHeader.NAME));

                        if (dialog == this.ackedDialog) {
                            dialog.sendAck(ackRequest);
                            return;
                        }
                        this.forkedDialogs.add(dialog);

                        logger.info("Sending ACK");
                        dialog.sendAck(ackRequest);
                        TestHarness.assertTrue("Dialog state should be CONFIRMED",
                                dialog.getState() == DialogState.CONFIRMED);
                        this.ackedDialog = dialog;

                    } else {
                        logger.info("Response method = " + cseq.getMethod());
                    }
                } else if (response.getStatusCode() == Response.RINGING) {
                    // TestHarness.assertEquals( DialogState.EARLY, dialog.getState() );
                }
            } catch (Throwable ex) {
                ex.printStackTrace();
                // System.exit(0);
    View Full Code Here

            assertTrue("Should see LOOP DETECTED", loopDetectedSeen);
        }

        public synchronized void processResponse(ResponseEvent responseEvent) {
            try {
                Response response = responseEvent.getResponse();
                CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
                logger.info("ClientTxID = " + responseEvent.getClientTransaction() + " client tx id "
                        + ((ViaHeader) response.getHeader(ViaHeader.NAME)).getBranch()
                        + " CSeq header = " + response.getHeader(CSeqHeader.NAME) + " status code = "
                        + response.getStatusCode());

                // JvB: stateful proxy MUST NOT forward 100 Trying
                if (response.getStatusCode() == 100)
                    return;

                if (response.getStatusCode() == Response.LOOP_DETECTED) {
                    this.loopDetectedSeen = true;
                }
                if (cseq.getMethod().equals(Request.INVITE)) {
                    ClientTransaction ct = responseEvent.getClientTransaction();
                    if (ct != null) {
                        ServerTransaction st = (ServerTransaction) ct.getApplicationData();

                        // Strip the topmost via header
                        Response newResponse = (Response) response.clone();
                        newResponse.removeFirst(ViaHeader.NAME);
                        // The server tx goes to the terminated state.

                        st.sendResponse(newResponse);

                    } else {
    View Full Code Here

        SIPDialog dialog = null;
        SIPTransaction sipTransaction = (SIPTransaction) transaction;

        if (transaction instanceof ServerTransaction) {
          SIPServerTransaction st = (SIPServerTransaction) transaction;
          Response response = st.getLastResponse();
          if (response != null) {
            if (response.getStatusCode() != 100)
              throw new SipException(
                  "Cannot set dialog after response has been sent");
          }
          SIPRequest sipRequest = (SIPRequest) transaction.getRequest();
          String dialogId = sipRequest.getDialogId(true);
    View Full Code Here

                        logger.info("Cannot find event header.... dropping request.");
                        return;
                    }

                    // Always create a ServerTransaction, best as early as possible in the code
                    Response response = null;
                    ServerTransaction st = requestEvent.getServerTransaction();
                    if (st == null) {
                        st = sipProvider.getNewServerTransaction(request);
                    }

                    // Check if it is an initial SUBSCRIBE or a refresh / unsubscribe
                    boolean isInitial = requestEvent.getDialog() == null;
                    if (isInitial) {
                        // JvB: need random tags to test forking
                        String toTag = Integer.toHexString((int) (Math.random() * Integer.MAX_VALUE));
                        response = messageFactory.createResponse(202, request);
                        ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);

                        // Sanity check: to header should not ahve a tag. Else the dialog
                        // should have matched
                        if (toHeader.getTag() != null) {
                            System.err
                                    .println("####ERROR: To-tag!=null but no dialog match! My dialog="
                                            + dialog.getState());
                        }
                        toHeader.setTag(toTag); // Application is supposed to set.

                        this.dialog = st.getDialog();
                        // subscribe dialogs do not terminate on bye.
                        this.dialog.terminateOnBye(false);
                        if (dialog != null) {
                            logger.info("Dialog " + dialog);
                            logger.info("Dialog state " + dialog.getState());
                        }
                    } else {
                        response = messageFactory.createResponse(200, request);
                    }

                    // Both 2xx response to SUBSCRIBE and NOTIFY need a Contact
                    Address address = addressFactory.createAddress("Notifier <sip:127.0.0.1>");
                    ((SipURI) address.getURI()).setPort(udpProvider.getListeningPoint("udp")
                            .getPort());
                    ContactHeader contactHeader = headerFactory.createContactHeader(address);
                    response.addHeader(contactHeader);

                    // Expires header is mandatory in 2xx responses to SUBSCRIBE
                    ExpiresHeader expires = (ExpiresHeader) request.getHeader(ExpiresHeader.NAME);
                    if (expires == null) {
                        expires = headerFactory.createExpiresHeader(30); // rather short
                    }
                    response.addHeader(expires);

                    /*
                     * NOTIFY requests MUST contain a "Subscription-State" header with a value of
                     * "active", "pending", or "terminated". The "active" value indicates that the
                     * subscription has been accepted and has been authorized (in most cases; see
                     * section 5.2.). The "pending" value indicates that the subscription has been
                     * received, but that policy information is insufficient to accept or deny the
                     * subscription at this time. The "terminated" value indicates that the
                     * subscription is not active.
                     */

                    Address fromAddress = ((ToHeader) response.getHeader(ToHeader.NAME)).getAddress();
                    String fromTag = ((ToHeader) response.getHeader(ToHeader.NAME)).getTag();
                    FromHeader fromHeader = headerFactory.createFromHeader(fromAddress, fromTag);
                   
                    Address toAddress = ((FromHeader) response.getHeader(FromHeader.NAME)).getAddress();
                    String toTag = ((FromHeader) response.getHeader(FromHeader.NAME)).getTag();
                    ToHeader toHeader = headerFactory.createToHeader(toAddress, toTag);
                   
                   
                   
                    CallIdHeader callId = (CallIdHeader) response.getHeader(CallIdHeader.NAME);

                    ContactHeader requestContact = (ContactHeader) request
                            .getHeader(ContactHeader.NAME);
                    SipURI notifyRuri = (SipURI) requestContact.getAddress().getURI();
                    CSeqHeader cSeq = headerFactory.createCSeqHeader(1L, Request.NOTIFY);
    View Full Code Here

    TOP

    Related Classes of javax.sip.message.Response

    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.