stropheruby 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.autotest ADDED
@@ -0,0 +1,9 @@
1
+ Autotest.add_hook :initialize do |at|
2
+ at.add_mapping(/ext\/.*\/(.*)\.[ch]/) do |_, m|
3
+ ["test/test_#{m[1]}_extn.rb"]
4
+ end
5
+ end
6
+
7
+ Autotest.add_hook :run_command do |at|
8
+ system "rake compile"
9
+ end
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 2008-12-05
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,40 @@
1
+ .autotest
2
+ History.txt
3
+ Manifest.txt
4
+ PostInstall.txt
5
+ README.txt
6
+ Rakefile
7
+ examples/xmpp_client.rb
8
+ ext/md5.c
9
+ ext/parser.c
10
+ ext/util.c
11
+ ext/strophe_ruby.c
12
+ ext/conn.c
13
+ ext/ctx.c
14
+ ext/jid.c
15
+ ext/handler.c
16
+ ext/hash.c
17
+ ext/sasl.c
18
+ ext/event.c
19
+ ext/auth.c
20
+ ext/thread.c
21
+ ext/stanza.c
22
+ ext/tls_dummy.c
23
+ ext/sha1.c
24
+ ext/snprintf.c
25
+ ext/sock.c
26
+ ext/tls.h
27
+ ext/sasl.h
28
+ ext/thread.h
29
+ ext/util.h
30
+ ext/common.h
31
+ ext/md5.h
32
+ ext/hash.h
33
+ ext/sha1.h
34
+ ext/sock.h
35
+ ext/strophe.h
36
+ ext/ostypes.h
37
+ lib/strophe_ruby.rb
38
+ test/test_helper.rb
39
+ test/test_strophe_ruby.rb
40
+ test/test_strophe_ruby_extn.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,4 @@
1
+ For more information on strophe_ruby, see http://strophe_ruby.rubyforge.org
2
+
3
+ NOTE: Change this information in PostInstall.txt
4
+ You can also delete it if you don't want it.
data/README.txt ADDED
@@ -0,0 +1,28 @@
1
+ == OVERVIEW
2
+
3
+ Stropheruby is a ruby bindings for Strophe, a C library for writing XMPP clients.
4
+
5
+ This is a fork of flamontagne's stropheruby (http://github.com/flamontagne/stropheruby/tree/master) with the following improvements:
6
+
7
+ * A patched version of libstrophe (trunk) is included. So there is no extra library to install.
8
+ * (libstrophe) Fixed a timeout issue on Mac OSX: http://groups.google.com/group/strophe-dev/browse_thread/thread/ef4cb19785020fb6
9
+ * (libstrophe) Fixed basic auth: http://groups.google.com/group/strophe-dev/browse_thread/thread/b770f72c83d1a0b9
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
12
+ * (libstrophe) If no password given, do not login. This will give 'register' a chance to run
13
+ * (stropheruby) Added send_raw_string method
14
+ * (stropheruby) Detect login failure
15
+ * (stropheruby) Fixed a resource leak
16
+ * (stropheruby) Added wrapper class for xmpp_stream_error_t (StropheRuby::StreamError)
17
+
18
+ == INSTALLATION
19
+
20
+ sudo gem sources -a http://gems.github.com
21
+ sudo gem install yong-stropheruby
22
+
23
+ For Rails app, add this line in your config/environment.rb:
24
+ config.gem "yong-stropheruby", :source => "http://gems.github.com", :lib => "strophe_ruby"
25
+
26
+ == EXAMPLE
27
+
28
+ See examples/xmpp_client.rb
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'hoe'
3
+
4
+ EXT = "ext/strophe_ruby.#{Hoe::DLEXT}"
5
+
6
+ Hoe.new('stropheruby', '0.1.3') do |p|
7
+ p.developer('François Lamontagne', 'flamontagne@gmail.com')
8
+ p.summary = 'strophe_ruby'
9
+
10
+ p.spec_extras[:extensions] = "ext/extconf.rb"
11
+ p.clean_globs << EXT << "ext/*.o" << "ext/Makefile"
12
+ end
13
+
14
+ task :test => EXT
15
+
16
+ file EXT => ["ext/extconf.rb", "ext/strophe_ruby.c"] do
17
+ Dir.chdir "ext" do
18
+ ruby "extconf.rb"
19
+ sh "make"
20
+ end
21
+ end
@@ -0,0 +1,77 @@
1
+ require 'strophe_ruby'
2
+
3
+ class XmppClient
4
+ def query_roster(jid, password)
5
+ new_connection(jid, password) {
6
+ current_stage = 1
7
+ @connection.add_handler("iq") do |iq|
8
+ case current_stage
9
+ when 1
10
+ @connection.send_raw_string("<iq type='get' id='#{Time.now.to_i.to_s}'><query xmlns='jabber:iq:roster'/></iq>")
11
+ current_stage += 1
12
+ else
13
+ StropheRuby::EventLoop.stop(@ctx)
14
+ end
15
+ end
16
+ }
17
+ end
18
+
19
+ def create_user(jid, password)
20
+ new_connection(jid, "", false) {
21
+ #create_user is special, it does not wait for an iq reply to send the resgister message
22
+ @connection.add_handler("iq") do |iq|
23
+ StropheRuby::EventLoop.stop(@ctx)
24
+ end
25
+ username = jid.split('@')[0]
26
+ hostname = jid.split('@')[1]
27
+ @connection.send_raw_string("<iq type='set' id='#{Time.now.to_i.to_s}' to='#{hostname}' xmlns='jabber:client'><query xmlns='jabber:iq:register'><username>#{username}</username><password>#{password}</password></query></iq>")
28
+ }
29
+ end
30
+
31
+ private
32
+
33
+ def new_connection(jid, password, login_can_not_fail = true)
34
+ lib = StropheRuby::EventLoop.prepare
35
+ @ctx = StropheRuby::Context.new(StropheRuby::Logging::DEBUG)
36
+ @connection = StropheRuby::Connection.new(@ctx)
37
+ @connection.jid = jid
38
+ @connection.password = password
39
+ logged_in = false
40
+ @connection.connect do |status, error, stream_error|
41
+ if !logged_in
42
+ if login_can_not_fail && status != StropheRuby::ConnectionEvents::CONNECT
43
+ #do somthing after login fails
44
+ raise "failed to login: #{error} #{stream_error}"
45
+ else
46
+ yield if block_given?
47
+ logged_in = true
48
+ end
49
+ end
50
+ end
51
+
52
+ run_event_loop_until_timeout_or_stopped_by_callback!
53
+ end
54
+
55
+ #run event loop until timeout or 'StropheRuby::EventLoop.stop' is called inside callback
56
+ def run_event_loop_until_timeout_or_stopped_by_callback!(timeout = 3000)
57
+ raise 'unexpected state' if (@ctx.loop_status != StropheRuby::EventLoop::LOOP_NOTSTARTED)
58
+ @ctx.loop_status = StropheRuby::EventLoop::LOOP_RUNNING
59
+
60
+ while @ctx.loop_status == StropheRuby::EventLoop::LOOP_RUNNING
61
+ #return if the socket is idle for more than timeout (in millisecond)
62
+ if StropheRuby::EventLoop.run_once(@ctx, timeout) != 0
63
+ @connection.disconnect
64
+ return false
65
+ end
66
+ end
67
+
68
+ @connection.disconnect
69
+ return true
70
+ end
71
+ end
72
+
73
+ if $0 == __FILE__
74
+ client = XmppClient.new
75
+ client.create_user("test@localhost", 'password')
76
+ client.query_roster("test@localhost", 'password')
77
+ end