/// <summary> /// SendResponseをoverrideし、リクエストデータを読み取る。 /// </summary> protected override void SendRequest() { AfterReadRequestHeaders?.Invoke(new HttpRequest(this.RequestLine, this.RequestHeaders, null)); this.currentSession = new Session(); //HTTPリクエストヘッダ送信 this.SocketPS.WriteBinary(Encoding.ASCII.GetBytes( $"{this.RequestLine.RequestLine}\r\n{this.RequestHeaders.HeadersInOrder}\r\n")); byte[] request = null; if (this.State.bRequestHasMessage) { if (this.State.bRequestMessageChunked) { //FIXME: chunked request のデータ読み取りは未対応 this.SocketBP.TunnelChunkedDataTo(this.SocketPS); } else { //Requestデータを読み取って流す request = new byte[this.State.RequestMessageLength]; this.SocketBP.TunnelDataTo(request, this.State.RequestMessageLength); this.SocketPS.TunnelDataTo(this.TunnelPS, request); } } this.currentSession.Request = new HttpRequest(this.RequestLine, this.RequestHeaders, request); //ReadResponseへ移行 this.State.NextStep = this.ReadResponse; }
/// <summary> /// Override SendResponse to read request data /// </summary> protected override void SendRequest() { var req = new HttpRequest(this.RequestLine, this.RequestHeaders, null); if (BeforeRequest != null) { if (!BeforeRequest.Invoke(req)) { this.AbortRequest(); return; } } AfterReadRequestHeaders?.Invoke(req); this.currentSession = new Session(); this.SocketPS.WriteBinary(Encoding.ASCII.GetBytes( $"{this.RequestLine.RequestLine}\r\n{this.RequestHeaders.HeadersInOrder}\r\n")); byte[] request = null; if (this.State.bRequestHasMessage) { if (this.State.bRequestMessageChunked) { this.SocketBP.TunnelChunkedDataTo(this.SocketPS); } else { request = new byte[this.State.RequestMessageLength]; this.SocketBP.TunnelDataTo(request, this.State.RequestMessageLength); this.SocketPS.TunnelDataTo(this.TunnelPS, request); } } this.currentSession.Request = new HttpRequest(this.RequestLine, this.RequestHeaders, request); this.State.NextStep = this.ReadResponse; }
private static void InvokeAfterReadRequestHeaders(HttpRequest request) => AfterReadRequestHeaders?.Invoke(request);