8
from pyxmpp.all import JID,Iq,Presence,Message,StreamError
9
from pyxmpp.jabber.client import JabberClient
10
from pyxmpp.jabber.clientstream import LegacyAuthenticationError
12
from pyxmpp.jabber.simple import xmpp_do
13
from pyxmpp.jabber.register import Register
15
class ClientXMPP(JabberClient):
16
def __init__(self, jid, password, debug=False):
17
if isinstance(jid, str) or isinstance(jid, unicode):
20
self.main_loop = gobject.MainLoop()
21
self.is_connected = False
23
self._exception = None
27
self.email = jid.as_unicode()
29
# if bare JID is provided add a resource -- it is required
31
jid=JID(jid.node, jid.domain, "UDT")
33
# setup client with provided connection information
35
JabberClient.__init__(self, jid, password,
36
disco_name="PyXMPP example: echo bot", disco_type="bot")
39
self.is_connected = True
40
JabberClient.connected(self)
42
def disconnected(self):
43
self.is_connected = False
44
JabberClient.disconnected(self)
46
def process_registration_form(self, stanza, form):
47
if not 'FORM_TYPE' in form or \
48
'jabber:iq:register' not in form['FORM_TYPE'].values:
49
raise RuntimeError, "Unknown form type: %r %r" % (form, form['FORM_TYPE'])
51
if field.name == u"username":
52
field.value = self.jid.node
53
elif field.name == u"password":
54
field.value = self.password
55
elif field.name == u"name":
56
field.value = self.name
57
elif field.name == u"email":
58
field.value = self.email
60
raise RuntimeError, "Unsupported required registration form field %r" % (field.name,)
61
self.submit_registration_form(form)
64
def stream_state_changed(self,state,arg):
66
print "- %s %r" % (state,arg)
68
def session_started(self):
69
JabberClient.session_started(self)
71
# set up handler for <message stanza>
72
self.stream.set_message_handler("normal",self.message)
74
def message(self,stanza):
75
if stanza.get_type() == "chat":
76
self.messages.append((stanza.get_from().as_unicode(),
80
def loop_iter(self, timeout=1):
83
self.stream.loop_iter(timeout)
85
self._exception = sys.exc_info()
92
exceptionType, exceptionValue, exceptionTraceback = self._exception
93
#traceback.print_exception(exceptionType, exceptionValue,
94
# exceptionTraceback, file=sys.stdout)
96
self._exception = None
99
def match_messages(self, jid, subject, body):
101
for mjid, msubject, mbody in self.messages:
102
if jid is not None and jid != mjid:
104
if subject is not None and subject != msubject:
106
if body is not None and body != mbody:
108
matched.append((mjid, msubject, mbody))
112
def flush_messages(self):
120
def send_message(self, userid, body, subject=''):
122
to_jid=unicode(userid),
123
from_jid=self.jid.as_unicode(),
125
subject=unicode(subject),
129
def unregister(jid, passwd):
131
jid=JID(jid.node, jid.domain, "remover")
134
iq = Iq(from_jid=jid, to_jid=jid.domain, stanza_type="set")
140
xmpp_do(jid, passwd, _remove)
142
def register(jid, passwd):
143
b = Buddy(JID(jid), passwd)
146
except LegacyAuthenticationError:
151
if __name__ == "__main__":
152
b = Buddy(JID(sys.argv[1]), sys.argv[2])
157
msg = b.wait_for_message(timeout=1)
162
#print b.wait_for_message(timeout=5)