Class Jabber::Client
In: lib/xmpp4r/client.rb
Parent: Connection
X XDelay XMuc XRoster XMucUser REXML::Element XRosterItem IqQuery XMLStanza IqVcard DiscoIdentity XMucUserItem DiscoItem Error RosterItem DiscoFeature IqQueryRoster IqQueryVersion IqQueryDiscoItems IqQueryDiscoInfo Message Presence Iq Singleton IdGenerator Connection Client Component Comparable JID RuntimeError ErrorException AuthenticationFailure RosterItem Stream StreamParser Roster Vcard Version lib/xmpp4r/authenticationfailure.rb lib/xmpp4r/iq/query/roster.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/iq/query/version.rb lib/xmpp4r/connection.rb lib/xmpp4r/x/mucuseritem.rb lib/xmpp4r/x/roster.rb lib/xmpp4r/iq.rb lib/xmpp4r/jid.rb lib/xmpp4r/iq/query.rb lib/xmpp4r/xmlstanza.rb lib/xmpp4r/x/delay.rb lib/xmpp4r/errorexception.rb lib/xmpp4r/client.rb lib/xmpp4r/stream.rb lib/xmpp4r/x/muc.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/x.rb lib/xmpp4r/iq/vcard.rb lib/xmpp4r/iq/query/discoinfo.rb lib/xmpp4r/error.rb lib/xmpp4r/component.rb lib/xmpp4r/message.rb lib/xmpp4r/iq/query/discoitems.rb lib/xmpp4r/presence.rb lib/xmpp4r/helpers/roster.rb lib/xmpp4r/helpers/vcard.rb lib/xmpp4r/helpers/version.rb Helpers Jabber Module: Jabber

The client class provides everything needed to build a basic XMPP Client.

Methods

auth   close   connect   new   password=  

Attributes

jid  [R]  The client’s JID

Public Class methods

Create a new Client. If threaded mode is activated, callbacks are called as soon as messages are received; If it isn’t, you have to call Stream#process from time to time. TODO SSL mode is not implemented yet.

[Source]

    # File lib/xmpp4r/client.rb, line 20
20:     def initialize(jid, threaded = true)
21:       super(threaded)
22:       @jid = jid
23:     end

Public Instance methods

Send auth with given password and wait for result

Throws AuthenticationFailure

password:[String] the password
digest:[Boolean] use Digest authentication

[Source]

    # File lib/xmpp4r/client.rb, line 53
53:     def auth(password, digest=true)
54:       authset = nil
55:       if digest
56:         authset = Iq::new_authset_digest(@jid, @streamid.to_s, password)
57:       else
58:         authset = Iq::new_authset(@jid, password)
59:       end
60:       authenticated = false
61:       send(authset) do |r|
62:         if r.kind_of?(Iq) and r.type == :result
63:           authenticated = true
64:           true
65:         elsif r.kind_of?(Iq) and r.type == :error
66:           true
67:         else
68:           false
69:         end
70:       end
71:       $defout.flush
72:       unless authenticated
73:         raise AuthenticationFailure.new, "Client authentication failed"
74:       end
75:     end

Close the connection, sends </stream:stream> tag first

[Source]

    # File lib/xmpp4r/client.rb, line 42
42:     def close
43:       send("</stream:stream>")
44:       super
45:     end

connect to the server (chaining-friendly)

host:[String] Optional c2s host, will be extracted from jid if nil
return:self

[Source]

    # File lib/xmpp4r/client.rb, line 30
30:     def connect(host = nil, port = 5222)
31:       super(host.nil? ? jid.domain : host, port)
32:       send("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='#{@jid.domain}'>") { |b| 
33:         # TODO sanity check : is b a stream ? get version, etc.
34:         true
35:       }
36:       self
37:     end

Change the client’s password

Threading is suggested, as this code waits for an answer.

Raises an exception upon error response (ErrorException from Stream#send_with_id).

new_password:[String] New password

[Source]

     # File lib/xmpp4r/client.rb, line 86
 86:     def password=(new_password)
 87:       iq = Iq::new_query(:set, @jid.domain)
 88:       iq.query.add_namespace('jabber:iq:register')
 89:       iq.query.add(REXML::Element.new('username')).text = @jid.node
 90:       iq.query.add(REXML::Element.new('password')).text = new_password
 91: 
 92:       err = nil
 93:       send_with_id(iq) { |answer|
 94:         if answer.type == :result
 95:           true
 96:         else
 97:           false
 98:         end
 99:       }
100:     end

[Validate]