Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ PipelineCallback()

override PipelineInstruction System.Net.FtpControlStream.PipelineCallback ( PipelineEntry entry,
ResponseDescription response,
bool timeout,
ref Stream stream )
inlineprotectedvirtual

Reimplemented from System.Net.CommandStream.

Definition at line 241 of file FtpControlStream.cs.

242 {
243 if (System.Net.NetEventSource.Log.IsEnabled())
244 {
245 System.Net.NetEventSource.Info(this, $"Command:{entry?.Command} Description:{response?.StatusDescription}", "PipelineCallback");
246 }
247 if (response == null)
248 {
249 return PipelineInstruction.Abort;
250 }
251 FtpStatusCode status = (FtpStatusCode)response.Status;
252 if (status != FtpStatusCode.ClosingControl)
253 {
254 StatusCode = status;
255 StatusLine = response.StatusDescription;
256 }
257 if (response.InvalidStatusCode)
258 {
259 throw new WebException(System.SR.net_InvalidStatusCode, WebExceptionStatus.ProtocolError);
260 }
261 if (_index == -1)
262 {
263 switch (status)
264 {
265 case FtpStatusCode.SendUserCommand:
268 return PipelineInstruction.Advance;
269 case FtpStatusCode.ServiceTemporarilyNotAvailable:
270 return PipelineInstruction.Reread;
271 default:
272 throw GenerateException(status, response.StatusDescription, null);
273 }
274 }
275 if (entry.Command == "OPTS utf8 on\r\n")
276 {
277 if (response.PositiveCompletion)
278 {
279 base.Encoding = Encoding.UTF8;
280 }
281 else
282 {
283 base.Encoding = Encoding.Default;
284 }
285 return PipelineInstruction.Advance;
286 }
287 if (entry.Command.IndexOf("USER", StringComparison.Ordinal) != -1 && status == FtpStatusCode.LoggedInProceed)
288 {
289 _loginState = FtpLoginState.LoggedIn;
290 _index++;
291 }
292 if (response.TransientFailure || response.PermanentFailure)
293 {
294 if (status == FtpStatusCode.ServiceNotAvailable)
295 {
297 }
298 throw GenerateException(status, response.StatusDescription, null);
299 }
300 if (_loginState != FtpLoginState.LoggedIn && entry.Command.IndexOf("PASS", StringComparison.Ordinal) != -1)
301 {
302 if (status != FtpStatusCode.NeedLoginAccount && status != FtpStatusCode.LoggedInProceed)
303 {
304 throw GenerateException(status, response.StatusDescription, null);
305 }
306 _loginState = FtpLoginState.LoggedIn;
307 }
308 if (entry.HasFlag(PipelineEntryFlags.CreateDataConnection) && (response.PositiveCompletion || response.PositiveIntermediate))
309 {
310 bool isSocketReady;
312 if (!isSocketReady)
313 {
314 return result;
315 }
316 }
317 switch (status)
318 {
319 case FtpStatusCode.DataAlreadyOpen:
320 case FtpStatusCode.OpeningData:
321 {
322 if (_dataSocket == null)
323 {
324 return PipelineInstruction.Abort;
325 }
326 if (!entry.HasFlag(PipelineEntryFlags.GiveDataStream))
327 {
329 return PipelineInstruction.Abort;
330 }
331 TryUpdateContentLength(response.StatusDescription);
332 FtpWebRequest ftpWebRequest = (FtpWebRequest)_request;
333 if (ftpWebRequest.MethodInfo.ShouldParseForResponseUri)
334 {
335 TryUpdateResponseUri(response.StatusDescription, ftpWebRequest);
336 }
338 }
339 case FtpStatusCode.LoggedInProceed:
341 break;
342 case FtpStatusCode.ClosingControl:
343 _exitMessage.Append(response.StatusDescription);
344 CloseSocket();
345 break;
346 case FtpStatusCode.ServerWantsSecureSession:
347 {
348 if (base.NetworkStream is TlsStream)
349 {
350 break;
351 }
352 FtpWebRequest ftpWebRequest2 = (FtpWebRequest)_request;
353 TlsStream tlsStream = new TlsStream(base.NetworkStream, base.Socket, ftpWebRequest2.RequestUri.Host, ftpWebRequest2.ClientCertificates);
354 if (_isAsync)
355 {
356 tlsStream.BeginAuthenticateAsClient(delegate(IAsyncResult ar)
357 {
358 try
359 {
360 tlsStream.EndAuthenticateAsClient(ar);
361 base.NetworkStream = tlsStream;
363 }
364 catch (Exception obj)
365 {
366 CloseSocket();
368 }
369 }, null);
370 return PipelineInstruction.Pause;
371 }
372 tlsStream.AuthenticateAsClient();
373 base.NetworkStream = tlsStream;
374 break;
375 }
376 case FtpStatusCode.FileStatus:
377 if (entry.Command.StartsWith("SIZE ", StringComparison.Ordinal))
378 {
380 }
381 else if (entry.Command.StartsWith("MDTM ", StringComparison.Ordinal))
382 {
384 }
385 break;
386 case FtpStatusCode.PathnameCreated:
387 if (entry.Command == "PWD\r\n" && !entry.HasFlag(PipelineEntryFlags.UserCommand))
388 {
389 _loginDirectory = GetLoginDirectory(response.StatusDescription);
390 }
391 break;
392 default:
393 if (entry.Command.IndexOf("CWD", StringComparison.Ordinal) != -1)
394 {
396 }
397 break;
398 }
399 if (response.PositiveIntermediate || (!base.UsingSecureStream && entry.Command == "AUTH TLS\r\n"))
400 {
401 return PipelineInstruction.Reread;
402 }
403 return PipelineInstruction.Advance;
404 }
void InvokeRequestCallback(object obj)
Exception GenerateException(string message, WebExceptionStatus status, Exception innerException)
DateTime GetLastModifiedFrom213Response(string str)
long GetContentLengthFrom213Response(string responseString)
void TryUpdateContentLength(string str)
void TryUpdateResponseUri(string str, FtpWebRequest request)
PipelineInstruction QueueOrCreateFtpDataStream(ref Stream stream)
string GetLoginDirectory(string str)
PipelineInstruction QueueOrCreateDataConection(PipelineEntry entry, ResponseDescription response, bool timeout, ref Stream stream, out bool isSocketReady)
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
static string net_InvalidStatusCode
Definition SR.cs:78
static string net_ftp_invalid_status_response
Definition SR.cs:92
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
static Encoding UTF8
Definition Encoding.cs:526
static Encoding Default
Definition Encoding.cs:345
StringBuilder Append(char value, int repeatCount)

References System.Net.CommandStream._abortReason, System.Net.FtpControlStream._bannerMessage, System.Net.FtpControlStream._contentLength, System.Net.FtpControlStream._dataSocket, System.Net.FtpControlStream._establishedServerDirectory, System.Net.FtpControlStream._exitMessage, System.Net.CommandStream._index, System.Net.CommandStream._isAsync, System.Net.FtpControlStream._lastModified, System.Net.FtpControlStream._loginDirectory, System.Net.FtpControlStream._loginState, System.Net.CommandStream._request, System.Net.FtpControlStream._requestedServerDirectory, System.Net.FtpControlStream._welcomeMessage, System.Text.StringBuilder.Append(), System.Net.NetworkStreamWrapper.CloseSocket(), System.Net.CommandStream.ContinueCommandPipeline(), System.Text.Encoding.Default, System.SR.Format(), System.Net.CommandStream.GenerateException(), System.Net.FtpControlStream.GetContentLengthFrom213Response(), System.Net.FtpControlStream.GetLastModifiedFrom213Response(), System.Net.FtpControlStream.GetLoginDirectory(), System.Net.NetEventSource.Info(), System.Net.CommandStream.InvokeRequestCallback(), System.Net.NetEventSource.Log, System.Net.CommandStream.MarkAsRecoverableFailure(), System.SR.net_ftp_invalid_status_response, System.SR.net_InvalidStatusCode, System.obj, System.Net.FtpControlStream.QueueOrCreateDataConection(), System.Net.FtpControlStream.QueueOrCreateFtpDataStream(), System.Net.FtpControlStream.StatusCode, System.Net.FtpControlStream.StatusLine, System.stream, System.timeout, System.Net.FtpControlStream.TryUpdateContentLength(), System.Net.FtpControlStream.TryUpdateResponseUri(), and System.Text.Encoding.UTF8.