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 21:57:08 +0300
committerJacek Konieczny <jajcus@jajcus.net>2004-01-24 21:57:08 +0300
commit2526200a39c16843cf49acae5cfdce2a3897a653 (patch)
treef7529c14696c5a2ade3f1f612be785ca995514ee /examples
parent24ceda0817dfb73a1aeec76c666f8d311d09cb59 (diff)
- example component
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/echocomponent.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/examples/echocomponent.py b/examples/echocomponent.py
new file mode 100755
index 0000000..0f6227d
--- /dev/null
+++ b/examples/echocomponent.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python -u
+#
+# This example is a simple "echo" component
+#
+# 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.
+#
+# 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
+#
+# For jabberd 1.4 (and similar) servers special "service" section must be added:
+# eg.:
+#
+# <service id="echolinker">
+# <host>echo.localhost</host>
+# <accept>
+# <ip>127.0.0.1</ip>
+# <port>5347</port>
+# <secret>verysecret</secret>
+# </accept>
+# </service>
+
+import sys
+
+from pyxmpp import ClientStream,JID,Iq,Presence,Message,StreamError
+import pyxmpp.jabberd
+
+class Component(pyxmpp.jabberd.Component):
+ def stream_state_changed(self,state,arg):
+ print "*** State changed: %s %r ***" % (state,arg)
+
+ def authenticated(self):
+ pyxmpp.jabberd.Component.authenticated(self)
+ self.stream.set_iq_get_handler("query","jabber:iq:version",self.get_version)
+ 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)
+
+ 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()
+ if subject:
+ subject=u"Re: "+subject
+ m=Message(
+ to=stanza.get_from(),
+ fr=stanza.get_to(),
+ type=stanza.get_type(),
+ subject=subject,
+ body=stanza.get_body())
+ self.stream.send(m)
+ return 1
+
+ def presence(self,stanza):
+ p=Presence(
+ type=stanza.get_type(),
+ to=stanza.get_from(),
+ fr=stanza.get_to(),
+ show=stanza.get_show(),
+ status=stanza.get_status()
+ );
+ self.stream.send(p)
+ return 1
+
+ def presence_control(self,stanza):
+ p=stanza.make_accept_response()
+ self.stream.send(p)
+ return 1
+
+if len(sys.argv)<5:
+ print "Usage:"
+ print "\t%s name secret server port" % (sys.argv[0],)
+ print "example:"
+ print "\t%s echo.localhost verysecret localhost 5347" % (sys.argv[0],)
+ sys.exit(1)
+
+print "creating component..."
+c=Component(JID(sys.argv[1]),sys.argv[2],sys.argv[3],int(sys.argv[4]),type="x-echo")
+
+print "connecting..."
+c.connect()
+
+print "looping..."
+try:
+ c.loop(1)
+except KeyboardInterrupt:
+ print "disconnecting..."
+ c.disconnect()
+ pass
+
+print "exiting..."