File: SipPresenceMonitor.h

package info (click to toggle)
sipxtapi 3.3.0~test18%2Bdfsg.1-0.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 55,892 kB
  • sloc: cpp: 435,979; ansic: 14,207; makefile: 2,491; java: 2,264; sh: 1,310; perl: 844; xml: 225; awk: 5
file content (121 lines) | stat: -rw-r--r-- 3,917 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// Copyright (C) 2004-2006 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// Copyright (C) 2004-2006 Pingtel Corp.  All rights reserved.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
///////////////////////////////////////////////////////////////////////////////

#ifndef _SIPPRESENCEMONITOR_H_
#define _SIPPRESENCEMONITOR_H_

// SYSTEM INCLUDES
//#include <...>

// APPLICATION INCLUDES
#include <os/OsBSem.h>
#include <net/StateChangeNotifier.h>
#include <cp/PresenceDialInServer.h>
#include <net/SipUserAgent.h>
#include <net/SipDialogMgr.h>
#include <net/SipSubscriptionMgr.h>
#include <net/SipSubscribeServerEventHandler.h>
#include <net/SipSubscribeServer.h>
#include <net/SipRefreshManager.h>
#include <net/SipPublishContentMgr.h>
#include <net/SipPresenceEvent.h>
#include <utl/UtlSList.h>
#include <utl/UtlHashMap.h>
#include <cp/CallManager.h>
#include <net/SdpCodecFactory.h>

// DEFINES
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// CONSTANTS
// STRUCTS
// TYPEDEFS
// FORWARD DECLARATIONS

/**
 * A SipPresenceMonitor is an object that is used for keeping track of the SIP
 * user agents' presence status. All the presence information is stored in a
 * NOTIFIER so that other clients can subscribe the information via
 * SUBSCRIBE/NOTIFY. Furthermore, if a StateChangeNotifier is registered with
 * SipPresenceMonitor, the state change will also be sent out via the
 * StateChangeNotifier.
 *
 */

class SipPresenceMonitor : public StateChangeNotifier
{
  public:

   SipPresenceMonitor(SipUserAgent* userAgent, /**<
                                               * Sip user agent for sending out
                                               * SUBSCRIBEs and receiving NOTIFYs
                                               */
                    UtlString& domainName,    ///< sipX domain name
                    int hostPort,             ///< Host port
                    UtlString& configFile,    ///< Xml formated configuration
                    bool toBePublished);      ///< option to publish for other subscriptions

   virtual ~SipPresenceMonitor();

   /// Add an extension to a group to be monitored
   bool addExtension(UtlString& groupName, Url& contactUrl);

   /// Remove an extension from a group to be monitored
   bool removeExtension(UtlString& groupName, Url& contactUrl); 

   /// Registered a StateChangeNotifier
   void addStateChangeNotifier(const char* fileUrl, StateChangeNotifier* notifier);

   /// Unregistered a StateChangeNotifier
   void removeStateChangeNotifier(const char* fileUrl);

   /// Set the status value
   virtual bool setStatus(const Url& aor, const Status value);

  protected:

   /// Add the contact and presence event to the subscribe list
   bool addPresenceEvent(UtlString& contact, SipPresenceEvent* presenceEvent);

   /// Publish the presence event package to the resource list
   void publishContent(UtlString& contact, SipPresenceEvent* presenceEvent);

   /// Send the state change to the notifier
   void notifyStateChange(UtlString& contact, SipPresenceEvent* presenceEvent);
                                   
  private:

   CallManager* mpCallManager;
   SdpCodecFactory mCodecFactory;
   PresenceDialInServer* mpDialInServer;
   SipUserAgent* mpUserAgent;  
   UtlString mDomainName;
   bool mToBePublished;
   
   OsBSem mLock;
   
   SipDialogMgr mDialogMgr;
   SipSubscriptionMgr* mpSubscriptionMgr;
   SipSubscribeServerEventHandler mPolicyHolder;
   SipPublishContentMgr mSipPublishContentMgr;
   SipSubscribeServer* mpSubscribeServer;

   UtlHashMap mMonitoredLists;
   UtlHashMap mPresenceEventList;
   UtlHashMap mStateChangeNotifiers;   

   /// Disabled copy constructor
   SipPresenceMonitor(const SipPresenceMonitor& rSipPresenceMonitor);

   /// Disabled assignment operator
   SipPresenceMonitor& operator=(const SipPresenceMonitor& rhs);
};

#endif // _SIPPRESENCEMONITOR_H_