Jabber/XMPP conference bot & framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
brathuhn/jingle_ft.py

67 lines
1.9 KiB

#!/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