svn path=/trunk/mcs/; revision=113894
[mono.git] / mcs / class / System.Runtime.Remoting / MonoHttp / HttpStreamAsyncResult.cs
1 #define EMBEDDED_IN_1_0
2
3 //
4 // System.Net.HttpStreamAsyncResult
5 //
6 // Authors:
7 //      Gonzalo Paniagua Javier (gonzalo@novell.com)
8 //
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 #if EMBEDDED_IN_1_0
31 using System.Threading;
32
33 using System; using System.Net; namespace MonoHttp {
34         class HttpStreamAsyncResult : IAsyncResult {
35                 object locker = new object ();
36                 ManualResetEvent handle;
37                 bool completed;
38
39                 internal byte [] Buffer;
40                 internal int Offset;
41                 internal int Count;
42                 internal AsyncCallback Callback;
43                 internal object State;
44                 internal int SynchRead;
45                 internal Exception Error;
46
47                 public void Complete (Exception e)
48                 {
49                         Error = e;
50                         Complete ();
51                 }
52
53                 public void Complete ()
54                 {
55                         lock (locker) {
56                                 if (completed)
57                                         return;
58
59                                 completed = true;
60                                 if (handle != null)
61                                         handle.Set ();
62
63                                 if (Callback != null)
64                                         Callback.BeginInvoke (this, null, null);
65                         }
66                 }
67                 
68                 public object AsyncState {
69                         get { return State; }
70                 }
71
72                 public WaitHandle AsyncWaitHandle {
73                         get {
74                                 lock (locker) {
75                                         if (handle == null)
76                                                 handle = new ManualResetEvent (completed);
77                                 }
78                                 
79                                 return handle;
80                         }
81                 }
82
83                 public bool CompletedSynchronously {
84                         get { return (SynchRead == Count); }
85                 }
86
87                 public bool IsCompleted {
88                         get {
89                                 lock (locker) {
90                                         return completed;
91                                 }
92                         }
93                 }
94         }
95 }
96 #endif
97