Commit 05595ed8df6563f4c0f2674b0d4fe91a23444ba3

Authored by Perry Werneck
Committed by GitHub
2 parents d4e1bfad c4300650

Merge pull request #10 from PerryWerneck/develop

Fix windows build and keytable issues.
@@ -60,3 +60,4 @@ certs @@ -60,3 +60,4 @@ certs
60 confdefs.h 60 confdefs.h
61 conftest.* 61 conftest.*
62 mstest.* 62 mstest.*
  63 +*.cscope_file_list
@@ -115,6 +115,9 @@ CFLAGS= \ @@ -115,6 +115,9 @@ CFLAGS= \
115 @LDAP_CFLAGS@ \ 115 @LDAP_CFLAGS@ \
116 @LIBCURL_CFLAGS@ 116 @LIBCURL_CFLAGS@
117 117
  118 +LDFLAGS= \
  119 + @LDFLAGS@
  120 +
118 LIBS= \ 121 LIBS= \
119 @LIBS@ \ 122 @LIBS@ \
120 @LIBSSL_LIBS@ \ 123 @LIBSSL_LIBS@ \
@@ -203,11 +203,13 @@ sccs_user=$USER @@ -203,11 +203,13 @@ sccs_user=$USER
203 203
204 AC_DEFINE_UNQUOTED(RPQ_BUILD_DATE,"$rpq_build_date") 204 AC_DEFINE_UNQUOTED(RPQ_BUILD_DATE,"$rpq_build_date")
205 AC_DEFINE_UNQUOTED(RPQ_TIMESTAMP_VALUE,"$rpq_timestamp") 205 AC_DEFINE_UNQUOTED(RPQ_TIMESTAMP_VALUE,"$rpq_timestamp")
206 -AC_DEFINE_UNQUOTED(RPQ_REVISION,"$rpq_revision")  
207 206
208 AC_DEFINE_UNQUOTED(SCCS_USER,"$USER") 207 AC_DEFINE_UNQUOTED(SCCS_USER,"$USER")
209 AC_DEFINE_UNQUOTED(SCCS_DATE,"$sccs_date") 208 AC_DEFINE_UNQUOTED(SCCS_DATE,"$sccs_date")
210 209
  210 +AC_DEFINE_UNQUOTED(RPQ_REVISION,"$rpq_revision")
  211 +AC_SUBST(RPQ_REVISION,"$rpq_revision")
  212 +
211 dnl --------------------------------------------------------------------------- 213 dnl ---------------------------------------------------------------------------
212 dnl Check for libintl 214 dnl Check for libintl
213 dnl --------------------------------------------------------------------------- 215 dnl ---------------------------------------------------------------------------
@@ -241,6 +243,8 @@ AC_CHECK_HEADER(libintl.h, [ @@ -241,6 +243,8 @@ AC_CHECK_HEADER(libintl.h, [
241 243
242 esac 244 esac
243 245
  246 +], [
  247 + AC_MSG_ERROR([Can't find required file libintl.h])
244 ]) 248 ])
245 249
246 AC_SUBST(INTL_LIBS) 250 AC_SUBST(INTL_LIBS)
@@ -559,7 +563,7 @@ dnl --------------------------------------------------------------------------- @@ -559,7 +563,7 @@ dnl ---------------------------------------------------------------------------
559 dnl Check for SSL 563 dnl Check for SSL
560 dnl --------------------------------------------------------------------------- 564 dnl ---------------------------------------------------------------------------
561 565
562 -PKG_CHECK_MODULES( [LIBSSL], [libssl libcrypto], AC_DEFINE(HAVE_LIBSSL), AC_MSG_NOTICE([libssl not present.]) ) 566 +PKG_CHECK_MODULES( [LIBSSL], [libssl libcrypto], AC_DEFINE(HAVE_LIBSSL), AC_MSG_ERROR([libssl not present.]) )
563 567
564 AC_SUBST(LIBSSL_LIBS) 568 AC_SUBST(LIBSSL_LIBS)
565 AC_SUBST(LIBSSL_CFLAGS) 569 AC_SUBST(LIBSSL_CFLAGS)
@@ -212,9 +212,6 @@ @@ -212,9 +212,6 @@
212 <Unit filename="src/core/util.c"> 212 <Unit filename="src/core/util.c">
213 <Option compilerVar="CC" /> 213 <Option compilerVar="CC" />
214 </Unit> 214 </Unit>
215 - <Unit filename="src/core/version.c">  
216 - <Option compilerVar="CC" />  
217 - </Unit>  
218 <Unit filename="src/core/wait.c"> 215 <Unit filename="src/core/wait.c">
219 <Option compilerVar="CC" /> 216 <Option compilerVar="CC" />
220 </Unit> 217 </Unit>
@@ -233,7 +230,9 @@ @@ -233,7 +230,9 @@
233 <Unit filename="src/core/windows/registry.c"> 230 <Unit filename="src/core/windows/registry.c">
234 <Option compilerVar="CC" /> 231 <Option compilerVar="CC" />
235 </Unit> 232 </Unit>
236 - <Unit filename="src/core/windows/resources.rc" /> 233 + <Unit filename="src/core/windows/resources.rc">
  234 + <Option compilerVar="WINDRES" />
  235 + </Unit>
237 <Unit filename="src/core/windows/util.c"> 236 <Unit filename="src/core/windows/util.c">
238 <Option compilerVar="CC" /> 237 <Option compilerVar="CC" />
239 </Unit> 238 </Unit>
locale/pt_BR.po
@@ -5,7 +5,7 @@ msgid &quot;&quot; @@ -5,7 +5,7 @@ msgid &quot;&quot;
5 msgstr "" 5 msgstr ""
6 "Project-Id-Version: pw3270 5.0\n" 6 "Project-Id-Version: pw3270 5.0\n"
7 "Report-Msgid-Bugs-To: \n" 7 "Report-Msgid-Bugs-To: \n"
8 -"POT-Creation-Date: 2020-07-04 14:53-0300\n" 8 +"POT-Creation-Date: 2020-07-09 20:22-0300\n"
9 "PO-Revision-Date: 2020-05-08 00:52-0300\n" 9 "PO-Revision-Date: 2020-05-08 00:52-0300\n"
10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 "Language-Team: Português <>\n" 11 "Language-Team: Português <>\n"
@@ -265,8 +265,8 @@ msgstr &quot;Não foi possível criar requisição HTTP&quot; @@ -265,8 +265,8 @@ msgstr &quot;Não foi possível criar requisição HTTP&quot;
265 msgid "Can't decode CRL" 265 msgid "Can't decode CRL"
266 msgstr "Não foi possível decodificar arquivo CRL" 266 msgstr "Não foi possível decodificar arquivo CRL"
267 267
268 -#: src/ssl/windows/ldap.c:259 src/ssl/windows/http.c:74  
269 -#: src/ssl/windows/curl.c:264 268 +#: src/ssl/windows/curl.c:264 src/ssl/windows/http.c:74
  269 +#: src/ssl/windows/ldap.c:259
270 msgid "Can't decode certificate revocation list" 270 msgid "Can't decode certificate revocation list"
271 msgstr "Não foi possível decodificar a lista de certificados revogados" 271 msgstr "Não foi possível decodificar a lista de certificados revogados"
272 272
@@ -371,7 +371,7 @@ msgstr &quot;Não foi possível iniciar transferência de arquivo.&quot; @@ -371,7 +371,7 @@ msgstr &quot;Não foi possível iniciar transferência de arquivo.&quot;
371 msgid "Can't use winsock version %d.%d" 371 msgid "Can't use winsock version %d.%d"
372 msgstr "Não posso usar versão winsock %d.%d" 372 msgstr "Não posso usar versão winsock %d.%d"
373 373
374 -#: src/ssl/negotiate.c:370 src/ssl/crl.c:165 374 +#: src/ssl/crl.c:165 src/ssl/negotiate.c:370
375 msgid "Can't verify." 375 msgid "Can't verify."
376 msgstr "Não foi possível verificar" 376 msgstr "Não foi possível verificar"
377 377
@@ -637,12 +637,12 @@ msgstr &quot;Apagar campos&quot; @@ -637,12 +637,12 @@ msgstr &quot;Apagar campos&quot;
637 msgid "Error" 637 msgid "Error"
638 msgstr "Erro" 638 msgstr "Erro"
639 639
640 -#: src/core/ft/ft_dft.c:454 src/core/ft/ft_cut.c:423 640 +#: src/core/ft/ft_cut.c:423 src/core/ft/ft_dft.c:454
641 #, c-format 641 #, c-format
642 msgid "Error \"%s\" reading from local file (rc=%d)" 642 msgid "Error \"%s\" reading from local file (rc=%d)"
643 msgstr "Erro \"%s\" lendo arquivo local (rc=%d)" 643 msgstr "Erro \"%s\" lendo arquivo local (rc=%d)"
644 644
645 -#: src/core/ft/ft_dft.c:332 src/core/ft/ft_cut.c:528 645 +#: src/core/ft/ft_cut.c:528 src/core/ft/ft_dft.c:332
646 #, c-format 646 #, c-format
647 msgid "Error \"%s\" writing to local file (rc=%d)" 647 msgid "Error \"%s\" writing to local file (rc=%d)"
648 msgstr "Erro \"%s\" gravando arquivo local (rc=%d)" 648 msgstr "Erro \"%s\" gravando arquivo local (rc=%d)"
@@ -1006,8 +1006,8 @@ msgstr &quot;Move o cursor para o primeiro branco após o último não branco no camp @@ -1006,8 +1006,8 @@ msgstr &quot;Move o cursor para o primeiro branco após o último não branco no camp
1006 msgid "Move to first unprotected field on screen" 1006 msgid "Move to first unprotected field on screen"
1007 msgstr "Move para o primeiro campo desprotegido" 1007 msgstr "Move para o primeiro campo desprotegido"
1008 1008
1009 -#: src/core/telnet.c:320 src/core/windows/event_dispatcher.c:149  
1010 -#: src/core/windows/connect.c:78 1009 +#: src/core/telnet.c:320 src/core/windows/connect.c:78
  1010 +#: src/core/windows/event_dispatcher.c:149
1011 msgid "Network error" 1011 msgid "Network error"
1012 msgstr "Erro de rede" 1012 msgstr "Erro de rede"
1013 1013
@@ -1282,22 +1282,22 @@ msgstr &quot;Pesquisa não produziu nenhum valor&quot; @@ -1282,22 +1282,22 @@ msgstr &quot;Pesquisa não produziu nenhum valor&quot;
1282 msgid "Secure connection was successful." 1282 msgid "Secure connection was successful."
1283 msgstr "Conexão segura efetuada com sucesso." 1283 msgstr "Conexão segura efetuada com sucesso."
1284 1284
1285 -#: src/ssl/negotiate.c:107 src/ssl/negotiate.c:241 src/ssl/negotiate.c:275  
1286 -#: src/ssl/negotiate.c:369 src/ssl/negotiate.c:391 src/ssl/negotiate.c:412  
1287 -#: src/ssl/crl.c:164 src/ssl/windows/ldap.c:108 src/ssl/windows/ldap.c:122  
1288 -#: src/ssl/windows/ldap.c:151 src/ssl/windows/ldap.c:165  
1289 -#: src/ssl/windows/ldap.c:180 src/ssl/windows/ldap.c:210  
1290 -#: src/ssl/windows/ldap.c:222 src/ssl/windows/ldap.c:234  
1291 -#: src/ssl/windows/ldap.c:258 src/ssl/windows/init.c:91  
1292 -#: src/ssl/windows/init.c:112 src/ssl/windows/init.c:138  
1293 -#: src/ssl/windows/init.c:149 src/ssl/windows/http.c:57  
1294 -#: src/ssl/windows/http.c:73 src/ssl/windows/getcrl.c:57  
1295 -#: src/ssl/windows/getcrl.c:74 src/ssl/windows/getcrl.c:86  
1296 -#: src/ssl/windows/getcrl.c:118 src/ssl/windows/curl.c:188 1285 +#: src/ssl/crl.c:164 src/ssl/negotiate.c:107 src/ssl/negotiate.c:241
  1286 +#: src/ssl/negotiate.c:275 src/ssl/negotiate.c:369 src/ssl/negotiate.c:391
  1287 +#: src/ssl/negotiate.c:412 src/ssl/windows/curl.c:188
1297 #: src/ssl/windows/curl.c:218 src/ssl/windows/curl.c:242 1288 #: src/ssl/windows/curl.c:218 src/ssl/windows/curl.c:242
1298 #: src/ssl/windows/curl.c:263 src/ssl/windows/curl.c:272 1289 #: src/ssl/windows/curl.c:263 src/ssl/windows/curl.c:272
1299 #: src/ssl/windows/curl.c:300 src/ssl/windows/curl.c:333 1290 #: src/ssl/windows/curl.c:300 src/ssl/windows/curl.c:333
1300 -#: src/ssl/windows/curl.c:369 1291 +#: src/ssl/windows/curl.c:369 src/ssl/windows/getcrl.c:57
  1292 +#: src/ssl/windows/getcrl.c:74 src/ssl/windows/getcrl.c:86
  1293 +#: src/ssl/windows/getcrl.c:118 src/ssl/windows/http.c:57
  1294 +#: src/ssl/windows/http.c:73 src/ssl/windows/init.c:91
  1295 +#: src/ssl/windows/init.c:112 src/ssl/windows/init.c:138
  1296 +#: src/ssl/windows/init.c:149 src/ssl/windows/ldap.c:108
  1297 +#: src/ssl/windows/ldap.c:122 src/ssl/windows/ldap.c:151
  1298 +#: src/ssl/windows/ldap.c:165 src/ssl/windows/ldap.c:180
  1299 +#: src/ssl/windows/ldap.c:210 src/ssl/windows/ldap.c:222
  1300 +#: src/ssl/windows/ldap.c:234 src/ssl/windows/ldap.c:258
1301 msgid "Security error" 1301 msgid "Security error"
1302 msgstr "Erro de segurança" 1302 msgstr "Erro de segurança"
1303 1303
@@ -1781,8 +1781,8 @@ msgstr &quot;Mostrar posição do cursor&quot; @@ -1781,8 +1781,8 @@ msgstr &quot;Mostrar posição do cursor&quot;
1781 msgid "Transfer cancelled by host" 1781 msgid "Transfer cancelled by host"
1782 msgstr "Transferência cancelada pelo host" 1782 msgstr "Transferência cancelada pelo host"
1783 1783
1784 -#: src/core/ft/ft_dft.c:230 src/core/ft/ft_dft.c:373 src/core/ft/ft_cut.c:400  
1785 -#: src/core/ft/ft_cut.c:495 1784 +#: src/core/ft/ft_cut.c:400 src/core/ft/ft_cut.c:495 src/core/ft/ft_dft.c:230
  1785 +#: src/core/ft/ft_dft.c:373
1786 msgid "Transfer cancelled by user" 1786 msgid "Transfer cancelled by user"
1787 msgstr "Transferência cancelada pelo usuário" 1787 msgstr "Transferência cancelada pelo usuário"
1788 1788
src/core/actions/table.c
@@ -91,6 +91,21 @@ @@ -91,6 +91,21 @@
91 return lib3270_move_selection(hSession,LIB3270_DIR_RIGHT); 91 return lib3270_move_selection(hSession,LIB3270_DIR_RIGHT);
92 } 92 }
93 93
  94 + static int pa1(H3270 *hSession)
  95 + {
  96 + return lib3270_pakey(hSession,1);
  97 + }
  98 +
  99 + static int pa2(H3270 *hSession)
  100 + {
  101 + return lib3270_pakey(hSession,1);
  102 + }
  103 +
  104 + static int pa3(H3270 *hSession)
  105 + {
  106 + return lib3270_pakey(hSession,1);
  107 + }
  108 +
94 /** 109 /**
95 * @brief Get LIB3270 action table; 110 * @brief Get LIB3270 action table;
96 * 111 *
@@ -530,7 +545,7 @@ @@ -530,7 +545,7 @@
530 .keys = NULL, 545 .keys = NULL,
531 .icon = "edit-clear", 546 .icon = "edit-clear",
532 .label = N_("Erase input"), 547 .label = N_("Erase input"),
533 - .summary = NULL, 548 + .summary = N_("Clear"),
534 .activate = lib3270_eraseinput, 549 .activate = lib3270_eraseinput,
535 550
536 .group = LIB3270_ACTION_GROUP_ONLINE, 551 .group = LIB3270_ACTION_GROUP_ONLINE,
@@ -618,7 +633,7 @@ @@ -618,7 +633,7 @@
618 .keys = "Escape", 633 .keys = "Escape",
619 .icon = NULL, 634 .icon = NULL,
620 .label = N_("Reset"), 635 .label = N_("Reset"),
621 - .summary = NULL, 636 + .summary = N_("Reset"),
622 .activate = lib3270_kybdreset, 637 .activate = lib3270_kybdreset,
623 638
624 .group = LIB3270_ACTION_GROUP_ONLINE, 639 .group = LIB3270_ACTION_GROUP_ONLINE,
@@ -770,6 +785,51 @@ @@ -770,6 +785,51 @@
770 .activatable = lib3270_is_disconnected 785 .activatable = lib3270_is_disconnected
771 }, 786 },
772 787
  788 + //
  789 + // Misc Actions
  790 + //
  791 + {
  792 + .name = "PA1",
  793 + .type = LIB3270_ACTION_TYPE_GENERIC,
  794 +
  795 + .keys = "<Alt>1",
  796 + .icon = NULL,
  797 + .label = N_("PA1"),
  798 + .summary = N_( "Program Action 1" ),
  799 + .activate = pa1,
  800 +
  801 + .group = LIB3270_ACTION_GROUP_ONLINE,
  802 + .activatable = lib3270_is_connected
  803 + },
  804 +
  805 + {
  806 + .name = "PA2",
  807 + .type = LIB3270_ACTION_TYPE_GENERIC,
  808 +
  809 + .keys = "<Alt>2",
  810 + .icon = NULL,
  811 + .label = N_("PA1"),
  812 + .summary = N_( "Program Action 2" ),
  813 + .activate = pa2,
  814 +
  815 + .group = LIB3270_ACTION_GROUP_ONLINE,
  816 + .activatable = lib3270_is_connected
  817 + },
  818 +
  819 + {
  820 + .name = "PA3",
  821 + .type = LIB3270_ACTION_TYPE_GENERIC,
  822 +
  823 + .keys = "<Alt>3",
  824 + .icon = NULL,
  825 + .label = N_("PA1"),
  826 + .summary = N_( "Program Action 3" ),
  827 + .activate = pa3,
  828 +
  829 + .group = LIB3270_ACTION_GROUP_ONLINE,
  830 + .activatable = lib3270_is_connected
  831 + },
  832 +
773 { 833 {
774 .name = NULL, 834 .name = NULL,
775 } 835 }
src/core/connect.c
@@ -115,6 +115,10 @@ @@ -115,6 +115,10 @@
115 } 115 }
116 116
117 #if defined(HAVE_LIBSSL) 117 #if defined(HAVE_LIBSSL)
  118 + debug("%s: TLS/SSL is %s",__FUNCTION__,hSession->ssl.enabled ? "ENABLED" : "DISABLED")
  119 + trace_dsn(hSession,"TLS/SSL is %s\n", hSession->ssl.enabled ? "enabled" : "disabled" );
  120 +
  121 + if(hSession->ssl.enabled)
118 { 122 {
119 SSL_ERROR_MESSAGE ssl_error; 123 SSL_ERROR_MESSAGE ssl_error;
120 memset(&ssl_error,0,sizeof(ssl_error)); 124 memset(&ssl_error,0,sizeof(ssl_error));
src/core/host.c
@@ -288,16 +288,59 @@ LIB3270_EXPORT const char * lib3270_get_url(const H3270 *hSession) @@ -288,16 +288,59 @@ LIB3270_EXPORT const char * lib3270_get_url(const H3270 *hSession)
288 if(hSession->host.url) 288 if(hSession->host.url)
289 return hSession->host.url; 289 return hSession->host.url;
290 290
291 -#ifdef LIB3270_DEFAULT_HOST  
292 - return LIB3270_DEFAULT_HOST;  
293 -#else  
294 - return getenv("LIB3270_DEFAULT_HOST");  
295 -#endif // LIB3270_DEFAULT_HOST  
296 - 291 + return lib3270_get_default_host(hSession);
297 } 292 }
298 293
299 LIB3270_EXPORT const char * lib3270_get_default_host(const H3270 GNUC_UNUSED(*hSession)) 294 LIB3270_EXPORT const char * lib3270_get_default_host(const H3270 GNUC_UNUSED(*hSession))
300 { 295 {
  296 +#ifdef _WIN32
  297 + {
  298 + HKEY hKey;
  299 + DWORD disp = 0;
  300 + LSTATUS rc = RegCreateKeyEx(
  301 + HKEY_LOCAL_MACHINE,
  302 + "Software\\" LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME),
  303 + 0,
  304 + NULL,
  305 + REG_OPTION_NON_VOLATILE,
  306 + KEY_QUERY_VALUE|KEY_READ,
  307 + NULL,
  308 + &hKey,
  309 + &disp);
  310 +
  311 + if(rc == ERROR_SUCCESS)
  312 + {
  313 + static char * default_host = NULL;
  314 + DWORD cbData = 4096;
  315 +
  316 + if(!default_host)
  317 + {
  318 + default_host = (char *) malloc(cbData+1);
  319 + }
  320 + else
  321 + {
  322 + default_host = (char *) realloc(default_host,cbData+1);
  323 + }
  324 +
  325 + DWORD dwRet = RegQueryValueEx(hKey,"host",NULL,NULL,(LPBYTE) default_host, &cbData);
  326 +
  327 + RegCloseKey(hKey);
  328 +
  329 + trace("***************** %d",dwRet);
  330 + if(dwRet == ERROR_SUCCESS)
  331 + {
  332 + default_host = (char *) realloc(default_host,cbData+1);
  333 + default_host[cbData] = 0;
  334 + return default_host;
  335 + }
  336 +
  337 + free(default_host);
  338 + default_host = NULL;
  339 +
  340 + }
  341 + }
  342 +#endif // _WIN32
  343 +
301 #ifdef LIB3270_DEFAULT_HOST 344 #ifdef LIB3270_DEFAULT_HOST
302 return LIB3270_DEFAULT_HOST; 345 return LIB3270_DEFAULT_HOST;
303 #else 346 #else
src/core/init.c
@@ -160,23 +160,30 @@ int lib3270_unloaded(void) @@ -160,23 +160,30 @@ int lib3270_unloaded(void)
160 160
161 BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwcallpurpose, LPVOID GNUC_UNUSED(lpvResvd)) 161 BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwcallpurpose, LPVOID GNUC_UNUSED(lpvResvd))
162 { 162 {
  163 + debug("%s starts",__FUNCTION__);
  164 +
163 switch(dwcallpurpose) 165 switch(dwcallpurpose)
164 { 166 {
165 case DLL_PROCESS_ATTACH: 167 case DLL_PROCESS_ATTACH:
166 hModule = hInstance; 168 hModule = hInstance;
167 - hEventLog = RegisterEventSource(NULL, LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME)); 169 + hEventLog = RegisterEventSource(NULL, LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME));
168 get_version_info(); 170 get_version_info();
169 lib3270_loaded(); 171 lib3270_loaded();
170 break; 172 break;
171 173
172 case DLL_PROCESS_DETACH: 174 case DLL_PROCESS_DETACH:
173 lib3270_unloaded(); 175 lib3270_unloaded();
174 - DeregisterEventSource(hEventLog);  
175 - hEventLog = 0; 176 + if(hEventLog)
  177 + {
  178 + DeregisterEventSource(hEventLog);
  179 + }
  180 + hEventLog = NULL;
176 break; 181 break;
177 182
178 } 183 }
179 184
  185 + debug("%s ends",__FUNCTION__);
  186 +
180 return TRUE; 187 return TRUE;
181 } 188 }
182 189
src/core/iocalls.c
@@ -575,6 +575,8 @@ int non_blocking(H3270 *hSession, Boolean on) @@ -575,6 +575,8 @@ int non_blocking(H3270 *hSession, Boolean on)
575 575
576 #endif 576 #endif
577 577
  578 + debug("Socket %d is now %s",hSession->connection.sock,(on ? "Non Blocking" : "Blocking"));
  579 +
578 lib3270_set_poll_state(hSession,hSession->xio.read, on); 580 lib3270_set_poll_state(hSession,hSession->xio.read, on);
579 lib3270_set_poll_state(hSession,hSession->xio.write, on); 581 lib3270_set_poll_state(hSession,hSession->xio.write, on);
580 lib3270_set_poll_state(hSession,hSession->xio.except, on); 582 lib3270_set_poll_state(hSession,hSession->xio.except, on);
src/core/linux/connect.c
@@ -196,8 +196,6 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG @@ -196,8 +196,6 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG
196 hSession->ever_3270 = False; 196 hSession->ever_3270 = False;
197 197
198 #if defined(HAVE_LIBSSL) 198 #if defined(HAVE_LIBSSL)
199 - debug("%s: TLS/SSL is %s",__FUNCTION__,hSession->ssl.enabled ? "ENABLED" : "DISABLED")  
200 - trace_dsn(hSession,"TLS/SSL is %s\n", hSession->ssl.enabled ? "enabled" : "disabled" );  
201 if(hSession->ssl.enabled) 199 if(hSession->ssl.enabled)
202 { 200 {
203 hSession->ssl.host = 1; 201 hSession->ssl.host = 1;
src/core/telnet.c
@@ -482,6 +482,9 @@ LIB3270_EXPORT void lib3270_setup_session(H3270 *hSession) @@ -482,6 +482,9 @@ LIB3270_EXPORT void lib3270_setup_session(H3270 *hSession)
482 trace_ds(hSession,"SENT HOSTNAME %s:%d\n", hSession->hostname, hSession->current_port); 482 trace_ds(hSession,"SENT HOSTNAME %s:%d\n", hSession->hostname, hSession->current_port);
483 } 483 }
484 */ 484 */
  485 +
  486 + non_blocking(hSession,True);
  487 +
485 } 488 }
486 489
487 /** 490 /**
src/core/toggles/init.c
@@ -116,7 +116,7 @@ void initialize_toggles(H3270 *session) @@ -116,7 +116,7 @@ void initialize_toggles(H3270 *session)
116 LIB3270_TOGGLE_ID id; 116 LIB3270_TOGGLE_ID id;
117 void (*upcall)(H3270 *session, const struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); 117 void (*upcall)(H3270 *session, const struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
118 } 118 }
119 - upcalls[] = 119 + upcalls[LIB3270_TOGGLE_COUNT] =
120 { 120 {
121 { 121 {
122 LIB3270_TOGGLE_RECTANGLE_SELECT, 122 LIB3270_TOGGLE_RECTANGLE_SELECT,
@@ -150,15 +150,66 @@ void initialize_toggles(H3270 *session) @@ -150,15 +150,66 @@ void initialize_toggles(H3270 *session)
150 150
151 unsigned int f; 151 unsigned int f;
152 152
  153 + // Set defaults
153 for(f=0;f<LIB3270_TOGGLE_COUNT;f++) 154 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
  155 + {
154 session->toggle[f].upcall = toggle_nop; 156 session->toggle[f].upcall = toggle_nop;
  157 + session->toggle[f].value = toggle_descriptor[f].def;
  158 + }
155 159
  160 + // Load upcalls
156 for(f=0;f<(sizeof(upcalls)/sizeof(upcalls[0]));f++) 161 for(f=0;f<(sizeof(upcalls)/sizeof(upcalls[0]));f++)
157 session->toggle[upcalls[f].id].upcall = upcalls[f].upcall; 162 session->toggle[upcalls[f].id].upcall = upcalls[f].upcall;
158 163
  164 +#ifdef _WIN32
  165 + {
  166 + HKEY hKey;
  167 + DWORD disp = 0;
  168 + LSTATUS rc = RegCreateKeyEx(
  169 + HKEY_LOCAL_MACHINE,
  170 + "Software\\" LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME) "\\toggles",
  171 + 0,
  172 + NULL,
  173 + REG_OPTION_NON_VOLATILE,
  174 + KEY_QUERY_VALUE|KEY_READ,
  175 + NULL,
  176 + &hKey,
  177 + &disp);
  178 +
  179 + if(rc == ERROR_SUCCESS)
  180 + {
  181 + debug("%s: Loading toggles from registry",__FUNCTION__);
  182 + for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
  183 + {
  184 + DWORD val = 0;
  185 + DWORD cbData = sizeof(DWORD);
  186 +
  187 + DWORD dwRet = RegQueryValueEx(
  188 + hKey,
  189 + lib3270_toggle_get_from_id(f)->name,
  190 + NULL,
  191 + NULL,
  192 + (LPBYTE) &val,
  193 + &cbData
  194 + );
  195 +
  196 + debug("get(%s)=%d",lib3270_toggle_get_from_id(f)->name,(int) dwRet);
  197 + if(dwRet == ERROR_SUCCESS)
  198 + {
  199 + debug("toggle.%s=%s",lib3270_toggle_get_from_id(f)->name,val ? "True" : "False");
  200 + session->toggle[f].value = (val ? True : False);
  201 + }
  202 +
  203 + }
  204 + RegCloseKey(hKey);
  205 + }
  206 +
  207 + }
  208 +#endif // _WIN32
  209 +
  210 + // Initialize upcalls.
159 for(f=0;f<LIB3270_TOGGLE_COUNT;f++) 211 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
160 { 212 {
161 - session->toggle[f].value = toggle_descriptor[f].def;  
162 if(session->toggle[f].value) 213 if(session->toggle[f].value)
163 session->toggle[f].upcall(session,&session->toggle[f],LIB3270_TOGGLE_TYPE_INITIAL); 214 session->toggle[f].upcall(session,&session->toggle[f],LIB3270_TOGGLE_TYPE_INITIAL);
164 } 215 }
src/core/windows/connect.c
@@ -190,19 +190,22 @@ static void sockstart(H3270 *session) @@ -190,19 +190,22 @@ static void sockstart(H3270 *session)
190 for(rp = result; hSession->connection.sock < 0 && rp != NULL; rp = rp->ai_next) 190 for(rp = result; hSession->connection.sock < 0 && rp != NULL; rp = rp->ai_next)
191 { 191 {
192 hSession->connection.sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); 192 hSession->connection.sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
  193 +
193 if(hSession->connection.sock < 0) 194 if(hSession->connection.sock < 0)
194 { 195 {
195 ((struct resolver *) host)->rc = errno; 196 ((struct resolver *) host)->rc = errno;
196 ((struct resolver *) host)->message = strerror(errno); 197 ((struct resolver *) host)->message = strerror(errno);
  198 + debug("Socket error %d: %s",((struct resolver *) host)->rc,((struct resolver *) host)->message);
197 continue; 199 continue;
198 } 200 }
199 201
200 // Connected! 202 // Connected!
201 if(connect(hSession->connection.sock, rp->ai_addr, rp->ai_addrlen)) 203 if(connect(hSession->connection.sock, rp->ai_addr, rp->ai_addrlen))
202 { 204 {
203 - SOCK_CLOSE(hSession);  
204 ((struct resolver *) host)->rc = errno; 205 ((struct resolver *) host)->rc = errno;
205 ((struct resolver *) host)->message = strerror(errno); 206 ((struct resolver *) host)->message = strerror(errno);
  207 + debug("Connection error %d: %s",((struct resolver *) host)->rc,((struct resolver *) host)->message);
  208 + SOCK_CLOSE(hSession);
206 continue; 209 continue;
207 } 210 }
208 211
@@ -210,6 +213,8 @@ static void sockstart(H3270 *session) @@ -210,6 +213,8 @@ static void sockstart(H3270 *session)
210 213
211 freeaddrinfo(result); 214 freeaddrinfo(result);
212 215
  216 + debug("%s: Connected using socket %d",__FUNCTION__,hSession->connection.sock);
  217 +
213 return 0; 218 return 0;
214 219
215 } 220 }
@@ -233,6 +238,7 @@ int net_reconnect(H3270 *hSession, int seconds) @@ -233,6 +238,7 @@ int net_reconnect(H3270 *hSession, int seconds)
233 238
234 debug("host.message=\"%s\"",host.message); 239 debug("host.message=\"%s\"",host.message);
235 240
  241 + if(hEventLog)
236 { 242 {
237 // Register on event log 243 // Register on event log
238 lib3270_autoptr(char) username = lib3270_get_user_name(); 244 lib3270_autoptr(char) username = lib3270_get_user_name();
src/core/windows/log.c
@@ -43,31 +43,38 @@ @@ -43,31 +43,38 @@
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 - lib3270_autoptr(char) username = lib3270_get_user_name();  
47 lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); 46 lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr);
48 47
49 - const char *outMsg[] = {  
50 - username,  
51 - module,  
52 - msg  
53 - }; 48 + debug("%s",msg);
54 49
55 -#ifdef DEBUG  
56 - fprintf(stderr,"LOG(%s): %s\n",module,msg);  
57 - fflush(stderr);  
58 -#endif // DEBUG 50 + if(hEventLog)
  51 + {
  52 + lib3270_autoptr(char) username = lib3270_get_user_name();
59 53
60 - ReportEvent(  
61 - hEventLog,  
62 - (rc == 0 ? EVENTLOG_INFORMATION_TYPE : EVENTLOG_ERROR_TYPE),  
63 - 1,  
64 - 0,  
65 - NULL,  
66 - 3,  
67 - 0,  
68 - outMsg,  
69 - NULL  
70 - ); 54 + const char *outMsg[] = {
  55 + username,
  56 + module,
  57 + msg
  58 + };
  59 +
  60 + #ifdef DEBUG
  61 + fprintf(stderr,"LOG(%s): %s\n",module,msg);
  62 + fflush(stderr);
  63 + #endif // DEBUG
  64 +
  65 + ReportEvent(
  66 + hEventLog,
  67 + (rc == 0 ? EVENTLOG_INFORMATION_TYPE : EVENTLOG_ERROR_TYPE),
  68 + 1,
  69 + 0,
  70 + NULL,
  71 + 3,
  72 + 0,
  73 + outMsg,
  74 + NULL
  75 + );
  76 +
  77 + }
71 78
72 } 79 }
73 80
src/testprogram/testprogram.c
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como connect.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
1 29
2 #include <stdio.h> 30 #include <stdio.h>
3 #include <string.h> 31 #include <string.h>
@@ -36,6 +64,10 @@ static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_U @@ -36,6 +64,10 @@ static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_U
36 64
37 int main(int argc, char *argv[]) 65 int main(int argc, char *argv[])
38 { 66 {
  67 +#ifdef _WIN32
  68 + debug("Process %s running on pid %u\n",argv[0],(unsigned int) GetCurrentProcessId());
  69 +#endif // _WIN32
  70 +
39 #ifdef LC_ALL 71 #ifdef LC_ALL
40 setlocale( LC_ALL, "" ); 72 setlocale( LC_ALL, "" );
41 #endif 73 #endif
@@ -57,6 +89,8 @@ int main(int argc, char *argv[]) @@ -57,6 +89,8 @@ int main(int argc, char *argv[])
57 H3270 * h = lib3270_session_new(""); 89 H3270 * h = lib3270_session_new("");
58 int rc = 0; 90 int rc = 0;
59 91
  92 + lib3270_write_log(h,"TEST","Testprogram %s starts (%s)",argv[0],LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME));
  93 +
60 lib3270_autoptr(char) version_info = lib3270_get_version_info(); 94 lib3270_autoptr(char) version_info = lib3270_get_version_info();
61 printf("3270 session %p created\n%s\n]",h,version_info); 95 printf("3270 session %p created\n%s\n]",h,version_info);
62 96