• 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;
27 
28 import java.io.IOException;
29 import java.net.InetAddress;
30 import java.text.ParseException;
31 
32 import javax.sip.*;
33 import javax.sip.address.SipURI;
34 import javax.sip.header.ContactHeader;
35 import javax.sip.header.ViaHeader;
36 
37 import gov.nist.core.Host;
38 import gov.nist.core.HostPort;
39 import gov.nist.core.InternalErrorHandler;
40 import gov.nist.javax.sip.address.AddressImpl;
41 import gov.nist.javax.sip.address.SipUri;
42 import gov.nist.javax.sip.header.Contact;
43 import gov.nist.javax.sip.header.Via;
44 import gov.nist.javax.sip.message.SIPRequest;
45 import gov.nist.javax.sip.stack.*;
46 
47 /**
48  * Implementation of the ListeningPoint interface
49  *
50  * @version 1.2 $Revision: 1.15 $ $Date: 2009/11/19 05:26:58 $
51  *
52  * @author M. Ranganathan   <br/>
53  *
54  *
55  *
56  */
57 public class ListeningPointImpl implements javax.sip.ListeningPoint, gov.nist.javax.sip.ListeningPointExt {
58 
59 
60     protected String transport;
61 
62     /** My port. (same thing as in the message processor) */
63 
64     int port;
65 
66     /**
67      * Pointer to the imbedded mesage processor.
68      */
69     protected MessageProcessor messageProcessor;
70 
71     /**
72      * Provider back pointer
73      */
74     protected SipProviderImpl sipProvider;
75 
76     /**
77      * Our stack
78      */
79     protected SipStackImpl sipStack;
80 
81 
82 
83 
84     /**
85      * Construct a key to refer to this structure from the SIP stack
86      * @param host host string
87      * @param port port
88      * @param transport transport
89      * @return a string that is used as a key
90      */
makeKey(String host, int port, String transport)91     public static String makeKey(String host, int port, String transport) {
92         return new StringBuffer(host)
93             .append(":")
94             .append(port)
95             .append("/")
96             .append(transport)
97             .toString()
98             .toLowerCase();
99     }
100 
101     /**
102      * Get the key for this strucut
103      * @return  get the host
104      */
getKey()105     protected String getKey() {
106         return makeKey(this.getIPAddress(), port, transport);
107     }
108 
109     /**
110      * Set the sip provider for this structure.
111      * @param sipProvider provider to set
112      */
setSipProvider(SipProviderImpl sipProviderImpl)113     protected void setSipProvider(SipProviderImpl sipProviderImpl) {
114         this.sipProvider = sipProviderImpl;
115     }
116 
117     /**
118      * Remove the sip provider from this listening point.
119      */
removeSipProvider()120     protected void removeSipProvider() {
121         this.sipProvider = null;
122     }
123 
124     /**
125      * Constructor
126      * @param sipStack Our sip stack
127      */
ListeningPointImpl( SipStack sipStack, int port, String transport)128     protected ListeningPointImpl(
129         SipStack sipStack,
130         int port,
131         String transport) {
132         this.sipStack = (SipStackImpl) sipStack;
133 
134         this.port = port;
135         this.transport = transport;
136 
137     }
138 
139     /**
140      * Clone this listening point. Note that a message Processor is not
141      * started. The transport is set to null.
142      * @return cloned listening point.
143      */
clone()144     public Object clone() {
145         ListeningPointImpl lip =
146             new ListeningPointImpl(this.sipStack, this.port, null);
147         lip.sipStack = this.sipStack;
148         return lip;
149     }
150 
151 
152 
153     /**
154      * Gets the port of the ListeningPoint. The default port of a ListeningPoint
155      * is dependent on the scheme and transport.  For example:
156      * <ul>
157      * <li>The default port is 5060 if the transport UDP the scheme is <i>sip:</i>.
158      * <li>The default port is 5060 if the transport is TCP the scheme is <i>sip:</i>.
159      * <li>The default port is 5060 if the transport is SCTP the scheme is <i>sip:</i>.
160      * <li>The default port is 5061 if the transport is TLS over TCP the scheme is <i>sip:</i>.
161      * <li>The default port is 5061 if the transport is TCP the scheme is <i>sips:</i>.
162      * </ul>
163      *
164      * @return port of ListeningPoint
165      */
getPort()166     public int getPort() {
167         return messageProcessor.getPort();
168     }
169 
170     /**
171      * Gets transport of the ListeningPoint.
172      *
173      * @return transport of ListeningPoint
174      */
getTransport()175     public String getTransport() {
176         return messageProcessor.getTransport();
177     }
178 
179     /**
180      * Get the provider.
181      *
182      * @return the provider.
183      */
getProvider()184     public SipProviderImpl getProvider() {
185         return this.sipProvider;
186     }
187 
188     /* (non-Javadoc)
189      * @see javax.sip.ListeningPoint#getIPAddress()
190      */
getIPAddress()191     public String getIPAddress() {
192 
193         return this.messageProcessor.getIpAddress().getHostAddress();
194     }
195 
196 
197 
198     /* (non-Javadoc)
199      * @see javax.sip.ListeningPoint#setSentBy(java.lang.String)
200      */
setSentBy(String sentBy)201     public void setSentBy(String sentBy) throws ParseException {
202         this.messageProcessor.setSentBy(sentBy);
203 
204     }
205 
206     /* (non-Javadoc)
207      * @see javax.sip.ListeningPoint#getSentBy()
208      */
getSentBy()209     public String getSentBy() {
210 
211         return this.messageProcessor.getSentBy();
212     }
213 
isSentBySet()214     public boolean isSentBySet() {
215         return this.messageProcessor.isSentBySet();
216     }
getViaHeader()217     public Via getViaHeader() {
218         return this.messageProcessor.getViaHeader();
219      }
220 
getMessageProcessor()221     public MessageProcessor getMessageProcessor() {
222         return this.messageProcessor;
223     }
224 
createContactHeader()225     public ContactHeader createContactHeader() {
226         try {
227             String ipAddress = this.getIPAddress();
228             int port = this.getPort();
229             SipURI sipURI = new SipUri();
230             sipURI.setHost(ipAddress);
231             sipURI.setPort(port);
232             sipURI.setTransportParam(this.transport);
233             Contact contact = new Contact();
234             AddressImpl address = new AddressImpl();
235             address.setURI(sipURI);
236             contact.setAddress(address);
237 
238             return contact;
239         } catch (Exception ex) {
240             InternalErrorHandler.handleException("Unexpected exception",sipStack.getStackLogger());
241             return null;
242         }
243     }
244 
245 
sendHeartbeat(String ipAddress, int port)246     public void sendHeartbeat(String ipAddress, int port) throws IOException {
247 
248         HostPort targetHostPort  = new HostPort();
249         targetHostPort.setHost(new Host( ipAddress));
250         targetHostPort.setPort(port);
251         MessageChannel messageChannel = this.messageProcessor.createMessageChannel(targetHostPort);
252         SIPRequest siprequest = new SIPRequest();
253         siprequest.setNullRequest();
254         messageChannel.sendMessage(siprequest);
255 
256     }
257 
258 
createViaHeader()259     public ViaHeader createViaHeader() {
260            return this.getViaHeader();
261     }
262 
263 }
264