Failed attempt at fixing the file transfer stuff
authorEd Page <eopage@byu.net>
Tue, 22 Jun 2010 03:02:02 +0000 (22:02 -0500)
committerEd Page <eopage@byu.net>
Tue, 22 Jun 2010 03:02:02 +0000 (22:02 -0500)
src/channel/debug_log.py

index b6325a9..a85bf30 100644 (file)
@@ -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()