sipxtacklib  Version 3.3
SipRefreshMgr.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2004-2006 SIPfoundry Inc.
3 // Licensed by SIPfoundry under the LGPL license.
4 //
5 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
6 // Licensed to SIPfoundry under a Contributor Agreement.
7 //
8 // $$
10 
11 
12 #ifndef SIPREFRESHMGR_H
13 #define SIPREFRESHMGR_H
14 
15 // SYSTEM INCLUDES
16 
17 // APPLICATION INCLUDES
18 #include "os/OsServerTask.h"
19 #include "net/SipMessage.h"
20 #include "net/SipTcpServer.h"
21 #include "net/SipUdpServer.h"
22 #include "net/SipMessageList.h"
23 #include "net/SipMessageEvent.h"
24 #include "utl/UtlRandom.h"
25 #include "utl/UtlHashMap.h"
26 #include "tapi/sipXtapiEvents.h" /* :TODO: CIRCULAR */
27 #include "tapi/sipXtapiInternal.h" /* :TODO: CIRCULAR */
28 
29 #include "net/SipLine.h"
30 
31 
32 // DEFINES
33 #define DEFAULT_PERCENTAGE_TIMEOUT 48 //48%
34 #define FAILED_PERCENTAGE_TIMEOUT 24 //24%
35 #define SIP_LINE_LINEID "lineID"
36 // MACROS
37 // EXTERNAL FUNCTIONS
38 // EXTERNAL VARIABLES
39 // CONSTANTS
40 // STRUCTS
41 // TYPEDEFS
42 // FORWARD DECLARATIONS
43 class SipUserAgent;
44 class SipLineMgr;
45 
46 class SipRefreshMgr : public OsServerTask
47 {
48 public:
49  //INITIALIZE
50  UtlBoolean init(
51  SipUserAgent *ptrToMyAgent,
52  int sipTcpPort = SIP_PORT,
53  int sipUdpPort = SIP_PORT,
54  const char* defaultUser = NULL,
55  const char* publicAddress = NULL,
56  const char* defaultSipAddress = NULL,
57  const char* sipDirectoryServers = NULL,
58  const char* sipRegistryServers = NULL,
59  int defaultRegistryTimeout = 3600, // one hr
60  int defaultSubscribeTimeout = 60*60*24, // 24 hrs
61  int restartCount = 1,
62  const char* macAddress = NULL );
63 
64  void StartRefreshMgr();
65 
69  void setRegistryPeriod(const int periodInSeconds);
70 
74  void setSubscribeTimeout(const int periodInSeconds);
75 
79  const int getSubscribeTimeout();
80 
81  void addMessageConsumer( OsServerTask* messageEventListener );
82 
83  void addMessageObserver (
84  OsMsgQ& messageQueue,
85  const char* sipMethod = NULL,
86  UtlBoolean wantRequests = TRUE,
87  UtlBoolean wantResponses = TRUE,
88  UtlBoolean wantIncoming = TRUE,
89  UtlBoolean wantOutGoing = FALSE,
90  const char* eventName = NULL,
91  void* observerData = NULL );
92 
93  //: Add a SIP message observer for SIP messages meeting the filter criteria
102 
103  //void removeMessageConsumer(OsServerTask* messageConsumer);
104  //: Remove a SIP message recipient
105 
106  //REGISTER METHODS
107  UtlBoolean newRegisterMsg (
108  const Url& fromUrl,
109  const UtlString& lineId,
110  int registryPeriodSeconds = -1,
111  Url* pPreferredContactUri = NULL);
112 
113  void reRegisterAll();
114 
115  void reRegister ( const Url& fromUrl );
116 
117  void unRegisterUser (
118  const Url& fromUrl,
119  const UtlBoolean& onStartup = FALSE,
120  const UtlString& lineid ="" );
121 
122  //SUBSRIBE METHODS
123  void reSubscribeAll();
124 
125  void unSubscribeAll();
126  //:Unsubscribe all
127 
128  void setLineMgr(SipLineMgr* const lineMgr);
129  //: Sets a pointer to the line manager
130 
131  SipLineMgr* const getLineMgr() const;
132  //: Gets the line manager pointer
133 
134  UtlBoolean newSubscribeMsg( SipMessage& message );
135 
136  SipRefreshMgr();
137 
138  void dumpMessageLists(UtlString& results) ;
139  //:Appends the message contents of both the mRegisterList and
140  // mSubscribeList
141 
142  virtual ~SipRefreshMgr();
143 
144  virtual UtlBoolean handleMessage( OsMsg& eventMessage );
145 
146  UtlBoolean getNatMappedAddress(UtlString* pIpAddress, int* pPort) ;
147  //: Get the nat mapped address (if available)
148 
149  void generateCallId (
150  const UtlString& lineId,
151  const UtlString& method,
152  UtlString& callid,
153  UtlBoolean onStartup = FALSE );
154 
155 
156 protected:
158  // the line manager object that uses this refresh manager
159 
160  // MsgType categories defined for use by the system
162  {
165  };
166 
167  // Common Methods
168  UtlBoolean isUAStarted();
169 
170  void waitForUA();
171 
173  SipMessageEvent& event,
174  const char* method);
175 
176  void getFromAddress (
177  UtlString* address,
178  int* port,
179  UtlString* protocol);
180 
181  void rescheduleAfterTime (
182  SipMessage* message,
183  int percentage = DEFAULT_PERCENTAGE_TIMEOUT );
184 
185  void sendToObservers (
186  const OsMsg& eventMessage,
187  SipMessage * registerRequest );
188 
189  OsStatus sendRequest (
190  SipMessage& registerRequest,
191  const char *method);
192 
193  void rescheduleRequest (
194  SipMessage* registerRequest,
195  int secondsFromNow,
196  const char* method,
197  int percentage = DEFAULT_PERCENTAGE_TIMEOUT,
198  UtlBoolean sendImmediate = FALSE );
199 
200  void processOKResponse (
201  SipMessage* registerResponse,
202  SipMessage* registerRequest );
203 
204  void parseContactFields (
205  SipMessage* message,
206  SipMessage* sipRequest,
207  int& expireVal );
208 
209  void processResponse(
210  const OsMsg& eventMessage,
211  SipMessage* registerRequest);
212 
213  void createTagNameValuePair( UtlString& tagNamevaluePair );
214 
215  // register
216  void registerUrl(
217  const char* registerFromAddress,
218  const char* registerToAddress,
219  const char* registerUri,
220  const char* contactUrl,
221  const UtlString& registerCallId,
222  int registerPeriod = -1);
223 
224  UtlBoolean isDuplicateRegister(
225  const Url& url,
226  SipMessage& oldMessage );
227 
228  UtlBoolean isDuplicateRegister( const Url& url );
229 
230  void addToRegisterList( SipMessage* message);
231 
232  UtlBoolean removeFromRegisterList( SipMessage* message );
233  //: Returns TRUE if message was found and removed from list.
234  //: Message is NOT deleted.
235 
236  // subscribe
237  void addToSubscribeList( SipMessage * message);
238 
239  UtlBoolean removeFromSubscribeList( SipMessage* message );
240  //: Returns TRUE if message was found and removed from list.
241  //: Message is NOT deleted.
242 
243  UtlBoolean isDuplicateSubscribe ( const Url& url );
244 
245  UtlBoolean isDuplicateSubscribe(
246  const Url& fromUrl,
247  SipMessage &oldMsg );
248 
249  void getContactField(
250  const Url& registerToField,
251  UtlString& contact,
252  const UtlString& lineId = "",
253  Url* pPreferredContactUri = NULL);
254 
255  void removeAllFromRequestList(SipMessage* response);
256  //: Removes all prior request records for this response
257  //: from the SipMessageLists (mRegisterList & mSubscribeList)
258 
259  void removeAllFromRequestList(SipMessage* response, SipMessageList* pRequestList);
260  //: Removes all prior request records for this response
261  //: from the passed-in SipMessageList
262 
263  UtlBoolean isExpiresZero(SipMessage* pRequest) ;
264  //: Is the expires field set to zero for the specified msg?
265 
266 
267 
268 
269  void fireSipXLineEvent(const Url& url, const UtlString& lineId, const SIPX_LINESTATE_EVENT event, const SIPX_LINESTATE_CAUSE cause, const char *bodyBytes= NULL );
270  //: event firing method used to notify sipXtapi of line events
271 
272  SIPX_LINESTATE_EVENT getLastLineEvent(const UtlString& lineId);
273  //: holding on to the last known line event type
274 
275  void setLastLineEvent(const UtlString& lineId, const SIPX_LINESTATE_EVENT eMajor);
276  //: sets the last line event type
277 
278  UtlHashMap* mpLastLineEventMap;
279 
280  // register
285  UtlString mRegistryServer;
286 
287  // subscribe
292 
293  // common
294  UtlBoolean mIsStarted;
295  UtlHashBag mMessageObservers;
296  OsRWMutex mObserverMutex;
297  OsMutex mUAReadyMutex;
298  UtlString mContactAddress;
300  UtlString mSipIpAddress;
301  UtlString mDefaultUser;
302  UtlString mMacAddress;
303  UtlString mRestartCountStr;
305  int mTcpPort;
306  int mUdpPort;
309  UtlHashBag mTimerBag;
310 };
311 
312 #endif // SIPREFRESHMGR_H
UtlRandom mRandomNumGenerator
Definition: SipRefreshMgr.h:308
void setSubscribeTimeout(const int periodInSeconds)
Mutator for the mDefaultSubscribePeriodMember.
Definition: SipRefreshMgr.cpp:2221
UtlHashBag mTimerBag
Definition: SipRefreshMgr.h:309
void sendToObservers(const OsMsg &eventMessage, SipMessage *registerRequest)
Definition: SipRefreshMgr.cpp:1245
SipLineMgr *const getLineMgr() const
Definition: SipRefreshMgr.cpp:2360
SipRefreshMgr()
Definition: SipRefreshMgr.cpp:58
OsMutex mUAReadyMutex
Definition: SipRefreshMgr.h:297
Transaction and Transport manager for SIP stack.
Definition: SipUserAgent.h:157
void getContactField(const Url &registerToField, UtlString &contact, const UtlString &lineId="", Url *pPreferredContactUri=NULL)
Definition: SipRefreshMgr.cpp:2124
UtlHashMap * mpLastLineEventMap
Definition: SipRefreshMgr.h:278
SIPX_LINESTATE_EVENT getLastLineEvent(const UtlString &lineId)
Definition: SipRefreshMgr.cpp:2266
UtlBoolean init(SipUserAgent *ptrToMyAgent, int sipTcpPort=SIP_PORT, int sipUdpPort=SIP_PORT, const char *defaultUser=NULL, const char *publicAddress=NULL, const char *defaultSipAddress=NULL, const char *sipDirectoryServers=NULL, const char *sipRegistryServers=NULL, int defaultRegistryTimeout=3600, int defaultSubscribeTimeout=60 *60 *24, int restartCount=1, const char *macAddress=NULL)
Definition: SipRefreshMgr.cpp:109
int mDefaultRegistryPeriod
Definition: SipRefreshMgr.h:281
SipMessageList mRegisterList
Definition: SipRefreshMgr.h:282
UtlString mRegistryServer
Definition: SipRefreshMgr.h:285
SipUserAgent * mMyUserAgent
Definition: SipRefreshMgr.h:304
UtlString mContactAddress
Definition: SipRefreshMgr.h:298
UtlString mSipIpAddress
Definition: SipRefreshMgr.h:300
UtlString mDefaultSipAddress
Definition: SipRefreshMgr.h:299
void setLineMgr(SipLineMgr *const lineMgr)
Definition: SipRefreshMgr.cpp:2354
OsRWMutex mObserverMutex
Definition: SipRefreshMgr.h:296
int mDefaultSubscribePeriod
Definition: SipRefreshMgr.h:288
void unSubscribeAll()
Definition: SipRefreshMgr.cpp:1728
virtual UtlBoolean handleMessage(OsMsg &eventMessage)
Definition: SipRefreshMgr.cpp:1356
void getFromAddress(UtlString *address, int *port, UtlString *protocol)
Definition: SipRefreshMgr.cpp:338
sipXtapi event declarations
void parseContactFields(SipMessage *message, SipMessage *sipRequest, int &expireVal)
Definition: SipRefreshMgr.cpp:1149
Definition: SipRefreshMgr.h:163
Specialization of HttpMessage to contain and manipulate SIP messages.
Definition: SipMessage.h:343
void processResponse(const OsMsg &eventMessage, SipMessage *registerRequest)
Definition: SipRefreshMgr.cpp:877
void reSubscribeAll()
Definition: SipRefreshMgr.cpp:1701
OsRWMutex mSubscribeListMutexR
Definition: SipRefreshMgr.h:290
void processOKResponse(SipMessage *registerResponse, SipMessage *registerRequest)
Definition: SipRefreshMgr.cpp:1014
OsRWMutex mRegisterListMutexW
Definition: SipRefreshMgr.h:284
UtlBoolean removeFromRegisterList(SipMessage *message)
Definition: SipRefreshMgr.cpp:1941
UtlBoolean mIsStarted
Definition: SipRefreshMgr.h:294
#define SIP_PORT
Definition: SipMessage.h:256
void addToSubscribeList(SipMessage *message)
Definition: SipRefreshMgr.cpp:2032
UtlBoolean isDuplicateRegister(const Url &url, SipMessage &oldMessage)
Definition: SipRefreshMgr.cpp:547
void fireSipXLineEvent(const Url &url, const UtlString &lineId, const SIPX_LINESTATE_EVENT event, const SIPX_LINESTATE_CAUSE cause, const char *bodyBytes=NULL)
Definition: SipRefreshMgr.cpp:2232
void dumpMessageLists(UtlString &results)
Definition: SipRefreshMgr.cpp:1869
Definition: SipMessageList.h:33
OsStatus sendRequest(SipMessage &registerRequest, const char *method)
Definition: SipRefreshMgr.cpp:576
void addMessageConsumer(OsServerTask *messageEventListener)
Definition: SipRefreshMgr.cpp:245
OsRWMutex mRegisterListMutexR
Definition: SipRefreshMgr.h:283
Definition: SipRefreshMgr.h:164
void reRegister(const Url &fromUrl)
Definition: SipRefreshMgr.cpp:429
UtlString mDefaultUser
Definition: SipRefreshMgr.h:301
void removeAllFromRequestList(SipMessage *response)
Definition: SipRefreshMgr.cpp:2305
UtlString mRestartCountStr
Definition: SipRefreshMgr.h:303
void setLastLineEvent(const UtlString &lineId, const SIPX_LINESTATE_EVENT eMajor)
Definition: SipRefreshMgr.cpp:2283
void StartRefreshMgr()
Definition: SipRefreshMgr.cpp:173
UtlBoolean newRegisterMsg(const Url &fromUrl, const UtlString &lineId, int registryPeriodSeconds=-1, Url *pPreferredContactUri=NULL)
param: messageQueue - the queue on which an SipMessageEvent is dispatched param: sipMethod - the spec...
Definition: SipRefreshMgr.cpp:292
UtlBoolean isExpiresZero(SipMessage *pRequest)
Definition: SipRefreshMgr.cpp:2197
UtlHashBag mMessageObservers
Definition: SipRefreshMgr.h:295
Definition: SipLineMgr.h:67
void reRegisterAll()
Definition: SipRefreshMgr.cpp:385
void queueMessageToObservers(SipMessageEvent &event, const char *method)
Definition: SipRefreshMgr.cpp:1645
const int getSubscribeTimeout()
Accessor for the mDefaultSubscribePeriodMember.
Definition: SipRefreshMgr.cpp:2226
SIPX_LINESTATE_CAUSE
Enumeration of possible linestate Event causes.
Definition: sipXtapiEvents.h:369
void generateCallId(const UtlString &lineId, const UtlString &method, UtlString &callid, UtlBoolean onStartup=FALSE)
Definition: SipRefreshMgr.cpp:1888
void rescheduleRequest(SipMessage *registerRequest, int secondsFromNow, const char *method, int percentage=DEFAULT_PERCENTAGE_TIMEOUT, UtlBoolean sendImmediate=FALSE)
Definition: SipRefreshMgr.cpp:717
UtlBoolean removeFromSubscribeList(SipMessage *message)
Definition: SipRefreshMgr.cpp:2006
UtlBoolean isDuplicateSubscribe(const Url &url)
Definition: SipRefreshMgr.cpp:2040
SipMessageList mSubscribeList
Definition: SipRefreshMgr.h:289
UtlString mMacAddress
Definition: SipRefreshMgr.h:302
void waitForUA()
Definition: SipRefreshMgr.cpp:187
void rescheduleAfterTime(SipMessage *message, int percentage=DEFAULT_PERCENTAGE_TIMEOUT)
Definition: SipRefreshMgr.cpp:2071
Definition: SipMessageEvent.h:32
void unRegisterUser(const Url &fromUrl, const UtlBoolean &onStartup=FALSE, const UtlString &lineid="")
Definition: SipRefreshMgr.cpp:455
SipLineMgr * mpLineMgr
Definition: SipRefreshMgr.h:157
void createTagNameValuePair(UtlString &tagNamevaluePair)
Definition: SipRefreshMgr.cpp:2114
SIPX_LINESTATE_EVENT
Enumeration of possible linestate Events.
Definition: sipXtapiEvents.h:330
virtual ~SipRefreshMgr()
Definition: SipRefreshMgr.cpp:73
void addToRegisterList(SipMessage *message)
Definition: SipRefreshMgr.cpp:1974
int mUdpPort
Definition: SipRefreshMgr.h:306
URL parser and constructor.
Definition: Url.h:90
OsRWMutex mSubscribeListMutexW
Definition: SipRefreshMgr.h:291
UtlBoolean getNatMappedAddress(UtlString *pIpAddress, int *pPort)
Definition: SipRefreshMgr.cpp:1631
int mRestartCount
Definition: SipRefreshMgr.h:307
Definition: SipRefreshMgr.h:46
void setRegistryPeriod(const int periodInSeconds)
Mutator for the mDefaultRegistryPeriodMember.
Definition: SipRefreshMgr.cpp:2216
#define DEFAULT_PERCENTAGE_TIMEOUT
Definition: SipRefreshMgr.h:33
int mTcpPort
Definition: SipRefreshMgr.h:305
RefreshMsgTypes
Definition: SipRefreshMgr.h:161
void registerUrl(const char *registerFromAddress, const char *registerToAddress, const char *registerUri, const char *contactUrl, const UtlString &registerCallId, int registerPeriod=-1)
Definition: SipRefreshMgr.cpp:1284
void addMessageObserver(OsMsgQ &messageQueue, const char *sipMethod=NULL, UtlBoolean wantRequests=TRUE, UtlBoolean wantResponses=TRUE, UtlBoolean wantIncoming=TRUE, UtlBoolean wantOutGoing=FALSE, const char *eventName=NULL, void *observerData=NULL)
Definition: SipRefreshMgr.cpp:261
UtlBoolean newSubscribeMsg(SipMessage &message)
Definition: SipRefreshMgr.cpp:1778
UtlBoolean isUAStarted()
Definition: SipRefreshMgr.cpp:238

sipXtackLib home page