Пример #1
0
        /// <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;
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
 private static void InvokeAfterReadRequestHeaders(HttpRequest request)
 => AfterReadRequestHeaders?.Invoke(request);