Commit 4435f2312b41475fa371760683f532e402e45ca2

Authored by perry.werneck@gmail.com
1 parent 2e1bc853

Melhorando popup de erros de comunicação (socket & cia)

src/include/lib3270.h
... ... @@ -883,9 +883,33 @@
883 883 */
884 884 LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...);
885 885  
  886 + /**
  887 + * Get library version.
  888 + *
  889 + * @return Version of active library as string.
  890 + *
  891 + */
886 892 LIB3270_EXPORT const char * lib3270_get_version(void);
  893 +
  894 + /**
  895 + * Get source code revision.
  896 + *
  897 + * @return SVN revision of the current source code.
  898 + *
  899 + */
887 900 LIB3270_EXPORT const char * lib3270_get_revision(void);
888 901  
  902 + /**
  903 + * Pop up an error dialog, based on an error number.
  904 + *
  905 + * @param hSession Session handle
  906 + * @param errn Error number (errno).
  907 + * @param fmt Message format
  908 + * @param ... Arguments for message
  909 + */
  910 + LIB3270_EXPORT void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...);
  911 +
  912 +
889 913 LIB3270_EXPORT char * lib3270_vsprintf(const char *fmt, va_list args);
890 914  
891 915 LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession);
... ...
src/lib3270/api.h
... ... @@ -18,7 +18,7 @@
18 18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19 19 * St, Fifth Floor, Boston, MA 02110-1301 USA
20 20 *
21   - * Este programa está nomeado como api.h e possui 444 linhas de código.
  21 + * Este programa está nomeado como api.h e possui - linhas de código.
22 22 *
23 23 * Contatos:
24 24 *
... ... @@ -322,10 +322,6 @@
322 322  
323 323 LOCAL_EXTERN const struct lib3270_option * get_3270_option_table(int sz);
324 324  
325   - /* Popups */
326   - LOCAL_EXTERN void Error(H3270 *session, const char *fmt, ...);
327   - LOCAL_EXTERN void Warning(H3270 *session, const char *fmt, ...);
328   - LOCAL_EXTERN void show_3270_popup_dialog(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, ...);
329 325  
330 326 /* Set/Get screen contents */
331 327 #define find_field_attribute(s,a) lib3270_field_addr(s,a)
... ... @@ -347,9 +343,6 @@
347 343 // LOCAL_EXTERN int Get3270Socket(void);
348 344  
349 345 /* Misc calls */
350   - LOCAL_EXTERN void popup_an_error(H3270 *session, const char *fmt, ...);
351   - LOCAL_EXTERN void popup_system_error(H3270 *session, const char *title, const char *message, const char *fmt, ...);
352   - LOCAL_EXTERN void popup_a_sockerr(H3270 *session, char *fmt, ...);
353 346  
354 347 #define query_3270_terminal_status(void) lib3270_get_program_message(NULL)
355 348  
... ...
src/lib3270/iocalls.c
... ... @@ -447,7 +447,7 @@ static int internal_event_dispatcher(H3270 *hSession, int block)
447 447 if (ns < 0)
448 448 {
449 449 if (errno != EINTR)
450   - Warning(NULL, "process_events: select() failed" );
  450 + lib3270_popup_an_errno(hSession,errno,"%s",_( "select() failed when dispatching events"));
451 451 #endif
452 452 return processed_any;
453 453 }
... ...
src/lib3270/popupsc.h
1 1 /*
2   - * Copyright 1999, 2000 by Paul Mattes.
3   - * Permission to use, copy, modify, and distribute this software and its
4   - * documentation for any purpose and without fee is hereby granted,
5   - * provided that the above copyright notice appear in all copies and that
6   - * both that copyright notice and this permission notice appear in
7   - * supporting documentation.
8   - *
9   - * c3270, s3270 and tcl3270 are distributed in the hope that they will
10   - * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
11   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file LICENSE
12   - * for more details.
  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 popupsc.h 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 de Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
13 30 */
14 31  
15   -/* Non-display version of popupsc.h */
  32 + /* Popup calls */
  33 +
  34 + #define popup_an_errno(hSession, errn, fmt, ...) lib3270_popup_an_errno(hSession, errn, fmt, __VA_ARGS__)
  35 +
  36 + LOCAL_EXTERN void popup_an_error(H3270 *session, const char *fmt, ...) printflike(2,3);
  37 + LOCAL_EXTERN void popup_system_error(H3270 *session, const char *title, const char *message, const char *fmt, ...) printflike(4,5);
  38 + LOCAL_EXTERN void popup_a_sockerr(H3270 *session, char *fmt, ...) printflike(2,3);
16 39  
17   -LIB3270_INTERNAL void popup_an_errno(H3270 *session, int errn, const char *fmt, ...);
18   -// LIB3270_INTERNAL void action_output(const char *fmt, ...);
  40 + LOCAL_EXTERN void Error(H3270 *session, const char *fmt, ...);
  41 + LOCAL_EXTERN void Warning(H3270 *session, const char *fmt, ...);
... ...
src/lib3270/screen.c
... ... @@ -612,22 +612,6 @@ void status_untiming(H3270 *session)
612 612 session->set_timer(session,0);
613 613 }
614 614  
615   -void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, ...)
616   -{
617   - CHECK_SESSION_HANDLE(session);
618   -
619   - trace("%s: title=%s msg=%s",__FUNCTION__,title,msg);
620   -
621   - if(!fmt)
622   - fmt = "";
623   -
624   - va_list arg_ptr;
625   - va_start(arg_ptr, fmt);
626   - popup_handler(session,session->widget,type,title,msg,fmt,arg_ptr);
627   - va_end(arg_ptr);
628   -
629   -}
630   -
631 615 static int logpopup(H3270 *session, void *widget, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg)
632 616 {
633 617 #ifdef ANDROID
... ...
src/lib3270/session.c
... ... @@ -45,6 +45,7 @@
45 45 #include "kybdc.h"
46 46 #include "3270ds.h"
47 47 #include "tablesc.h"
  48 +#include "popupsc.h"
48 49  
49 50 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/
50 51  
... ...
src/lib3270/telnet.c
... ... @@ -413,7 +413,7 @@ static union {
413 413 } haddr;
414 414 socklen_t ha_len = sizeof(haddr);
415 415  
416   -void popup_a_sockerr(H3270 *session, char *fmt, ...)
  416 +void popup_a_sockerr(H3270 *hSession, char *fmt, ...)
417 417 {
418 418 #if defined(_WIN32)
419 419 const char *msg = win32_strerror(socket_errno());
... ... @@ -421,14 +421,17 @@ void popup_a_sockerr(H3270 *session, char *fmt, ...)
421 421 const char *msg = strerror(errno);
422 422 #endif // WIN32
423 423 va_list args;
424   - char buffer[4096];
  424 + char *text;
425 425  
426 426 va_start(args, fmt);
427   - vsnprintf(buffer, 4095, fmt, args);
  427 + text = lib3270_vsprintf(fmt, args);
428 428 va_end(args);
429 429  
430   - popup_system_error(session, N_( "Network error" ), buffer, "%s", msg);
  430 + lib3270_write_log(hSession, "3270", "Network error:\n%s\n%s",text,msg);
431 431  
  432 + lib3270_popup_dialog(hSession, LIB3270_NOTIFY_ERROR, _( "Network error" ), text, "%s", msg);
  433 +
  434 + lib3270_free(text);
432 435 }
433 436  
434 437 #pragma pack(1)
... ... @@ -3031,7 +3034,7 @@ static int non_blocking(H3270 *session, Boolean on)
3031 3034  
3032 3035 if (SOCK_IOCTL(session->sock, FIONBIO, (int *) &i) < 0)
3033 3036 {
3034   - popup_a_sockerr(session,N_( "ioctl(%s)" ), "FIONBIO");
  3037 + popup_a_sockerr(session,N_( "Error in ioctl(%s) when setting no blocking mode" ), "FIONBIO");
3035 3038 return -1;
3036 3039 }
3037 3040  
... ... @@ -3041,7 +3044,7 @@ static int non_blocking(H3270 *session, Boolean on)
3041 3044  
3042 3045 if ((f = fcntl(session->sock, F_GETFL, 0)) == -1)
3043 3046 {
3044   - popup_an_errno(session,errno, N_( "fcntl(%s)" ), "F_GETFL" );
  3047 + popup_an_errno(session,errno, _( "Error in fcntl(%s) when setting non blocking mode" ), "F_GETFL" );
3045 3048 return -1;
3046 3049 }
3047 3050  
... ... @@ -3052,7 +3055,7 @@ static int non_blocking(H3270 *session, Boolean on)
3052 3055  
3053 3056 if (fcntl(session->sock, F_SETFL, f) < 0)
3054 3057 {
3055   - popup_an_errno(session,errno, N_( "fcntl(%s)" ), "F_GETFL");
  3058 + popup_an_errno(session,errno, _( "Error in fcntl(%s) when setting non blocking mode" ), "F_SETFL");
3056 3059 return -1;
3057 3060 }
3058 3061  
... ... @@ -3174,7 +3177,7 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3174 3177  
3175 3178 trace_dsn(hSession,"SSL Connect error in %s\nState: %s\nAlert: %s\n",err_buf,SSL_state_string_long(s),SSL_alert_type_string_long(ret));
3176 3179  
3177   - show_3270_popup_dialog( hSession, // H3270 *session,
  3180 + lib3270_popup_dialog( hSession, // H3270 *session,
3178 3181 PW3270_DIALOG_CRITICAL, // PW3270_DIALOG type,
3179 3182 _( "SSL Connect error" ), // Title
3180 3183 err_buf, // Message
... ...
src/lib3270/util.c
... ... @@ -980,8 +980,7 @@ LIB3270_EXPORT const char * lib3270_get_revision(void)
980 980 return build_rpq_revision;
981 981 }
982 982  
983   -/* Pop up an error dialog, based on an error number. */
984   -void popup_an_errno(H3270 *session, int errn, const char *fmt, ...)
  983 +void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...)
985 984 {
986 985 va_list args;
987 986 char * text;
... ... @@ -990,11 +989,12 @@ void popup_an_errno(H3270 *session, int errn, const char *fmt, ...)
990 989 text = lib3270_vsprintf(fmt, args);
991 990 va_end(args);
992 991  
993   - lib3270_write_log(session, "3270", "Error Popup:\n%s\nrc=%d (%s)",text,errn,strerror(errn));
  992 + lib3270_write_log(hSession, "3270", "Error Popup:\n%s\nrc=%d (%s)",text,errn,strerror(errn));
994 993  
995   - Error(session,text);
  994 + lib3270_popup_dialog(hSession, LIB3270_NOTIFY_ERROR, _( "Error" ), text, "%s (rc=%d)", errn, strerror(errn));
996 995  
997 996 lib3270_free(text);
  997 +
998 998 }
999 999  
1000 1000 #if defined(_WIN32)
... ...