public override void handleGETRequest(HttpProcessor p) { bool shouldCompressData = false; if ((String)p.httpHeaders["Accept-Encoding"] == "gzip") { shouldCompressData = true; } if (p.http_url.Contains(".txt")) { string[] allTextFiles = getTextFiles(); string findFile = Path.GetFileName(p.http_url); bool precoded = false; encodingType dataEncoding = encodingType.Origin; if (findFile.Contains("Preconfig")) { findFile = findFile.Remove(0, "Preconfig".Length); precoded = true; } else { if (findFile.Contains("Raw")) { int fileTypeLoc = findFile.ToLower().IndexOf("raw"); findFile = findFile.Remove(fileTypeLoc, "Raw".Length); dataEncoding = encodingType.Origin; } } int strNumber = 0; int strIndex = -1; for (strNumber = 0; strNumber < allTextFiles.Length; strNumber++) { strIndex = allTextFiles[strNumber].ToLower().IndexOf(findFile.ToLower()); if (strIndex >= 0) { break; } } // do the server have the file if (strIndex < 0) { // the server cant find the required file p.writeFailure(); return; } var textFileName = allTextFiles[strNumber]; var outputFileName = textFileName; // if it was encoded and compressed, it will be ready to be send Stream fs = null; try { if (!precoded) { outputFileName = Path.GetTempFileName(); if (dataEncoding == encodingType.Origin) { outputFileName = textFileName; if (shouldCompressData) { fs = new FileStream(outputFileName, FileMode.Open, FileAccess.Read, FileShare.Read); FileInfo inputFileInfo = new FileInfo(outputFileName); p.writeSuccess("text/plain", 0, shouldCompressData, useStandardHeaders); p.outputStream.Flush(); FormatData.streamCopyToWithGzipCompression(fs, p.outputStream.BaseStream); p.outputStream.Flush(); p.outputStream.BaseStream.Flush(); } else { fs = File.Open(textFileName, FileMode.Open, FileAccess.Read, FileShare.Read); FileInfo fileInfo = new FileInfo(outputFileName); p.writeSuccess("text/plain", fileInfo.Length, shouldCompressData, useStandardHeaders); p.outputStream.Flush(); fs.CopyTo(p.outputStream.BaseStream); } } } else // precoded and compressed { fs = File.Open(outputFileName, FileMode.Open); FileInfo fileInfo = new FileInfo(outputFileName); p.writeSuccess("text/plain", fileInfo.Length, shouldCompressData, useStandardHeaders); p.outputStream.Flush(); fs.CopyTo(p.outputStream.BaseStream); } } catch (IOException ex) { Console.WriteLine("An error has occured {0}", ex.Message); } catch (Exception ex) { Console.WriteLine("An error has occured {0}", ex.Message); } finally { p.outputStream.BaseStream.Flush(); if (fs != null) { fs.Close(); } } } // if the client asks for autogenerated data else if (p.http_url.Contains("Auto")) { double[] ratios = null; if (p.httpHeaders["RatioType"].ToString() == "Manual") { ratios = new double[4]; ratios[0] = double.Parse(p.httpHeaders["A"].ToString()); ratios[1] = double.Parse(p.httpHeaders["C"].ToString()); ratios[2] = double.Parse(p.httpHeaders["G"].ToString()); ratios[3] = double.Parse(p.httpHeaders["T"].ToString()); } long dataSize = long.Parse(p.httpHeaders["DataSize"].ToString()); if (p.http_url.Contains("Raw")) { // auto data generation p.writeSuccess("text/plain", 0, shouldCompressData, useStandardHeaders); p.outputStream.Flush(); FormatData.generateRawDataAndSend(p.outputStream.BaseStream, dataSize, shouldCompressData, ratios); p.outputStream.BaseStream.Flush(); p.outputStream.Flush(); return; } else { p.writeFailure(); } } else { p.writeFailure(); } }
public Stream() { this.typeField = StreamType.locator; this.actuateField = StreamActuate.onRequest; this.encodingField = encodingType.none; }
WriteCharacterString(encodingType, value.AsSpan(), tag);