source: TFP-WebServer/SpaceWizards.HttpListener/src/System/Net/Managed/HttpStreamAsyncResult.cs

Last change on this file was 376, checked in by alloc, 2 years ago

Added SpaceWizards.HttpListener for HTTP IPv6 support

File size: 3.2 KB
Line 
1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3
4//
5// System.Net.HttpStreamAsyncResult
6//
7// Authors:
8// Gonzalo Paniagua Javier (gonzalo@novell.com)
9//
10// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
11//
12// Permission is hereby granted, free of charge, to any person obtaining
13// a copy of this software and associated documentation files (the
14// "Software"), to deal in the Software without restriction, including
15// without limitation the rights to use, copy, modify, merge, publish,
16// distribute, sublicense, and/or sell copies of the Software, and to
17// permit persons to whom the Software is furnished to do so, subject to
18// the following conditions:
19//
20// The above copyright notice and this permission notice shall be
21// included in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30//
31
32using System;
33using System.Threading;
34using System.Threading.Tasks;
35
36namespace SpaceWizards.HttpListener
37{
38 internal sealed class HttpStreamAsyncResult : IAsyncResult
39 {
40 private object _locker = new object();
41 private ManualResetEvent? _handle;
42 private bool _completed;
43
44 internal readonly object _parent;
45 internal byte[]? _buffer;
46 internal int _offset;
47 internal int _count;
48 internal AsyncCallback? _callback;
49 internal object? _state;
50 internal int _synchRead;
51 internal Exception? _error;
52 internal bool _endCalled;
53
54 internal HttpStreamAsyncResult(object parent)
55 {
56 _parent = parent;
57 }
58
59 public void Complete(Exception e)
60 {
61 _error = e;
62 Complete();
63 }
64
65 public void Complete()
66 {
67 lock (_locker)
68 {
69 if (_completed)
70 return;
71
72 _completed = true;
73 if (_handle != null)
74 _handle.Set();
75
76 if (_callback != null)
77 Task.Run(() => _callback(this));
78 }
79 }
80
81 public object? AsyncState
82 {
83 get { return _state; }
84 }
85
86 public WaitHandle AsyncWaitHandle
87 {
88 get
89 {
90 lock (_locker)
91 {
92 if (_handle == null)
93 _handle = new ManualResetEvent(_completed);
94 }
95
96 return _handle;
97 }
98 }
99
100 public bool CompletedSynchronously => false;
101
102 public bool IsCompleted
103 {
104 get
105 {
106 lock (_locker)
107 {
108 return _completed;
109 }
110 }
111 }
112 }
113}
Note: See TracBrowser for help on using the repository browser.