Commit 48efc5cc3de315556266cd12925a508ce65083f2

Authored by Perry Werneck
1 parent 0461fddb

Debugging windows code.

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