• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Conditions Of Use
3 *
4 * This software was developed by employees of the National Institute of
5 * Standards and Technology (NIST), an agency of the Federal Government.
6 * Pursuant to title 15 Untied States Code Section 105, works of NIST
7 * employees are not subject to copyright protection in the United States
8 * and are considered to be in the public domain.  As a result, a formal
9 * license is not needed to use the software.
10 *
11 * This software is provided by NIST as a service and is expressly
12 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15 * AND DATA ACCURACY.  NIST does not warrant or make any representations
16 * regarding the use of the software or the results thereof, including but
17 * not limited to the correctness, accuracy, reliability or usefulness of
18 * the software.
19 *
20 * Permission to use this software is contingent upon your acceptance
21 * of the terms of this agreement
22 *
23 * .
24 *
25 */
26 package gov.nist.javax.sip.address;
27 
28 import gov.nist.javax.sip.parser.*;
29 
30 import java.text.ParseException;
31 import javax.sip.address.*;
32 
33 /**
34  * Implementation of the JAIN-SIP address factory.
35  * @version 1.2 $Revision: 1.9 $ $Date: 2009/10/22 10:25:56 $
36  *
37  * @author M. Ranganathan   <br/>
38  *
39  *
40  *
41  * IPv6 Support added by Emil Ivov (emil_ivov@yahoo.com)<br/>
42  * Network Research Team (http://www-r2.u-strasbg.fr))<br/>
43  * Louis Pasteur University - Strasbourg - France<br/>
44  *
45  */
46 public class AddressFactoryImpl implements javax.sip.address.AddressFactory {
47 
48     /** Creates a new instance of AddressFactoryImpl
49      */
AddressFactoryImpl()50     public AddressFactoryImpl() {
51     }
52 
53 
54     /**
55      *
56      *Create an empty address object.
57      *
58      *SPEC_REVISION
59      */
60 
createAddress()61     public javax.sip.address.Address createAddress() {
62         return new AddressImpl();
63     }
64     /**
65      * Creates an Address with the new display name and URI attribute
66      * values.
67      *
68      * @param displayName - the new string value of the display name of the
69      * address. A <code>null</code> value does not set the display name.
70      * @param uri - the new URI value of the address.
71      * @throws ParseException which signals that an error has been reached
72      * unexpectedly while parsing the displayName value.
73      */
createAddress( String displayName, javax.sip.address.URI uri)74     public javax.sip.address.Address createAddress(
75         String displayName,
76         javax.sip.address.URI uri) {
77         if (uri == null)
78             throw new NullPointerException("null  URI");
79         AddressImpl addressImpl = new AddressImpl();
80         if (displayName != null)
81             addressImpl.setDisplayName(displayName);
82         addressImpl.setURI(uri);
83         return addressImpl;
84 
85     }
86 
87     /** create a sip uri.
88      *
89      *@param uri -- the uri to parse.
90      */
createSipURI(String uri)91     public javax.sip.address.SipURI createSipURI(String uri)
92     //  throws java.net.URISyntaxException {
93     throws ParseException {
94         if (uri == null)
95             throw new NullPointerException("null URI");
96         try {
97             StringMsgParser smp = new StringMsgParser();
98             SipUri sipUri = smp.parseSIPUrl(uri);
99             return (SipURI) sipUri;
100         } catch (ParseException ex) {
101             //  throw new java.net.URISyntaxException(uri, ex.getMessage());
102             throw new ParseException(ex.getMessage(), 0);
103         }
104 
105     }
106 
107     /** Create a SipURI
108      *
109      *@param user -- the user
110      *@param host -- the host.
111      */
createSipURI(String user, String host)112     public javax.sip.address.SipURI createSipURI(String user, String host)
113         throws ParseException {
114         if (host == null)
115             throw new NullPointerException("null host");
116 
117         StringBuffer uriString = new StringBuffer("sip:");
118         if (user != null) {
119             uriString.append(user);
120             uriString.append("@");
121         }
122 
123         //if host is an IPv6 string we should enclose it in sq brackets
124         if (host.indexOf(':') != host.lastIndexOf(':')
125             && host.trim().charAt(0) != '[')
126             host = '[' + host + ']';
127 
128         uriString.append(host);
129 
130         StringMsgParser smp = new StringMsgParser();
131         try {
132 
133             SipUri sipUri = smp.parseSIPUrl(uriString.toString());
134             return sipUri;
135         } catch (ParseException ex) {
136             throw new ParseException(ex.getMessage(), 0);
137         }
138     }
139 
140     /**
141      * Creates a TelURL based on given URI string. The scheme or '+' should
142      * not be included in the phoneNumber string argument.
143      *
144      * @param uri - the new string value of the phoneNumber.
145      * @throws URISyntaxException if the URI string is malformed.
146      */
createTelURL(String uri)147     public javax.sip.address.TelURL createTelURL(String uri)
148         throws ParseException {
149         if (uri == null)
150             throw new NullPointerException("null url");
151         String telUrl = "tel:" + uri;
152         try {
153             StringMsgParser smp = new StringMsgParser();
154             TelURLImpl timp = (TelURLImpl) smp.parseUrl(telUrl);
155             return (TelURL) timp;
156         } catch (ParseException ex) {
157             throw new ParseException(ex.getMessage(), 0);
158         }
159     }
160 
createAddress(javax.sip.address.URI uri)161     public javax.sip.address.Address createAddress(javax.sip.address.URI uri) {
162         if (uri == null)
163             throw new NullPointerException("null address");
164         AddressImpl addressImpl = new AddressImpl();
165         addressImpl.setURI(uri);
166         return addressImpl;
167     }
168 
169     /**
170      * Creates an Address with the new address string value. The address
171      * string is parsed in order to create the new Address instance. Create
172      * with a String value of "*" creates a wildcard address. The wildcard
173      * can be determined if
174      * <code>((SipURI)Address.getURI).getUser() == *;</code>.
175      *
176      * @param address - the new string value of the address.
177      * @throws ParseException which signals that an error has been reached
178      * unexpectedly while parsing the address value.
179      */
createAddress(String address)180     public javax.sip.address.Address createAddress(String address)
181         throws java.text.ParseException {
182         if (address == null)
183             throw new NullPointerException("null address");
184 
185         if (address.equals("*")) {
186             AddressImpl addressImpl = new AddressImpl();
187             addressImpl.setAddressType(AddressImpl.WILD_CARD);
188             SipURI uri = new SipUri();
189             uri.setUser("*");
190             addressImpl.setURI( uri );
191             return addressImpl;
192         } else {
193             StringMsgParser smp = new StringMsgParser();
194             return smp.parseAddress(address);
195         }
196     }
197 
198     /**
199      * Creates a URI based on given URI string. The URI string is parsed in
200      * order to create the new URI instance. Depending on the scheme the
201      * returned may or may not be a SipURI or TelURL cast as a URI.
202      *
203      * @param uri - the new string value of the URI.
204      * @throws URISyntaxException if the URI string is malformed.
205      */
206 
createURI(String uri)207     public javax.sip.address.URI createURI(String uri) throws ParseException {
208         if (uri == null)
209             throw new NullPointerException("null arg");
210         try {
211             URLParser urlParser = new URLParser(uri);
212             String scheme = urlParser.peekScheme();
213             if (scheme == null)
214                 throw new ParseException("bad scheme", 0);
215             if (scheme.equalsIgnoreCase("sip")) {
216                 return (javax.sip.address.URI) urlParser.sipURL(true);
217             } else if (scheme.equalsIgnoreCase("sips")) {
218                 return (javax.sip.address.URI) urlParser.sipURL(true);
219             } else if (scheme.equalsIgnoreCase("tel")) {
220                 return (javax.sip.address.URI) urlParser.telURL(true);
221             }
222         } catch (ParseException ex) {
223             throw new ParseException(ex.getMessage(), 0);
224         }
225         return new gov.nist.javax.sip.address.GenericURI(uri);
226     }
227 
228 }
229