Commit f8a828b9eb8621515e180c45530af0fac9515108

Authored by Perry Werneck
1 parent b1744c5f

Log messages are now sent to windows event log.

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.
... ...
src/lib3270/linux/log.c 0 → 100644
... ... @@ -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;
... ...
src/lib3270/windows/log.c 0 → 100644
... ... @@ -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 +
... ...