Ejemplo n.º 1
0
 internal static extern bool InternetGetLastResponseInfo(out ERROR_INTERNET error, StringBuilder buffer, ref int bufferLength);
Ejemplo n.º 2
0
        internal static void ThrowException(FtpWebResponse response)
        {
            System.Net.WebExceptionStatus status = System.Net.WebExceptionStatus.Success;

            ERROR_INTERNET error   = (ERROR_INTERNET)Marshal.GetLastWin32Error();
            string         message = string.Empty;

            if (error == 0)
            {
                return;
            }

            ERROR_INTERNET lrError;
            string         lastResponse = Ftp.GetLastResponseInfo(out lrError);

            if (string.IsNullOrEmpty(lastResponse))
            {
                message = "Unable to connect to the remote server";
            }
            else
            {
                message = "Server response: " + lastResponse;
            }

            //try to get most relevant webexceptionstatus
            switch (error)
            {
            case ERROR_INTERNET.CONNECTION_ABORTED:
            case ERROR_INTERNET.CONNECTION_RESET:
            case ERROR_INTERNET.DISCONNECTED:
            case ERROR_INTERNET.FTP_DROPPED:
                status = System.Net.WebExceptionStatus.ConnectionClosed;
                break;

            case ERROR_INTERNET.CANNOT_CONNECT:
            case ERROR_INTERNET.SERVER_UNREACHABLE:
            case ERROR_INTERNET.FTP_NO_PASSIVE_MODE:
                status = System.Net.WebExceptionStatus.ConnectFailure;
                break;

            case ERROR_INTERNET.TIMEOUT:
                status = System.Net.WebExceptionStatus.Timeout;
                break;

            case ERROR_INTERNET.SECURITY_CHANNEL_ERROR:
                status = System.Net.WebExceptionStatus.SecureChannelFailure;
                break;

            case ERROR_INTERNET.NAME_NOT_RESOLVED:
                status = System.Net.WebExceptionStatus.NameResolutionFailure;
                break;

            default:
                /*case ERROR_INTERNET.INCORRECT_PASSWORD:
                 * case ERROR_INTERNET.INCORRECT_USER_NAME:
                 * case ERROR_INTERNET.FTP_TRANSFER_IN_PROGRESS:
                 * case ERROR_INTERNET.LOGIN_FAILURE:*/
                status = System.Net.WebExceptionStatus.ProtocolError;
                break;
            }

            throw new System.Net.WebException(message, InTheHand.ComponentModel.Win32ExceptionInTheHand.Create((int)error), status, response);
        }