Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MimeMultiPart.cs
Go to the documentation of this file.
1
using
System.Collections.Generic
;
2
using
System.Collections.ObjectModel
;
3
using
System.IO
;
4
using
System.Runtime.ExceptionServices
;
5
using
System.Threading
;
6
7
namespace
System.Net.Mime
;
8
9
internal
sealed
class
MimeMultiPart
:
MimeBasePart
10
{
11
internal
sealed
class
MimePartContext
12
{
13
internal
IEnumerator<MimeBasePart>
_partsEnumerator
;
14
15
internal
Stream
_outputStream
;
16
17
internal
System.Net.LazyAsyncResult
_result
;
18
19
internal
BaseWriter
_writer
;
20
21
internal
bool
_completed
;
22
23
internal
bool
_completedSynchronously
=
true
;
24
25
internal
MimePartContext
(
BaseWriter
writer
,
System
.
Net
.
LazyAsyncResult
result,
IEnumerator<MimeBasePart>
partsEnumerator
)
26
{
27
_writer
=
writer
;
28
_result
= result;
29
_partsEnumerator
=
partsEnumerator
;
30
}
31
}
32
33
private
Collection<MimeBasePart>
_parts
;
34
35
private
static
int
s_boundary
;
36
37
private
AsyncCallback
_mimePartSentCallback
;
38
39
private
bool
_allowUnicode
;
40
41
internal
MimeMultiPartType
MimeMultiPartType
42
{
43
set
44
{
45
if
(
value
>
MimeMultiPartType
.Related ||
value
<
MimeMultiPartType
.Mixed)
46
{
47
throw
new
NotSupportedException
(
value
.ToString());
48
}
49
SetType
(
value
);
50
}
51
}
52
53
internal
Collection<MimeBasePart>
Parts
54
{
55
get
56
{
57
if
(
_parts
==
null
)
58
{
59
_parts
=
new
Collection<MimeBasePart>
();
60
}
61
return
_parts
;
62
}
63
}
64
65
internal
MimeMultiPart
(
MimeMultiPartType
type
)
66
{
67
MimeMultiPartType
=
type
;
68
}
69
70
private
void
SetType
(
MimeMultiPartType
type
)
71
{
72
base.ContentType.MediaType =
"multipart/"
+
type
.ToString().ToLowerInvariant();
73
base.ContentType.Boundary =
GetNextBoundary
();
74
}
75
76
internal
void
Complete
(
IAsyncResult
result,
Exception
e)
77
{
78
MimePartContext
mimePartContext
= (
MimePartContext
)result.
AsyncState
;
79
if
(
mimePartContext
._completed)
80
{
81
ExceptionDispatchInfo
.
Throw
(e);
82
}
83
try
84
{
85
mimePartContext
._outputStream.Close();
86
}
87
catch
(
Exception
ex
)
88
{
89
if
(e ==
null
)
90
{
91
e =
ex
;
92
}
93
}
94
mimePartContext._completed =
true
;
95
mimePartContext
._result.InvokeCallback(e);
96
}
97
98
internal
void
MimeWriterCloseCallback
(
IAsyncResult
result)
99
{
100
if
(result.
CompletedSynchronously
)
101
{
102
return
;
103
}
104
((
MimePartContext
)result.
AsyncState
)._completedSynchronously =
false
;
105
try
106
{
107
MimeWriterCloseCallbackHandler
(result);
108
}
109
catch
(
Exception
e)
110
{
111
Complete
(result, e);
112
}
113
}
114
115
private
void
MimeWriterCloseCallbackHandler
(
IAsyncResult
result)
116
{
117
MimePartContext
mimePartContext
= (
MimePartContext
)result.
AsyncState
;
118
((
MimeWriter
)
mimePartContext
._writer).EndClose(result);
119
Complete
(result,
null
);
120
}
121
122
internal
void
MimePartSentCallback
(
IAsyncResult
result)
123
{
124
if
(result.
CompletedSynchronously
)
125
{
126
return
;
127
}
128
((
MimePartContext
)result.
AsyncState
)._completedSynchronously =
false
;
129
try
130
{
131
MimePartSentCallbackHandler
(result);
132
}
133
catch
(
Exception
e)
134
{
135
Complete
(result, e);
136
}
137
}
138
139
private
void
MimePartSentCallbackHandler
(
IAsyncResult
result)
140
{
141
MimePartContext
mimePartContext
= (
MimePartContext
)result.
AsyncState
;
142
MimeBasePart
current =
mimePartContext
._partsEnumerator.Current;
143
current.
EndSend
(result);
144
if
(
mimePartContext
._partsEnumerator.MoveNext())
145
{
146
current =
mimePartContext
._partsEnumerator.Current;
147
IAsyncResult
asyncResult
= current.
BeginSend
(
mimePartContext
._writer,
_mimePartSentCallback
,
_allowUnicode
,
mimePartContext
);
148
if
(
asyncResult
.CompletedSynchronously)
149
{
150
MimePartSentCallbackHandler
(
asyncResult
);
151
}
152
}
153
else
154
{
155
IAsyncResult
asyncResult2
= ((
MimeWriter
)
mimePartContext
._writer).BeginClose(
MimeWriterCloseCallback
,
mimePartContext
);
156
if
(
asyncResult2
.CompletedSynchronously)
157
{
158
MimeWriterCloseCallbackHandler
(
asyncResult2
);
159
}
160
}
161
}
162
163
internal
void
ContentStreamCallback
(
IAsyncResult
result)
164
{
165
if
(result.
CompletedSynchronously
)
166
{
167
return
;
168
}
169
((
MimePartContext
)result.
AsyncState
)._completedSynchronously =
false
;
170
try
171
{
172
ContentStreamCallbackHandler
(result);
173
}
174
catch
(
Exception
e)
175
{
176
Complete
(result, e);
177
}
178
}
179
180
private
void
ContentStreamCallbackHandler
(
IAsyncResult
result)
181
{
182
MimePartContext
mimePartContext
= (
MimePartContext
)result.
AsyncState
;
183
mimePartContext._outputStream =
mimePartContext
._writer.EndGetContentStream(result);
184
mimePartContext._writer =
new
MimeWriter
(
mimePartContext
._outputStream,
base
.ContentType.Boundary);
185
if
(
mimePartContext
._partsEnumerator.MoveNext())
186
{
187
MimeBasePart
current =
mimePartContext
._partsEnumerator.Current;
188
_mimePartSentCallback
=
MimePartSentCallback
;
189
IAsyncResult
asyncResult
= current.
BeginSend
(
mimePartContext
._writer,
_mimePartSentCallback
,
_allowUnicode
,
mimePartContext
);
190
if
(
asyncResult
.CompletedSynchronously)
191
{
192
MimePartSentCallbackHandler
(
asyncResult
);
193
}
194
}
195
else
196
{
197
IAsyncResult
asyncResult2
= ((
MimeWriter
)
mimePartContext
._writer).BeginClose(
MimeWriterCloseCallback
,
mimePartContext
);
198
if
(
asyncResult2
.CompletedSynchronously)
199
{
200
MimeWriterCloseCallbackHandler
(
asyncResult2
);
201
}
202
}
203
}
204
205
internal
override
IAsyncResult
BeginSend
(
BaseWriter
writer
, AsyncCallback callback,
bool
allowUnicode
,
object
state
)
206
{
207
_allowUnicode
=
allowUnicode
;
208
PrepareHeaders
(
allowUnicode
);
209
writer
.WriteHeaders(
base
.Headers,
allowUnicode
);
210
MimePartAsyncResult
result =
new
MimePartAsyncResult
(
this
,
state
, callback);
211
MimePartContext
state2
=
new
MimePartContext
(
writer
, result,
Parts
.
GetEnumerator
());
212
IAsyncResult
asyncResult
=
writer
.BeginGetContentStream(
ContentStreamCallback
,
state2
);
213
if
(
asyncResult
.CompletedSynchronously)
214
{
215
ContentStreamCallbackHandler
(
asyncResult
);
216
}
217
return
result;
218
}
219
220
internal
override
void
Send
(
BaseWriter
writer
,
bool
allowUnicode
)
221
{
222
PrepareHeaders
(
allowUnicode
);
223
writer
.WriteHeaders(
base
.Headers,
allowUnicode
);
224
Stream
contentStream
=
writer
.GetContentStream();
225
MimeWriter
mimeWriter
=
new
MimeWriter
(
contentStream
,
base
.ContentType.Boundary);
226
foreach
(
MimeBasePart
part
in
Parts
)
227
{
228
part
.Send(
mimeWriter
,
allowUnicode
);
229
}
230
mimeWriter
.Close();
231
contentStream
.Close();
232
}
233
234
internal
string
GetNextBoundary
()
235
{
236
int
value
=
Interlocked
.
Increment
(
ref
s_boundary
) - 1;
237
return
$
"--boundary_{value}_{Guid.NewGuid()}"
;
238
}
239
}
System.Collections.Generic.Dictionary.GetEnumerator
Enumerator GetEnumerator()
Definition
Dictionary.cs:984
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.Exception
Definition
Exception.cs:15
System.IO.Stream
Definition
Stream.cs:11
System.Net.LazyAsyncResult
Definition
LazyAsyncResult.cs:7
System.Net.Mime.BaseWriter
Definition
BaseWriter.cs:9
System.Net.Mime.MimeBasePart.MimePartAsyncResult
Definition
MimeBasePart.cs:10
System.Net.Mime.MimeBasePart.EndSend
void EndSend(IAsyncResult asyncResult)
Definition
MimeBasePart.cs:223
System.Net.Mime.MimeBasePart.BeginSend
virtual IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, bool allowUnicode, object state)
Definition
MimeBasePart.cs:218
System.Net.Mime.MimeBasePart.PrepareHeaders
void PrepareHeaders(bool allowUnicode)
Definition
MimeBasePart.cs:202
System.Net.Mime.MimeBasePart
Definition
MimeBasePart.cs:8
System.Net.Mime.MimeMultiPart.MimePartContext._outputStream
Stream _outputStream
Definition
MimeMultiPart.cs:15
System.Net.Mime.MimeMultiPart.MimePartContext._partsEnumerator
IEnumerator< MimeBasePart > _partsEnumerator
Definition
MimeMultiPart.cs:13
System.Net.Mime.MimeMultiPart.MimePartContext._completedSynchronously
bool _completedSynchronously
Definition
MimeMultiPart.cs:23
System.Net.Mime.MimeMultiPart.MimePartContext._writer
BaseWriter _writer
Definition
MimeMultiPart.cs:19
System.Net.Mime.MimeMultiPart.MimePartContext.MimePartContext
MimePartContext(BaseWriter writer, System.Net.LazyAsyncResult result, IEnumerator< MimeBasePart > partsEnumerator)
Definition
MimeMultiPart.cs:25
System.Net.Mime.MimeMultiPart.MimePartContext._result
System.Net.LazyAsyncResult _result
Definition
MimeMultiPart.cs:17
System.Net.Mime.MimeMultiPart.MimePartContext._completed
bool _completed
Definition
MimeMultiPart.cs:21
System.Net.Mime.MimeMultiPart.MimePartContext
Definition
MimeMultiPart.cs:12
System.Net.Mime.MimeMultiPart.MimeWriterCloseCallback
void MimeWriterCloseCallback(IAsyncResult result)
Definition
MimeMultiPart.cs:98
System.Net.Mime.MimeMultiPart.SetType
void SetType(MimeMultiPartType type)
Definition
MimeMultiPart.cs:70
System.Net.Mime.MimeMultiPart._parts
Collection< MimeBasePart > _parts
Definition
MimeMultiPart.cs:33
System.Net.Mime.MimeMultiPart.ContentStreamCallbackHandler
void ContentStreamCallbackHandler(IAsyncResult result)
Definition
MimeMultiPart.cs:180
System.Net.Mime.MimeMultiPart.Complete
void Complete(IAsyncResult result, Exception e)
Definition
MimeMultiPart.cs:76
System.Net.Mime.MimeMultiPart.GetNextBoundary
string GetNextBoundary()
Definition
MimeMultiPart.cs:234
System.Net.Mime.MimeMultiPart.MimeMultiPart
MimeMultiPart(MimeMultiPartType type)
Definition
MimeMultiPart.cs:65
System.Net.Mime.MimeMultiPart.Send
override void Send(BaseWriter writer, bool allowUnicode)
Definition
MimeMultiPart.cs:220
System.Net.Mime.MimeMultiPart.MimeWriterCloseCallbackHandler
void MimeWriterCloseCallbackHandler(IAsyncResult result)
Definition
MimeMultiPart.cs:115
System.Net.Mime.MimeMultiPart.MimePartSentCallback
void MimePartSentCallback(IAsyncResult result)
Definition
MimeMultiPart.cs:122
System.Net.Mime.MimeMultiPart.MimePartSentCallbackHandler
void MimePartSentCallbackHandler(IAsyncResult result)
Definition
MimeMultiPart.cs:139
System.Net.Mime.MimeMultiPart.Parts
Collection< MimeBasePart > Parts
Definition
MimeMultiPart.cs:54
System.Net.Mime.MimeMultiPart._mimePartSentCallback
AsyncCallback _mimePartSentCallback
Definition
MimeMultiPart.cs:37
System.Net.Mime.MimeMultiPart._allowUnicode
bool _allowUnicode
Definition
MimeMultiPart.cs:39
System.Net.Mime.MimeMultiPart.s_boundary
static int s_boundary
Definition
MimeMultiPart.cs:35
System.Net.Mime.MimeMultiPart.ContentStreamCallback
void ContentStreamCallback(IAsyncResult result)
Definition
MimeMultiPart.cs:163
System.Net.Mime.MimeMultiPart.BeginSend
override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, bool allowUnicode, object state)
Definition
MimeMultiPart.cs:205
System.Net.Mime.MimeMultiPart
Definition
MimeMultiPart.cs:10
System.Net.Mime.MimeWriter
Definition
MimeWriter.cs:8
System.NotSupportedException
Definition
NotSupportedException.cs:9
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
void Throw()
Definition
ExceptionDispatchInfo.cs:31
System.Runtime.ExceptionServices.ExceptionDispatchInfo
Definition
ExceptionDispatchInfo.cs:7
System.Threading.Interlocked.Increment
static int Increment(ref int location)
Definition
Interlocked.cs:10
System.Threading.Interlocked
Definition
Interlocked.cs:9
System.IAsyncResult.CompletedSynchronously
bool CompletedSynchronously
Definition
IAsyncResult.cs:13
System.IAsyncResult.AsyncState
object? AsyncState
Definition
IAsyncResult.cs:11
System.IAsyncResult
Definition
IAsyncResult.cs:6
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.Collections.ObjectModel
Definition
EventArgsCache.cs:4
System.IO
Definition
ConsoleStream.cs:3
System.Net.Mime.MimeMultiPartType
MimeMultiPartType
Definition
MimeMultiPartType.cs:4
System.Net.Mime
Definition
Base64Encoder.cs:1
System.Net
Definition
HttpClientJsonExtensions.cs:8
System.Runtime.ExceptionServices
Definition
ExceptionDispatchInfo.cs:4
System.Threading
Definition
TaskToApm.cs:3
System.ExceptionArgument.value
@ value
System.ExceptionArgument.type
@ type
System.ExceptionArgument.state
@ state
System.ExceptionArgument.writer
@ writer
System.ExceptionArgument.asyncResult
@ asyncResult
System
Definition
BlockingCollection.cs:8
source
System.Net.Mail
System.Net.Mime
MimeMultiPart.cs
Generated by
1.10.0