258: def authenticate(username, password, resource, digest=false)
259: @username = username
260: @password = password
261: @resource = resource
262: @jid = JID.new("#{username}@#{@host}/#{resource}")
263: @roster.add(@jid, "both", "Me", "My Resources")
264:
265: msg_id = self.id
266: authHandler = Proc.new do |element|
267: if element.element_tag=="iq" and element.attr_id==msg_id
268: element.consume_element
269: if element.attr_type=="result"
270: @authenticated = true
271: elsif element.attr_type=="error"
272: @authenticated = false
273: end
274: end
275: end
276: if digest
277: require 'digest/sha1'
278: authRequest = Jabber::Protocol::Iq.gen_auth_digest(self, msg_id, username, Digest::SHA1.new(@session_id + password).hexdigest, resource)
279: else
280: authRequest = Jabber::Protocol::Iq.gen_auth(self, msg_id, username, password, resource)
281: end
282: @connection.send(authRequest, &authHandler)
283: Thread.stop
284: return @authenticated
285: end