import com.ms.com.*; import com.ms.dll.*; class wini { public static final int INTERNET_FLAG_ASYNC = 0x10000000; public static final int INTERNET_INVALID_STATUS_CALLBACK = -1; public static final int FLAGS_ERROR_UI_FILTER_FOR_ERRORS = 0x01; public static final int FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS = 0x02; public static final int FLAGS_ERROR_UI_FLAGS_GENERATE_DATA = 0x04; public static final int FLAGS_ERROR_UI_FLAGS_NO_UI = 0x08; public static final int FLAGS_ERROR_UI_SERIALIZE_DIALOGS = 0x10; /** @dll.import("WININET") */ static native int InternetOpen(String u, int dwAccessType, String lpszProxy, String lpszProxyBypass, int dwFlags); /** @dll.import("WININET") */ static native boolean InternetSetOption( int hInternet, int dwOption, StringBuffer lpBuffer, int lpdwBufferLength); /** @dll.import("WININET") */ static native boolean InternetQueryOption( int hInternet, int dwOption, int lpBuffer[], int lpdwBufferLength[]); /** @dll.import("WININET") */ static native int InternetOpenUrl(int hInternet, String lpszUrl, String lpszHeaders, int dwHeadersLength, int dwFlags, int dwContext ); /** @dll.import("WININET") */ static native int InternetSetStatusCallback( int hInternet, StatusCB lpfnInternetCallback ); /** @dll.import("WININET") */ static native boolean InternetReadFile( int hFile, StringBuffer lpBuffer, int dwNumberOfBytesToRead, int dwRead[] ); /** @dll.import("WININET") */ static native int InternetErrorDlg( int hWnd, int hRequest, int dwError, int dwFlags, int lppvData ); /** @dll.import("Kernel32") */ static native int GetLastError(); /** @dll.import("User32") */ static native int GetDesktopWindow(); /** @dll.import("WININET") */ static native void InternetCloseHandle(int handle); static class StatusCB extends com.ms.dll.Callback { public void callback(int hinternet, int dwcontext, int dwInternetStatus, int statusInfo, int statusInfoLength) { System.out.println("STATUS:"+dwcontext); System.out.println("STATUS:"+Status.getStatus(dwInternetStatus)); } } public static void main(String[] args) { int hi = InternetOpen("Test", 0, null, null, 0); System.out.println("hi="+hi); if (hi != 0) { int stat = InternetSetStatusCallback(hi, new StatusCB()); if (stat == INTERNET_INVALID_STATUS_CALLBACK) { System.out.println("Bad Status callback"); } int hfile = InternetOpenUrl(hi, args[0], null, 0, 0, 777); System.out.println("hfile="+hfile); if (hfile != 0) { int blen = 4096; int dwRead[] = new int[1]; StringBuffer sb = new StringBuffer(blen-1); while(InternetReadFile(hfile, sb, blen, dwRead)) { if (dwRead[0] == 0) { break; } System.out.println("read="+dwRead[0]); System.out.println("data="+sb); } InternetCloseHandle(hfile); } else { System.out.println("err="+Error.getError(GetLastError())); int dwerr = InternetErrorDlg(GetDesktopWindow(), hi, GetLastError(), FLAGS_ERROR_UI_FILTER_FOR_ERRORS, 0); System.out.println("dwerr="+dwerr); } InternetCloseHandle(hi); } else { System.out.println("err="+Error.getError(GetLastError())); int flags = FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA; int dwerr = InternetErrorDlg(GetDesktopWindow(), hi, GetLastError(), FLAGS_ERROR_UI_FILTER_FOR_ERRORS, 0); System.out.println("dwerr="+dwerr); } } static class Status { public static final int INTERNET_STATUS_RESOLVING_NAME = 10; public static final int INTERNET_STATUS_NAME_RESOLVED = 11; public static final int INTERNET_STATUS_CONNECTING_TO_SERVER = 20; public static final int INTERNET_STATUS_CONNECTED_TO_SERVER = 21; public static final int INTERNET_STATUS_SENDING_REQUEST = 30; public static final int INTERNET_STATUS_REQUEST_SENT = 31; public static final int INTERNET_STATUS_RECEIVING_RESPONSE = 40; public static final int INTERNET_STATUS_RESPONSE_RECEIVED = 41; public static final int INTERNET_STATUS_CTL_RESPONSE_RECEIVED = 42; public static final int INTERNET_STATUS_PREFETCH = 43; public static final int INTERNET_STATUS_CLOSING_CONNECTION = 50; public static final int INTERNET_STATUS_CONNECTION_CLOSED = 51; public static final int INTERNET_STATUS_HANDLE_CREATED = 60; public static final int INTERNET_STATUS_HANDLE_CLOSING = 70; public static final int INTERNET_STATUS_REQUEST_COMPLETE = 100; public static final int INTERNET_STATUS_REDIRECT = 110; public static final int INTERNET_STATUS_INTERMEDIATE_RESPONSE = 120; public static final int INTERNET_STATUS_STATE_CHANGE = 200; public static String getStatus(int i) { switch (i) { case INTERNET_STATUS_RESOLVING_NAME: return "RESOLVING_NAME"; case INTERNET_STATUS_NAME_RESOLVED: return "NAME_RESOLVED"; case INTERNET_STATUS_CONNECTING_TO_SERVER: return "CONNECTING_TO_SERVER"; case INTERNET_STATUS_CONNECTED_TO_SERVER: return "CONNECTED_TO_SERVER"; case INTERNET_STATUS_SENDING_REQUEST: return "SENDING_REQUEST"; case INTERNET_STATUS_REQUEST_SENT: return "REQUEST_SENT"; case INTERNET_STATUS_RECEIVING_RESPONSE: return "RECEIVING_RESPONSE"; case INTERNET_STATUS_RESPONSE_RECEIVED: return "RESPONSE_RECEIVED"; case INTERNET_STATUS_CTL_RESPONSE_RECEIVED: return "CTL_RESPONSE_RECEIVED"; case INTERNET_STATUS_PREFETCH: return "PREFETCH"; case INTERNET_STATUS_CLOSING_CONNECTION: return "CLOSING_CONNECTION"; case INTERNET_STATUS_CONNECTION_CLOSED: return "CONNECTION_CLOSED"; case INTERNET_STATUS_HANDLE_CREATED: return "HANDLE_CREATED"; case INTERNET_STATUS_HANDLE_CLOSING: return "HANDLE_CLOSING"; case INTERNET_STATUS_REQUEST_COMPLETE: return "REQUEST_COMPLETE"; case INTERNET_STATUS_REDIRECT: return "REDIRECT"; case INTERNET_STATUS_INTERMEDIATE_RESPONSE: return "INTERMEDIATE_RESPONSE"; case INTERNET_STATUS_STATE_CHANGE: return "STATE_CHANGE"; default: return "?"; } } } static class Error { public static final int INTERNET_ERROR_BASE = 12000; public static final int ERROR_INTERNET_OUT_OF_HANDLES = (INTERNET_ERROR_BASE + 1); public static final int ERROR_INTERNET_TIMEOUT = (INTERNET_ERROR_BASE + 2); public static final int ERROR_INTERNET_EXTENDED_ERROR = (INTERNET_ERROR_BASE + 3); public static final int ERROR_INTERNET_INTERNAL_ERROR = (INTERNET_ERROR_BASE + 4); public static final int ERROR_INTERNET_INVALID_URL = (INTERNET_ERROR_BASE + 5); public static final int ERROR_INTERNET_UNRECOGNIZED_SCHEME = (INTERNET_ERROR_BASE + 6); public static final int ERROR_INTERNET_NAME_NOT_RESOLVED = (INTERNET_ERROR_BASE + 7); public static final int ERROR_INTERNET_PROTOCOL_NOT_FOUND = (INTERNET_ERROR_BASE + 8); public static final int ERROR_INTERNET_INVALID_OPTION = (INTERNET_ERROR_BASE + 9); public static final int ERROR_INTERNET_BAD_OPTION_LENGTH = (INTERNET_ERROR_BASE + 10); public static final int ERROR_INTERNET_OPTION_NOT_SETTABLE = (INTERNET_ERROR_BASE + 11); public static final int ERROR_INTERNET_SHUTDOWN = (INTERNET_ERROR_BASE + 12); public static final int ERROR_INTERNET_INCORRECT_USER_NAME = (INTERNET_ERROR_BASE + 13); public static final int ERROR_INTERNET_INCORRECT_PASSWORD = (INTERNET_ERROR_BASE + 14); public static final int ERROR_INTERNET_LOGIN_FAILURE = (INTERNET_ERROR_BASE + 15); public static final int ERROR_INTERNET_INVALID_OPERATION = (INTERNET_ERROR_BASE + 16); public static final int ERROR_INTERNET_OPERATION_CANCELLED = (INTERNET_ERROR_BASE + 17); public static final int ERROR_INTERNET_INCORRECT_HANDLE_TYPE= (INTERNET_ERROR_BASE + 18); public static final int ERROR_INTERNET_INCORRECT_HANDLE_STATE= (INTERNET_ERROR_BASE + 19); public static final int ERROR_INTERNET_NOT_PROXY_REQUEST = (INTERNET_ERROR_BASE + 20); public static final int ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND=(INTERNET_ERROR_BASE + 21); public static final int ERROR_INTERNET_BAD_REGISTRY_PARAMETER =(INTERNET_ERROR_BASE + 22); public static final int ERROR_INTERNET_NO_DIRECT_ACCESS = (INTERNET_ERROR_BASE + 23); public static final int ERROR_INTERNET_NO_CONTEXT = (INTERNET_ERROR_BASE + 24); public static final int ERROR_INTERNET_NO_CALLBACK = (INTERNET_ERROR_BASE + 25); public static final int ERROR_INTERNET_REQUEST_PENDING = (INTERNET_ERROR_BASE + 26); public static final int ERROR_INTERNET_INCORRECT_FORMAT = (INTERNET_ERROR_BASE + 27); public static final int ERROR_INTERNET_ITEM_NOT_FOUND = (INTERNET_ERROR_BASE + 28); public static final int ERROR_INTERNET_CANNOT_CONNECT = (INTERNET_ERROR_BASE + 29); public static final int ERROR_INTERNET_CONNECTION_ABORTED = (INTERNET_ERROR_BASE + 30); public static final int ERROR_INTERNET_CONNECTION_RESET = (INTERNET_ERROR_BASE + 31); public static final int ERROR_INTERNET_FORCE_RETRY = (INTERNET_ERROR_BASE + 32); public static final int ERROR_INTERNET_INVALID_PROXY_REQUEST = (INTERNET_ERROR_BASE + 33); public static final int ERROR_INTERNET_NEED_UI = (INTERNET_ERROR_BASE + 34); public static final int ERROR_INTERNET_HANDLE_EXISTS = (INTERNET_ERROR_BASE + 36); public static final int ERROR_INTERNET_SEC_CERT_DATE_INVALID = (INTERNET_ERROR_BASE + 37); public static final int ERROR_INTERNET_SEC_CERT_CN_INVALID = (INTERNET_ERROR_BASE + 38); public static final int ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR = (INTERNET_ERROR_BASE + 39); public static final int ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR = (INTERNET_ERROR_BASE + 40); public static final int ERROR_INTERNET_MIXED_SECURITY = (INTERNET_ERROR_BASE + 41); public static final int ERROR_INTERNET_CHG_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 42); public static final int ERROR_INTERNET_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 43); public static final int ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED= (INTERNET_ERROR_BASE + 44); public static final int ERROR_INTERNET_INVALID_CA = (INTERNET_ERROR_BASE + 45); public static final int ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP = (INTERNET_ERROR_BASE + 46); public static final int ERROR_INTERNET_ASYNC_THREAD_FAILED = (INTERNET_ERROR_BASE + 47); public static final int ERROR_INTERNET_REDIRECT_SCHEME_CHANGE = (INTERNET_ERROR_BASE + 48); public static final int ERROR_INTERNET_DIALOG_PENDING = (INTERNET_ERROR_BASE + 49); public static final int ERROR_INTERNET_RETRY_DIALOG = (INTERNET_ERROR_BASE + 50); public static final int ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR= (INTERNET_ERROR_BASE + 52); public static final int ERROR_INTERNET_INSERT_CDROM = (INTERNET_ERROR_BASE + 53); public static final int ERROR_HTTP_HEADER_NOT_FOUND = (INTERNET_ERROR_BASE + 150); public static final int ERROR_HTTP_DOWNLEVEL_SERVER = (INTERNET_ERROR_BASE + 151); public static final int ERROR_HTTP_INVALID_SERVER_RESPONSE = (INTERNET_ERROR_BASE + 152); public static final int ERROR_HTTP_INVALID_HEADER = (INTERNET_ERROR_BASE + 153); public static final int ERROR_HTTP_INVALID_QUERY_REQUEST = (INTERNET_ERROR_BASE + 154); public static final int ERROR_HTTP_HEADER_ALREADY_EXISTS = (INTERNET_ERROR_BASE + 155); public static final int ERROR_HTTP_REDIRECT_FAILED = (INTERNET_ERROR_BASE + 156); public static final int ERROR_HTTP_NOT_REDIRECTED = (INTERNET_ERROR_BASE + 160); public static final int ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION = (INTERNET_ERROR_BASE + 161); public static final int ERROR_HTTP_COOKIE_DECLINED = (INTERNET_ERROR_BASE + 162); public static final int ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION= (INTERNET_ERROR_BASE + 168); public static String getError(int errCode) { switch (errCode) { case ERROR_INTERNET_OUT_OF_HANDLES: return "OUT_OF_HANDLES"; case ERROR_INTERNET_TIMEOUT: return "INTERNET_TIMEOUT"; case ERROR_INTERNET_EXTENDED_ERROR: return "EXTENDED_ERROR"; case ERROR_INTERNET_INTERNAL_ERROR: return "INTERNAL_ERROR"; case ERROR_INTERNET_INVALID_URL: return "INVALID_URL"; case ERROR_INTERNET_UNRECOGNIZED_SCHEME: return "UNRECOGNIZED_SCHEME"; case ERROR_INTERNET_NAME_NOT_RESOLVED: return "NAME_NOT_RESOLVED"; case ERROR_INTERNET_PROTOCOL_NOT_FOUND: return "PROTOCOL_NOT_FOUND"; case ERROR_INTERNET_INVALID_OPTION: return "INVALID_OPTION"; case ERROR_INTERNET_BAD_OPTION_LENGTH: return "BAD_OPTION_LENGTH"; case ERROR_INTERNET_OPTION_NOT_SETTABLE: return "OPTION_NOT_SETTABLE"; case ERROR_INTERNET_SHUTDOWN: return "SHUTDOWN"; case ERROR_INTERNET_INCORRECT_USER_NAME: return "INCORRECT_USER_NAME"; case ERROR_INTERNET_INCORRECT_PASSWORD: return "INCORRECT_PASSWORD"; case ERROR_INTERNET_LOGIN_FAILURE: return "LOGIN_FAILURE"; case ERROR_INTERNET_INVALID_OPERATION: return "INVALID_OPERATION"; case ERROR_INTERNET_OPERATION_CANCELLED: return "OPERATION_CANCELLED"; case ERROR_INTERNET_INCORRECT_HANDLE_TYPE: return "INCORRECT_HANDLE_TYPE"; case ERROR_INTERNET_INCORRECT_HANDLE_STATE: return "INCORRECT_HANDLE_STATE"; case ERROR_INTERNET_NOT_PROXY_REQUEST: return "NOT_PROXY_REQUEST"; case ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND: return "REGISTRY_VALUE_NOT_FOUND"; case ERROR_INTERNET_BAD_REGISTRY_PARAMETER: return "BAD_REGISTRY_PARAMETER"; case ERROR_INTERNET_NO_DIRECT_ACCESS: return "NO_DIRECT_ACCESS"; case ERROR_INTERNET_NO_CONTEXT: return "NO_CONTEXT"; case ERROR_INTERNET_NO_CALLBACK: return "NO_CALLBACK"; case ERROR_INTERNET_REQUEST_PENDING: return "REQUEST_PENDING"; case ERROR_INTERNET_INCORRECT_FORMAT: return "INCORRECT_FORMAT"; case ERROR_INTERNET_ITEM_NOT_FOUND: return "ITEM_NOT_FOUND"; case ERROR_INTERNET_CANNOT_CONNECT: return "CANNOT_CONNECT"; case ERROR_INTERNET_CONNECTION_ABORTED: return "CONNECTION_ABORTED"; case ERROR_INTERNET_CONNECTION_RESET: return "CONNECTION_RESET"; case ERROR_INTERNET_FORCE_RETRY: return "FORCE_RETRY"; case ERROR_INTERNET_INVALID_PROXY_REQUEST: return "EXTENDED_ERROR"; case ERROR_INTERNET_NEED_UI: return "NEED_UI"; case ERROR_INTERNET_HANDLE_EXISTS: return "HANDLE_EXISTS"; case ERROR_INTERNET_SEC_CERT_DATE_INVALID: return "SEC_CERT_DATE_INVALID"; case ERROR_INTERNET_SEC_CERT_CN_INVALID: return "SEC_CERT_CN_INVALID"; case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: return "HTTP_TO_HTTPS_ON_REDIR"; case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: return "HTTPS_TO_HTTP_ON_REDIR"; case ERROR_INTERNET_MIXED_SECURITY: return "MIXED_SECURITY"; case ERROR_INTERNET_CHG_POST_IS_NON_SECURE: return "CHG_POST_IS_NON_SECURE"; case ERROR_INTERNET_POST_IS_NON_SECURE: return "POST_IS_NON_SECURE"; case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: return "CLIENT_AUTH_CERT_NEEDED"; case ERROR_INTERNET_INVALID_CA: return "INVALID_CA"; case ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP: return "CLIENT_AUTH_NOT_SETUP"; case ERROR_INTERNET_ASYNC_THREAD_FAILED: return "ASYNC_THREAD_FAILED"; case ERROR_INTERNET_REDIRECT_SCHEME_CHANGE: return "REDIRECT_SCHEME_CHANGE"; case ERROR_INTERNET_DIALOG_PENDING: return "DIALOG_PENDING"; case ERROR_INTERNET_RETRY_DIALOG: return "RETRY_DIALOG"; case ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR: return "HTTPS_HTTP_SUBMIT_REDIR"; case ERROR_INTERNET_INSERT_CDROM: return "INSERT_CDROM"; case ERROR_HTTP_HEADER_NOT_FOUND: return "HEADER_NOT_FOUND"; case ERROR_HTTP_DOWNLEVEL_SERVER: return "DOWNLEVEL_SERVER"; case ERROR_HTTP_INVALID_SERVER_RESPONSE: return "SERVER_RESPONSE"; case ERROR_HTTP_INVALID_HEADER: return "INVALID_HEADER"; case ERROR_HTTP_INVALID_QUERY_REQUEST: return "INVALID_QUERY_REQUEST"; case ERROR_HTTP_HEADER_ALREADY_EXISTS: return "HEADER_ALREADY_EXISTS"; case ERROR_HTTP_REDIRECT_FAILED: return "REDIRECT_FAILED"; case ERROR_HTTP_NOT_REDIRECTED: return "NOT_REDIRECTED"; case ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION: return "COOKIE_NEEDS_CONFIRMATION"; case ERROR_HTTP_COOKIE_DECLINED: return "COOKIE_DECLINED"; case ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION: return "REDIRECT_NEEDS_CONFIRMATION"; default: return ("Error Code:"+errCode); } } } }