Alexey Nezhdanov a Ãcrit :
no attach :)

I did attach... some mail filter must have thought it was a virus ; let's try to put it inline then (but it may need some editing):


#!/usr/bin/python

import socket

class VerboseSocket:
        def __init__ (self, sock):
                self.socket = sock

        def connect (self, host, port):
                print 'connecting to %s on port %s' % (host, port)
                self.socket.connect ((host, port))

        def send (self, data, flags = 0):
                print 'SEND:'
                print data
                self.socket.send (data, flags)

        def recv (self, size, flags = 0):
                data = self.socket.recv (size, flags)
                print 'RECV:'
                print data
                return data

        def bind (self, *args):
                self.socket.bind (*args)

        def accept (self):
                (s, info) = self.socket.accept ()
                return (VerboseSocket(s), info)

        def listen (self, *args):
                self.socket.listen (*args)

        def fileno (self):
                return self.socket.fileno ()

class JabberServer:

def __init__ (self):
from sys import stdin
import select
s = VerboseSocket (socket.socket (socket.AF_INET, socket.SOCK_STREAM))
s.bind (('localhost', 5223))
s.listen (1)
(client, info) = s.accept ()
print 'New connection'
running = True
while running:
(r, w, x) = select.select ([stdin, client], [], [])
if client in r:
data = client.recv (1024)
pass # we don't care about the data: VerboseSocket!
if stdin in r:
client.send (stdin.readline ())



class JabberClient:

def __init__ (self, name, passwd):
from sys import stdin
import select
s = self.get_ready_socket (name, passwd)
running = True
while running:
(r, w, x) = select.select ([stdin, s], [], [])
if s in r:
data = s.recv (1024)
pass # we don't care about the data: VerboseSocket!
if stdin in r:
s.send (stdin.readline ())


def get_ready_socket (self, name, passwd):
import sre, sha
s = VerboseSocket (socket.socket (socket.AF_INET, socket.SOCK_STREAM))
s.connect ('localhost', 5222)
s.send ("""<?xml version='1.0' encoding='UTF-8'?>""")
s.send ("""<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"; to="localhost" id="msg_1">""")
data = s.recv (1024)
match = sre.findall ("id='[0-9A-F]+'", data)[0]
id = match[4:-1]
s.send ("""<iq type="get" id="msg_2"> <query xmlns="jabber:iq:auth"> <username>%s</username></query></iq>""" % name)
s.recv (1024) # just eat the question about our password!
digest = sha.new (id+passwd).hexdigest ()
s.send ("""<iq type="set" id="msg_3"> <query xmlns="jabber:iq:auth"> <username>%s</username><digest sid='%s'>%s</digest><resource>JabberHelper</resource></query></iq>""" % (name, id, digest))
return s




if __name__ == '__main__':
        program = JabberClient ('boojum', 'toto')
        #JabberServer ()
_______________________________________________
jdev mailing list
[email protected]
http://mail.jabber.org/mailman/listinfo/jdev

Reply via email to