/** * 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 }
/** 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(); }
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; }
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); }
/** 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); }
/** 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 }
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)); }