From 8b82af9fd3b9e5346282f0d8e66ed16e036bbdfb Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 21 Jun 2010 22:02:02 -0500 Subject: [PATCH] Failed attempt at fixing the file transfer stuff --- src/channel/debug_log.py | 59 ++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/src/channel/debug_log.py b/src/channel/debug_log.py index b6325a9..a85bf30 100644 --- a/src/channel/debug_log.py +++ b/src/channel/debug_log.py @@ -1,5 +1,6 @@ from __future__ import with_statement +import os import socket import logging @@ -7,6 +8,7 @@ import telepathy import constants import tp +import util.go_utils as gobject_utils import util.misc as misc_utils @@ -19,6 +21,9 @@ class DebugLogChannel(tp.ChannelTypeFileTransfer): self.__manager = manager self.__props = props self.__otherHandle = contactHandle + self.__socket = None + self.__socketName = "" + self.__delayWrite = gobject_utils.Timeout(self._on_write) tp.ChannelTypeFileTransfer.__init__(self, connection, manager, props) @@ -81,26 +86,53 @@ class DebugLogChannel(tp.ChannelTypeFileTransfer): @misc_utils.log_exception(_moduleLogger) def AcceptFile(self, addressType, accessControl, accessControlParam, offset): + # @bug All wrong _moduleLogger.info("%r %r %r %r" % (addressType, accessControl, accessControlParam, offset)) - self.InitialOffsetDefined(0) + assert not self.__socketName, self.__socketName + self.__socketName = os.tempnam() + + assert self.__socket is None, self.__socket + self.__socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) + self.__socket.bind(self.__socketName) + self._state = telepathy.constants.FILE_TRANSFER_STATE_ACCEPTED self.FileTransferStateChanged( self._state, telepathy.constants.FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED, ) + self.__delayWrite.start(seconds=0) + + return self.__socketName + + @misc_utils.log_exception(_moduleLogger) + def ProvideFile(self, addressType, accessControl, accessControlParam): + raise telepathy.errors.NotImplemented("Cannot send outbound files") + + @misc_utils.log_exception(_moduleLogger) + def Close(self): + self.close() + + def close(self): + _moduleLogger.debug("Closing log") + if self.__socket is not None: + self.__socket.close() + tp.ChannelTypeFileTransfer.Close(self) + self.remove_from_connection() + + @misc_utils.log_exception(_moduleLogger) + def _on_write(self): + self.__socket.listen(1) + conn, addr = self.__socket.accept() + + self.InitialOffsetDefined(0) self._state = telepathy.constants.FILE_TRANSFER_STATE_OPEN self.FileTransferStateChanged( self._state, telepathy.constants.FILE_TRANSFER_STATE_CHANGE_REASON_NONE, ) - sockittome = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - sockittome.connect(accessControlParam) - try: - sockittome.send(self._log) - finally: - sockittome.close() + conn.send(self._log) self._transferredBytes = len(self._log) self.TransferredBytesChanged(self._transferredBytes) @@ -110,16 +142,3 @@ class DebugLogChannel(tp.ChannelTypeFileTransfer): self._state, telepathy.constants.FILE_TRANSFER_STATE_CHANGE_REASON_NONE, ) - - @misc_utils.log_exception(_moduleLogger) - def ProvideFile(self, addressType, accessControl, accessControlParam): - raise telepathy.errors.NotImplemented("Cannot send outbound files") - - @misc_utils.log_exception(_moduleLogger) - def Close(self): - self.close() - - def close(self): - _moduleLogger.debug("Closing log") - tp.ChannelTypeFileTransfer.Close(self) - self.remove_from_connection() -- 1.7.9.5