Commit 4435f2312b41475fa371760683f532e402e45ca2
1 parent
2e1bc853
Exists in
master
and in
5 other branches
Melhorando popup de erros de comunicação (socket & cia)
Showing
8 changed files
with
79 additions
and
51 deletions
Show diff stats
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
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) | ... | ... |