Example #1
0
 private void Download()
 {
     Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccFileSession::Download()" + (turboMode ? " Turbo" : " Legacy") + " mode");
     try
     {
         socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         socket.Connect(dccUser.RemoteEndPoint);
         int bytesRead = 0;
         while (!dccFileInfo.AllBytesTransfered())
         {
             bytesRead = socket.Receive(buffer);
             //Remote server closed the connection before all bytes were sent
             if (bytesRead == 0)
             {
                 Interrupted();
                 return;
             }
             ResetActivityTimer();
             AddBytesProcessed(bytesRead);
             dccFileInfo.TransferStream.Write(buffer, 0, bytesRead);
             //Send ack if in legacy mode
             if (!turboMode)
             {
                 socket.Send(DccUtil.DccBytesReceivedFormat(dccFileInfo.CurrentFilePosition()));
             }
         }
         dccFileInfo.TransferStream.Flush();
         Finished();
     }
     catch (Exception ex)
     {
         Debug.WriteLineIf(Rfc2812Util.IrcTrace.TraceWarning, "[" + Thread.CurrentThread.Name + "] DccFileSession::Download() exception=" + ex);
         if (ex.Message.IndexOf("refused") > 0)
         {
             dccUser.Connection.Listener.Error(ReplyCode.DccConnectionRefused, "Connection refused by remote user.");
         }
         else
         {
             dccUser.Connection.Listener.Error(ReplyCode.ConnectionFailed, "Unknown socket error:" + ex.Message);
         }
         Interrupted();
     }
 }