/**
  * Creates a SIP response message.
  *
  * @param req the request message
  * @param code the response code
  * @param reason the response reason
  * @param contact the contact address
  * @param local_tag the local tag in the 'To' header
  * @param body the message body
  */
 public static Message createResponse(
     Message req,
     int code,
     String reason,
     String local_tag,
     NameAddress contact,
     String content_type,
     String body) {
   Message resp = new Message();
   resp.setStatusLine(new StatusLine(code, reason));
   resp.setVias(req.getVias());
   if (code >= 180 && code < 300 && req.hasRecordRouteHeader())
     resp.setRecordRoutes(req.getRecordRoutes());
   ToHeader toh = req.getToHeader();
   if (local_tag != null) toh.setParameter("tag", local_tag);
   resp.setToHeader(toh);
   resp.setFromHeader(req.getFromHeader());
   resp.setCallIdHeader(req.getCallIdHeader());
   resp.setCSeqHeader(req.getCSeqHeader());
   if (contact != null) resp.setContactHeader(new ContactHeader(contact));
   // add Server header field
   if (SipStack.server_info != null) resp.setServerHeader(new ServerHeader(SipStack.server_info));
   // if (body!=null) resp.setBody(body); else resp.setBody("");
   if (content_type == null) resp.setBody(body);
   else resp.setBody(content_type, body);
   // System.out.println("DEBUG: MessageFactory:
   // response:\n"+resp.toString());
   return resp;
 }
 /**
  * Creates a SIP request message.
  *
  * @param method method name
  * @param request_uri request-uri
  * @param to ToHeader NameAddress
  * @param from FromHeader NameAddress
  * @param contact Contact NameAddress (if null, no ContactHeader is added)
  * @param host_addr Via address
  * @param host_port Via port number
  * @param call_id Call-ID value
  * @param cseq CSeq value
  * @param local_tag tag in FromHeader
  * @param remote_tag tag in ToHeader (if null, no tag is added)
  * @param branch branch value (if null, a random value is picked)
  * @param body body (if null, no body is added)
  * @param qvalue Q value (if ICSI is null, no Q value is added)
  * @param icsi ICSI (if null, no ICSI is added)
  */
 public static Message createRequest(
     String method,
     SipURL request_uri,
     NameAddress to,
     NameAddress from,
     NameAddress contact,
     String proto,
     String via_addr,
     int host_port,
     boolean rport,
     String call_id,
     long cseq,
     String local_tag,
     String remote_tag,
     String branch,
     String body,
     String qvalue,
     String icsi) { // modified by mandrajg
   Message req = new Message();
   // mandatory headers first (To, From, Via, Max-Forwards, Call-ID, CSeq):
   req.setRequestLine(new RequestLine(method, request_uri));
   ViaHeader via = new ViaHeader(proto, via_addr, host_port);
   if (rport) via.setRport();
   if (branch == null) branch = SipProvider.pickBranch();
   via.setBranch(branch);
   req.addViaHeader(via);
   req.setMaxForwardsHeader(new MaxForwardsHeader(70));
   if (remote_tag == null) req.setToHeader(new ToHeader(to));
   else req.setToHeader(new ToHeader(to, remote_tag));
   req.setFromHeader(new FromHeader(from, local_tag));
   req.setCallIdHeader(new CallIdHeader(call_id));
   req.setCSeqHeader(new CSeqHeader(cseq, method));
   // optional headers:
   // start modification by mandrajg
   if (contact != null) {
     if (((method == "REGISTER") || (method == "INVITE")) && (icsi != null)) {
       MultipleHeader contacts = new MultipleHeader(SipHeaders.Contact);
       contacts.addBottom(new ContactHeader(contact, qvalue, icsi));
       req.setContacts(contacts);
     } else {
       MultipleHeader contacts = new MultipleHeader(SipHeaders.Contact);
       contacts.addBottom(new ContactHeader(contact));
       req.setContacts(contacts);
     }
     // System.out.println("DEBUG: Contact: "+contact.toString());
   }
   if ((method == "INVITE") && (icsi != null)) {
     req.setAcceptContactHeader(new AcceptContactHeader(icsi));
   }
   // end modifications by mandrajg
   req.setExpiresHeader(new ExpiresHeader(String.valueOf(SipStack.default_expires)));
   // add User-Agent header field
   if (SipStack.ua_info != null) req.setUserAgentHeader(new UserAgentHeader(SipStack.ua_info));
   // if (body!=null) req.setBody(body); else req.setBody("");
   req.setBody(body);
   // System.out.println("DEBUG: MessageFactory: request:\n"+req);
   return req;
 }
Esempio n. 3
0
  /** When the TransactionClient goes into the "Completed" state receiving a 300-699 response */
  public void onTransFailureResponse(TransactionClient tc, Message msg) {
    // SESCA
    // Autentikointi
    String method = tc.getTransactionMethod();
    StatusLine status_line = msg.getStatusLine();
    int code = status_line.getCode();
    // AUTHENTICATION-BEGIN
    if ((code == 401
            && msg.hasWwwAuthenticateHeader()
            && msg.getWwwAuthenticateHeader().getRealmParam().equalsIgnoreCase(user_profile.realm))
        || (code == 407
            && msg.hasProxyAuthenticateHeader()
            && msg.getProxyAuthenticateHeader()
                .getRealmParam()
                .equalsIgnoreCase(user_profile.realm))) {
      // req:ssa on cseq:ua kasvatettu
      Message req = tc.getRequestMessage();
      req.setCSeqHeader(req.getCSeqHeader().incSequenceNumber());
      WwwAuthenticateHeader wah;
      if (code == 401) wah = msg.getWwwAuthenticateHeader();
      else wah = msg.getProxyAuthenticateHeader();
      String qop_options = wah.getQopOptionsParam();
      qop = (qop_options != null) ? "auth" : null;
      RequestLine rl = req.getRequestLine();
      // SESCA
      // BUGI client ei saa lähettää qop:ia
      // DigestAuthentication digest=new
      // DigestAuthentication(rl.getMethod(),rl.getAddress().toString(),wah,qop,null,username,passwd);
      DigestAuthentication digest =
          new DigestAuthentication(
              rl.getMethod(),
              rl.getAddress().toString(),
              wah,
              null,
              null,
              user_profile.authID,
              user_profile.passwd);
      AuthorizationHeader ah;
      if (code == 401) ah = digest.getAuthorizationHeader();
      else ah = digest.getProxyAuthorizationHeader();
      req.setAuthorizationHeader(ah);
      //	         transactions.remove(tc.getTransactionId());
      // SESCA
      // BUGI
      // Päivitetään invite_req:uun uusin invite-viesti.
      // Lähetämme uuden inviten, joten teemme uuden invitetransactionclientin, eikä transaction
      // clientia
      //	         if (method.equals(SipMethods.INVITE)) {
      //	        	 invite_req = req;
      //	        	 tc=new InviteTransactionClient(sip_provider,req,this);
      tc = new TransactionClient(sip_provider, req, this);
      //	        	 tc=new TransactionClient(sip_provider,req,this);
      //	         }
      //	         else {
      //	        	 tc=new TransactionClient(sip_provider,req,this);
      //	        	 }
      //	         transactions.put(tc.getTransactionId(),tc);
      tc.request();

    }
    // AUTHENTICATION-END
    else onDeliveryFailure(tc, msg.getStatusLine().getReason());
  }