PTLib Version 2.12.9

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
xmpp_c2s.h
Go to the documentation of this file.
1 /*
2 * xmpp_c2s.h
3 *
4 * Extensible Messaging and Presence Protocol (XMPP) Core
5 * Client to Server communication classes
6 *
7 * Portable Windows Library
8 *
9 * Copyright (c) 2004 Reitek S.p.A.
10 *
11 * The contents of this file are subject to the Mozilla Public License
12 * Version 1.0 (the "License"); you may not use this file except in
13 * compliance with the License. You may obtain a copy of the License at
14 * http://www.mozilla.org/MPL/
15 *
16 * Software distributed under the License is distributed on an "AS IS"
17 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18 * the License for the specific language governing rights and limitations
19 * under the License.
20 *
21 * The Original Code is Portable Windows Library.
22 *
23 * The Initial Developer of the Original Code is Post Increment
24 *
25 * Contributor(s): ______________________________________.
26 *
27 * $Revision: 26296 $
28 * $Author: rjongbloed $
29 * $Date: 2011-08-11 15:58:50 +1000 (Thu, 11 Aug 2011) $
30 */
31
32 #ifndef PTLIB_XMPP_C2S_H
33 #define PTLIB_XMPP_C2S_H
34
35 #ifdef P_USE_PRAGMA
36 #pragma interface
37 #endif
38
39 #include <ptclib/xmpp.h>
40
41 #if P_EXPAT
42
43 #include <ptclib/psasl.h>
44 #include <ptlib/sockets.h>
45
46
48
49 namespace XMPP
50 {
51 namespace C2S
52 {
53
56 class TCPTransport : public Transport
57 {
58 PCLASSINFO(TCPTransport, Transport);
59
60 public:
61 TCPTransport(const PString& hostname);
62 TCPTransport(const PString& hostname, WORD port);
63 ~TCPTransport();
64
65 const PString& GetServerHost() const { return m_Hostname; }
66 WORD GetServerPort() const { return m_Port; }
67
68 virtual PBoolean Open();
69 virtual PBoolean Close();
70
71 protected:
72 PString m_Hostname;
73 WORD m_Port;
74 PTCPSocket * m_Socket;
75 };
76
77
81 class StreamHandler : public BaseStreamHandler
82 {
83 PCLASSINFO(StreamHandler, BaseStreamHandler);
84
85 public:
86 StreamHandler(const JID& jid, const PString& pwd, PBoolean newAccount = false);
87 ~StreamHandler();
88
89 virtual PBoolean IsEstablished() const { return m_State == Established; }
90
91 virtual PBoolean Start(Transport * transport = 0);
92
99 PBoolean Send(Stanza * stanza);
100
101 void SetVersion(WORD major, WORD minor);
102 void GetVersion(WORD& major, WORD& minor) const;
103
104 const JID& GetJID() const { return m_JID; }
105
111 PNotifierList& SessionEstablishedHandlers() { return m_SessionEstablishedHandlers; }
112 PNotifierList& SessionReleasedHandlers() { return m_SessionReleasedHandlers; }
113
120 PNotifierList& ErrorHandlers() { return m_ErrorHandlers; }
121 PNotifierList& MessageHandlers() { return m_MessageHandlers; }
122 PNotifierList& PresenceHandlers() { return m_PresenceHandlers; }
123 PNotifierList& IQHandlers() { return m_IQHandlers; }
124
129 PNotifierList& IQNamespaceHandlers(const PString& xml_namespace);
130
136 PNotifierList& MessageSenderHandlers(const JID& from);
137
142 virtual PBoolean DiscoverItems(
143 const PString& jid,
144 const PNotifier & responseHandler,
145 const PString& node = PString::Empty()
146 );
147 virtual PBoolean DiscoverInfo(
148 const PString& jid,
149 const PNotifier & responseHandler,
150 const PString& node = PString::Empty()
151 );
152
153 protected:
154 virtual void OnOpen(Stream& stream, INT);
155 virtual void OnClose(Stream& stream, INT);
156 virtual void StartRegistration();
157 virtual void StartAuthNegotiation();
158
159 virtual void OnSessionEstablished();
160 virtual void OnSessionReleased();
161 virtual void OnElement(PXML& pdu);
162 virtual void OnError(PXML& pdu);
163
164 virtual void OnMessage(XMPP::Message& pdu);
165 virtual void OnPresence(XMPP::Presence& pdu);
166 virtual void OnIQ(XMPP::IQ& pdu);
167
168 // State handlers
169 virtual void HandleNullState(PXML& pdu);
170 virtual void HandleRegStartedState(PXML& pdu);
171 virtual void HandleTLSStartedState(PXML& pdu);
172 #if P_SASL
173 virtual void HandleSASLStartedState(PXML& pdu);
174 #endif
175 virtual void HandleNonSASLStartedState(PXML& pdu);
176 virtual void HandleStreamSentState(PXML& pdu);
177 virtual void HandleBindSentState(PXML& pdu);
178 virtual void HandleSessionSentState(PXML& pdu);
179 virtual void HandleEstablishedState(PXML& pdu);
180
181 virtual PBoolean Discover(const PString& xmlns,
182 const PString& jid,
183 const PNotifier & responseHandler,
184 const PString& node);
185
186 WORD m_VersionMajor;
187 WORD m_VersionMinor;
188 PString m_StreamID;
189 PBoolean m_NewAccount;
190 JID m_JID;
191 const PString m_Password;
192 #if P_SASL
193 PSASLClient m_SASL;
194 PString m_Mechanism;
195 #endif
196 PBoolean m_HasBind;
197 PBoolean m_HasSession;
198
199 PNotifierList m_SessionEstablishedHandlers;
200 PNotifierList m_SessionReleasedHandlers;
201 PNotifierList m_ErrorHandlers;
202 PNotifierList m_MessageHandlers;
203 PNotifierList m_PresenceHandlers;
204 PNotifierList m_IQHandlers;
205 PDictionary<PString, PNotifierList> m_IQNamespaceHandlers;
206 PDictionary<JID, PNotifierList> m_MessageSenderHandlers;
207
208 PMutex m_PendingIQsLock;
209 StanzaList m_PendingIQs;
210
211 enum StreamState
212 {
213 Null,
214 RegStarted,
215 TLSStarted,
216 SASLStarted,
217 NonSASLStarted,
218 StreamSent,
219 BindSent,
220 SessionSent,
221 Established
222 };
223
224 virtual void SetState(StreamState s);
225
226 StreamState m_State;
227 };
228
229 } // namespace C2S
230 } // namespace XMPP
231
232
233 #endif // P_EXPAT
234
235 #endif // PTLIB_XMPP_C2S_H
236
237 // End of File ///////////////////////////////////////////////////////////////