+
+ protected string FormatPassiveResponse (string request)
+ {
+ if (ipv6) {
+ if (request != "EPSV") {
+ Where = "EPSV";
+ return null;
+ }
+
+ IPEndPoint end_data = (IPEndPoint) data.LocalEndPoint;
+ return String.Format ("229 Extended Passive (|||{0}|)", end_data.Port);
+ }
+ else {
+ if (request != "PASV") {
+ Where = "PASV";
+ return null;
+ }
+
+ IPEndPoint end_data = (IPEndPoint) data.LocalEndPoint;
+ byte [] addr_bytes = end_data.Address.GetAddressBytes ();
+ byte [] port = new byte [2];
+ port[0] = (byte) ((end_data.Port >> 8) & 255);
+ port[1] = (byte) (end_data.Port & 255);
+ StringBuilder sb = new StringBuilder ("227 Passive (");
+ foreach (byte b in addr_bytes) {
+ sb.AppendFormat ("{0},", b);
+ }
+ sb.AppendFormat ("{0},", port [0]);
+ sb.AppendFormat ("{0})", port [1]);
+ return sb.ToString ();
+ }
+ }
+