plugin XEP-0047, XEP-0096: In-Band Bystream plugin cleaning:
- some renaming, comments improvments, etc
- progress callback is no more managed here, as it will be managed by application
- no more file data is used, beside file_obj
- a proper Deferred is used instead of success and error callbacks
- more clean error sending method
plugin XEP-0096 has been updated to handle changes. Its temporarily partially broken though
This commit is contained in:
parent
0c5ec666c2
commit
7121b58961
1 changed files with 257 additions and 231 deletions
|
|
@ -26,6 +26,7 @@ from twisted.words.protocols.jabber import jid
|
|||
from twisted.words.protocols import jabber
|
||||
import os
|
||||
from twisted.internet import reactor
|
||||
from twisted.python import failure
|
||||
|
||||
from wokkel import data_form
|
||||
|
||||
|
|
@ -163,7 +164,9 @@ class XEP_0096(object):
|
|||
elif stream_method == self.host.plugins["XEP-0047"].NAMESPACE:
|
||||
file_obj = self._getFileObject(dest_path, can_range)
|
||||
range_offset = file_obj.tell()
|
||||
self.host.plugins["XEP-0047"].prepareToReceive(jid.JID(data['from']), sid, file_obj, int(data["size"]), self._transferSucceeded, self._transferFailed, profile)
|
||||
d = self.host.plugins["XEP-0047"].createSession(file_obj, jid.JID(data['from']), sid, int(data["size"]), profile)
|
||||
d.addCallback(self._transferSucceeded, sid, file_obj, self.host.plugins["XEP-0047"].NAMESPACE, profile)
|
||||
d.addErrback(self._transferFailed, sid, file_obj, self.host.plugins["XEP-0047"].NAMESPACE, profile)
|
||||
else:
|
||||
log.error(_("Unknown stream method, this should not happen at this stage, cancelling transfer"))
|
||||
del(client._xep_0096_waiting_for_approval[sid])
|
||||
|
|
@ -184,7 +187,10 @@ class XEP_0096(object):
|
|||
self.host.plugins["XEP-0095"].sendRejectedError(data["id"], data['from'], profile=profile)
|
||||
del(client._xep_0096_waiting_for_approval[sid])
|
||||
|
||||
def _transferSucceeded(self, sid, file_obj, stream_method, profile):
|
||||
def _transferSucceeded(self, dummy, sid, file_obj, stream_method, profile):
|
||||
self.transferSucceeded(sid, file_obj, stream_method, profile)
|
||||
|
||||
def transferSucceeded(self, dummy, sid, file_obj, stream_method, profile):
|
||||
"""Called by the stream method when transfer successfuly finished
|
||||
@param id: stream id"""
|
||||
client = self.host.getClient(profile)
|
||||
|
|
@ -193,15 +199,19 @@ class XEP_0096(object):
|
|||
del(client._xep_0096_waiting_for_approval[sid])
|
||||
|
||||
def _transferFailed(self, sid, file_obj, stream_method, reason, profile):
|
||||
self.transferFailed(failure.Failure(Exception(reason)), sid, file_obj, stream_method, profile)
|
||||
|
||||
def transferFailed(self, failure, sid, file_obj, stream_method, profile):
|
||||
"""Called when something went wrong with the transfer
|
||||
|
||||
@param id: stream id
|
||||
@param reason: can be TIMEOUT, IO_ERROR, PROTOCOL_ERROR"""
|
||||
"""
|
||||
client = self.host.getClient(profile)
|
||||
data, timeout, stream_method, failed_methods = client._xep_0096_waiting_for_approval[sid]
|
||||
log.warning(_(u'Transfer %(id)s failed with stream method %(s_method)s: %(reason)s') % {
|
||||
'id': sid,
|
||||
's_method': stream_method,
|
||||
'reason': reason})
|
||||
'reason': unicode(failure)})
|
||||
filepath = file_obj.name
|
||||
file_obj.close()
|
||||
os.remove(filepath)
|
||||
|
|
@ -250,12 +260,14 @@ class XEP_0096(object):
|
|||
file_obj = open(filepath, 'r')
|
||||
if range_offset:
|
||||
file_obj.seek(range_offset)
|
||||
self.host.plugins["XEP-0065"].startStream(file_obj, jid.JID(IQ['from']), sid, range_length, self.sendSuccessCb, self.sendFailureCb, size, profile)
|
||||
self.host.plugins["XEP-0065"].startStream(file_obj, jid.JID(IQ['from']), sid, range_length, self._sendSuccessCb, self._sendFailureCb, size, profile)
|
||||
elif stream_method == self.host.plugins["XEP-0047"].NAMESPACE:
|
||||
file_obj = open(filepath, 'r')
|
||||
if range_offset:
|
||||
file_obj.seek(range_offset)
|
||||
self.host.plugins["XEP-0047"].startStream(file_obj, jid.JID(IQ['from']), sid, range_length, self.sendSuccessCb, self.sendFailureCb, size, profile)
|
||||
d = self.host.plugins["XEP-0047"].startStream(file_obj, jid.JID(IQ['from']), sid, profile=profile)
|
||||
d.addCallback(self.sendSuccessCb, sid, file_obj, self.host.plugins["XEP-0047"].NAMESPACE, profile)
|
||||
d.addErrback(self.sendFailureCb, sid, file_obj, self.host.plugins["XEP-0047"].NAMESPACE, profile)
|
||||
else:
|
||||
log.warning(_("Invalid stream method received"))
|
||||
|
||||
|
|
@ -288,11 +300,17 @@ class XEP_0096(object):
|
|||
offer.addCallback(self.fileCb, filepath, sid, size, profile)
|
||||
return sid
|
||||
|
||||
def sendSuccessCb(self, sid, file_obj, stream_method, profile):
|
||||
def _sendSuccessCb(self, sid, file_obj, stream_method, profile):
|
||||
self.sendSuccessCb(sid, file_obj, stream_method, profile)
|
||||
|
||||
def sendSuccessCb(self, dummy, sid, file_obj, stream_method, profile):
|
||||
log.info(_(u'Transfer %(sid)s successfuly finished [%(profile)s]')
|
||||
% {"sid": sid, "profile": profile})
|
||||
file_obj.close()
|
||||
|
||||
def sendFailureCb(self, sid, file_obj, stream_method, reason, profile):
|
||||
def _sendFailureCb(self, sid, file_obj, stream_method, reason, profile):
|
||||
self.sendFailureCb(failure.Failure(Exception(reason)), sid, file_obj, stream_method, profile)
|
||||
|
||||
def sendFailureCb(self, failure, sid, file_obj, stream_method, profile):
|
||||
file_obj.close()
|
||||
log.warning(_(u'Transfer %(id)s failed with stream method %(s_method)s: %(reason)s [%(profile)s]') % {'id': sid, "s_method": stream_method, 'reason': reason, 'profile': profile})
|
||||
log.warning(_(u'Transfer %(id)s failed with stream method %(s_method)s: %(reason)s [%(profile)s]') % {'id': sid, "s_method": stream_method, 'reason': unicode(failure), 'profile': profile})
|
||||
|
|
|
|||
Loading…
Reference in a new issue