Package gov.nist.javax.sip.message

Examples of gov.nist.javax.sip.message.SIPRequest


     * JvB: copied from UDPMessageChannel, TODO restructure
     */
    private void processMessage( SIPMessage sipMessage, long rxTime ) {
      SIPTransactionStack sipStack = processor.getSIPStack();
        if (sipMessage instanceof SIPRequest) {
            SIPRequest sipRequest = (SIPRequest) sipMessage;

            // This is a request - process it.
            // So far so good -- we will commit this message if
            // all processing is OK.
            if (sipStack.getStackLogger().isLoggingEnabled(ServerLogger.TRACE_MESSAGES)) {
                sipStack.getServerLogger().logMessage(sipMessage, this
                        .getPeerHostPort().toString(), this.getHost() + ":"
                        + this.getPort(), false, rxTime);
            }
            ServerRequestInterface sipServerRequest = sipStack
                    .newSIPServerRequest(sipRequest, this);
            // Drop it if there is no request returned
            if (sipServerRequest == null) {
                if (sipStack.isLoggingEnabled()) {
                    sipStack.getStackLogger()
                            .logWarning("Null request interface returned -- dropping request");
                }


                return;
            }
            if (sipStack.isLoggingEnabled(LogWriter.TRACE_DEBUG)) {
                sipStack.getStackLogger().logDebug("About to process "
                        + sipRequest.getFirstLine() + "/" + sipServerRequest);
            }
            try {
                sipServerRequest.processRequest(sipRequest, this);
            } finally {
                if (sipServerRequest instanceof SIPTransaction) {
                    SIPServerTransaction sipServerTx = (SIPServerTransaction) sipServerRequest;
                    if (!sipServerTx.passToListener()) {
                        ((SIPTransaction) sipServerRequest).releaseSem();
                    }
                }
            }
            if (sipStack.isLoggingEnabled(LogWriter.TRACE_DEBUG))
                sipStack.getStackLogger().logDebug("Done processing "
                        + sipRequest.getFirstLine() + "/" + sipServerRequest);

            // So far so good -- we will commit this message if
            // all processing is OK.

        } else {
View Full Code Here


   
    HostPort targetHostPort  = new HostPort();
    targetHostPort.setHost(new Host( ipAddress));
    targetHostPort.setPort(port);
    MessageChannel messageChannel = this.messageProcessor.createMessageChannel(targetHostPort);
    SIPRequest siprequest = new SIPRequest();
    siprequest.setNullRequest();
    messageChannel.sendMessage(siprequest);
   
  }
View Full Code Here

        try {
            if (sipStack.isLoggingEnabled()) {
                sipStack.getLogWriter().logDebug("handleChallenge: " + challenge);
            }

            SIPRequest challengedRequest = ((SIPRequest) challengedTransaction.getRequest());

            String callId = challengedRequest.getCallId().getCallId();

            Request reoriginatedRequest = (Request) challengedRequest.clone();

            // remove the branch id so that we could use the request in a new
            // transaction
            removeBranchID(reoriginatedRequest);

            if (challenge == null || reoriginatedRequest == null) {
                throw new NullPointerException("A null argument was passed to handle challenge.");
            }

            ListIterator authHeaders = null;

            if (challenge.getStatusCode() == Response.UNAUTHORIZED) {
                authHeaders = challenge.getHeaders(WWWAuthenticateHeader.NAME);
            } else if (challenge.getStatusCode() == Response.PROXY_AUTHENTICATION_REQUIRED) {
                authHeaders = challenge.getHeaders(ProxyAuthenticateHeader.NAME);
            } else {
                throw new IllegalArgumentException("Unexpected status code ");
            }

            if (authHeaders == null) {
                throw new IllegalArgumentException(
                        "Could not find WWWAuthenticate or ProxyAuthenticate headers");
            }

            // Remove all authorization headers from the request (we'll re-add them
            // from cache)
            reoriginatedRequest.removeHeader(AuthorizationHeader.NAME);
            reoriginatedRequest.removeHeader(ProxyAuthorizationHeader.NAME);

            // rfc 3261 says that the cseq header should be augmented for the new
            // request. do it here so that the new dialog (created together with
            // the new client transaction) takes it into account.
            // Bug report - Fredrik Wickstrom
            CSeqHeader cSeq = (CSeqHeader) reoriginatedRequest.getHeader((CSeqHeader.NAME));
            try {
                cSeq.setSeqNumber(cSeq.getSeqNumber() + 1l);
            } catch (InvalidArgumentException ex) {
                throw new SipException("Invalid CSeq -- could not increment : "
                        + cSeq.getSeqNumber());
            }
           
       
            /* Resolve this to the next hop based on the previous lookup. If we are not using
             * lose routing (RFC2543) then just attach hop as a maddr param.
             */
            if ( challengedRequest.getRouteHeaders() == null ) {
                Hop hop   = ((SIPClientTransaction) challengedTransaction).getNextHop();
                SipURI sipUri = (SipURI) reoriginatedRequest.getRequestURI();
                sipUri.setMAddrParam(hop.getHost());
                if ( hop.getPort() != -1 ) sipUri.setPort(hop.getPort());
            }
View Full Code Here

     * (non-Javadoc)
     *
     * @see gov.nist.javax.sip.clientauthutils.AuthenticationHelper#attachAuthenticationHeaders(javax.sip.message.Request)
     */
    public void setAuthenticationHeaders(Request request) {
        SIPRequest sipRequest = (SIPRequest) request;

        String callId = sipRequest.getCallId().getCallId();

        request.removeHeader(AuthorizationHeader.NAME);
        Collection<AuthorizationHeader> authHeaders = this.cachedCredentials
                .getCachedAuthorizationHeaders(callId);
        if (authHeaders == null) {
View Full Code Here

    if (request == null)
      throw new NullPointerException("null request");
    if (!sipStack.isAlive())
      throw new TransactionUnavailableException("Stack is stopped");

    SIPRequest sipRequest = (SIPRequest) request;
    if (sipRequest.getTransaction() != null)
      throw new TransactionUnavailableException(
          "Transaction already assigned to request");
    if ( sipRequest.getMethod().equals(Request.ACK)) {
      throw new TransactionUnavailableException ("Cannot create client transaction for  " + Request.ACK);
    }
    // Be kind and assign a via header for this provider if the user is
    // sloppy
    if (sipRequest.getTopmostVia() == null) {
      ListeningPointImpl lp = (ListeningPointImpl) this
          .getListeningPoint("udp");
      Via via = lp.getViaHeader();
      request.setHeader(via);
    }
    // Give the request a quick check to see if all headers are assigned.
    try {
      sipRequest.checkHeaders();
    } catch (ParseException ex) {
      throw new TransactionUnavailableException(ex.getMessage(), ex);
    }

    /*
     * User decided to give us his own via header branch. Lets see if it
     * results in a clash. If so reject the request.
     */
    if (sipRequest.getTopmostVia().getBranch() != null
        && sipRequest.getTopmostVia().getBranch().startsWith(
            SIPConstants.BRANCH_MAGIC_COOKIE)
        && sipStack.findTransaction((SIPRequest) request, false) != null) {
      throw new TransactionUnavailableException(
          "Transaction already exists!");
    }

   
   

    if (request.getMethod().equalsIgnoreCase(Request.CANCEL)) {
      SIPClientTransaction ct = (SIPClientTransaction) sipStack
          .findCancelTransaction((SIPRequest) request, false);
      if (ct != null) {
        ClientTransaction retval = sipStack.createClientTransaction(
            (SIPRequest) request, ct.getMessageChannel());

        ((SIPTransaction) retval).addEventListener(this);
        sipStack.addTransaction((SIPClientTransaction) retval);
        if (ct.getDialog() != null) {
          ((SIPClientTransaction) retval).setDialog((SIPDialog) ct
              .getDialog(), sipRequest.getDialogId(false));

        }
        return retval;
      }

    }
    if (sipStack.isLoggingEnabled())
      sipStack.getLogWriter().logDebug(
          "could not find existing transaction for "
              + ((SIPRequest) request).getFirstLine()
              + " creating a new one ");

    // Could not find a dialog or the route is not set in dialog.

    Hop hop = null;
    try {
      hop = sipStack.getNextHop((SIPRequest) request);
      if (hop == null)
        throw new TransactionUnavailableException(
            "Cannot resolve next hop -- transaction unavailable");
    } catch (SipException ex) {
      throw new TransactionUnavailableException(
          "Cannot resolve next hop -- transaction unavailable", ex);
    }
    String transport = hop.getTransport();
        ListeningPointImpl listeningPoint = (ListeningPointImpl) this
                .getListeningPoint(transport);
       
    String dialogId = sipRequest.getDialogId(false);
    SIPDialog dialog = sipStack.getDialog(dialogId);
    if (dialog != null && dialog.getState() == DialogState.TERMINATED) {

      // throw new TransactionUnavailableException
      // ("Found a terminated dialog -- possible re-use of old tag
      // parameters");
      sipStack.removeDialog(dialog);

    }

    // An out of dialog route was found. Assign this to the
    // client transaction.

    try {
      // Set the brannch id before you ask for a tx.
      // If the user has set his own branch Id and the
      // branch id starts with a valid prefix, then take it.
      // otherwise, generate one.
      String branchId = null;
      if (sipRequest.getTopmostVia().getBranch() == null
          || !sipRequest.getTopmostVia().getBranch().startsWith(
              SIPConstants.BRANCH_MAGIC_COOKIE)) {
        branchId = Utils.getInstance().generateBranchId();

        sipRequest.getTopmostVia().setBranch(branchId);
      }
      Via topmostVia = sipRequest.getTopmostVia();
          topmostVia.setTransport(transport);
          topmostVia.setPort(listeningPoint.getPort());
      branchId = sipRequest.getTopmostVia().getBranch();
     
      SIPClientTransaction ct = (SIPClientTransaction) sipStack
          .createMessageChannel(sipRequest, listeningPoint
              .getMessageProcessor(), hop);
      if (ct == null)
        throw new TransactionUnavailableException("Cound not create tx");
      ct.setNextHop(hop);
      ct.setOriginalRequest(sipRequest);
      ct.setBranch(branchId);
      // if the stack supports dialogs then
      if (sipStack.isDialogCreated(request.getMethod())) {
        // create a new dialog to contain this transaction
        // provided this is necessary.
        // This could be a re-invite
        // in which case the dialog is re-used.
        // (but noticed by Brad Templeton)
        if (dialog != null)
          ct.setDialog(dialog, sipRequest.getDialogId(false));
        else if (this.isAutomaticDialogSupportEnabled()) {
          SIPDialog sipDialog = sipStack.createDialog(ct);
          ct.setDialog(sipDialog, sipRequest.getDialogId(false));
        }
      } else {
        if (dialog != null) {
          ct.setDialog(dialog, sipRequest.getDialogId(false));
        }

      }

      // The provider is the event listener for all transactions.
View Full Code Here

      TransactionUnavailableException {

    if (!sipStack.isAlive())
      throw new TransactionUnavailableException("Stack is stopped");
    SIPServerTransaction transaction = null;
    SIPRequest sipRequest = (SIPRequest) request;
    try {
      sipRequest.checkHeaders();
    } catch (ParseException ex) {
      throw new TransactionUnavailableException(ex.getMessage(), ex);
    }

    if ( request.getMethod().equals(Request.ACK)) {
      if ( sipStack.isLoggingEnabled())
        sipStack.getLogWriter().logError("Creating server transaction for ACK -- makes no sense!");
      throw new TransactionUnavailableException("Cannot create Server transaction for ACK ");
    }
    /*
     * Got a notify.
     */
    if (sipRequest.getMethod().equals(Request.NOTIFY)
        && sipRequest.getFromTag() != null
        && sipRequest.getToTag() == null) {

      SIPClientTransaction ct = sipStack.findSubscribeTransaction(
          sipRequest, (ListeningPointImpl) this.getListeningPoint());
      /* Issue 104 */
      if (ct == null && ! sipStack.deliverUnsolicitedNotify) {
        throw new TransactionUnavailableException(
            "Cannot find matching Subscription (and gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY not set)");
      }
    }
    if (sipStack.isDialogCreated(sipRequest.getMethod())) {
      if (sipStack.findTransaction((SIPRequest) request, true) != null)
        throw new TransactionAlreadyExistsException(
            "server transaction already exists!");

      transaction = (SIPServerTransaction) ((SIPRequest) request)
          .getTransaction();
      if (transaction == null)
        throw new TransactionUnavailableException(
            "Transaction not available");
      if (transaction.getOriginalRequest() == null)
        transaction.setOriginalRequest(sipRequest);
      try {
        sipStack.addTransaction(transaction);
      } catch (IOException ex) {
        throw new TransactionUnavailableException(
            "Error sending provisional response");
      }
      // So I can handle timeouts.
      transaction.addEventListener(this);
      if (isAutomaticDialogSupportEnabled()) {
        // If automatic dialog support is enabled then
        // this tx gets his own dialog.
        String dialogId = sipRequest.getDialogId(true);
        SIPDialog dialog = sipStack.getDialog(dialogId);
        if (dialog == null) {
          dialog = sipStack.createDialog(transaction);

        }
        transaction.setDialog(dialog, sipRequest.getDialogId(true));
        if (sipStack.isDialogCreated(sipRequest.getMethod())) {
          sipStack.putInMergeTable(transaction, sipRequest);
        }
        dialog.addRoute(sipRequest);
        if (dialog.getRemoteTag() != null
            && dialog.getLocalTag() != null) {
          this.sipStack.putDialog(dialog);
        }
      }

    } else {
      if (isAutomaticDialogSupportEnabled()) {
        // Under autmatic dialog support, dialog is tied into a
        // transaction.
        // You cannot create a server tx except for dialog creating
        // transactions.
        // After that, all subsequent transactions are created for you
        // by the stack.
        transaction = (SIPServerTransaction) sipStack.findTransaction(
            (SIPRequest) request, true);
        if (transaction != null)
          throw new TransactionAlreadyExistsException(
              "Transaction exists! ");
        transaction = (SIPServerTransaction) ((SIPRequest) request)
            .getTransaction();
        if (transaction == null)
          throw new TransactionUnavailableException(
              "Transaction not available!");
        if (transaction.getOriginalRequest() == null)
          transaction.setOriginalRequest(sipRequest);
        // Map the transaction.
        try {
          sipStack.addTransaction(transaction);
        } catch (IOException ex) {
          throw new TransactionUnavailableException(
              "Could not send back provisional response!");
        }

        // If there is a dialog already assigned then just update the
        // dialog state.
        String dialogId = sipRequest.getDialogId(true);
        SIPDialog dialog = sipStack.getDialog(dialogId);
        if (dialog != null) {
          dialog.addTransaction(transaction);
          dialog.addRoute(sipRequest);
          transaction.setDialog(dialog, sipRequest.getDialogId(true));
        }

      } else {
        transaction = (SIPServerTransaction) sipStack.findTransaction(
            (SIPRequest) request, true);
        if (transaction != null)
          throw new TransactionAlreadyExistsException(
              "Transaction exists! ");
        transaction = (SIPServerTransaction) ((SIPRequest) request)
            .getTransaction();
        if (transaction != null) {
          if (transaction.getOriginalRequest() == null)
            transaction.setOriginalRequest(sipRequest);
          // Map the transaction.
          sipStack.mapTransaction(transaction);

          // If there is a dialog already assigned then just
          // assign the dialog to the transaction.
          String dialogId = sipRequest.getDialogId(true);
          SIPDialog dialog = sipStack.getDialog(dialogId);
          if (dialog != null) {
            dialog.addTransaction(transaction);
            dialog.addRoute(sipRequest);
            transaction.setDialog(dialog, sipRequest
                .getDialogId(true));
          }

          return transaction;
        } else {
          // tx does not exist so create the tx.

          MessageChannel mc = (MessageChannel) sipRequest
              .getMessageChannel();
          transaction = sipStack.createServerTransaction(mc);
          if (transaction == null)
            throw new TransactionUnavailableException(
                "Transaction unavailable -- too many servrer transactions");

          transaction.setOriginalRequest(sipRequest);
          sipStack.mapTransaction(transaction);

          // If there is a dialog already assigned then just
          // assign the dialog to the transaction.
          String dialogId = sipRequest.getDialogId(true);
          SIPDialog dialog = sipStack.getDialog(dialogId);
          if (dialog != null) {
            dialog.addTransaction(transaction);
            dialog.addRoute(sipRequest);
            transaction.setDialog(dialog, sipRequest
                .getDialogId(true));
          }

          return transaction;
        }
View Full Code Here

      }
    }
    Hop hop = sipStack.getRouter((SIPRequest) request).getNextHop(request);
    if (hop == null)
      throw new SipException("could not determine next hop!");
    SIPRequest sipRequest = (SIPRequest) request;
    // Check if we have a valid via.
    // Null request is used to send default proxy keepalive messages.
    if ((!sipRequest.isNullRequest()) && sipRequest.getTopmostVia() == null)
      throw new SipException("Invalid SipRequest -- no via header!");

    try {
      /*
       * JvB: Via branch should already be OK, dont touch it here? Some
       * apps forward statelessly, and then it's not set. So set only when
       * not set already, dont overwrite CANCEL branch here..
       */
      if (!sipRequest.isNullRequest()) {
        Via via = sipRequest.getTopmostVia();
        String branch = via.getBranch();
        if (branch == null || branch.length() == 0) {
          via.setBranch(sipRequest.getTransactionId());
        }
      }
      MessageChannel messageChannel = null;
      if (this.listeningPoints.containsKey(hop.getTransport()
          .toUpperCase()))
View Full Code Here

      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);
      dialog = sipStack.getDialog(dialogId);
      if (dialog == null) {
        dialog = sipStack.createDialog((SIPTransaction) transaction);
        // create and register the dialog and add the inital route set.
        dialog.addTransaction(sipTransaction);
        dialog.addRoute(sipRequest);
        sipTransaction.setDialog(dialog, null);

      } else {
        sipTransaction.setDialog(dialog, sipRequest.getDialogId(true));
      }
      if (sipStack.isDialogCreated(sipRequest.getMethod())) {
        sipStack.putInMergeTable(st, sipRequest);
      }
    } else {

      SIPClientTransaction sipClientTx = (SIPClientTransaction) transaction;

      SIPResponse response = sipClientTx.getLastResponse();

      if (response == null) {
        // A response has not yet been received, then set this up as the
        // default dialog.
        SIPRequest request = (SIPRequest) sipClientTx.getRequest();

        String dialogId = request.getDialogId(false);
        dialog = sipStack.getDialog(dialogId);
        if (dialog != null) {
          throw new SipException("Dialog already exists!");
        } else {
          dialog = sipStack.createDialog(sipTransaction);
View Full Code Here

  }

  private SIPMessage processFirstLine(String firstLine) throws ParseException {
    SIPMessage message;
    if (!firstLine.startsWith(SIPConstants.SIP_VERSION_STRING)) {
      message = new SIPRequest();
      try {
        RequestLine requestLine = new RequestLineParser(firstLine + "\n")
            .parse();
        ((SIPRequest) message).setRequestLine(requestLine);
      } catch (ParseException ex) {
View Full Code Here

    /**
     * Hash table for quick lookup of transactions. Here we wait for room if needed.
     */
    private void addTransactionHash(SIPTransaction sipTransaction) {
        SIPRequest sipRequest = sipTransaction.getOriginalRequest();
        if (sipTransaction instanceof SIPClientTransaction) {
            if (!this.unlimitedClientTransactionTableSize) {
                if (this.activeClientTransactionCount.get() > clientTransactionTableHiwaterMark) {
                    try {
                        synchronized (this.clientTransactionTable) {
                            this.clientTransactionTable.wait();
                            this.activeClientTransactionCount.incrementAndGet();
                        }

                    } catch (Exception ex) {
                        if (logWriter.isLoggingEnabled()) {
                            logWriter.logError("Exception occured while waiting for room", ex);
                        }

                    }
                }
            } else {
                this.activeClientTransactionCount.incrementAndGet();
            }
            String key = sipRequest.getTransactionId();
            clientTransactionTable.put(key, (SIPClientTransaction) sipTransaction);
            if (logWriter.isLoggingEnabled()) {
                logWriter.logDebug(" putTransactionHash : " + " key = " + key);
            }
        } else {
            String key = sipRequest.getTransactionId();

            if (logWriter.isLoggingEnabled()) {
                logWriter.logDebug(" putTransactionHash : " + " key = " + key);
            }
            serverTransactionTable.put(key, (SIPServerTransaction) sipTransaction);
View Full Code Here

TOP

Related Classes of gov.nist.javax.sip.message.SIPRequest

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.