public void Receive(AdkSocketConnection connection) { if (fContentLength == -1) { MemoryStream initialBuffer = new MemoryStream (connection.RawBuffer, 0, connection.RawBufferLength, false, false); AdkHttpHeadersReader reader = new AdkHttpHeadersReader(initialBuffer); ParseRequestLine(reader); ParseHeaders(reader); // This server does not support transfer encoding if (this.Headers["Transfer-Encoding"] != null) { throw new AdkHttpException (AdkHttpStatusCode.ServerError_501_Not_Implemented, "'Transfer-Encoding' is not supported"); } IPEndPoint endPoint = (IPEndPoint)connection.Socket.LocalEndPoint; string host = fHeaders["Host"]; if (host == null) { host = endPoint.Address.ToString(); } else { int loc = host.IndexOf(':'); if (loc > 0) { host = host.Substring(0, loc); } } // TODO: Implement better parsing of the query string. This will sometimes blow up when it shouldn't. string [] pathAndQuery = this.Path.Split('?'); UriBuilder builder = new UriBuilder ("http", host, connection.Binding.Port, pathAndQuery[0], pathAndQuery.Length > 1 ? pathAndQuery[1] : ""); fUri = new Uri(builder.ToString()); // Now create the request stream, but chop of the headers if (this.ContentLength > 0) { fRequestStream = new MemoryStream((int)this.ContentLength); fRequestStream.Write (connection.RawBuffer, (int)reader.Position, (int)(connection.RawBufferLength - reader.Position)); } } else if (ReceiveComplete) { throw new AdkHttpException (AdkHttpStatusCode.ClientError_400_Bad_Request, "Too much data received for specified Content-Length"); } else { fRequestStream.Write(connection.RawBuffer, 0, connection.RawBufferLength); } }
public void Receive( AdkSocketConnection connection ) { if ( fContentLength == -1 ) { MemoryStream initialBuffer = new MemoryStream ( connection.RawBuffer, 0, connection.RawBufferLength, false, false ); AdkHttpHeadersReader reader = new AdkHttpHeadersReader( initialBuffer ); ParseRequestLine( reader ); ParseHeaders( reader ); // This server does not support transfer encoding if ( this.Headers["Transfer-Encoding"] != null ) { throw new AdkHttpException ( AdkHttpStatusCode.ServerError_501_Not_Implemented, "'Transfer-Encoding' is not supported" ); } IPEndPoint endPoint = (IPEndPoint) connection.Socket.LocalEndPoint; string host = fHeaders["Host"]; if ( host == null ) { host = endPoint.Address.ToString(); } else { int loc = host.IndexOf( ':' ); if ( loc > 0 ) { host = host.Substring( 0, loc ); } } // TODO: Implement better parsing of the query string. This will sometimes blow up when it shouldn't. string [] pathAndQuery = this.Path.Split( '?' ); UriBuilder builder = new UriBuilder ( "http", host, connection.Binding.Port, pathAndQuery[0], pathAndQuery.Length > 1 ? pathAndQuery[1] : "" ); fUri = new Uri( builder.ToString() ); // Now create the request stream, but chop of the headers if ( this.ContentLength > 0 ) { fRequestStream = new MemoryStream( (int) this.ContentLength ); fRequestStream.Write ( connection.RawBuffer, (int) reader.Position, (int) (connection.RawBufferLength - reader.Position) ); } } else if ( ReceiveComplete ) { throw new AdkHttpException ( AdkHttpStatusCode.ClientError_400_Bad_Request, "Too much data received for specified Content-Length" ); } else { fRequestStream.Write( connection.RawBuffer, 0, connection.RawBufferLength ); } }