diff options
author | Jacek Konieczny <jajcus@jajcus.net> | 2004-01-24 23:39:23 +0300 |
---|---|---|
committer | Jacek Konieczny <jajcus@jajcus.net> | 2004-01-24 23:39:23 +0300 |
commit | b86ba15e7010073c4b958c799446b72dc7b825a3 (patch) | |
tree | a486d39fc6ca98d2fa0eed586d11d084a1e13c4d /examples | |
parent | ca93e132118e535623f28092a9184035ee344cec (diff) |
- dummy jabber:iq:register support
Diffstat (limited to 'examples')
-rw-r--r-- | examples/echocomponent.py | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/examples/echocomponent.py b/examples/echocomponent.py index 45ddd89..d35b1a5 100644 --- a/examples/echocomponent.py +++ b/examples/echocomponent.py @@ -4,7 +4,7 @@ # # After connecting to jabberd it will echo messages and presence. This # component also has basic Disco support (implemented in -# pyxmpp.jabberd.Component class) and replies to version queries. +# pyxmpp.jabberd.Component class), jabber:iq:vesion and dummy jabber:iq:register. # # To use it with jabberd 2.0 no changes in jabberd configuration are needed # just pass jabberd 2.0 router IP, port and secret as command args @@ -33,7 +33,10 @@ class Component(pyxmpp.jabberd.Component): def authenticated(self): pyxmpp.jabberd.Component.authenticated(self) self.stream.set_iq_get_handler("query","jabber:iq:version",self.get_version) + self.stream.set_iq_get_handler("query","jabber:iq:register",self.get_register) + self.stream.set_iq_set_handler("query","jabber:iq:register",self.set_register) self.disco_info.add_feature("jabber:iq:version") + self.disco_info.add_feature("jabber:iq:register") self.stream.set_presence_handler("available",self.presence) self.stream.set_presence_handler("subscribe",self.presence_control) self.stream.set_message_handler("normal",self.message) @@ -45,6 +48,64 @@ class Component(pyxmpp.jabberd.Component): q.newTextChild(q.ns(),"version","1.0") self.stream.send(iq) return 1 + + def get_register(self,iq): + to=iq.get_to() + if to and to!=self.jid: + iq=iq.make_error_response("feature-not-implemented") + self.stream.send(iq) + return 1 + iq=iq.make_result_response() + q=iq.new_query("jabber:iq:register") + q.newTextChild(q.ns(),"instructions","Enter anything below.") + q.newChild(q.ns(),"username",None) + q.newChild(q.ns(),"password",None) + self.stream.send(iq) + return 1 + + def set_register(self,iq): + to=iq.get_to() + if to and to!=self.jid: + iq=iq.make_error_response("feature-not-implemented") + self.stream.send(iq) + return 1 + remove=iq.xpath_eval("r:query/r:remove",{"r":"jabber:iq:register"}) + if remove: + m=Message(fr=iq.get_to(),to=iq.get_from(),type="chat", + body=u"Unregistered") + self.stream.send(m) + p=Presence(fr=iq.get_to(),to=iq.get_from(),type="unsubscribe") + self.stream.send(p) + p=Presence(fr=iq.get_to(),to=iq.get_from(),type="unsubscribed") + self.stream.send(p) + return 1 + username=iq.xpath_eval("r:query/r:username",{"r":"jabber:iq:register"}) + if username: + username=username[0].getContent() + else: + username=u"" + password=iq.xpath_eval("r:query/r:password",{"r":"jabber:iq:register"}) + if password: + password=password[0].getContent() + else: + password=u"" + m=Message(fr=iq.get_to(),to=iq.get_from(),type="chat", + body=u"Registered with username '%s' and password '%s'" + " (both ignored)" % (username,password)) + self.stream.send(m) + p=Presence(fr=iq.get_to(),to=iq.get_from(),type="subscribe") + self.stream.send(p) + iq=iq.make_result_response() + self.stream.send(iq) + return 1 + + def get_version(self,iq): + iq=iq.make_result_response() + q=iq.new_query("jabber:iq:version") + q.newTextChild(q.ns(),"name","Echo component") + q.newTextChild(q.ns(),"version","1.0") + self.stream.send(iq) + return 1 def message(self,stanza): subject=stanza.get_subject() |