/**
  * Creates a SIP request message. Where
  *
  * <UL>
  *   <LI>request-uri equals the To sip url
  *   <LI>via address and port are taken from SipProvider
  *   <LI>transport protocol is taken from request-uri (if transport parameter is present) or the
  *       default transport for the SipProvider is used.
  *   <LI>call_id is picked random
  *   <LI>cseq is picked random
  *   <LI>local_tag is picked random
  *   <LI>branch is picked random
  * </UL>
  *
  * @see
  *     #createRequest(String,SipURL,NameAddress,NameAddress,NameAddress,String,String,int,String,long,String,String,String,String)
  */
 public static Message createRequest(
     SipProvider sip_provider,
     String method,
     SipURL request_uri,
     NameAddress to,
     NameAddress from,
     NameAddress contact,
     String body) { // SipURL
   // request_uri=to.getAddress();
   String call_id = sip_provider.pickCallId();
   int cseq = SipProvider.pickInitialCSeq();
   String local_tag = SipProvider.pickTag();
   // String branch=SipStack.pickBranch();
   return createRequest(
       sip_provider,
       method,
       request_uri,
       to,
       from,
       contact,
       call_id,
       cseq,
       local_tag,
       null,
       null,
       body,
       null); // modified by mandrajg
 }
 /**
  * Creates a new INVITE request out of any pre-existing dialogs.
  *
  * @see
  *     #createRequest(String,SipURL,NameAddress,NameAddress,NameAddress,String,String,int,boolean,String,long,String,String,String,String)
  */
 public static Message createInviteRequest(
     SipProvider sip_provider,
     SipURL request_uri,
     NameAddress to,
     NameAddress from,
     NameAddress contact,
     String body,
     String icsi) { // modified by mandrajg
   String call_id = sip_provider.pickCallId();
   int cseq = SipProvider.pickInitialCSeq();
   String local_tag = SipProvider.pickTag();
   // String branch=SipStack.pickBranch();
   if (contact == null) contact = from;
   return createRequest(
       sip_provider,
       SipMethods.INVITE,
       request_uri,
       to,
       from,
       contact,
       call_id,
       cseq,
       local_tag,
       null,
       null,
       body,
       icsi); // modified by mandrajg
 }
示例#3
0
  /** Costructs a new Jukebox. */
  public Jukebox(SipProvider sip_provider, UserAgentProfile user_profile) {
    log = sip_provider.getLog();
    this.user_profile = user_profile;
    this.sip_provider = sip_provider;

    if (user_profile.contact_url == null)
      user_profile.contact_url =
          user_profile.username + "@" + sip_provider.getViaAddress() + ":" + sip_provider.getPort();

    if (!user_profile.no_prompt) stdout = System.out;

    if (user_profile.do_register) {
      RegisterAgent ra =
          new RegisterAgent(
              sip_provider,
              user_profile.from_url,
              user_profile.contact_url,
              user_profile.username,
              user_profile.username,
              user_profile.realm,
              user_profile.passwd,
              this);
      ra.loopRegister(user_profile.expires, user_profile.expires / 2);
    }

    UserAgent ua = new UserAgent(sip_provider, user_profile, this);
    ua.listen();
  }
示例#4
0
 public void CheckEngine() {
   int i = 0;
   for (SipProvider sip_provider : sip_providers) {
     if (sip_provider != null && !sip_provider.hasOutboundProxy())
       setOutboundProxy(sip_provider, i);
     i++;
   }
 }
 /**
  * Creates a SIP request message. Where
  *
  * <UL>
  *   <LI>request-uri equals the To sip url
  *   <LI>via address and port are taken from SipProvider
  *   <LI>transport protocol is taken from request-uri (if transport parameter is present) or the
  *       default transport for the SipProvider is used.
  *   <LI>contact is formed by the 'From' user-name and by the address and port taken from
  *       SipProvider
  *   <LI>call_id is picked random
  *   <LI>cseq is picked random
  *   <LI>local_tag is picked random
  *   <LI>branch is picked random
  * </UL>
  *
  * @see #createRequest(SipProvider,String,NameAddress,NameAddress,NameAddress,String)
  */
 public static Message createRequest(
     SipProvider sip_provider, String method, NameAddress to, NameAddress from, String body) {
   String contact_user = from.getAddress().getUserName();
   NameAddress contact =
       new NameAddress(
           new SipURL(contact_user, sip_provider.getViaAddress(), sip_provider.getPort()));
   return createRequest(sip_provider, method, to.getAddress(), to, from, contact, body);
 }
 /**
  * Creates a SIP request message within a dialog, with a new branch via-parameter.
  *
  * @param dialog the Dialog used to compose the various Message headers
  * @param method the request method
  * @param body the message body
  */
 public static Message createRequest(Dialog dialog, String method, String body) {
   NameAddress to = dialog.getRemoteName();
   NameAddress from = dialog.getLocalName();
   NameAddress target = dialog.getRemoteContact();
   if (target == null) target = to;
   SipURL request_uri = target.getAddress();
   if (request_uri == null) request_uri = dialog.getRemoteName().getAddress();
   SipProvider sip_provider = dialog.getSipProvider();
   String via_addr = sip_provider.getViaAddress();
   int host_port = sip_provider.getPort();
   boolean rport = sip_provider.isRportSet();
   String proto;
   if (target.getAddress().hasTransport()) proto = target.getAddress().getTransport();
   else proto = sip_provider.getDefaultTransport();
   NameAddress contact = dialog.getLocalContact();
   if (contact == null) contact = from;
   // increment the CSeq, if method is not ACK nor CANCEL
   if (!SipMethods.isAck(method) && !SipMethods.isCancel(method)) dialog.incLocalCSeq();
   String call_id = dialog.getCallID();
   long cseq = dialog.getLocalCSeq();
   String local_tag = dialog.getLocalTag();
   String remote_tag = dialog.getRemoteTag();
   // String branch=SipStack.pickBranch();
   Message req =
       createRequest(
           method,
           request_uri,
           to,
           from,
           contact,
           proto,
           via_addr,
           host_port,
           rport,
           call_id,
           cseq,
           local_tag,
           remote_tag,
           null,
           body,
           null,
           null); // modified by mandrajg
   Vector<NameAddress> route = dialog.getRoute();
   if (route != null && route.size() > 0) {
     Vector<String> route_s = new Vector<String>(route.size());
     for (Enumeration<NameAddress> e = route.elements(); e.hasMoreElements(); ) {
       NameAddress elem = e.nextElement();
       route_s.add(elem.toString());
     }
     req.addRoutes(new MultipleHeader(SipHeaders.Route, route_s));
   }
   req.rfc2543RouteAdapt();
   return req;
 }
示例#7
0
  private String getContactURL(String username, SipProvider sip_provider) {
    int i = username.indexOf("@");
    if (i != -1) {
      // if the username already contains a @
      // strip it and everthing following it
      username = username.substring(0, i);
    }

    return username
        + "@"
        + IpAddress.localIpAddress
        + (sip_provider.getPort() != 0 ? ":" + sip_provider.getPort() : "")
        + ";transport="
        + sip_provider.getDefaultTransport();
  }
 /**
  * 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;
 }
 /**
  * Creates a SIP response message. For 2xx responses generates the local tag by means of the
  * SipStack.pickTag(req) method.
  *
  * @see #createResponse(Message,int,String,NameAddress,String,String body)
  */
 public static Message createResponse(
     Message req, int code, String reason, NameAddress contact) { // String
   // reason=SipResponses.reasonOf(code);
   String localtag = null;
   if (req.createsDialog() && !req.getToHeader().hasTag()) {
     // fix issue 425 - also add tag to 18x responses
     if (SipStack.early_dialog || (code >= 101 && code < 300)) localtag = SipProvider.pickTag(req);
   }
   return createResponse(req, code, reason, localtag, contact, null, null);
 }
示例#10
0
 /** Costructs a new MessageAgent. */
 public MessageAgent(
     SipProvider sip_provider, UserAgentProfile user_profile, MessageAgentListener listener) {
   this.sip_provider = sip_provider;
   this.log = sip_provider.getLog();
   this.sip_interface = null;
   this.listener = listener;
   this.user_profile = user_profile;
   // if no contact_url and/or from_url has been set, create it now
   user_profile.initContactAddress(sip_provider);
 }
示例#11
0
 /** Creates a new Call. */
 public Call(
     SipProvider sip_provider, String from_url, String contact_url, CallListener call_listener) {
   this.sip_provider = sip_provider;
   this.log = sip_provider.getLog();
   this.listener = call_listener;
   this.from_url = from_url;
   this.contact_url = contact_url;
   this.dialog = null;
   this.local_sdp = null;
   this.remote_sdp = null;
 }
  /**
   * Creates a SIP request message. Where
   *
   * <UL>
   *   <LI>via address and port are taken from SipProvider
   *   <LI>transport protocol is taken from request-uri (if transport parameter is present) or the
   *       default transport for the SipProvider is used.
   * </UL>
   *
   * @param sip_provider the SipProvider used to fill the Via field
   * @see
   *     #createRequest(String,SipURL,NameAddress,NameAddress,NameAddress,String,String,int,String,long,String,String,String,String)
   */
  public static Message createRequest(
      SipProvider sip_provider,
      String method,
      SipURL request_uri,
      NameAddress to,
      NameAddress from,
      NameAddress contact,
      String call_id,
      long cseq,
      String local_tag,
      String remote_tag,
      String branch,
      String body,
      String icsi) { // modified by mandrajg
    String via_addr = sip_provider.getViaAddress();
    int host_port = sip_provider.getPort();
    boolean rport = sip_provider.isRportSet();
    String proto;
    if (request_uri.hasTransport()) proto = request_uri.getTransport();
    else proto = sip_provider.getDefaultTransport();

    return createRequest(
        method,
        request_uri,
        to,
        from,
        contact,
        proto,
        via_addr,
        host_port,
        rport,
        call_id,
        cseq,
        local_tag,
        remote_tag,
        branch,
        body,
        null,
        icsi); // modified by mandrajg
  }
示例#13
0
 void setOutboundProxy(SipProvider sip_provider, int i) {
   try {
     if (sip_provider != null)
       sip_provider.setOutboundProxy(
           new SocketAddress(
               IpAddress.getByName(
                   PreferenceManager.getDefaultSharedPreferences(getUIContext())
                       .getString(Settings.PREF_DNS + i, Settings.DEFAULT_DNS)),
               Integer.valueOf(
                   PreferenceManager.getDefaultSharedPreferences(getUIContext())
                       .getString(
                           Settings.PREF_PORT + (i != 0 ? i : ""), Settings.DEFAULT_PORT))));
   } catch (Exception e) {
   }
 }
 /** Creates an ACK request for a non-2xx response */
 public static Message createNon2xxAckRequest(
     SipProvider sip_provider, Message method, Message resp) {
   SipURL request_uri = method.getRequestLine().getAddress();
   FromHeader from = method.getFromHeader();
   ToHeader to = resp.getToHeader();
   String via_addr = sip_provider.getViaAddress();
   int host_port = sip_provider.getPort();
   boolean rport = sip_provider.isRportSet();
   String proto;
   if (request_uri.hasTransport()) proto = request_uri.getTransport();
   else proto = sip_provider.getDefaultTransport();
   String branch = method.getViaHeader().getBranch();
   NameAddress contact = null;
   Message ack =
       createRequest(
           SipMethods.ACK,
           request_uri,
           to.getNameAddress(),
           from.getNameAddress(),
           contact,
           proto,
           via_addr,
           host_port,
           rport,
           method.getCallIdHeader().getCallId(),
           method.getCSeqHeader().getSequenceNumber(),
           from.getParameter("tag"),
           to.getParameter("tag"),
           branch,
           null,
           null,
           null); // modified by mandrajg
   ack.removeExpiresHeader();
   if (method.hasRouteHeader()) ack.setRoutes(method.getRoutes());
   return ack;
 }
 /**
  * Creates a new REGISTER request.
  *
  * <p>If contact is null, set contact as star * (register all)
  */
 public static Message createRegisterRequest(
     SipProvider sip_provider,
     NameAddress to,
     NameAddress from,
     NameAddress contact,
     String qvalue,
     String icsi) { // modified by mandrajg
   SipURL to_url = to.getAddress();
   SipURL registrar = new SipURL(to_url.getHost(), to_url.getPort());
   String via_addr = sip_provider.getViaAddress();
   int host_port = sip_provider.getPort();
   boolean rport = sip_provider.isRportSet();
   String proto;
   if (to_url.hasTransport()) proto = to_url.getTransport();
   else proto = sip_provider.getDefaultTransport();
   String call_id = sip_provider.pickCallId();
   int cseq = SipProvider.pickInitialCSeq();
   String local_tag = SipProvider.pickTag();
   // String branch=SipStack.pickBranch();
   Message req =
       createRequest(
           SipMethods.REGISTER,
           registrar,
           to,
           from,
           contact,
           proto,
           via_addr,
           host_port,
           rport,
           call_id,
           cseq,
           local_tag,
           null,
           null,
           null,
           qvalue,
           icsi); // modified by mandrajg
   // if no contact, deregister all
   if (contact == null) {
     ContactHeader star = new ContactHeader(); // contact is *
     req.setContactHeader(star);
     req.setExpiresHeader(new ExpiresHeader(String.valueOf(SipStack.default_expires)));
   }
   return req;
 }
 /**
  * Creates a new InviteDialogWatcher of type <i>method</i>, and starts listening for incoming
  * invite requests.
  */
 public InviteDialogWatcher(SipProvider sip_provider, InviteDialogWatcherListener listener) {
   this.listener = listener;
   sip_provider.addSelectiveListener(new MethodId(SipMethods.INVITE), this);
 }
 /** Stops listening for incoming invite requests. */
 public void halt() {
   sip_provider.removeSelectiveListener(new MethodId(SipMethods.INVITE));
 }