yong-stropheruby 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest.txt +1 -1
- data/{README.rdoc → README.txt} +5 -0
- data/Rakefile +1 -1
- data/examples/xmpp_client.rb +7 -8
- data/ext/event.c +6 -2
- data/ext/extconf.rb +1 -1
- data/ext/strophe_ruby.c +36 -2
- metadata +2 -2
data/Manifest.txt
CHANGED
data/{README.rdoc → README.txt}
RENAMED
@@ -8,15 +8,20 @@ This is a fork of flamontagne's stropheruby (http://github.com/flamontagne/strop
|
|
8
8
|
* (libstrophe) Fixed a timeout issue on Mac OSX: http://groups.google.com/group/strophe-dev/browse_thread/thread/ef4cb19785020fb6
|
9
9
|
* (libstrophe) Fixed basic auth: http://groups.google.com/group/strophe-dev/browse_thread/thread/b770f72c83d1a0b9
|
10
10
|
* (libstrophe) Changed xmpp_run_once's return code so that the application can tell if an error or timeout occurs
|
11
|
+
* (libstrophe) Better error reporting for login failure
|
11
12
|
* (stropheruby) Added send_raw_string method
|
12
13
|
* (stropheruby) Detect login failure
|
13
14
|
* (stropheruby) Fix resource leak
|
15
|
+
* (stropheruby) Added wrapper class for xmpp_stream_error_t (StropheRuby::StreamError)
|
14
16
|
|
15
17
|
== INSTALLATION
|
16
18
|
|
17
19
|
sudo gem sources -a http://gems.github.com
|
18
20
|
sudo gem install yong-stropheruby
|
19
21
|
|
22
|
+
For Rails app, add this line in your config/environment.rb:
|
23
|
+
config.gem "yong-stropheruby", :source => "http://gems.github.com", :lib => "strophe_ruby"
|
24
|
+
|
20
25
|
== EXAMPLE
|
21
26
|
|
22
27
|
See example.rb
|
data/Rakefile
CHANGED
data/examples/xmpp_client.rb
CHANGED
@@ -18,22 +18,21 @@ class XmppClient
|
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
-
def new_connection(jid, password)
|
21
|
+
def new_connection(jid, password, login_can_not_fail = true)
|
22
22
|
lib = StropheRuby::EventLoop.prepare
|
23
23
|
@ctx = StropheRuby::Context.new(StropheRuby::Logging::DEBUG)
|
24
24
|
@connection = StropheRuby::Connection.new(@ctx)
|
25
25
|
@connection.jid = jid
|
26
26
|
@connection.password = password
|
27
|
-
|
28
|
-
@connection.connect do |status|
|
29
|
-
if !
|
30
|
-
|
31
|
-
if status != StropheRuby::ConnectionEvents::CONNECT
|
27
|
+
logged_in = false
|
28
|
+
@connection.connect do |status, error, stream_error|
|
29
|
+
if !logged_in
|
30
|
+
if login_can_not_fail && status != StropheRuby::ConnectionEvents::CONNECT
|
32
31
|
#do somthing after login fails
|
33
|
-
raise
|
32
|
+
raise "failed to login: #{error} #{stream_error}"
|
34
33
|
else
|
35
|
-
#do something after login
|
36
34
|
yield if block_given?
|
35
|
+
logged_in = true
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
data/ext/event.c
CHANGED
@@ -231,7 +231,10 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
|
|
231
231
|
}
|
232
232
|
|
233
233
|
/* no events happened */
|
234
|
-
if (ret == 0)
|
234
|
+
if (ret == 0) {
|
235
|
+
conn->error = ETIMEDOUT;
|
236
|
+
return 1;
|
237
|
+
}
|
235
238
|
|
236
239
|
/* process events */
|
237
240
|
connitem = ctx->connlist;
|
@@ -244,7 +247,8 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
|
|
244
247
|
/* connection complete */
|
245
248
|
|
246
249
|
/* check for error */
|
247
|
-
|
250
|
+
conn->error = sock_connect_error(conn->sock);
|
251
|
+
if (conn->error != 0) {
|
248
252
|
/* connection failed */
|
249
253
|
xmpp_debug(ctx, "xmpp", "connection failed");
|
250
254
|
conn_disconnect(conn);
|
data/ext/extconf.rb
CHANGED
data/ext/strophe_ruby.c
CHANGED
@@ -12,6 +12,7 @@ VALUE cStreamError;
|
|
12
12
|
VALUE cEventLoop;
|
13
13
|
VALUE client_conn_handler;
|
14
14
|
VALUE cStanza;
|
15
|
+
VALUE cStreamError;
|
15
16
|
|
16
17
|
/* release the stanza. Called automatically by the GC */
|
17
18
|
static void t_xmpp_stanza_release(void *stanza) {
|
@@ -186,8 +187,34 @@ static void _conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t stat
|
|
186
187
|
const int error, xmpp_stream_error_t * const stream_error,
|
187
188
|
void * const userdata) {
|
188
189
|
//yield code block for connection
|
189
|
-
if (RTEST(client_conn_handler))
|
190
|
-
|
190
|
+
if (RTEST(client_conn_handler)) {
|
191
|
+
VALUE args[3];
|
192
|
+
args[0] = INT2FIX(status);
|
193
|
+
args[1] = INT2FIX(error);
|
194
|
+
args[2] = (NULL == stream_error) ? Qnil : Data_Wrap_Struct(cStreamError, 0, NULL, stream_error);
|
195
|
+
rb_funcall2(client_conn_handler, rb_intern("call"), 3, args);
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
199
|
+
/*Get the type of a StreamError. */
|
200
|
+
static VALUE t_xmpp_stream_error_get_type(VALUE self) {
|
201
|
+
xmpp_stream_error_t *stream_error;
|
202
|
+
Data_Get_Struct(self, xmpp_stream_error_t, stream_error);
|
203
|
+
return INT2FIX(stream_error->type);
|
204
|
+
}
|
205
|
+
|
206
|
+
/*Get the text of a StreamError. */
|
207
|
+
static VALUE t_xmpp_stream_error_get_text(VALUE self) {
|
208
|
+
xmpp_stream_error_t *stream_error;
|
209
|
+
Data_Get_Struct(self, xmpp_stream_error_t, stream_error);
|
210
|
+
return (NULL != stream_error->text) ? rb_str_new2(stream_error->text) : Qnil;
|
211
|
+
}
|
212
|
+
|
213
|
+
/*Get the stanza of a StreamError. */
|
214
|
+
static VALUE t_xmpp_stream_error_get_stanza(VALUE self) {
|
215
|
+
xmpp_stream_error_t *stream_error;
|
216
|
+
Data_Get_Struct(self, xmpp_stream_error_t, stream_error);
|
217
|
+
return (NULL != stream_error->stanza) ? Data_Wrap_Struct(cStanza, 0, NULL, stream_error->stanza) : Qnil;
|
191
218
|
}
|
192
219
|
|
193
220
|
/*this is called in a loop (rb_iterate). We invoke the block passed by the user*/
|
@@ -506,6 +533,7 @@ static VALUE t_xmpp_stanza_set_ns(VALUE self, VALUE rb_ns) {
|
|
506
533
|
return Qtrue;
|
507
534
|
}
|
508
535
|
|
536
|
+
/*Convert Stanza to String */
|
509
537
|
static VALUE t_xmpp_stanza_to_text(VALUE self) {
|
510
538
|
xmpp_stanza_t *stanza;
|
511
539
|
Data_Get_Struct(self, xmpp_stanza_t, stanza);
|
@@ -661,6 +689,12 @@ void Init_strophe_ruby() {
|
|
661
689
|
rb_define_method(cConnection, "add_handler", t_xmpp_handler_add, 1);
|
662
690
|
rb_define_method(cConnection, "add_id_handler", t_xmpp_id_handler_add, 3);
|
663
691
|
|
692
|
+
/*StreamError*/
|
693
|
+
cStreamError = rb_define_class_under(mStropheRuby, "StreamError", rb_cObject);
|
694
|
+
rb_define_method(cStreamError, "error_type", t_xmpp_stream_error_get_type, 0);
|
695
|
+
rb_define_method(cStreamError, "text", t_xmpp_stream_error_get_text, 0);
|
696
|
+
rb_define_method(cStreamError, "stanza", t_xmpp_stream_error_get_stanza, 0);
|
697
|
+
|
664
698
|
/*Stanza*/
|
665
699
|
cStanza = rb_define_class_under(mStropheRuby, "Stanza", rb_cObject);
|
666
700
|
rb_define_singleton_method(cStanza, "new", t_xmpp_stanza_new, 0);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yong-stropheruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Fran\xC3\xA7ois Lamontagne"
|
@@ -38,7 +38,7 @@ files:
|
|
38
38
|
- History.txt
|
39
39
|
- Manifest.txt
|
40
40
|
- PostInstall.txt
|
41
|
-
- README.
|
41
|
+
- README.txt
|
42
42
|
- Rakefile
|
43
43
|
- ext/md5.c
|
44
44
|
- ext/parser.c
|