Commit c25520588b9810beff16e7b811e833b55316e076

Authored by Perry Werneck
1 parent 4e846202
Exists in master and in 1 other branch develop

Reimplementing pw3270 service module.

Makefile.in
... ... @@ -102,10 +102,10 @@ CFLAGS= \
102 102  
103 103 GTK_LIBS=@GTK_LIBS@
104 104 V3270_LIBS=@V3270_LIBS@
  105 +GLIB_LIBS=@GLIB_LIBS@
105 106  
106 107 LIBS= \
107 108 @LIBS@ \
108   - @GLIB_LIBS@ \
109 109 @LIBICONV@ \
110 110 @INTL_LIBS@ \
111 111 @LIB3270_LIBS@
... ... @@ -183,7 +183,8 @@ all: \
183 183 $(POTDIR)/$(MODULE_NAME).pot
184 184  
185 185 Release: \
186   - $(BINRLS)/$(MODULE_NAME)@DLLEXT@
  186 + $(BINRLS)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \
  187 + $(BINRLS)/$(PACKAGE_NAME)d@EXEEXT@
187 188  
188 189 $(BINRLS)/lib$(MODULE_NAME).a: \
189 190 $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJRLS)/$(SRC).o)
... ... @@ -209,6 +210,21 @@ $(BINRLS)/$(MODULE_NAME)@DLLEXT@: \
209 210 $(LIBS) \
210 211 $(GTK_LIBS)
211 212  
  213 +$(BINRLS)/$(PACKAGE_NAME)d@EXEEXT@: \
  214 + $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJRLS)/$(SRC).o) \
  215 + $(BINRLS)/lib$(MODULE_NAME).a
  216 +
  217 + @$(MKDIR) `dirname $@`
  218 + @echo $< ...
  219 + @$(LD) \
  220 + -o $@ \
  221 + $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJRLS)/$(SRC).o) \
  222 + -L$(BINRLS) \
  223 + $(LDFLAGS) \
  224 + $(LIBS) \
  225 + -l$(MODULE_NAME) \
  226 + $(GLIB_LIBS)
  227 +
212 228  
213 229 #---[ Install Targets ]------------------------------------------------------------------
214 230  
... ... @@ -241,7 +257,8 @@ locale: \
241 257  
242 258 Debug: \
243 259 $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \
244   - $(BINDBG)/$(MODULE_NAME)@EXEEXT@
  260 + $(BINDBG)/$(MODULE_NAME)@EXEEXT@ \
  261 + $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@
245 262  
246 263 Debug-plugin: \
247 264 $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \
... ... @@ -250,9 +267,6 @@ Debug-plugin: \
250 267 Debug-service: \
251 268 $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@
252 269  
253   -x:
254   - @echo $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJDBG)/$(SRC).o)
255   -
256 270 $(BINDBG)/lib$(MODULE_NAME).a: \
257 271 $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJDBG)/$(SRC).o)
258 272  
... ... @@ -275,7 +289,9 @@ $(BINDBG)/$(MODULE_NAME)@EXEEXT@: \
275 289 -Wl,-rpath,$(BINDBG) \
276 290 $(LDFLAGS) \
277 291 $(LIBS) \
278   - -l$(MODULE_NAME)
  292 + -l$(MODULE_NAME) \
  293 + $(V3270_LIBS) \
  294 + $(GTK_LIBS)
279 295  
280 296 $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@: \
281 297 $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJDBG)/$(SRC).o) \
... ... @@ -285,12 +301,13 @@ $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@: \
285 301 @echo $< ...
286 302 @$(LD) \
287 303 -o $@ \
288   - $^ \
  304 + $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJDBG)/$(SRC).o) \
289 305 -L$(BINDBG) \
290 306 -Wl,-rpath,$(BINDBG) \
291 307 $(LDFLAGS) \
292 308 $(LIBS) \
293   - -l$(MODULE_NAME)
  309 + -l$(MODULE_NAME) \
  310 + $(GLIB_LIBS)
294 311  
295 312 run-plugin: \
296 313 $(BINDBG)/$(MODULE_NAME)@EXEEXT@
... ... @@ -298,6 +315,12 @@ run-plugin: \
298 315 @LD_LIBRARY_PATH=$(BINDBG) \
299 316 $(BINDBG)/$(MODULE_NAME)@EXEEXT@
300 317  
  318 +run-service: \
  319 + $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@
  320 +
  321 + @LD_LIBRARY_PATH=$(BINDBG) \
  322 + $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@
  323 +
301 324 $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@: \
302 325 $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@
303 326  
... ...
pw3270-plugin-ipc.cbp
... ... @@ -96,9 +96,13 @@
96 96 <Unit filename="src/plugin/start.c">
97 97 <Option compilerVar="CC" />
98 98 </Unit>
  99 + <Unit filename="src/service/private.h" />
99 100 <Unit filename="src/service/service.c">
100 101 <Option compilerVar="CC" />
101 102 </Unit>
  103 + <Unit filename="src/service/session.c">
  104 + <Option compilerVar="CC" />
  105 + </Unit>
102 106 <Unit filename="src/testprogram/testprogram.c">
103 107 <Option compilerVar="CC" />
104 108 </Unit>
... ...
src/service/private.h 0 → 100644
... ... @@ -0,0 +1,81 @@
  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 private.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + *
  27 + */
  28 +
  29 +#ifndef PRIVATE_H_INCLUDED
  30 +
  31 + #define PRIVATE_H_INCLUDED
  32 + #include <config.h>
  33 +
  34 + #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME)
  35 +
  36 + #define PW3270_SERVICE_DBUS_SERVICE_PATH "/br/com/bb/pw3270/service"
  37 + #define PW3270_SERVICE_DBUS_SERVICE "br.com.bb.pw3270.service"
  38 +
  39 + #include <glib.h>
  40 + #include <gio/gio.h>
  41 + #include <lib3270.h>
  42 +
  43 + G_BEGIN_DECLS
  44 +
  45 + #define GLIB_TYPE_SESSION (session_get_type ())
  46 + #define SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLIB_TYPE_SESSION, session))
  47 + #define SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLIB_TYPE_SESSION, sessionClass))
  48 + #define IS_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLIB_TYPE_SESSION))
  49 + #define IS_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLIB_TYPE_SESSION))
  50 + #define SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLIB_TYPE_SESSION, sessionClass))
  51 +
  52 + typedef struct _session session;
  53 + typedef struct _sessionClass sessionClass;
  54 +
  55 + G_END_DECLS
  56 +
  57 +
  58 + /*
  59 + struct session {
  60 + unsigned int id; ///< @brief Identificador da sessão.
  61 + time_t activity; ///< @brief Timestamp da última atividade dessa sessão.
  62 + time_t timeout; ///< @brief Após quantos segundos eu encerro a sessao?
  63 + time_t maxidle; ///< @brief Tempo máximo que a sessão pode ficar IDLE
  64 + time_t autoclose; ///< @brief Destroi a sessão quantos segundos após a desconexão?
  65 + H3270 * host; ///< @brief Sessão TN3270.
  66 + };
  67 + */
  68 +
  69 + G_GNUC_INTERNAL GMainLoop * main_loop;
  70 +
  71 + /*
  72 + G_GNUC_INTERNAL void init_3270(void);
  73 + G_GNUC_INTERNAL void register_3270_io_handlers(void);
  74 +
  75 + G_GNUC_INTERNAL struct session * session_new();
  76 + G_GNUC_INTERNAL struct session * session_find(const gchar *key);
  77 + G_GNUC_INTERNAL void session_destroy(struct session *ses);
  78 + G_GNUC_INTERNAL void session_check_for_timeout(void);
  79 + */
  80 +
  81 +#endif // PRIVATE_H_INCLUDED
... ...
src/service/service.c
... ... @@ -26,14 +26,20 @@
26 26 *
27 27 */
28 28  
29   -#include <config.h>
30   -#include <glib.h>
  29 +#include "private.h"
31 30 #include <errno.h>
32 31 #include <string.h>
  32 +#include <stdlib.h>
33 33 #include <lib3270/ipc.h>
34 34  
35 35 GMainLoop * main_loop = NULL;
36 36  
  37 +#ifdef DEBUG
  38 + static gchar * pidfile = PACKAGE_NAME ".pid";
  39 +#else
  40 + static gchar * pidfile = "/var/run/" PACKAGE_NAME ".pid";
  41 +#endif // DEBUG
  42 +
37 43 #if defined( HAVE_SYSLOG )
38 44 static void g_syslog(const gchar *log_domain,GLogLevelFlags log_level,const gchar *message,gpointer user_data)
39 45 {
... ... @@ -95,6 +101,14 @@ static gboolean do_idle_check(G_GNUC_UNUSED gpointer dunno) {
95 101 return TRUE;
96 102 }
97 103  
  104 +static void cleanup() {
  105 +
  106 + if(pidfile) {
  107 + remove(pidfile);
  108 + }
  109 +
  110 +}
  111 +
98 112 int main(int argc, char *argv[]) {
99 113  
100 114 static gboolean asDaemon = FALSE;
... ... @@ -106,7 +120,7 @@ int main(int argc, char *argv[]) {
106 120  
107 121 // Verifica argumentos
108 122 static const GOptionEntry app_options[] = {
109   -// { "pidfile", 'p', 0, G_OPTION_ARG_STRING, &pidfile, "Path to pidfile" , NULL },
  123 + { "pidfile", 'p', 0, G_OPTION_ARG_STRING, &pidfile, "Path to pidfile" , NULL },
110 124 { "daemon", 'd', 0, G_OPTION_ARG_NONE, &asDaemon, "Run as daemon", NULL },
111 125 { NULL }
112 126 };
... ... @@ -122,16 +136,30 @@ int main(int argc, char *argv[]) {
122 136 return -1;
123 137 }
124 138  
  139 + atexit(cleanup);
  140 +
  141 + if(pidfile) {
  142 + FILE * hpid = fopen(pidfile,"w");
  143 + if(hpid) {
  144 + fprintf(hpid,"%u",(unsigned int) getpid());
  145 + fclose(hpid);
  146 + }
  147 + }
  148 +
125 149 #ifndef _WIN32
126 150 if(asDaemon && daemon(0,0)) {
127   - fprintf(stderr,"%s\n",strerror(errno));
  151 + g_print("%s can't start: %s\n",argv[0],strerror(errno));
128 152 return -1;
129 153 }
130 154 #endif // _WIN32
131 155  
  156 + g_print("%s starts\n",argv[0]);
  157 +
132 158 main_loop = g_main_loop_new(NULL, FALSE);
133 159 g_main_loop_run(main_loop);
134 160  
  161 + g_print("%s ends\n",argv[0]);
  162 +
135 163 return 0;
136 164 }
137 165  
... ...
src/service/session.c 0 → 100644
... ... @@ -0,0 +1,76 @@
  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 main.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 + */
  29 +
  30 +#include "private.h"
  31 +#include <lib3270/ipc.h>
  32 +
  33 +struct _session {
  34 + GObject parent;
  35 + time_t activity; ///< @brief Timestamp da última atividade dessa sessão.
  36 + time_t timeout; ///< @brief Após quantos segundos eu encerro a sessao?
  37 + time_t maxidle; ///< @brief Tempo máximo que a sessão pode ficar IDLE
  38 + time_t autoclose; ///< @brief Destroi a sessão quantos segundos após a desconexão?
  39 +};
  40 +
  41 +struct _sessionClass {
  42 + GObjectClass parent;
  43 +};
  44 +
  45 +G_DEFINE_TYPE(session, session, GLIB_TYPE_IPC3270)
  46 +
  47 +static void session_finalize(GObject *object) {
  48 +
  49 + lib3270_session_free(ipc3270_get_session(IPC3270(object)));
  50 + G_OBJECT_CLASS(session_parent_class)->finalize(object);
  51 +
  52 +}
  53 +
  54 +static void session_class_init(sessionClass *klass) {
  55 +
  56 + debug("%s",__FUNCTION__);
  57 +
  58 + GObjectClass *object_class;
  59 + object_class = G_OBJECT_CLASS (klass);
  60 + object_class->finalize = session_finalize;
  61 +
  62 +}
  63 +
  64 +static void session_init(session *object) {
  65 +
  66 + debug("%s",__FUNCTION__);
  67 +
  68 + ipc3270 *ipc = IPC3270(object);
  69 + ipc3270_set_session(ipc,lib3270_session_new(""),PACKAGE_NAME,NULL);
  70 +
  71 +}
  72 +
  73 +GObject * session_new() {
  74 + return g_object_new(GLIB_TYPE_SESSION, NULL);
  75 +}
  76 +
... ...