Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit12e542f

Browse files
committed
Updates XMPP namespaces.
1 parent8c2c551 commit12e542f

File tree

6 files changed

+261
-38
lines changed

6 files changed

+261
-38
lines changed

‎boost/network/protocol/xmpp/client.hpp‎

Lines changed: 137 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,30 @@
1212
#include<boost/network/traits/string.hpp>
1313
#include<boost/cstdint.hpp>
1414
#include<boost/bind.hpp>
15+
#include<boost/network/protocol/xmpp/namespaces.hpp>
1516
#include<boost/network/protocol/xmpp/message.hpp>
1617
#include<boost/network/protocol/xmpp/presence.hpp>
1718
#include<boost/network/protocol/xmpp/iq.hpp>
1819
#include<boost/asio/io_service.hpp>
20+
#include<boost/asio/placeholders.hpp>
1921
#include<boost/asio/ip/tcp.hpp>
22+
#include<deque>
2023

2124

2225
namespaceboost {
2326
namespacenetwork {
2427
namespacexmpp {
2528
template<
2629
classTag,
30+
unsigned version_major,
31+
unsigned version_minor,
2732
classHandler
2833
>
2934
classbasic_client : boost::noncopyable {
3035

3136
private:
3237

33-
typedef basic_client<Tag, Handler> this_type;
38+
typedef basic_client<Tag,version_major, version_minor,Handler> this_type;
3439

3540
public:
3641

@@ -44,28 +49,30 @@ class basic_client : boost::noncopyable {
4449

4550
~basic_client();
4651

47-
voidconnect(const string_type &proxy_host,
48-
const string_type &proxy_port);
52+
voidset_lang(const string_type &lang);
4953

50-
voiddisconnect();
54+
voidconnect(const string_type &jid,
55+
const string_type &password);
56+
57+
voidrun();
5158

52-
voidauthenticate(const string_type &jid,
53-
const string_type &password);
59+
voiddisconnect();
5460

5561
voidsend_message(const message_type &message);
5662

5763
voidsend_presence(const presence_type &presence);
5864

5965
voidsend_iq(const iq_type &iq);
6066

61-
voidset_jid(const string_type &jid);
62-
6367
string_typeget_jid()const;
6468

6569
private:
6670

67-
voidwrite_stanza(const basic_stanza<Tag> &stanza);
68-
voidclose_socket();
71+
voidhandle_connect(const boost::system::error_code &error,
72+
boost::asio::ip::tcp::resolver::iterator iterator);
73+
voidhandle_write_stanza(const basic_stanza<Tag> &stanza);
74+
voidhandle_read_stanza(const boost::system::error_code &ec);
75+
voidhandle_disconnect();
6976

7077
Handler &handler_;
7178

@@ -83,123 +90,216 @@ class basic_client : boost::noncopyable {
8390

8491
// xml parser
8592

93+
// std::deque<std::string> stanza_queue_;
94+
8695
};
8796

8897

8998
template<
9099
classTag,
100+
unsigned version_major,
101+
unsigned version_minor,
91102
classHandler
92103
>
93-
basic_client<Tag, Handler>::basic_client(Handler &handler)
104+
basic_client<Tag,version_major, version_minor,Handler>::basic_client(Handler &handler)
94105
: handler_(handler), socket_(io_service_) {
95-
// set the handlers
106+
96107
}
97108

98109

99110
template<
100111
classTag,
112+
unsigned version_major,
113+
unsigned version_minor,
114+
classHandler
115+
>
116+
basic_client<Tag, version_major, version_minor, Handler>::~basic_client() {
117+
118+
}
119+
120+
template<
121+
classTag,
122+
unsigned version_major,
123+
unsigned version_minor,
101124
classHandler
102125
>
103-
basic_client<Tag, Handler>::~basic_client() {
126+
voidbasic_client<Tag,version_major, version_minor,Handler>::set_lang(const string_type &lang) {
104127

105128
}
106129

107130

108131
template<
109132
classTag,
133+
unsigned version_major,
134+
unsigned version_minor,
110135
classHandler
111136
>
112-
void basic_client<Tag, Handler>::connect(const string_type &proxy_host,
113-
const string_type &proxy_port) {
137+
void basic_client<Tag, version_major, version_minor, Handler>::connect(const string_type &jid,
138+
const string_type &password) {
139+
using boost::asio::ip::tcp;
140+
114141
// get the JID domain
115-
// default port is52222
142+
// default port is5222
116143
// open socket
117144
// socket has a state
118145
// signal connection handler
146+
147+
jid_ = jid;
148+
149+
string_type host ="127.0.0.1";
150+
string_type port ="5222";
151+
152+
tcp::resolverresolver(io_service_);
153+
tcp::resolver::queryquery(host, port);
154+
tcp::resolver::iterator iterator = resolver.resolve(query);
155+
socket_.async_connect(&this_type::handle_connect,
156+
this,
157+
boost::asio::placeholders::error,
158+
iterator);
119159
}
120160

121161
template<
122162
classTag,
163+
unsigned version_major,
164+
unsigned version_minor,
123165
classHandler
124166
>
125-
void basic_client<Tag, Handler>::disconnect() {
126-
// close socket
127-
// signal connection handler
128-
io_service_.post(
129-
boost::bind(&this_type::close_socket,this));
167+
void basic_client<Tag, version_major, version_minor, Handler>::run() {
168+
io_service_.run();
130169
}
131170

132171
template<
133172
classTag,
173+
unsigned version_major,
174+
unsigned version_minor,
134175
classHandler
135176
>
136-
void basic_client<Tag, Handler>::authenticate(const string_type &jid,
137-
const string_type &password) {
138-
177+
void basic_client<Tag,version_major, version_minor,Handler>::disconnect() {
178+
io_service_.post(
179+
boost::bind(&this_type::handle_disconnect,this));
139180
}
140181

141182
template<
142183
classTag,
184+
unsigned version_major,
185+
unsigned version_minor,
143186
classHandler
144187
>
145-
void basic_client<Tag, Handler>::send_message(const message_type &message) {
188+
void basic_client<Tag,version_major, version_minor,Handler>::send_message(const message_type &message) {
146189
io_service_.post(
147-
boost::bind(&this_type::write_stanza,this,boost::ref(message)));
190+
boost::bind(&this_type::handle_write_stanza,this,boost::ref(message)));
148191
}
149192

150193
template<
151194
classTag,
195+
unsigned version_major,
196+
unsigned version_minor,
152197
classHandler
153198
>
154-
void basic_client<Tag, Handler>::send_presence(const presence_type &presence) {
199+
void basic_client<Tag,version_major, version_minor,Handler>::send_presence(const presence_type &presence) {
155200
io_service_.post(
156-
boost::bind(&this_type::write_stanza,this,boost::ref(presence)));
201+
boost::bind(&this_type::handle_write_stanza,this,boost::ref(presence)));
157202
}
158203

159204
template<
160205
classTag,
206+
unsigned version_major,
207+
unsigned version_minor,
161208
classHandler
162209
>
163-
void basic_client<Tag, Handler>::send_iq(const iq_type &iq) {
210+
void basic_client<Tag,version_major, version_minor,Handler>::send_iq(const iq_type &iq) {
164211
io_service_.post(
165-
boost::bind(&this_type::write_stanza,this,boost::ref(iq)));
212+
boost::bind(&this_type::handle_write_stanza,this,boost::ref(iq)));
166213
}
167214

168215
template<
169216
classTag,
217+
unsigned version_major,
218+
unsigned version_minor,
170219
classHandler
171220
>
172-
typename basic_client<Tag, Handler>::string_type
173-
basic_client<Tag, Handler>::get_jid()const {
221+
typename basic_client<Tag,version_major, version_minor,Handler>::string_type
222+
basic_client<Tag,version_major, version_minor,Handler>::get_jid()const {
174223
return jid_;
175224
}
176225

226+
template<
227+
classTag,
228+
unsigned version_major,
229+
unsigned version_minor,
230+
classHandler
231+
>
232+
void basic_client<Tag, version_major, version_minor, Handler>::handle_connect(
233+
const boost::system::error_code& ec,
234+
boost::asio::ip::tcp::resolver::iterator iterator) {
235+
if (!ec) {
236+
237+
// open stream
238+
// TODO: where does "lang" come from?
239+
string_type s =
240+
"<?xml version=\"%d.%d\"?>"
241+
"<stream:stream to=\"domain\""
242+
"xml:lang=\"lang\""
243+
"version=\"%d.%d\""
244+
"xmlns=\"%s\""// xmpp_ns_client or xmpp_ns_component
245+
"xmlns:stream=\"%s\">";// xmpp_ns_Streams
246+
247+
// boost::asio::async_read(
248+
// socket_,
249+
// boost::asio::buffer(read_msg_.data(), chat_message::header_length),
250+
// boost::bind(&chat_client::handle_read_header, this,
251+
// boost::asio::placeholders::error));
252+
}
253+
elseif (iterator !=boost::asio::ip::tcp::resolver::iterator()) {
254+
socket_.close();
255+
boost::asio::ip::tcp::endpoint endpoint = *iterator;
256+
socket_.async_connect(
257+
endpoint,
258+
boost::bind(&this_type::handle_connect,
259+
this,
260+
boost::asio::placeholders::error,
261+
++iterator));
262+
}
263+
else {
264+
// unable to connect
265+
}
266+
}
177267

178268
template<
179269
classTag,
270+
unsigned version_major,
271+
unsigned version_minor,
180272
classHandler
181273
>
182-
void basic_client<Tag, Handler>::write_stanza(const basic_stanza<Tag> &stanza) {
183-
274+
void basic_client<Tag, version_major, version_minor, Handler>::handle_write_stanza(const basic_stanza<Tag> &stanza) {
275+
// stanza ==> string
276+
// socket_.async_write(socket_,
277+
// boost::asio::buffer(stanza.string()),
278+
// boost::bind(&this_type::handle_write...))
184279
}
185280

186281

187282
template<
188283
classTag,
284+
unsigned version_major,
285+
unsigned version_minor,
189286
classHandler
190287
>
191-
void basic_client<Tag, Handler>::close_socket() {
288+
void basic_client<Tag, version_major, version_minor, Handler>::handle_disconnect() {
289+
// close stream
290+
string_type s ="</stream:stream>";
192291
socket_.close();
292+
// handler_.disconnected();
193293
}
194294

195295

196296
template<
197297
classHandler
198298
>
199-
structclient : basic_client<tags::default_, Handler> {
299+
structclient : basic_client<tags::default_,1,0,Handler> {
200300

201301
explicitclient(Handler &handler)
202-
: basic_client<tags::default_, Handler>(handler) {
302+
: basic_client<tags::default_,1, 0,Handler>(handler) {
203303

204304
}
205305

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright (c) Glyn Matthews 2010.
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// (See accompanying file LICENSE_1_0.txt or copy at
4+
// http://www.boost.org/LICENSE_1_0.txt)
5+
6+
7+
#ifndef __BOOST_NETWORK_PROTOCOL_XMPP_NAMESPACES_INC__
8+
#define__BOOST_NETWORK_PROTOCOL_XMPP_NAMESPACES_INC__
9+
10+
11+
#include<boost/network/traits/string.hpp>
12+
13+
14+
namespaceboost {
15+
namespacenetwork {
16+
namespacexmpp {
17+
namespacens {
18+
template<
19+
classTag
20+
>
21+
inline
22+
typename string<Tag>::typeclient() {
23+
staticconstchar client[] = {
24+
'j','a','b','b','e','r',':','c','l','i','e','n','t'};
25+
returntypename string<Tag>::type(
26+
client, client +sizeof(client));
27+
}
28+
29+
template<
30+
classTag
31+
>
32+
inline
33+
typename string<Tag>::typeserver() {
34+
staticconstchar server[] = {
35+
'j','a','b','b','e','r',':','s','e','r','v','e','r'};
36+
returntypename string<Tag>::type(
37+
server, server +sizeof(server));
38+
}
39+
40+
template<
41+
classTag
42+
>
43+
inline
44+
typename string<Tag>::typecomponent() {
45+
staticconstchar component[] = {
46+
'j','a','b','b','e','r',':','c','o','m','p','o',
47+
'n','e','n','t',':','a','c','c','e','p','t'};
48+
returntypename string<Tag>::type(
49+
component, component +sizeof(component));
50+
}
51+
52+
template<
53+
classTag
54+
>
55+
inline
56+
typename string<Tag>::typestreams() {
57+
staticconstchar streams[] = {
58+
'h','t','t','p',':','/','/','e','t','h','e','r',
59+
'x','.','j','a','b','b','e','r','.','o','r','g',
60+
'/','s','t','r','e','a','m','s'};
61+
returntypename string<Tag>::type(
62+
streams, streams +sizeof(streams));
63+
}
64+
65+
template<
66+
classTag
67+
>
68+
inline
69+
typename string<Tag>::typestreams_ietf() {
70+
staticconstchar streams_ietf[] = {
71+
'u','r','n',':','i','e','t','f',':','p','a','r',
72+
'a','m','s',':','x','m','l',':','n','s',':','x',
73+
'm','p','p','-','s','t','r','e','a','m','s'};
74+
returntypename string<Tag>::type(
75+
streams_ietf, streams_ietf +sizeof(streams_ietf));
76+
}
77+
}// namespace ns
78+
}// namespace xmpp
79+
}// namespace network
80+
}// namespace boost
81+
82+
83+
#endif// __BOOST_NETWORK_PROTOCOL_XMPP_NAMESPACES_INC__

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp