protected override void OnIncomingRequest(IncomingRequestEventArgs e) { base.OnIncomingRequest(e); if(e.Action == "/patch" && e.Headers["Host"] == "us.patch.battle.net:1119") { e.ResponseCode = 204; e.ResponseCodeDescription = "No Content"; e.ResponseHeaders.Add("Connection", "close"); } }
private static void HandleUpdateLauncher(IncomingRequestEventArgs e) { e.ResponseHeaders.Add("Server", "Apache/2.2.3 (Red Hat)"); e.ResponseHeaders.Add("Last-Modified", "Tue, 21 Sep 2010 19:00:25 GMT"); e.ResponseHeaders.Add("ETag", "\"130001b-11-490c9a43b0440\""); e.ResponseHeaders.Add("Accept-Ranges", "bytes"); e.ResponseHeaders.Add("Content-Type", "text/plain"); e.ResponseStream = new MemoryStream(); var writer = new StreamWriter(e.ResponseStream); { writer.Write("Scan\n"); writer.Write("2.2.61.24\n"); } }
protected override void OnIncomingRequest(IncomingRequestEventArgs e) { base.OnIncomingRequest(e); var host = e.Headers["Host"]; switch(host) { case "us.scan.worldofwarcraft.com": if (e.Uri == "/update/Launcher.txt") HandleUpdateLauncher(e); break; case "enUS.nydus.battle.net": case "us.version.blizzard.com": case "us.launcher.battle.net": break; } }
private static bool SendHttpResponse(NetworkStream writer, IncomingRequestEventArgs ir, int bufferSize) { if (!writer.CanWrite) return false; // Respond var head = new StringBuilder(); head.AppendFormat("HTTP/1.1 {0} {1}\r\n", ir.ResponseCode, ir.ResponseCodeDescription); foreach (var header in ir.ResponseHeaders) head.AppendFormat("{0}: {1}\n", header.Key, header.Value); try { head.AppendFormat("Content-Length: {0}\r\n", (ir.ResponseStream != null ? ir.ResponseStream.Length : 0)); } catch (NotSupportedException) { // Length is not supported... no big deal just don't send it } head.Append("\r\n"); byte[] headBuffer = Encoding.ASCII.GetBytes(head.ToString()); writer.Write(headBuffer, 0, headBuffer.Length); writer.Flush(); if (ir.ResponseStream != null) { using (ir.ResponseStream) { var buffer = new byte[bufferSize]; while (true) { int read = ir.ResponseStream.Read(buffer, 0, bufferSize); if (read <= 0) break; writer.Write(buffer, 0, read); writer.Flush(); } } } return true; }
protected virtual void OnRequestComplete(IncomingRequestEventArgs e, bool success) { var handler = this.RequestComplete; if (handler != null) handler(e, success); }
protected virtual void OnIncomingRequest(IncomingRequestEventArgs args) { var callback = this.IncomingRequest; if (callback != null) callback(this, args); }