• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_LIBJINGLE_XMPP_CHATROOMMODULE_H_
12 #define WEBRTC_LIBJINGLE_XMPP_CHATROOMMODULE_H_
13 
14 #include "webrtc/libjingle/xmpp/module.h"
15 #include "webrtc/libjingle/xmpp/rostermodule.h"
16 
17 namespace buzz {
18 
19 // forward declarations
20 class XmppChatroomModule;
21 class XmppChatroomHandler;
22 class XmppChatroomMember;
23 class XmppChatroomMemberEnumerator;
24 
25 enum XmppChatroomState {
26   XMPP_CHATROOM_STATE_NOT_IN_ROOM      = 0,
27   XMPP_CHATROOM_STATE_REQUESTED_ENTER  = 1,
28   XMPP_CHATROOM_STATE_IN_ROOM          = 2,
29   XMPP_CHATROOM_STATE_REQUESTED_EXIT   = 3,
30 };
31 
32 //! Module that encapsulates a chatroom.
33 class XmppChatroomModule : public XmppModule {
34 public:
35 
36   //! Creates a new XmppChatroomModule
37   static XmppChatroomModule* Create();
~XmppChatroomModule()38   virtual ~XmppChatroomModule() {}
39 
40   //! Sets the chatroom handler (callbacks) for the chatroom
41   virtual XmppReturnStatus set_chatroom_handler(XmppChatroomHandler* handler) = 0;
42 
43   //! Gets the chatroom handler for the module
44   virtual XmppChatroomHandler* chatroom_handler() = 0;
45 
46   //! Sets the jid of the chatroom.
47   //! Has to be set before entering the chatroom and can't be changed
48   //! while in the chatroom
49   virtual XmppReturnStatus set_chatroom_jid(const Jid& chatroom_jid) = 0;
50 
51   //! The jid for the chatroom
52   virtual const Jid& chatroom_jid() const = 0;
53 
54   //! Sets the nickname of the member
55   //! Has to be set before entering the chatroom and can't be changed
56   //! while in the chatroom
57   virtual XmppReturnStatus set_nickname(const std::string& nickname) = 0;
58 
59   //! The nickname of the member in the chatroom
60   virtual const std::string& nickname() const = 0;
61 
62   //! Returns the jid of the member (this is the chatroom_jid plus the
63   //! nickname as the resource name)
64   virtual const Jid member_jid() const = 0;
65 
66   //! Requests that the user enter a chatroom
67   //! The EnterChatroom callback will be called when the request is complete.
68   //! Password should be empty for a room that doesn't require a password
69   //! If the room doesn't exist, the server will create an "Instant Room" if the
70   //! server policy supports this action.
71   //! There will be different methods for creating/configuring a "Reserved Room"
72   //! Async callback for this method is ChatroomEnteredStatus
73   virtual XmppReturnStatus RequestEnterChatroom(const std::string& password,
74       const std::string& client_version,
75       const std::string& locale) = 0;
76 
77   //! Requests that the user exit a chatroom
78   //! Async callback for this method is ChatroomExitedStatus
79   virtual XmppReturnStatus RequestExitChatroom() = 0;
80 
81   //! Requests a status change
82   //! status is the standard XMPP status code
83   //! extended_status is the extended status when status is XMPP_PRESENCE_XA
84   virtual XmppReturnStatus RequestConnectionStatusChange(
85       XmppPresenceConnectionStatus connection_status) = 0;
86 
87   //! Returns the number of members in the room
88   virtual size_t GetChatroomMemberCount() = 0;
89 
90   //! Gets an enumerator for the members in the chatroom
91   //! The caller must delete the enumerator when the caller is finished with it.
92   //! The caller must also ensure that the lifetime of the enumerator is
93   //! scoped by the XmppChatRoomModule that created it.
94   virtual XmppReturnStatus CreateMemberEnumerator(XmppChatroomMemberEnumerator** enumerator) = 0;
95 
96   //! Gets the subject of the chatroom
97   virtual const std::string subject() = 0;
98 
99   //! Returns the current state of the user with respect to the chatroom
100   virtual XmppChatroomState state() = 0;
101 
102   virtual XmppReturnStatus SendMessage(const XmlElement& message) = 0;
103 };
104 
105 //! Class for enumerating participatns
106 class XmppChatroomMemberEnumerator {
107 public:
~XmppChatroomMemberEnumerator()108   virtual ~XmppChatroomMemberEnumerator() { }
109   //! Returns the member at the current position
110   //! Returns null if the enumerator is before the beginning
111   //! or after the end of the collection
112   virtual XmppChatroomMember* current() = 0;
113 
114   //! Returns whether the enumerator is valid
115   //! This returns true if the collection has changed
116   //! since the enumerator was created
117   virtual bool IsValid() = 0;
118 
119   //! Returns whether the enumerator is before the beginning
120   //! This is the initial state of the enumerator
121   virtual bool IsBeforeBeginning() = 0;
122 
123   //! Returns whether the enumerator is after the end
124   virtual bool IsAfterEnd() = 0;
125 
126   //! Advances the enumerator to the next position
127   //! Returns false is the enumerator is advanced
128   //! off the end of the collection
129   virtual bool Next() = 0;
130 
131   //! Advances the enumerator to the previous position
132   //! Returns false is the enumerator is advanced
133   //! off the end of the collection
134   virtual bool Prev() = 0;
135 };
136 
137 
138 //! Represents a single member in a chatroom
139 class XmppChatroomMember {
140 public:
~XmppChatroomMember()141   virtual ~XmppChatroomMember() { }
142 
143   //! The jid for the member in the chatroom
144   virtual const Jid member_jid() const = 0;
145 
146   //! The full jid for the member
147   //! This is only available in non-anonymous rooms.
148   //! If the room is anonymous, this returns JID_EMPTY
149   virtual const Jid full_jid() const = 0;
150 
151    //! Returns the backing presence for this member
152   virtual const XmppPresence* presence() const = 0;
153 
154   //! The nickname for this member
155   virtual const std::string name() const = 0;
156 };
157 
158 //! Status codes for ChatroomEnteredStatus callback
159 enum XmppChatroomEnteredStatus
160 {
161   //! User successfully entered the room
162   XMPP_CHATROOM_ENTERED_SUCCESS                    = 0,
163   //! The nickname confliced with somebody already in the room
164   XMPP_CHATROOM_ENTERED_FAILURE_NICKNAME_CONFLICT  = 1,
165   //! A password is required to enter the room
166   XMPP_CHATROOM_ENTERED_FAILURE_PASSWORD_REQUIRED  = 2,
167   //! The specified password was incorrect
168   XMPP_CHATROOM_ENTERED_FAILURE_PASSWORD_INCORRECT = 3,
169   //! The user is not a member of a member-only room
170   XMPP_CHATROOM_ENTERED_FAILURE_NOT_A_MEMBER       = 4,
171   //! The user cannot enter because the user has been banned
172   XMPP_CHATROOM_ENTERED_FAILURE_MEMBER_BANNED      = 5,
173   //! The room has the maximum number of users already
174   XMPP_CHATROOM_ENTERED_FAILURE_MAX_USERS          = 6,
175   //! The room has been locked by an administrator
176   XMPP_CHATROOM_ENTERED_FAILURE_ROOM_LOCKED        = 7,
177   //! Someone in the room has blocked you
178   XMPP_CHATROOM_ENTERED_FAILURE_MEMBER_BLOCKED     = 8,
179   //! You have blocked someone in the room
180   XMPP_CHATROOM_ENTERED_FAILURE_MEMBER_BLOCKING    = 9,
181   //! Client is old. User must upgrade to a more recent version for
182   // hangouts to work.
183   XMPP_CHATROOM_ENTERED_FAILURE_OUTDATED_CLIENT    = 10,
184   //! Some other reason
185   XMPP_CHATROOM_ENTERED_FAILURE_UNSPECIFIED        = 2000,
186 };
187 
188 //! Status codes for ChatroomExitedStatus callback
189 enum XmppChatroomExitedStatus
190 {
191   //! The user requested to exit and did so
192   XMPP_CHATROOM_EXITED_REQUESTED                   = 0,
193   //! The user was banned from the room
194   XMPP_CHATROOM_EXITED_BANNED                      = 1,
195   //! The user has been kicked out of the room
196   XMPP_CHATROOM_EXITED_KICKED                      = 2,
197   //! The user has been removed from the room because the
198   //! user is no longer a member of a member-only room
199   //! or the room has changed to membership-only
200   XMPP_CHATROOM_EXITED_NOT_A_MEMBER                = 3,
201   //! The system is shutting down
202   XMPP_CHATROOM_EXITED_SYSTEM_SHUTDOWN             = 4,
203   //! For some other reason
204   XMPP_CHATROOM_EXITED_UNSPECIFIED                 = 5,
205 };
206 
207 //! The XmppChatroomHandler is the interface for callbacks from the
208 //! the chatroom
209 class XmppChatroomHandler {
210 public:
~XmppChatroomHandler()211   virtual ~XmppChatroomHandler() {}
212 
213   //! Indicates the response to RequestEnterChatroom method
214   //! XMPP_CHATROOM_SUCCESS represents success.
215   //! Other status codes are for errors
216   virtual void ChatroomEnteredStatus(XmppChatroomModule* room,
217                                      const XmppPresence* presence,
218                                      XmppChatroomEnteredStatus status) = 0;
219 
220 
221   //! Indicates that the user has exited the chatroom, either due to
222   //! a call to RequestExitChatroom or for some other reason.
223   //! status indicates the reason the user exited
224   virtual void ChatroomExitedStatus(XmppChatroomModule* room,
225                                     XmppChatroomExitedStatus status) = 0;
226 
227   //! Indicates a member entered the room.
228   //! It can be called before ChatroomEnteredStatus.
229   virtual void MemberEntered(XmppChatroomModule* room,
230                                   const XmppChatroomMember* entered_member) = 0;
231 
232   //! Indicates that a member exited the room.
233   virtual void MemberExited(XmppChatroomModule* room,
234                               const XmppChatroomMember* exited_member) = 0;
235 
236   //! Indicates that the data for the member has changed
237   //! (such as the nickname or presence)
238   virtual void MemberChanged(XmppChatroomModule* room,
239                              const XmppChatroomMember* changed_member) = 0;
240 
241   //! Indicates a new message has been received
242   //! message is the message -
243   // $TODO - message should be changed
244   //! to a strongly-typed message class that contains info
245   //! such as the sender, message bodies, etc.,
246   virtual void MessageReceived(XmppChatroomModule* room,
247                                const XmlElement& message) = 0;
248 };
249 
250 
251 }
252 
253 #endif  // WEBRTC_LIBJINGLE_XMPP_CHATROOMMODULE_H_
254