55 using HttpReverseProxyLib . DataTypes . Enum ;
66 using HttpReverseProxyLib . Exceptions ;
77 using System ;
8+ using System . Collections . Generic ;
89 using System . Linq ;
910 using System . Net ;
1011 using System . Text ;
@@ -58,7 +59,7 @@ public void ReceiveClientRequestHeaders(RequestObj requestObj)
5859 throw exception ;
5960 }
6061
61- requestObj . ClientRequestObj . Host = requestObj . ClientRequestObj . ClientRequestHeaders [ "Host" ] . ToString ( ) ;
62+ requestObj . ClientRequestObj . Host = requestObj . ClientRequestObj . ClientRequestHeaders [ "Host" ] [ 0 ] ;
6263 requestObj . ClientRequestObj . Scheme = "http" ;
6364
6465 // Parse Client request content type
@@ -226,25 +227,30 @@ private void ParseClientRequestHeaders(RequestObj requestObj)
226227 httpHeaders [ 0 ] = httpHeaders [ 0 ] . Trim ( ) ;
227228 httpHeaders [ 1 ] = httpHeaders [ 1 ] . Trim ( ) ;
228229
230+ if ( ! requestObj . ClientRequestObj . ClientRequestHeaders . ContainsKey ( httpHeaders [ 0 ] ) )
231+ {
232+ requestObj . ClientRequestObj . ClientRequestHeaders . Add ( httpHeaders [ 0 ] , new List < string > ( ) ) ;
233+ }
234+
229235 switch ( httpHeaders [ 0 ] . ToLower ( ) )
230236 {
231237 case "host" :
232- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Host" , httpHeaders [ 1 ] ) ;
238+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Host" ] . Add ( httpHeaders [ 1 ] ) ;
233239 break ;
234240 case "user-agent" :
235- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "User-Agent" , httpHeaders [ 1 ] ) ;
241+ requestObj . ClientRequestObj . ClientRequestHeaders [ "User-Agent" ] . Add ( httpHeaders [ 1 ] ) ;
236242 break ;
237243 case "accept" :
238- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Accept" , httpHeaders [ 1 ] ) ;
244+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Accept" ] . Add ( httpHeaders [ 1 ] ) ;
239245 break ;
240246 case "referer" :
241- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Referer" , httpHeaders [ 1 ] ) ;
247+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Referer" ] . Add ( httpHeaders [ 1 ] ) ;
242248 break ;
243249 case "cookie" :
244- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Cookie" , httpHeaders [ 1 ] ) ;
250+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Cookie" ] . Add ( httpHeaders [ 1 ] ) ;
245251 break ;
246252 case "connection" :
247- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Connection" , httpHeaders [ 1 ] ) ;
253+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Connection" ] . Add ( httpHeaders [ 1 ] ) ;
248254 if ( httpHeaders [ 1 ] . ToLower ( ) . Trim ( ) == "close" )
249255 {
250256 requestObj . ClientRequestObj . IsClientKeepAlive = false ;
@@ -265,24 +271,24 @@ private void ParseClientRequestHeaders(RequestObj requestObj)
265271 case "content-length" :
266272 int . TryParse ( httpHeaders [ 1 ] , out contentLen ) ;
267273 requestObj . ClientRequestObj . ClientRequestContentLength = contentLen ;
268- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Content-Length" , httpHeaders [ 1 ] ) ;
274+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Length" ] . Add ( httpHeaders [ 1 ] ) ;
269275 break ;
270276 case "content-type" :
271- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "Content-Type" , httpHeaders [ 1 ] ) ;
277+ requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Type" ] . Add ( httpHeaders [ 1 ] ) ;
272278 break ;
273279 case "if-modified-since" :
274280 string [ ] sb = httpHeaders [ 1 ] . Trim ( ) . Split ( new char [ ] { ';' } ) ;
275281 DateTime d ;
276282 if ( DateTime . TryParse ( sb [ 0 ] , out d ) )
277283 {
278- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( "If-Modified-Since" , httpHeaders [ 1 ] ) ;
284+ requestObj . ClientRequestObj . ClientRequestHeaders [ "If-Modified-Since" ] . Add ( httpHeaders [ 1 ] ) ;
279285 }
280286
281287 break ;
282288 default :
283289 try
284290 {
285- requestObj . ClientRequestObj . ClientRequestHeaders . Add ( httpHeaders [ 0 ] , httpHeaders [ 1 ] ) ;
291+ requestObj . ClientRequestObj . ClientRequestHeaders [ httpHeaders [ 0 ] ] . Add ( httpHeaders [ 1 ] ) ;
286292 }
287293 catch ( Exception ex )
288294 {
@@ -296,7 +302,7 @@ private void ParseClientRequestHeaders(RequestObj requestObj)
296302 }
297303
298304
299- private DataContentTypeEncoding DetermineClientRequestContentTypeEncoding ( RequestObj requestObj ) //Hashtable headers)
305+ private DataContentTypeEncoding DetermineClientRequestContentTypeEncoding ( RequestObj requestObj )
300306 {
301307 DataContentTypeEncoding contentTypeEncoding = new DataContentTypeEncoding ( ) ;
302308
@@ -317,7 +323,7 @@ private DataContentTypeEncoding DetermineClientRequestContentTypeEncoding(Reques
317323
318324 // If there is no content type headerByteArray set the default values
319325 if ( ! requestObj . ClientRequestObj . ClientRequestHeaders . ContainsKey ( "Content-Type" ) ||
320- string . IsNullOrEmpty ( requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Type" ] . ToString ( ) ) )
326+ string . IsNullOrEmpty ( requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Type" ] [ 0 ] ) )
321327 {
322328 contentTypeEncoding . ContentType = "text/html" ;
323329 contentTypeEncoding . ContentCharSet = "UTF-8" ;
@@ -330,7 +336,7 @@ private DataContentTypeEncoding DetermineClientRequestContentTypeEncoding(Reques
330336 // Parse the server response content type
331337 try
332338 {
333- string contentType = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Type" ] . ToString ( ) ;
339+ string contentType = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Type" ] [ 0 ] ;
334340
335341 if ( contentType . Contains ( ";" ) )
336342 {
@@ -390,7 +396,7 @@ private void DetermineClientRequestContentLength(RequestObj requestObj)
390396 {
391397 if ( requestObj . ClientRequestObj . ClientRequestHeaders . ContainsKey ( "Content-Length" ) )
392398 {
393- string contentLen = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Length" ] . ToString ( ) ;
399+ string contentLen = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Length" ] [ 0 ] ;
394400 requestObj . ClientRequestObj . ClientRequestContentLength = int . Parse ( contentLen ) ;
395401 }
396402 else if ( requestObj . ClientRequestObj . ClientRequestHeaders . ContainsKey ( "Transfer-Encoding" ) )
@@ -416,7 +422,7 @@ private DataTransmissionMode DetermineDataTransmissionModeC2S(RequestObj request
416422 // Transfer behavior is "Content-Length"
417423 if ( requestObj . ClientRequestObj . ClientRequestHeaders . ContainsKey ( "Content-Length" ) )
418424 {
419- string contentLen = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Length" ] . ToString ( ) ;
425+ string contentLen = requestObj . ClientRequestObj . ClientRequestHeaders [ "Content-Length" ] [ 0 ] ;
420426 requestObj . ClientRequestObj . ClientRequestContentLength = int . Parse ( contentLen ) ;
421427Logging . Instance . LogMessage ( requestObj . Id , requestObj . ProxyProtocol , Loglevel . DEBUG , "IncomingClientRequest.DetermineDataTransmissionModeC2S(): ContainsKey(Content-Length)" ) ;
422428
0 commit comments