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 | 13 | Version: @PACKAGE_VERSION@ |
| 14 | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed |
| 15 | 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 | 70 | #ifdef _WIN32 |
| 71 | 71 | /// @brief Windows Event Log Handler. |
| 72 | 72 | HANDLE hEventLog = 0; |
| 73 | +HANDLE hModule = 0; | |
| 73 | 74 | #endif // _WIN32 |
| 74 | 75 | |
| 75 | 76 | /** |
| ... | ... | @@ -135,11 +136,12 @@ int lib3270_unloaded(void) |
| 135 | 136 | |
| 136 | 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 | 141 | switch(dwcallpurpose) |
| 141 | 142 | { |
| 142 | 143 | case DLL_PROCESS_ATTACH: |
| 144 | + hModule = hInstance; | |
| 143 | 145 | hEventLog = RegisterEventSource(NULL, LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME)); |
| 144 | 146 | get_version_info(); |
| 145 | 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 | 91 | LIB3270_NOTIFY_ERROR, |
| 92 | 92 | _( "Connection failed" ), |
| 93 | 93 | buffer, |
| 94 | - _( "%s"), lib3270_win32_strerror(err) | |
| 94 | + _( "%s (rc=%d)"), strerror(err), err | |
| 95 | 95 | ); |
| 96 | 96 | trace("%s",__FUNCTION__); |
| 97 | 97 | return; |
| ... | ... | @@ -150,6 +150,7 @@ static void sockstart(H3270 *session) |
| 150 | 150 | |
| 151 | 151 | struct resolver |
| 152 | 152 | { |
| 153 | + int rc; | |
| 153 | 154 | int convert; |
| 154 | 155 | const char * message; |
| 155 | 156 | }; |
| ... | ... | @@ -174,8 +175,11 @@ static void sockstart(H3270 *session) |
| 174 | 175 | status_resolving(hSession); |
| 175 | 176 | |
| 176 | 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 | 180 | if(rc != 0) |
| 178 | 181 | { |
| 182 | + ((struct resolver *) host)->rc = rc; | |
| 179 | 183 | ((struct resolver *) host)->message = gai_strerror(rc); |
| 180 | 184 | ((struct resolver *) host)->convert = 1; |
| 181 | 185 | return -1; |
| ... | ... | @@ -188,6 +192,7 @@ static void sockstart(H3270 *session) |
| 188 | 192 | hSession->sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); |
| 189 | 193 | if(hSession->sock < 0) |
| 190 | 194 | { |
| 195 | + ((struct resolver *) host)->rc = errno; | |
| 191 | 196 | ((struct resolver *) host)->message = strerror(errno); |
| 192 | 197 | continue; |
| 193 | 198 | } |
| ... | ... | @@ -196,6 +201,7 @@ static void sockstart(H3270 *session) |
| 196 | 201 | if(connect(hSession->sock, rp->ai_addr, rp->ai_addrlen)) |
| 197 | 202 | { |
| 198 | 203 | SOCK_CLOSE(hSession); |
| 204 | + ((struct resolver *) host)->rc = errno; | |
| 199 | 205 | ((struct resolver *) host)->message = strerror(errno); |
| 200 | 206 | continue; |
| 201 | 207 | } |
| ... | ... | @@ -225,6 +231,37 @@ int net_reconnect(H3270 *hSession, int seconds) |
| 225 | 231 | char msg[4096]; |
| 226 | 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 | 265 | #ifdef HAVE_ICONV |
| 229 | 266 | if(host.convert) |
| 230 | 267 | { |
| ... | ... | @@ -232,7 +269,7 @@ int net_reconnect(H3270 *hSession, int seconds) |
| 232 | 269 | size_t out = 4096; |
| 233 | 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 | 273 | if(iconv( |
| 237 | 274 | hConv, |
| 238 | 275 | &host.message,&in, |
| ... | ... | @@ -250,8 +287,10 @@ int net_reconnect(H3270 *hSession, int seconds) |
| 250 | 287 | LIB3270_NOTIFY_ERROR, |
| 251 | 288 | _( "Connection error" ), |
| 252 | 289 | message, |
| 253 | - "%s", | |
| 254 | - NULL); | |
| 290 | + "%s (rc=%d)", | |
| 291 | + msg, | |
| 292 | + host.rc | |
| 293 | + ); | |
| 255 | 294 | |
| 256 | 295 | } |
| 257 | 296 | else | ... | ... |
src/core/windows/log.c
| ... | ... | @@ -43,15 +43,7 @@ |
| 43 | 43 | |
| 44 | 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 | 47 | lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); |
| 56 | 48 | |
| 57 | 49 | const char *outMsg[] = { | ... | ... |
src/core/windows/util.c
| ... | ... | @@ -34,6 +34,7 @@ |
| 34 | 34 | |
| 35 | 35 | #include <winsock2.h> |
| 36 | 36 | #include <windows.h> |
| 37 | +#include <lmcons.h> | |
| 37 | 38 | #include <lib3270-internals.h> |
| 38 | 39 | |
| 39 | 40 | #include "winversc.h" |
| ... | ... | @@ -267,3 +268,31 @@ LIB3270_EXPORT char * lib3270_build_data_filename(const char *name) |
| 267 | 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 | 713 | #ifdef _WIN32 |
| 714 | 714 | /// @brief Windows Event Log Handler. |
| 715 | 715 | LIB3270_INTERNAL HANDLE hEventLog; |
| 716 | +LIB3270_INTERNAL HANDLE hModule; | |
| 716 | 717 | #endif // _WIN32 |
| 717 | 718 | |
| 718 | 719 | #ifdef HAVE_SYSLOG |
| ... | ... | @@ -827,5 +828,7 @@ LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); |
| 827 | 828 | /// @brief Default log writer. |
| 828 | 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 | 833 | #endif |
| 831 | 834 | ... | ... |
src/include/lib3270.h
| ... | ... | @@ -1398,6 +1398,14 @@ |
| 1398 | 1398 | */ |
| 1399 | 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 | 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 | 133 | |
| 134 | 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 | 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 | 90 | |
| 91 | 91 | X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, const char *consturl) |
| 92 | 92 | { |
| 93 | - debug("********************************************************* %s",__FUNCTION__); | |
| 94 | - | |
| 95 | 93 | X509_CRL * x509_crl = NULL; |
| 96 | 94 | int rc = 0; |
| 97 | 95 | |
| ... | ... | @@ -266,8 +264,6 @@ X509_CRL * get_crl_using_ldap(H3270 *hSession, SSL_ERROR_MESSAGE * message, cons |
| 266 | 264 | |
| 267 | 265 | ldap_value_free_len(value); |
| 268 | 266 | |
| 269 | - debug("********************************************************* %s",__FUNCTION__); | |
| 270 | - | |
| 271 | 267 | return x509_crl; |
| 272 | 268 | |
| 273 | 269 | } | ... | ... |
src/testprogram/testprogram.c
| ... | ... | @@ -68,6 +68,13 @@ int main(int argc, char *argv[]) |
| 68 | 68 | |
| 69 | 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 | 78 | if(lib3270_set_url(h,NULL)) |
| 72 | 79 | lib3270_set_url(h,"tn3270://fandezhi.efglobe.com"); |
| 73 | 80 | ... | ... |