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 |