Exemple #1
0
        /// <summary>
        /// Called when the agent received a file transfer request from a peer.
        /// </summary>
        /// <param name="transfer">The file transfer request from the peer.</param>
        private void OnFileTransferRequested(IncomingFileTransfer transfer)
        {
            if (transfer == null)
            {
                throw new ArgumentNullException(nameof(transfer));
            }

            string sender   = transfer.Peer.ApplicationName;
            string filename = transfer.FileName;
            string path     = Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Data, filename);

            Logger.Info($"sender:{sender}, file:{filename}");

            transfer.Progress += (s, e) =>
            {
                // TODO: Insert code to check file transfer progress
                Logger.Info($"file transfer progress: {e.Progress}");
            };

            transfer.Finished += (s, e) =>
            {
                // TODO: Insert code to check if file transfer has been succeeded or not
                Logger.Info($"file transfer result: {e.Result}");
            };

            // Remove a file if exists
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            // Start the transfer
            transfer.Receive(path);
        }
Exemple #2
0
        protected override void ProcessNewChannel(string object_path,
                                                  uint initiator_handle,
                                                  uint target_handle,
                                                  ChannelDetails c)
        {
            Console.WriteLine("Processing new channel for file transfer");

            string  filename     = (string)c.Properties[Constants.CHANNEL_TYPE_FILETRANSFER + ".Filename"];
            string  content_type = (string)c.Properties[Constants.CHANNEL_TYPE_FILETRANSFER + ".ContentType"];
            ulong   size         = (ulong)c.Properties[Constants.CHANNEL_TYPE_FILETRANSFER + ".Size"];
            Contact contact      = Connection.Roster.GetContact(target_handle);

            FileTransferChannel ft       = null;
            FileTransfer        transfer = null;

            try {
                ft = new FileTransferChannel(this.Connection,
                                             object_path,
                                             initiator_handle,
                                             target_handle,
                                             filename,
                                             content_type,
                                             (long)size);

                if (initiator_handle != Connection.SelfHandle)
                {
                    transfer = new IncomingFileTransfer(contact, ft);
                }
                else
                {
                    transfer = new OutgoingFileTransfer(contact, ft);
                }

                if (transfer != null)
                {
                    DispatchManager dm = Connection.DispatchManager;
                    dm.Add(contact, transfer.OriginalFilename, transfer);
                }
            }
            catch (Exception e) {
                Console.WriteLine(e.ToString());

                if (transfer != null)
                {
                    transfer.Dispose();
                }
                else if (ft != null)
                {
                    ft.Dispose();
                }
            }
        }
        private void ProcessIncomingTransfer(IncomingFileTransfer ift)
        {
            if (ift.Writer != null) // already processed
            {
                return;
            }
            ift.Writer = new BlockFileWriter(ift.Name, ift.BlockSize, ift.BytesTotal);
            var respond = new ClFileTransferRespond
            {
                Result    = FileTransferRequestResult.Accepted,
                SessionId = ift.Id,
                BlockSize = ift.BlockSize
            };

            client.Send(respond);
        }
        private void OnSvFileTransferRequest(SvFileTransferRequest msg)
        {
            var info = new IncomingFileTransferInfo
            {
                Id            = msg.SessionId,
                Sender        = msg.Username,
                Name          = msg.FileName,
                Size          = msg.FileSize,
                Hash          = msg.FileHash,
                InitBlockSize = Math.Min(blockSize, msg.BlockSize)
            };
            var ft = new IncomingFileTransfer(this, info);

            // XXX: check key presence
            assignedFts.Add(ft.Id, ft);
            Root.Log(LogLevel.Info, "FileTransferManager: created incoming session [file='{0}', sid={1}]",
                     msg.FileName, msg.SessionId);
            OnTransferRequestReceived(ft);
        }