Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Jajcus/pyxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacek Konieczny <jajcus@jajcus.net>2004-01-24 23:39:23 +0300
committerJacek Konieczny <jajcus@jajcus.net>2004-01-24 23:39:23 +0300
commitb86ba15e7010073c4b958c799446b72dc7b825a3 (patch)
treea486d39fc6ca98d2fa0eed586d11d084a1e13c4d /examples
parentca93e132118e535623f28092a9184035ee344cec (diff)
- dummy jabber:iq:register support
Diffstat (limited to 'examples')
-rw-r--r--examples/echocomponent.py63
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()