#!/usr/bin/python import xmpp, os, hashlib, time from datetime import datetime ID=0 JINGLE_NS = 'urn:xmpp:jingle:1' JINGLE_FT_NS = 'urn:xmpp:jingle:apps:file-transfer:3' JINGLE_TRANSPORT_S5B_NS = 'urn:xmpp:jingle:transports:s5b:1' HASHES_NS = 'urn:xmpp:hashes:1' def create_init_message(mfrom,to,path,desc,host,port): global ID ID+=1 iq=xmpp.Iq(xmlns=None, attrs={'to':to,'id':"jin_ft_iq_%d" % ID,'type':'set'}) jingle=__create_jingle_node(mfrom,'session-initiate',"jin_ft_%d" % ID) iq.getChildren().append(jingle) cont=__create_content_node('initiator',time.time(),path,desc) jingle.getChildren().append(cont) tr = __create_transport_tcp_direct(mfrom,host,port,126<<8+127,ID) cont.getChildren().append(tr) return iq def __create_jingle_node(initiator,action,sid): return xmpp.Protocol(name="jingle",xmlns=JINGLE_NS, attrs={'initiator':initiator,'action':action,'sid':sid}) def __create_content_node(creator,date,path,txt): mfile=open(path,"r") datefmt = datetime.fromtimestamp(date).strftime("%Y-%m-%dT%H:%M:%SZ") name=os.path.basename(path) size=os.path.getsize(path) mhash=hashlib.sha1() mhash.update(mfile.read()) mfile.close() cont= xmpp.Protocol(name="content",attrs={'creator':creator,'name':name}) desc = cont.addChild(name="description",namespace=JINGLE_FT_NS) offer = desc.addChild(name="offer") mfile = offer.addChild(name="file") mfile.addChild(name="date",payload=[datefmt]) mfile.addChild(name="desc",payload=[txt]) mfile.addChild(name="name",payload=[name]) mfile.addChild(name="size",payload=[size]) mfile.addChild(name="hash",payload=[mhash.hexdigest()], attrs={'algo':'sha-1'},namespace=HASHES_NS) return cont def __create_transport_tcp_direct(mfrom,host,port,priority,id): tr = xmpp.Protocol(name="transport", attrs={'mode':'tcp','sid':"jin_ft_tr_%d" % id}) tr.addChild(name="candidate",attrs={ 'cid':"jin_ft_cd_%d" % id, 'host':host, 'jid':mfrom, 'port':port, 'priority':priority, 'type':'direct'}) return tr