Commit 48efc5cc3de315556266cd12925a508ce65083f2
1 parent
0461fddb
Exists in
master
and in
3 other branches
Debugging windows code.
Showing
10 changed files
with
99 additions
and
20 deletions
Show diff stats
sdk/lib3270-delayed.pc.in
| @@ -13,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ | @@ -13,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ | ||
| 13 | Version: @PACKAGE_VERSION@ | 13 | Version: @PACKAGE_VERSION@ |
| 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed |
| 15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ | 15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ |
| 16 | -Cflags: -I@includedir@ | 16 | +Cflags: -I@includedir@ -DLIB3270_NAME=@LIB3270_NAME@ |
| 17 | 17 |
src/core/init.c
| @@ -70,6 +70,7 @@ | @@ -70,6 +70,7 @@ | ||
| 70 | #ifdef _WIN32 | 70 | #ifdef _WIN32 |
| 71 | /// @brief Windows Event Log Handler. | 71 | /// @brief Windows Event Log Handler. |
| 72 | HANDLE hEventLog = 0; | 72 | HANDLE hEventLog = 0; |
| 73 | +HANDLE hModule = 0; | ||
| 73 | #endif // _WIN32 | 74 | #endif // _WIN32 |
| 74 | 75 | ||
| 75 | /** | 76 | /** |
| @@ -135,11 +136,12 @@ int lib3270_unloaded(void) | @@ -135,11 +136,12 @@ int lib3270_unloaded(void) | ||
| 135 | 136 | ||
| 136 | #if defined WIN32 | 137 | #if defined WIN32 |
| 137 | 138 | ||
| 138 | -BOOL WINAPI DllMain(HANDLE GNUC_UNUSED(hinst), DWORD dwcallpurpose, LPVOID GNUC_UNUSED(lpvResvd)) | 139 | +BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwcallpurpose, LPVOID GNUC_UNUSED(lpvResvd)) |
| 139 | { | 140 | { |
| 140 | switch(dwcallpurpose) | 141 | switch(dwcallpurpose) |
| 141 | { | 142 | { |
| 142 | case DLL_PROCESS_ATTACH: | 143 | case DLL_PROCESS_ATTACH: |
| 144 | + hModule = hInstance; | ||
| 143 | hEventLog = RegisterEventSource(NULL, LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME)); | 145 | hEventLog = RegisterEventSource(NULL, LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME)); |
| 144 | get_version_info(); | 146 | get_version_info(); |
| 145 | lib3270_loaded(); | 147 | lib3270_loaded(); |
src/core/windows/connect.c
| @@ -91,7 +91,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -91,7 +91,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
| 91 | LIB3270_NOTIFY_ERROR, | 91 | LIB3270_NOTIFY_ERROR, |
| 92 | _( "Connection failed" ), | 92 | _( "Connection failed" ), |
| 93 | buffer, | 93 | buffer, |
| 94 | - _( "%s"), lib3270_win32_strerror(err) | 94 | + _( "%s (rc=%d)"), strerror(err), err |
| 95 | ); | 95 | ); |
| 96 | trace("%s",__FUNCTION__); | 96 | trace("%s",__FUNCTION__); |
| 97 | return; | 97 | return; |
| @@ -150,6 +150,7 @@ static void sockstart(H3270 *session) | @@ -150,6 +150,7 @@ static void sockstart(H3270 *session) | ||
| 150 | 150 | ||
| 151 | struct resolver | 151 | struct resolver |
| 152 | { | 152 | { |
| 153 | + int rc; | ||
| 153 | int convert; | 154 | int convert; |
| 154 | const char * message; | 155 | const char * message; |
| 155 | }; | 156 | }; |
| @@ -174,8 +175,11 @@ static void sockstart(H3270 *session) | @@ -174,8 +175,11 @@ static void sockstart(H3270 *session) | ||
| 174 | status_resolving(hSession); | 175 | status_resolving(hSession); |
| 175 | 176 | ||
| 176 | int rc = getaddrinfo(hSession->host.current, hSession->host.srvc, &hints, &result); | 177 | int rc = getaddrinfo(hSession->host.current, hSession->host.srvc, &hints, &result); |
| 178 | + debug("getaddrinfo(%s,%s) returns %d",hSession->host.current,hSession->host.srvc,rc); | ||
| 179 | + | ||
| 177 | if(rc != 0) | 180 | if(rc != 0) |
| 178 | { | 181 | { |
| 182 | + ((struct resolver *) host)->rc = rc; | ||
| 179 | ((struct resolver *) host)->message = gai_strerror(rc); | 183 | ((struct resolver *) host)->message = gai_strerror(rc); |
| 180 | ((struct resolver *) host)->convert = 1; | 184 | ((struct resolver *) host)->convert = 1; |
| 181 | return -1; | 185 | return -1; |
| @@ -188,6 +192,7 @@ static void sockstart(H3270 *session) | @@ -188,6 +192,7 @@ static void sockstart(H3270 *session) | ||
| 188 | hSession->sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); | 192 | hSession->sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); |
| 189 | if(hSession->sock < 0) | 193 | if(hSession->sock < 0) |
| 190 | { | 194 | { |
| 195 | + ((struct resolver *) host)->rc = errno; | ||
| 191 | ((struct resolver *) host)->message = strerror(errno); | 196 | ((struct resolver *) host)->message = strerror(errno); |
| 192 | continue; | 197 | continue; |
| 193 | } | 198 | } |
| @@ -196,6 +201,7 @@ static void sockstart(H3270 *session) | @@ -196,6 +201,7 @@ static void sockstart(H3270 *session) | ||
| 196 | if(connect(hSession->sock, rp->ai_addr, rp->ai_addrlen)) | 201 | if(connect(hSession->sock, rp->ai_addr, rp->ai_addrlen)) |
| 197 | { | 202 | { |
| 198 | SOCK_CLOSE(hSession); | 203 | SOCK_CLOSE(hSession); |
| 204 | + ((struct resolver *) host)->rc = errno; | ||
| 199 | ((struct resolver *) host)->message = strerror(errno); | 205 | ((struct resolver *) host)->message = strerror(errno); |
| 200 | continue; | 206 | continue; |
| 201 | } | 207 | } |
| @@ -225,6 +231,37 @@ int net_reconnect(H3270 *hSession, int seconds) | @@ -225,6 +231,37 @@ int net_reconnect(H3270 *hSession, int seconds) | ||
| 225 | char msg[4096]; | 231 | char msg[4096]; |
| 226 | strncpy(msg,host.message,4095); | 232 | strncpy(msg,host.message,4095); |
| 227 | 233 | ||
| 234 | + debug("host.message=\"%s\"",host.message); | ||
| 235 | + | ||
| 236 | + { | ||
| 237 | + // Register on event log | ||
| 238 | + lib3270_autoptr(char) username = lib3270_get_user_name(); | ||
| 239 | + | ||
| 240 | + snprintf(msg,sizeof(msg),"rc=%d",host.rc); | ||
| 241 | + | ||
| 242 | + const char *outMsg[] = { | ||
| 243 | + username, | ||
| 244 | + "networking", | ||
| 245 | + message, | ||
| 246 | + host.message, | ||
| 247 | + msg | ||
| 248 | + }; | ||
| 249 | + | ||
| 250 | + ReportEvent( | ||
| 251 | + hEventLog, | ||
| 252 | + EVENTLOG_ERROR_TYPE, | ||
| 253 | + 1, | ||
| 254 | + 0, | ||
| 255 | + NULL, | ||
| 256 | + (sizeof(outMsg)/sizeof(outMsg[0])), | ||
| 257 | + 0, | ||
| 258 | + outMsg, | ||
| 259 | + NULL | ||
| 260 | + ); | ||
| 261 | + | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + | ||
| 228 | #ifdef HAVE_ICONV | 265 | #ifdef HAVE_ICONV |
| 229 | if(host.convert) | 266 | if(host.convert) |
| 230 | { | 267 | { |
| @@ -232,7 +269,7 @@ int net_reconnect(H3270 *hSession, int seconds) | @@ -232,7 +269,7 @@ int net_reconnect(H3270 *hSession, int seconds) | ||
| 232 | size_t out = 4096; | 269 | size_t out = 4096; |
| 233 | size_t in = strlen(host.message); | 270 | size_t in = strlen(host.message); |
| 234 | 271 | ||
| 235 | - iconv_t hConv = iconv_open(lib3270_win32_local_charset(),"UTF-8"); | 272 | + iconv_t hConv = iconv_open("UTF-8",lib3270_win32_local_charset()); |
| 236 | if(iconv( | 273 | if(iconv( |
| 237 | hConv, | 274 | hConv, |
| 238 | &host.message,&in, | 275 | &host.message,&in, |
| @@ -250,8 +287,10 @@ int net_reconnect(H3270 *hSession, int seconds) | @@ -250,8 +287,10 @@ int net_reconnect(H3270 *hSession, int seconds) | ||
| 250 | LIB3270_NOTIFY_ERROR, | 287 | LIB3270_NOTIFY_ERROR, |
| 251 | _( "Connection error" ), | 288 | _( "Connection error" ), |
| 252 | message, | 289 | message, |
| 253 | - "%s", | ||
| 254 | - NULL); | 290 | + "%s (rc=%d)", |
| 291 | + msg, | ||
| 292 | + host.rc | ||
| 293 | + ); | ||
| 255 | 294 | ||
| 256 | } | 295 | } |
| 257 | else | 296 | else |
src/core/windows/log.c
| @@ -43,15 +43,7 @@ | @@ -43,15 +43,7 @@ | ||
| 43 | 43 | ||
| 44 | void default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int rc, const char *fmt, va_list arg_ptr) | 44 | void default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int rc, const char *fmt, va_list arg_ptr) |
| 45 | { | 45 | { |
| 46 | - char username[UNLEN + 1]; | ||
| 47 | - DWORD szName = sizeof(username); | ||
| 48 | - | ||
| 49 | - memset(username,0,szName); | ||
| 50 | - | ||
| 51 | - if(!GetUserName(username, &szName)) { | ||
| 52 | - strncpy(username,"?",UNLEN); | ||
| 53 | - } | ||
| 54 | - | 46 | + lib3270_autoptr(char) username = lib3270_get_user_name(); |
| 55 | lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); | 47 | lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); |
| 56 | 48 | ||
| 57 | const char *outMsg[] = { | 49 | const char *outMsg[] = { |
src/core/windows/util.c
| @@ -34,6 +34,7 @@ | @@ -34,6 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include <winsock2.h> | 35 | #include <winsock2.h> |
| 36 | #include <windows.h> | 36 | #include <windows.h> |
| 37 | +#include <lmcons.h> | ||
| 37 | #include <lib3270-internals.h> | 38 | #include <lib3270-internals.h> |
| 38 | 39 | ||
| 39 | #include "winversc.h" | 40 | #include "winversc.h" |
| @@ -267,3 +268,31 @@ LIB3270_EXPORT char * lib3270_build_data_filename(const char *name) | @@ -267,3 +268,31 @@ LIB3270_EXPORT char * lib3270_build_data_filename(const char *name) | ||
| 267 | return lib3270_strdup_printf("%s\\%s",wc_fn,name); | 268 | return lib3270_strdup_printf("%s\\%s",wc_fn,name); |
| 268 | 269 | ||
| 269 | } | 270 | } |
| 271 | + | ||
| 272 | +LIB3270_EXPORT char * lib3270_get_installation_path() | ||
| 273 | +{ | ||
| 274 | + char lpFilename[4096]; | ||
| 275 | + | ||
| 276 | + memset(lpFilename,0,sizeof(lpFilename)); | ||
| 277 | + DWORD szPath = GetModuleFileName(hModule,lpFilename,sizeof(lpFilename)); | ||
| 278 | + lpFilename[szPath] = 0; | ||
| 279 | + | ||
| 280 | + char * ptr = strrchr(lpFilename,'\\'); | ||
| 281 | + if(ptr) | ||
| 282 | + ptr[1] = 0; | ||
| 283 | + | ||
| 284 | + return strdup(lpFilename); | ||
| 285 | +} | ||
| 286 | + | ||
| 287 | +char * lib3270_get_user_name() | ||
| 288 | +{ | ||
| 289 | + char username[UNLEN + 1]; | ||
| 290 | + DWORD szName = UNLEN; | ||
| 291 | + | ||
| 292 | + memset(username,0,UNLEN + 1); | ||
| 293 | + GetUserName(username, &szName); | ||
| 294 | + | ||
| 295 | + return strdup(username); | ||
| 296 | + | ||
| 297 | +} | ||
| 298 | + |
src/include/lib3270-internals.h
| @@ -713,6 +713,7 @@ struct _h3270 | @@ -713,6 +713,7 @@ struct _h3270 | ||
| 713 | #ifdef _WIN32 | 713 | #ifdef _WIN32 |
| 714 | /// @brief Windows Event Log Handler. | 714 | /// @brief Windows Event Log Handler. |
| 715 | LIB3270_INTERNAL HANDLE hEventLog; | 715 | LIB3270_INTERNAL HANDLE hEventLog; |
| 716 | +LIB3270_INTERNAL HANDLE hModule; | ||
| 716 | #endif // _WIN32 | 717 | #endif // _WIN32 |
| 717 | 718 | ||
| 718 | #ifdef HAVE_SYSLOG | 719 | #ifdef HAVE_SYSLOG |
| @@ -827,5 +828,7 @@ LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); | @@ -827,5 +828,7 @@ LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); | ||
| 827 | /// @brief Default log writer. | 828 | /// @brief Default log writer. |
| 828 | LIB3270_INTERNAL void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | 829 | LIB3270_INTERNAL void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); |
| 829 | 830 | ||
| 831 | + LIB3270_INTERNAL char * lib3270_get_user_name(); | ||
| 832 | + | ||
| 830 | #endif | 833 | #endif |
| 831 | 834 |
src/include/lib3270.h
| @@ -1398,6 +1398,14 @@ | @@ -1398,6 +1398,14 @@ | ||
| 1398 | */ | 1398 | */ |
| 1399 | LIB3270_EXPORT char * lib3270_win32_translate_error_code(int lasterror); | 1399 | LIB3270_EXPORT char * lib3270_win32_translate_error_code(int lasterror); |
| 1400 | 1400 | ||
| 1401 | + /** | ||
| 1402 | + * @brief Get lib3270's installation path. | ||
| 1403 | + * | ||
| 1404 | + * @return Full path for the lib3270 installation path (release it with lib3270_free) | ||
| 1405 | + * | ||
| 1406 | + */ | ||
| 1407 | + LIB3270_EXPORT char * lib3270_get_installation_path(); | ||
| 1408 | + | ||
| 1401 | #endif // WIn32 | 1409 | #endif // WIn32 |
| 1402 | 1410 | ||
| 1403 | /** | 1411 | /** |
src/ssl/ctx_init.c
| @@ -133,7 +133,10 @@ int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message) | @@ -133,7 +133,10 @@ int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message) | ||
| 133 | 133 | ||
| 134 | #ifdef _WIN32 | 134 | #ifdef _WIN32 |
| 135 | { | 135 | { |
| 136 | - lib3270_autoptr(char) certpath = lib3270_build_data_filename("certs"); | 136 | + lib3270_autoptr(char) appdir = lib3270_get_installation_path(); |
| 137 | + lib3270_autoptr(char) certpath = lib3270_strdup_printf("%s\\certs",appdir); | ||
| 138 | + | ||
| 139 | + debug("Searching certs from \"%s\".", certpath); | ||
| 137 | 140 | ||
| 138 | if(SSL_CTX_load_verify_locations(ssl_ctx,NULL,certpath)) | 141 | if(SSL_CTX_load_verify_locations(ssl_ctx,NULL,certpath)) |
| 139 | { | 142 | { |
src/ssl/windows/ldap.c
| @@ -90,8 +90,6 @@ static inline void lib3270_autoptr_cleanup_BerElement(BerElement **ber) | @@ -90,8 +90,6 @@ static inline void lib3270_autoptr_cleanup_BerElement(BerElement **ber) | ||
| 90 | 90 | ||
| 91 | X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) | 91 | X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) |
| 92 | { | 92 | { |
| 93 | - debug("********************************************************* %s",__FUNCTION__); | ||
| 94 | - | ||
| 95 | X509_CRL * x509_crl = NULL; | 93 | X509_CRL * x509_crl = NULL; |
| 96 | int rc = 0; | 94 | int rc = 0; |
| 97 | 95 | ||
| @@ -266,8 +264,6 @@ X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, cons | @@ -266,8 +264,6 @@ X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, cons | ||
| 266 | 264 | ||
| 267 | ldap_value_free_len(value); | 265 | ldap_value_free_len(value); |
| 268 | 266 | ||
| 269 | - debug("********************************************************* %s",__FUNCTION__); | ||
| 270 | - | ||
| 271 | return x509_crl; | 267 | return x509_crl; |
| 272 | 268 | ||
| 273 | } | 269 | } |
src/testprogram/testprogram.c
| @@ -68,6 +68,13 @@ int main(int argc, char *argv[]) | @@ -68,6 +68,13 @@ int main(int argc, char *argv[]) | ||
| 68 | 68 | ||
| 69 | printf("HOST URL: %s\tHOST CRL: %s\n",lib3270_get_url(h),lib3270_get_crl_url(h)); | 69 | printf("HOST URL: %s\tHOST CRL: %s\n",lib3270_get_url(h),lib3270_get_crl_url(h)); |
| 70 | 70 | ||
| 71 | +#ifdef _WIN32 | ||
| 72 | + { | ||
| 73 | + lib3270_autoptr(char) apppath = lib3270_get_installation_path(); | ||
| 74 | + printf("Application path: \"%s\"\n",apppath); | ||
| 75 | + } | ||
| 76 | +#endif // _WIN32 | ||
| 77 | + | ||
| 71 | if(lib3270_set_url(h,NULL)) | 78 | if(lib3270_set_url(h,NULL)) |
| 72 | lib3270_set_url(h,"tn3270://fandezhi.efglobe.com"); | 79 | lib3270_set_url(h,"tn3270://fandezhi.efglobe.com"); |
| 73 | 80 |