Current directory :
Root directory

Tree directory :
sef@njs.netlab.cz
  Filter :
  Language :  
 
from twisted.words.protocols.jabber import xmlstream
from twisted.internet import protocol
from twisted.words.xish import domish, utility
from twisted.internet import reactor
from twisted.python import log
import sys, sha
log.startLogging(sys.stdout)
 
 
def magicHash(password, sid):
	magic1 = int()
	magic2 = int()
	magic1 = 0x50305735
	magic2 = 0x12345671
	sum = 7
	for z in password:
		if z == ' ':
			continue
		if z == '\t':
			continue
		magic1 = magic1 ^  (((magic1 & 0x3f) + sum) * ord(z)) + (magic1 << 8)
		magic2 += (magic2 << 8) ^ magic1
		sum = sum + ord(z)
	magic1 = magic1 & 0x7fffffff
	magic2 = magic2 & 0x7fffffff
	print sid+"%08x%08x"%(magic1, magic2)
	return sid+"%08x%08x"%(magic1, magic2)
 
def ping(xmlstream):
	print 'ping'
	xmlstream.send('  \t  ')
	reactor.callLater(40, ping, xmlstream)
 
class TlenAuthInitializer(object):
	def __init__(self, xs):
		self.xmlstream = xs
	def initialize(self):
		iq = xmlstream.IQ(self.xmlstream, "set")
		iq['id'] = self.xmlstream.sid
		q = iq.addElement('query', 'jabber:iq:auth')
		q.addElement('username', content = self.xmlstream.authenticator.jid)
		q.addElement('digest', content = sha.new(magicHash(self.xmlstream.authenticator.password, self.xmlstream.sid)).hexdigest())
		q.addElement('resource', content  = 't')
		d = iq.send()
		d.addCallback(self._authreply)
		d.addErrBack(self._authfail)
 
	def _authreply(self, el):
		print el.toXml()
		reactor.callLater(40, ping, self.xmlstream)
 
	def _authfail(self, el):
		print el.toXml()
 
class TlenAuthenticator(xmlstream.ConnectAuthenticator):
	def __init__(self, jid, password, host):
		xmlstream.ConnectAuthenticator.__init__(self, host)
		self.jid = jid
		self.password = password
 
	def associateWithStream(self, xs):
		xs.version = (0, 0)
		xmlstream.ConnectAuthenticator.associateWithStream(self, xs)
 
		inits = [(TlenAuthInitializer, True)]
		for initClass, required in inits:
			init = initClass(xs)
			init.required = required
			xs.initializers.append(init)
 
class TlenStream(xmlstream.XmlStream):
	def sendHeader(self):
		rootElem = domish.Element((None, 's'))
		rootElem['v'] = '8'
		rootElem['t'] = '06000106'
		self.rootElem = rootElem
		self.send(rootElem.toXml(prefixes=self.prefixes, closeElement=0))
		self._headerSent = True
		print rootElem.toXml(prefixes=self.prefixes, closeElement=0)
 
	def sendFooter(self):
		self.send('</s>')
 
	def onDocumentStart(self, rootelem):
		print rootelem
		xmlstream.XmlStream.onDocumentStart(self, rootelem)
		if rootelem.hasAttribute("i"):
			self.sid = rootelem["i"]
		self.authenticator.streamStarted()
 
class TlenStreamFactory(xmlstream.XmlStreamFactory):
    def __init__(self, authenticator):
        xmlstream.XmlStreamFactory.__init__(self, authenticator)
        self.authenticator = authenticator
 
 
    def buildProtocol(self, _):
        self.resetDelay()
        # Create the stream and register all the bootstrap observers
        xs = TlenStream(self.authenticator)
        xs.factory = self
        for event, fn in self.bootstraps: xs.addObserver(event, fn)
        return xs
 
def lg(el):
	print 'all>',el
def err(el):
	print 'err>', el
factory = TlenStreamFactory(TlenAuthenticator('sefator', 'heslo','s1.tlen.pl' ))
factory.addBootstrap('/*', lg)
 
reactor.connectTCP('s1.tlen.pl', 443, factory)
reactor.run()
 
VIP: No | Used: 622M/101M | 0.079 sec / GZIP-2