public OutgoingTransfer(ConnectionHandler ch, ShareFileInfo sfi) : base() { direction = TransferDirection.Out; this.ch = ch; this.sfi = sfi; this.hostName = ch.Client.Client.RemoteEndPoint.ToString(); this.file1 = sfi.relativeVPath; this.file2 = "(remote)"; }
void InnerHandleHTTPRequest(string path) { if (path == "/filelist") { string[] fileList = ShareManager.Instance.GetFullVFileList(); byte[] buf = Encoding.UTF8.GetBytes(String.Join("\r\n", fileList)); stream.WriteHTTPResponseHeader(200, "text/plain", buf.Length); client.WriteStreamAsHTTPContent(new MemoryStream(buf)); } else if (path == "/info") { string version = Application.ProductVersion; string resp = String.Format("version:{0}\nfiles:{1}\nname:{2}", version, ShareManager.Instance.TotalFiles, SettingsManager.Instance.ComputerName); stream.WriteSimpleHTTPResponse(200, "text/plain", resp); string remoteIp = (client.Client.RemoteEndPoint as IPEndPoint).Address.ToString(); if (remoteIp != "127.0.0.1" && !NetworkManager.Instance.HostIPIsKnown(remoteIp)) { Host h = NetworkManager.Instance.AddHost(remoteIp, NetworkManager.LANLINE_PORT, false); h.Name = "<downloader>"; } } else if (path.StartsWith("/f/")) { ShareFileInfo sfi = ShareManager.Instance.ResolveVPath(path.Substring(3)); if (sfi == null) { stream.WriteSimpleHTTPResponse(404, "text/plain", "Not found!"); } else { OutgoingTransfer transfer = new OutgoingTransfer(this, sfi); XferManager.Instance.Track(transfer); try { transfer.RunTransferInThisThread(); } catch (Exception) { transfer.CancelWithError(); } } } else { stream.WriteSimpleHTTPResponse(200, "text/plain", "Requested: " + path); } }