Commit f8a828b9eb8621515e180c45530af0fac9515108
1 parent
b1744c5f
Exists in
master
and in
3 other branches
Log messages are now sent to windows event log.
Showing
9 changed files
with
179 additions
and
37 deletions
Show diff stats
lib3270.cbp
... | ... | @@ -174,6 +174,9 @@ |
174 | 174 | <Unit filename="src/lib3270/linux/event_dispatcher.c"> |
175 | 175 | <Option compilerVar="CC" /> |
176 | 176 | </Unit> |
177 | + <Unit filename="src/lib3270/linux/log.c"> | |
178 | + <Option compilerVar="CC" /> | |
179 | + </Unit> | |
177 | 180 | <Unit filename="src/lib3270/linux/util.c"> |
178 | 181 | <Option compilerVar="CC" /> |
179 | 182 | </Unit> |
... | ... | @@ -277,6 +280,9 @@ |
277 | 280 | <Unit filename="src/lib3270/windows/event_dispatcher.c"> |
278 | 281 | <Option compilerVar="CC" /> |
279 | 282 | </Unit> |
283 | + <Unit filename="src/lib3270/windows/log.c"> | |
284 | + <Option compilerVar="CC" /> | |
285 | + </Unit> | |
280 | 286 | <Unit filename="src/lib3270/windows/resources.rc"> |
281 | 287 | <Option compilerVar="WINDRES" /> |
282 | 288 | </Unit> | ... | ... |
src/include/lib3270.h
... | ... | @@ -1138,9 +1138,16 @@ |
1138 | 1138 | /** |
1139 | 1139 | * @brief Check if the screen position is protected. |
1140 | 1140 | * |
1141 | + * @param hSession Session handle. | |
1142 | + * @param baddr0 Search start addr (-1 to use current cursor position). | |
1143 | + * | |
1144 | + * @return -1 when failed 1 if the addr is protected and 0 if not. | |
1145 | + * | |
1141 | 1146 | */ |
1142 | 1147 | LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr0); |
1143 | 1148 | |
1149 | + LIB3270_EXPORT int LIB3270_DEPRECATED(lib3270_is_protected(H3270 *h, unsigned int baddr)); | |
1150 | + | |
1144 | 1151 | /** |
1145 | 1152 | * @brief Get Check if the screen position is protected. |
1146 | 1153 | * |
... | ... | @@ -1254,9 +1261,6 @@ |
1254 | 1261 | LIB3270_EXPORT const char * lib3270_get_model(H3270 *session); |
1255 | 1262 | LIB3270_EXPORT int lib3270_get_model_number(H3270 *hSession); |
1256 | 1263 | |
1257 | - LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr); | |
1258 | - LIB3270_EXPORT int lib3270_is_protected_at(H3270 *h, unsigned int row, unsigned int col); | |
1259 | - | |
1260 | 1264 | LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name); |
1261 | 1265 | |
1262 | 1266 | /** | ... | ... |
src/lib3270/ctlr.c
... | ... | @@ -629,6 +629,28 @@ LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr) |
629 | 629 | return FA_IS_PROTECTED(hSession->ea_buf[faddr].fa) ? 1 : 0; |
630 | 630 | } |
631 | 631 | |
632 | +LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) | |
633 | +{ | |
634 | + return lib3270_get_is_protected(h, baddr); | |
635 | + | |
636 | + /* | |
637 | + unsigned char fa; | |
638 | + | |
639 | + FAIL_IF_NOT_ONLINE(h); | |
640 | + | |
641 | + if(baddr > (h->rows * h->cols)) | |
642 | + { | |
643 | + errno = EINVAL; | |
644 | + return -1; | |
645 | + } | |
646 | + | |
647 | + fa = get_field_attribute(h,baddr); | |
648 | + | |
649 | + return FA_IS_PROTECTED(fa); | |
650 | + */ | |
651 | +} | |
652 | + | |
653 | + | |
632 | 654 | |
633 | 655 | /** |
634 | 656 | * Perform an erase command, which may include changing the (virtual) screen size. | ... | ... |
... | ... | @@ -0,0 +1,46 @@ |
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. 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 - 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 | + */ | |
29 | + | |
30 | +#include "../private.h" | |
31 | +#include <stdio.h> | |
32 | +#include <stdarg.h> | |
33 | +#include <config.h> | |
34 | +#include <lib3270.h> | |
35 | +#include <lib3270/log.h> | |
36 | + | |
37 | +/*---[ Implementacao ]--------------------------------------------------------------------------------------*/ | |
38 | + | |
39 | + void default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int GNUC_UNUSED(rc), const char *fmt, va_list arg_ptr) | |
40 | + { | |
41 | + printf("%s:\t",module); | |
42 | + vprintf(fmt,arg_ptr); | |
43 | + printf("\n"); | |
44 | + fflush(stdout); | |
45 | + } | |
46 | + | ... | ... |
src/lib3270/log.c
... | ... | @@ -41,21 +41,16 @@ |
41 | 41 | #include <config.h> |
42 | 42 | #include <lib3270.h> |
43 | 43 | #include <lib3270/log.h> |
44 | -// #include "api.h" | |
45 | - | |
46 | -/*---[ Prototipes ]-----------------------------------------------------------------------------------------*/ | |
47 | - | |
48 | - static void defaultlog(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | |
49 | 44 | |
50 | 45 | /*---[ Constants ]------------------------------------------------------------------------------------------*/ |
51 | 46 | |
52 | - static void (*loghandler)(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr) = defaultlog; | |
47 | + static void (*loghandler)(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr) = default_log_writer; | |
53 | 48 | |
54 | 49 | /*---[ Implementacao ]--------------------------------------------------------------------------------------*/ |
55 | 50 | |
56 | 51 | LIB3270_EXPORT void lib3270_set_log_handler(void (*handler)(H3270 *, const char *, int, const char *, va_list)) |
57 | 52 | { |
58 | - loghandler = handler ? handler : defaultlog; | |
53 | + loghandler = handler ? handler : default_log_writer; | |
59 | 54 | } |
60 | 55 | |
61 | 56 | LIB3270_EXPORT int lib3270_write_log(H3270 *session, const char *module, const char *fmt, ...) |
... | ... | @@ -80,12 +75,3 @@ |
80 | 75 | { |
81 | 76 | loghandler(session,module,0,fmt,arg); |
82 | 77 | } |
83 | - | |
84 | - static void defaultlog(H3270 GNUC_UNUSED(*session), const char *module, int GNUC_UNUSED(rc), const char *fmt, va_list arg_ptr) | |
85 | - { | |
86 | - fprintf(stderr,"%s:\t",module); | |
87 | - vfprintf(stderr,fmt,arg_ptr); | |
88 | - fprintf(stderr,"\n"); | |
89 | - fflush(stderr); | |
90 | - } | |
91 | - | ... | ... |
src/lib3270/private.h
... | ... | @@ -674,6 +674,11 @@ struct _h3270 |
674 | 674 | struct lib3270_state_callback * last[LIB3270_STATE_USER]; |
675 | 675 | } st; |
676 | 676 | |
677 | +#ifdef _WIN32 | |
678 | + /// @brief Windows Event Log Handler. | |
679 | + HANDLE hEventLog; | |
680 | +#endif // _WIN32 | |
681 | + | |
677 | 682 | }; |
678 | 683 | |
679 | 684 | #define SELECTION_LEFT 0x01 |
... | ... | @@ -770,5 +775,9 @@ LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); |
770 | 775 | |
771 | 776 | LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); |
772 | 777 | |
778 | + /// @brief Default log writer. | |
779 | + LIB3270_INTERNAL void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | |
780 | + | |
781 | + | |
773 | 782 | #endif |
774 | 783 | ... | ... |
src/lib3270/screen.c
... | ... | @@ -997,21 +997,3 @@ LIB3270_EXPORT void lib3270_popup_va(H3270 *session, LIB3270_NOTIFY id , const c |
997 | 997 | session->popups--; |
998 | 998 | |
999 | 999 | } |
1000 | - | |
1001 | -LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) | |
1002 | -{ | |
1003 | - unsigned char fa; | |
1004 | - | |
1005 | - FAIL_IF_NOT_ONLINE(h); | |
1006 | - | |
1007 | - if(baddr > (h->rows * h->cols)) | |
1008 | - { | |
1009 | - errno = EINVAL; | |
1010 | - return -1; | |
1011 | - } | |
1012 | - | |
1013 | - fa = get_field_attribute(h,baddr); | |
1014 | - | |
1015 | - return FA_IS_PROTECTED(fa); | |
1016 | -} | |
1017 | - | ... | ... |
src/lib3270/session.c
... | ... | @@ -151,6 +151,11 @@ void lib3270_session_free(H3270 *h) |
151 | 151 | lib3270_free(ip); |
152 | 152 | } |
153 | 153 | |
154 | +#ifdef _WIN32 | |
155 | + DeregisterEventSource(h->hEventLog); | |
156 | + h->hEventLog = 0; | |
157 | +#endif // _WIN32 | |
158 | + | |
154 | 159 | trace("Releasing session %p",h); |
155 | 160 | lib3270_free(h); |
156 | 161 | |
... | ... | @@ -408,6 +413,10 @@ H3270 * lib3270_session_new(const char *model) |
408 | 413 | ft_init(hSession); |
409 | 414 | #endif |
410 | 415 | |
416 | +#ifdef _WIN32 | |
417 | + hSession->hEventLog = RegisterEventSource(NULL, PACKAGE_NAME); | |
418 | +#endif // _WIN32 | |
419 | + | |
411 | 420 | trace("%s finished",__FUNCTION__); |
412 | 421 | |
413 | 422 | errno = 0; | ... | ... |
... | ... | @@ -0,0 +1,78 @@ |
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. 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 - 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 | + */ | |
29 | + | |
30 | +#include <winsock2.h> | |
31 | +#include <windows.h> | |
32 | +#include <wtsapi32.h> | |
33 | +#include <lmcons.h> | |
34 | + | |
35 | +#include "../private.h" | |
36 | +#include <stdio.h> | |
37 | +#include <stdarg.h> | |
38 | +#include <config.h> | |
39 | +#include <lib3270.h> | |
40 | +#include <lib3270/log.h> | |
41 | + | |
42 | +/*---[ Implement ]------------------------------------------------------------------------------------------*/ | |
43 | + | |
44 | + void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr) | |
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 | + | |
55 | + lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); | |
56 | + | |
57 | + const char *outMsg[] = { | |
58 | + username, | |
59 | + module, | |
60 | + msg | |
61 | + }; | |
62 | + | |
63 | + if(session->hEventLog) { | |
64 | + ReportEvent( | |
65 | + session->hEventLog, | |
66 | + (rc == 0 ? EVENTLOG_INFORMATION_TYPE : EVENTLOG_ERROR_TYPE), | |
67 | + 1, | |
68 | + 0, | |
69 | + NULL, | |
70 | + 3, | |
71 | + 0, | |
72 | + outMsg, | |
73 | + NULL | |
74 | + ); | |
75 | + } | |
76 | + | |
77 | + } | |
78 | + | ... | ... |