@@ -324,6 +324,27 @@ public void SendRequest()
324
324
stream . Write ( requestBytes , 0 , requestBytes . Length ) ;
325
325
stream . Flush ( ) ;
326
326
327
+ if ( ProxyServer . Enable100ContinueBehaviour )
328
+ if ( this . Request . ExpectContinue )
329
+ {
330
+ var httpResult = ProxyClient . ServerStreamReader . ReadLine ( ) . Split ( new char [ ] { ' ' } , 3 ) ;
331
+ var responseStatusCode = httpResult [ 1 ] . Trim ( ) ;
332
+ var responseStatusDescription = httpResult [ 2 ] . Trim ( ) ;
333
+
334
+ //find if server is willing for expect continue
335
+ if ( responseStatusCode . Equals ( "100" )
336
+ && responseStatusDescription . ToLower ( ) . Equals ( "continue" ) )
337
+ {
338
+ this . Request . Is100Continue = true ;
339
+ ProxyClient . ServerStreamReader . ReadLine ( ) ;
340
+ }
341
+ else if ( responseStatusCode . Equals ( "417" )
342
+ && responseStatusDescription . ToLower ( ) . Equals ( "expectation failed" ) )
343
+ {
344
+ this . Request . ExpectationFailed = true ;
345
+ ProxyClient . ServerStreamReader . ReadLine ( ) ;
346
+ }
347
+ }
327
348
}
328
349
329
350
public void ReceiveResponse ( )
@@ -342,6 +363,7 @@ public void ReceiveResponse()
342
363
this . Response . ResponseStatusCode = httpResult [ 1 ] . Trim ( ) ;
343
364
this . Response . ResponseStatusDescription = httpResult [ 2 ] . Trim ( ) ;
344
365
366
+ //For HTTP 1.1 comptibility server may send expect-continue even if not asked for it in request
345
367
if ( this . Response . ResponseStatusCode . Equals ( "100" )
346
368
&& this . Response . ResponseStatusDescription . ToLower ( ) . Equals ( "continue" ) )
347
369
{
@@ -351,6 +373,8 @@ public void ReceiveResponse()
351
373
ReceiveResponse ( ) ;
352
374
return ;
353
375
}
376
+ else if ( this . Response . ResponseStatusCode . Equals ( "417" )
377
+ && this . Response . ResponseStatusDescription . ToLower ( ) . Equals ( "expectation failed" ) )
354
378
{
355
379
this . Response . ExpectationFailed = true ;
356
380
this . Response . ResponseStatusCode = null ;
0 commit comments