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 ); } }
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; } }
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 ); } }
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 ); } }