blob: a68f82b34a6e424876d06f3670b5bc2ee9cf7131 [file] [log] [blame]
henrike@webrtc.org269fb4b2014-10-28 22:20:11 +00001/*
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
17namespace buzz {
18
19// forward declarations
20class XmppChatroomModule;
21class XmppChatroomHandler;
22class XmppChatroomMember;
23class XmppChatroomMemberEnumerator;
24
25enum 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.
33class XmppChatroomModule : public XmppModule {
34public:
35
36 //! Creates a new XmppChatroomModule
37 static XmppChatroomModule* Create();
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
106class XmppChatroomMemberEnumerator {
107public:
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
139class XmppChatroomMember {
140public:
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
159enum 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
189enum 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
209class XmppChatroomHandler {
210public:
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_