/// <summary> /// Creates a new instance of <see cref="Rest"/> listening on the given IP and port /// </summary> /// <param name="ip"><see cref="IPAddress"/> to listen on</param> /// <param name="port">Port to listen on</param> public Rest(IPAddress ip, int port) { Ip = ip; Port = port; AssemblyName assembly = typeof(TShock).Assembly.GetName(); serverHeader = new StringHeader("Server", $"{assembly.Name}/{assembly.Version}"); }
/// <summary> /// Creates a new instance of <see cref="Rest"/> listening on the given IP and port /// </summary> /// <param name="ip"><see cref="IPAddress"/> to listen on</param> /// <param name="port">Port to listen on</param> public Rest(IPAddress ip, int port) { Ip = ip; Port = port; AssemblyName assembly = this.GetType().Assembly.GetName(); serverHeader = new StringHeader("Server", String.Format("{0}/{1}", assembly.Name, assembly.Version)); }
/// <summary> /// Read a UTF-8 encoded string request from a memory span /// </summary> /// <param name="from">Origin</param> /// <param name="data">UTF-8 string</param> /// <returns>Number of bytes read</returns> public static int ReadStringRequest(ReadOnlySpan <byte> from, out ReadOnlySpan <byte> data) { StringHeader header = MemoryMarshal.Cast <byte, StringHeader>(from)[0]; // Read header int bytesRead = Marshal.SizeOf(header); // Read data data = from.Slice(bytesRead, header.Length); bytesRead += header.Length; return(AddPadding(bytesRead)); }
/// <summary> /// Write a <see cref="StringHeader"/> to a memory span /// </summary> /// <param name="to">Destination</param> /// <param name="data">String data</param> /// <returns>Number of bytes written</returns> public static int WriteStringRequest(Span <byte> to, string data) { Span <byte> unicodeData = Encoding.UTF8.GetBytes(data); // Write header StringHeader request = new StringHeader { Length = (ushort)unicodeData.Length }; MemoryMarshal.Write(to, ref request); int bytesWritten = Marshal.SizeOf(request); // Write data unicodeData.CopyTo(to.Slice(bytesWritten)); bytesWritten += unicodeData.Length; return(AddPadding(to, bytesWritten)); }
/// <summary> /// Redirect user. /// </summary> /// <param name="uri">Where to redirect to.</param> /// <remarks> /// Any modifications after a redirect will be ignored. /// </remarks> public void Redirect(string uri) { Status = HttpStatusCode.Redirect; _headers["Location"] = new StringHeader("Location", uri); }