public IEnumerable<object> BeginRequestInternal(ISocket socket) { var bufferHeaders = new ContinuationState<LinkedList<ArraySegment<byte>>>(socket.BufferHeaders()); yield return bufferHeaders; var headerBuffers = bufferHeaders.Result; Dictionary<string, object> env = new Dictionary<string, object>(); var bodyDataReadWithHeaders = headerBuffers.Last.Value; headerBuffers.RemoveLast(); var headersString = headerBuffers.GetString(); var reader = new StringReader(headersString); var requestLine = reader.ReadRequestLine(); var headers = reader.ReadHeaders(); env["Owin.RequestMethod"] = requestLine.Verb; env["Owin.RequestUri"] = requestLine.RequestUri; env["Owin.RequestHeaders"] = headers; env["Owin.BaseUri"] = ""; env["Owin.RemoteEndPoint"] = socket.RemoteEndPoint; env["Owin.RequestBody"] = CreateReadBody(socket, bodyDataReadWithHeaders); // TODO provide better values env["Owin.ServerName"] = ""; env["Owin.ServerPort"] = 0; env["Owin.UriScheme"] = "http"; yield return env; }
public IObservable<Unit> Begin() { return Observable.CreateWithDisposable<Unit>(o => { // would be nice some day to parse the request with a fancy state machine // for lower memory usage. Trace.Write("Beginning request."); return socket.ReadHeaders().Subscribe(headerBuffers => { bodyDataReadWithHeaders = headerBuffers.Last.Value; headerBuffers.RemoveLast(); var reader = new StringReader(headerBuffers.GetString()); this.requestLine = reader.ReadRequestLine(); Headers = reader.ReadHeaders(); reader.Dispose(); // necessary? Trace.Write("Request began."); }, e => { o.OnError(e); }, () => { o.OnCompleted(); }); }); }
public void GivenHttpVersion() { var reader = new StringReader("asdas df asdf"); var requestLine = reader.ReadRequestLine(); Assert.AreEqual("asdf", requestLine.HttpVersion); }
public void DefaultHttpVersion() { var reader = new StringReader("asdas df"); var requestLine = reader.ReadRequestLine(); Assert.AreEqual("HTTP/1.0", requestLine.HttpVersion); }
public static IRequest CreateRequest(ISocket socket, LinkedList<ArraySegment<byte>> headerBuffers) { var bodyDataReadWithHeaders = headerBuffers.Last.Value; headerBuffers.RemoveLast(); var headersString = headerBuffers.GetString(); var reader = new StringReader(headersString); var requestLine = reader.ReadRequestLine(); var headers = reader.ReadHeaders(); var context = new Dictionary<string, object>(); return new KayakRequest(socket, requestLine, headers, context, bodyDataReadWithHeaders); }
public void MalformedStatusLine4() { var reader = new StringReader("asd asd d fs aaaa "); reader.ReadRequestLine(); }
public void MalformedStatusLine3() { var reader = new StringReader("asdasd fds sd dsfasdf"); reader.ReadRequestLine(); }
public void EmptyStatusLine() { var reader = new StringReader(""); reader.ReadRequestLine(); }