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

◆ QueueOrCreateDataConection()

PipelineInstruction System.Net.FtpControlStream.QueueOrCreateDataConection ( PipelineEntry entry,
ResponseDescription response,
bool timeout,
ref Stream stream,
out bool isSocketReady )
inlineprivate

Definition at line 544 of file FtpControlStream.cs.

545 {
546 isSocketReady = false;
548 {
549 isSocketReady = true;
550 return PipelineInstruction.Pause;
551 }
553 bool flag = false;
554 int port = -1;
555 if (entry.Command == "PASV\r\n" || entry.Command == "EPSV\r\n")
556 {
557 if (!response.PositiveCompletion)
558 {
560 return PipelineInstruction.Abort;
561 }
562 port = ((!(entry.Command == "PASV\r\n")) ? GetPortV6(response.StatusDescription) : GetPortV4(response.StatusDescription));
563 flag = true;
564 }
565 if (flag)
566 {
567 try
568 {
569 _dataSocket = CreateFtpDataSocket((FtpWebRequest)_request, base.Socket);
570 }
571 catch (ObjectDisposedException)
572 {
573 throw ExceptionHelper.RequestAbortedException;
574 }
575 IPEndPoint localEP = new IPEndPoint(((IPEndPoint)base.Socket.LocalEndPoint).Address, 0);
577 _passiveEndPoint = new IPEndPoint(base.ServerAddress, port);
578 }
579 if (_passiveEndPoint != null)
580 {
582 _passiveEndPoint = null;
583 if (System.Net.NetEventSource.Log.IsEnabled())
584 {
585 System.Net.NetEventSource.Info(this, "starting Connect()", "QueueOrCreateDataConection");
586 }
587 if (_isAsync)
588 {
590 return PipelineInstruction.Pause;
591 }
593 return PipelineInstruction.Advance;
594 }
595 if (System.Net.NetEventSource.Log.IsEnabled())
596 {
597 System.Net.NetEventSource.Info(this, "starting Accept()", "QueueOrCreateDataConection");
598 }
599 if (_isAsync)
600 {
602 return PipelineInstruction.Pause;
603 }
605 try
606 {
608 if (!base.ServerAddress.Equals(((IPEndPoint)_dataSocket.RemoteEndPoint).Address))
609 {
611 throw new WebException(System.SR.net_ftp_active_address_different, WebExceptionStatus.ProtocolError);
612 }
613 isSocketReady = true;
614 return PipelineInstruction.Pause;
615 }
616 finally
617 {
618 dataSocket.Close();
619 }
620 }
static readonly AsyncCallback s_connectCallbackDelegate
static readonly AsyncCallback s_acceptCallbackDelegate
int GetPortV6(string responseString)
int GetPortV4(string responseString)
Socket CreateFtpDataSocket(FtpWebRequest request, Socket templateSocket)
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
IAsyncResult BeginConnect(EndPoint remoteEP, AsyncCallback? callback, object? state)
Definition Socket.cs:2378
void Bind(EndPoint localEP)
Definition Socket.cs:1172
void Connect(EndPoint remoteEP)
Definition Socket.cs:1206
IAsyncResult BeginAccept(AsyncCallback? callback, object? state)
Definition Socket.cs:2685
static string net_ftp_active_address_different
Definition SR.cs:84
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_ftp_server_failed_passive
Definition SR.cs:100
Definition SR.cs:7

References System.Net.CommandStream._abortReason, System.Net.FtpControlStream._dataHandshakeStarted, System.Net.FtpControlStream._dataSocket, System.Net.CommandStream._isAsync, System.Net.FtpControlStream._passiveEndPoint, System.Net.CommandStream._request, System.Net.Sockets.Socket.Accept(), System.Net.Sockets.Socket.BeginAccept(), System.Net.Sockets.Socket.BeginConnect(), System.Net.Sockets.Socket.Bind(), System.Net.Sockets.Socket.Close(), System.Net.Sockets.Socket.Connect(), System.Net.FtpControlStream.CreateFtpDataSocket(), System.SR.Format(), System.Net.FtpControlStream.GetPortV4(), System.Net.FtpControlStream.GetPortV6(), System.Net.NetEventSource.Info(), System.Net.NetEventSource.Log, System.SR.net_ftp_active_address_different, System.SR.net_ftp_server_failed_passive, System.Net.Sockets.Socket.RemoteEndPoint, System.Net.ExceptionHelper.RequestAbortedException, System.Net.FtpControlStream.s_acceptCallbackDelegate, and System.Net.FtpControlStream.s_connectCallbackDelegate.

Referenced by System.Net.FtpControlStream.PipelineCallback().