X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.ServiceModel%2FSystem.ServiceModel.Channels.Http%2FHttpReplyChannel.cs;h=098b622aa836a1ca86cba5c3fd4e1872fbc0aee8;hb=6f4db43170d20245dde37078b8d0dd39fbba541f;hp=b1a45e0dfb4d0f29f159772c901e0089bb2c3f33;hpb=c12380c4b9906b0e95d7121b4d9fbfbd64d36a3f;p=mono.git diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpReplyChannel.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpReplyChannel.cs index b1a45e0dfb4..098b622aa83 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpReplyChannel.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpReplyChannel.cs @@ -57,6 +57,10 @@ namespace System.ServiceModel.Channels.Http } } + internal HttpChannelListener Source { + get { return source; } + } + public MessageEncoder Encoder { get { return source.MessageEncoder; } } @@ -88,8 +92,8 @@ namespace System.ServiceModel.Channels.Http AbortConnections (timeout); // FIXME: this wait is sort of hack (because it should not be required), but without it some tests are blocked. // This hack even had better be moved to base.CancelAsync(). - if (CurrentAsyncResult != null) - CurrentAsyncResult.AsyncWaitHandle.WaitOne (TimeSpan.FromMilliseconds (300)); +// if (CurrentAsyncResult != null) +// CurrentAsyncResult.AsyncWaitHandle.WaitOne (TimeSpan.FromMilliseconds (300)); return base.CancelAsync (timeout); } @@ -100,12 +104,15 @@ namespace System.ServiceModel.Channels.Http } bool close_started; + object close_lock = new object (); protected override void OnClose (TimeSpan timeout) { - if (close_started) - return; - close_started = true; + lock (close_lock) { + if (close_started) + return; + close_started = true; + } DateTime start = DateTime.Now; // FIXME: consider timeout @@ -164,18 +171,21 @@ namespace System.ServiceModel.Channels.Http Message msg = null; - if (ctxi.Request.HttpMethod == "POST") { + if (ctxi.Request.HttpMethod == "POST") msg = CreatePostMessage (ctxi); - if (msg == null) - return false; - } else if (ctxi.Request.HttpMethod == "GET") + else if (ctxi.Request.HttpMethod == "GET") msg = Message.CreateMessage (MessageVersion.None, null); // HTTP GET-based request + if (msg == null) + return false; + if (msg.Headers.To == null) msg.Headers.To = ctxi.Request.Url; msg.Properties.Add ("Via", LocalAddress.Uri); msg.Properties.Add (HttpRequestMessageProperty.Name, CreateRequestProperty (ctxi)); + Logger.LogMessage (MessageLogSourceKind.TransportReceive, ref msg, source.Source.MaxReceivedMessageSize); + context = new HttpRequestContext (this, ctxi, msg); reqctx = context; return true; @@ -233,6 +243,7 @@ namespace System.ServiceModel.Channels.Http msg.Headers.Action = action; } } + msg.Properties.Add (RemoteEndpointMessageProperty.Name, new RemoteEndpointMessageProperty (ctxi.Request.ClientIPAddress, ctxi.Request.ClientPort)); return msg; }