Ejemplo n.º 1
0
        private void SendAsync( )
        {
            TcpClient client = new TcpClient( Peer.EndPoint.AddressFamily );

            try
            {
                client.SendTimeout = 30;
                client.Connect( Peer.EndPoint );

                using ( BinaryReader NetworkInStream = new BinaryReader( client.GetStream( ) ) )
                using ( BinaryWriter NetworkOutStream = new BinaryWriter( client.GetStream( ) ) )
                {
                    bool sendPeers = Peer.ShouldSendPeers;
                    var header = new Header( sendPeers );
                    NetworkOutStream.Write( header.ToString( ) );
                    NetworkOutStream.Flush( );

                    // Update the statistics.
                    Peer.RegisterEvent( PeerStatistics.EventType.SentInfo );
                    if ( sendPeers )
                    {
                        log.InfoFormat( "Sent {0} peers to {1}", PeerList.Peers.Count, Peer );
                        Peer.RegisterEvent( PeerStatistics.EventType.SentPeerList );
                    }
                }
            }
            catch ( SocketException e ) { log.Info( "Error during outgoing who's-there: " + e ); }
            catch ( IOException e ) { log.Info( "Error during outgoing who's-there: " + e ); }
        }
Ejemplo n.º 2
0
        public IncomingTransfer( Header header, TcpClient client, BinaryReader netInStream, BinaryWriter netOutStream )
        {
            this.Header = header;
            this.TcpClient = client;
            this.NetworkInStream = netInStream;
            this.NetworkOutStream = netOutStream;
            this.FileName = header.Transfer.FileName;
            this.FileSize = header.Transfer.FileSizeBytes;
            this.Sender = PeerList.GetPeerForAddress( ( (IPEndPoint) client.Client.RemoteEndPoint ).Address );

            // Ask the user if they want to receive this file.
            TransferNotificationForm.CreateForTransfer( this );

            // Wait for the user's response. (otherwise we dispose the streams)
            userResponseReceived.WaitOne( );

            try
            {
                if ( Accepted )
                {
                    NetworkOutStream.Write( true );
                    DoTransfer( );
                }
                else
                    NetworkOutStream.Write( false );
            }
            catch ( IOException )
            {
                SetState( State.FAILED );
                return;
            }
        }
Ejemplo n.º 3
0
        private static void ProcessHeader( IPAddress sender, Header header )
        {
            var peer = new Peer
            {
                Name = header.Sender.Username,
                EndPoint = new IPEndPoint( sender, header.Sender.ListenPort )
            };

            PeerList.AddOrUpdate( peer );

            // Did they send their peer list, too?
            if ( header.Peers != null && header.Peers.Count > 0 )
            {
                PeerList.AddOrUpdate( header.Peers );
                peer.RegisterEvent(PeerStatistics.EventType.ReceivedPeerList);
                log.InfoFormat( "{0} peers received from {1} via peer exchange.", header.Peers.Count, peer );
            }
        }
Ejemplo n.º 4
0
        private void SendInvitation( )
        {
            log.InfoFormat( "Outgoing file transfer started: Offering {0} ({1}) to {2}", File.Name, Util.FormatFileSize( File.Length ), Recipient );

            // Send our header with the file information.
            var header = new Header( File );

            if ( Recipient.ShouldSendPeers ) // Send our peer list too, if it's time.
            {
                header.IncludePeerList( );
                Recipient.RegisterEvent( PeerStatistics.EventType.SentPeerList );
            }

            NetworkOutStream.Write( header.ToString( ) );
            NetworkOutStream.Flush( );

            // Wait for the response.
            if ( NetworkInStream.ReadBoolean( ) )
                SendFile( );
            else
            {
                log.DebugFormat( "Outgoing file transfer ({0}) was denied!", File.Name );
                SetState( State.REJECTED );
            }
        }