sipxtacklib  Version 3.3
SipSubscribeClient.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2005 SIPez LLC.
3 // Licensed to SIPfoundry under a Contributor Agreement.
4 //
5 // Copyright (C) 2004 SIPfoundry Inc.
6 // Licensed by SIPfoundry under the LGPL license.
7 //
8 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
9 // Licensed to SIPfoundry under a Contributor Agreement.
10 //
11 // $$
13 // Author: Dan Petrie (dpetrie AT SIPez DOT com)
14 
16 #ifndef _SipSubscribeClient_h_
17 #define _SipSubscribeClient_h_
18 
19 // SYSTEM INCLUDES
20 
21 // APPLICATION INCLUDES
22 
23 #include <os/OsDefs.h>
24 #include <os/OsServerTask.h>
25 #include <utl/UtlHashMap.h>
26 #include <net/SipRefreshManager.h>
27 
28 // DEFINES
29 // MACROS
30 // EXTERNAL FUNCTIONS
31 // EXTERNAL VARIABLES
32 // CONSTANTS
33 // STRUCTS
34 // FORWARD DECLARATIONS
35 class SipMessage;
36 class SipUserAgent;
37 class SipDialogMgr;
38 class SipRefreshManager;
40 
41 // TYPEDEFS
42 
44 
64 class SipSubscribeClient : public OsServerTask
65 {
66 /* //////////////////////////// PUBLIC //////////////////////////////////// */
67 public:
68 
70  {
72  SUBSCRIPTION_INITIATED, // Early dialog
73  SUBSCRIPTION_SETUP, // Established dialog
74  SUBSCRIPTION_FAILED, // Failed dialog setup or refresh
75  SUBSCRIPTION_TERMINATED // Ended dialog
76  };
77 
79  const char* earlyDialogHandle,
80  const char* dialogHandle,
81  void* applicationData,
82  int responseCode,
83  const char* responseText,
84  long expiration,
85  const SipMessage* subscribeResponse);
86 
87 typedef void (*NotifyEventCallback) (const char* earlyDialogHandle,
91  const char* dialogHandle,
95  void* applicationData,
96  const SipMessage* notifyRequest);
97 
98 /* ============================ CREATORS ================================== */
99 
102 
104  SipSubscribeClient(SipUserAgent& userAgent,
105  SipDialogMgr& dialogMgr,
106  SipRefreshManager& refreshMgr);
107 
108 
110  virtual
112 
113 
114 /* ============================ MANIPULATORS ============================== */
115 
117 
123  UtlBoolean addSubscription(const char* resourceId,
124  const char* eventHeaderValue,
125  const char* acceptHeaderValue,
126  const char* fromFieldValue,
127  const char* toFieldValue,
128  const char* contactFieldValue,
129  int subscriptionPeriodSeconds,
130  void* applicationData,
131  const SubscriptionStateCallback subscriptionStateCallback,
132  const NotifyEventCallback notifyEventsCallback,
133  UtlString& earlyDialogHandle);
134 
136 
142  UtlBoolean addSubscription(SipMessage& subscriptionRequest,
143  void* applicationData,
144  const SubscriptionStateCallback subscriptionStateCallback,
145  const NotifyEventCallback notifyEventsCallback,
146  UtlString& earlyDialogHandle);
147 
149 
160  UtlBoolean endSubscription(const char* dialogHandle);
161 
162 
164  void endAllSubscriptions();
165 
167  UtlBoolean handleMessage(OsMsg &eventMessage);
168 
169 /* ============================ ACCESSORS ================================= */
170 
172  int dumpStates(UtlString& dumpString);
173 
175  static void getSubscriptionStateEnumString(enum SubscriptionState stateValue,
176  UtlString& stateString);
177 
178 /* ============================ INQUIRY =================================== */
179 
181  int countSubscriptions();
182 
183 /* //////////////////////////// PROTECTED ///////////////////////////////// */
184 protected:
185 
186 /* //////////////////////////// PRIVATE /////////////////////////////////// */
187 private:
189 
191  static void refreshCallback(SipRefreshManager::RefreshRequestState newState,
192  const char* earlyDialogHandle,
193  const char* dialogHandle,
194  void* subscribeClientPtr,
195  int responseCode,
196  const char* responseText,
197  long expiration, // epoch seconds
198  const SipMessage* subscribeResponse);
199 
201  void handleNotifyRequest(const SipMessage& notifyRequest);
202 
204  void addState(SubscribeClientState& clientState);
205 
207  /* Assumes external locking
208  */
209  SubscribeClientState* getState(const UtlString& dialogHandle);
210 
212  /* Assumes external locking
213  */
214  SubscribeClientState* removeState(UtlString& dialogHandle);
215 
217  void lock();
219  void unlock();
220 
222  void getNextCallId(const char* resourceId,
223  const char* eventHeaderValue,
224  const char* fromFieldValue,
225  const char* contactFieldValue,
226  UtlString& callId);
227 
229  void getNextFromTag(const char* resourceId,
230  const char* eventHeaderValue,
231  const char* fromFieldValue,
232  const char* contactFieldValue,
233  UtlString& fromTag);
234 
236  SipSubscribeClient(const SipSubscribeClient& rSipSubscribeClient);
237 
239  SipSubscribeClient& operator=(const SipSubscribeClient& rhs);
240 
241  SipUserAgent* mpUserAgent;
242  SipDialogMgr* mpDialogMgr;
243  SipRefreshManager* mpRefreshMgr;
244  UtlHashMap mSubscriptions; // state info. for each subscription
245  UtlHashMap mEventTypes; // SIP event types that we want NOTIFY requests for
246  OsMutex mSubcribeClientMutex;
247  int mCallIdCount;
248  int mTagCount;
249 };
250 
251 /* ============================ INLINE METHODS ============================ */
252 
253 #endif // _SipSubscribeClient_h_
static void getSubscriptionStateEnumString(enum SubscriptionState stateValue, UtlString &stateString)
Get a string representation of the client state enumeration.
Definition: SipSubscribeClient.cpp:509
Transaction and Transport manager for SIP stack.
Definition: SipUserAgent.h:157
int countSubscriptions()
Get a count of the subscriptions which have been added.
Definition: SipSubscribeClient.cpp:480
void(* NotifyEventCallback)(const char *earlyDialogHandle, const char *dialogHandle, void *applicationData, const SipMessage *notifyRequest)
Definition: SipSubscribeClient.h:87
Definition: SipSubscribeClient.h:72
Definition: SipSubscribeClient.cpp:29
Definition: SipSubscribeClient.h:71
SubscriptionState
Definition: SipSubscribeClient.h:69
Specialization of HttpMessage to contain and manipulate SIP messages.
Definition: SipMessage.h:343
UtlBoolean handleMessage(OsMsg &eventMessage)
Handler for NOTIFY requests.
Definition: SipSubscribeClient.cpp:433
SipSubscribeClient(SipUserAgent &userAgent, SipDialogMgr &dialogMgr, SipRefreshManager &refreshMgr)
Default Dialog constructor.
Definition: SipSubscribeClient.cpp:128
Class for containing SIP dialog state information.
Definition: SipSubscribeClient.h:64
UtlBoolean endSubscription(const char *dialogHandle)
End the SIP event subscription indicated by the dialog handle.
Definition: SipSubscribeClient.cpp:309
RefreshRequestState
Definition: SipRefreshManager.h:50
void endAllSubscriptions()
End all subscriptions.
Definition: SipSubscribeClient.cpp:383
Class for refreshing SIP subscriptions and registrations.
Definition: SipDialogMgr.h:42
Class for refreshing SIP subscriptions and registrations.
Definition: SipRefreshManager.h:45
Definition: SipSubscribeClient.h:73
virtual ~SipSubscribeClient()
Destructor.
Definition: SipSubscribeClient.cpp:149
int dumpStates(UtlString &dumpString)
Create a debug dump of all the client states.
Definition: SipSubscribeClient.cpp:489
Definition: SipSubscribeClient.h:75
UtlBoolean addSubscription(const char *resourceId, const char *eventHeaderValue, const char *acceptHeaderValue, const char *fromFieldValue, const char *toFieldValue, const char *contactFieldValue, int subscriptionPeriodSeconds, void *applicationData, const SubscriptionStateCallback subscriptionStateCallback, const NotifyEventCallback notifyEventsCallback, UtlString &earlyDialogHandle)
Create a SIP event subscription for the given SUBSCRIBE header information.
Definition: SipSubscribeClient.cpp:182
void(* SubscriptionStateCallback)(SipSubscribeClient::SubscriptionState newState, const char *earlyDialogHandle, const char *dialogHandle, void *applicationData, int responseCode, const char *responseText, long expiration, const SipMessage *subscribeResponse)
Definition: SipSubscribeClient.h:78
Definition: SipSubscribeClient.h:74
static SipSubscribeClient * buildBasicClient(SipUserAgent &userAgent)
Create a SipDialogMgr, SipRefreshManager and construct a SipSubscribeClient.
Definition: SipSubscribeClient.cpp:118

sipXtackLib home page