Commit 96ed31d591fdd16d48400a771d1996721b4e56d4

Authored by perry.werneck@gmail.com
1 parent 3c277bef

Padronizando nome do plugin dbus, incluindo mais métodos dbus para interação com o terminal

@@ -429,7 +429,7 @@ AC_CONFIG_FILES([ @@ -429,7 +429,7 @@ AC_CONFIG_FILES([
429 src/tools/Makefile 429 src/tools/Makefile
430 src/plugins/remotectl/Makefile 430 src/plugins/remotectl/Makefile
431 src/plugins/rx3270/Makefile 431 src/plugins/rx3270/Makefile
432 - src/plugins/3270dbus/Makefile 432 + src/plugins/dbus3270/Makefile
433 man/Makefile 433 man/Makefile
434 makegtkruntime.sh 434 makegtkruntime.sh
435 src/sample/Makefile 435 src/sample/Makefile
src/plugins/3270dbus/Makefile.in
@@ -1,120 +0,0 @@ @@ -1,120 +0,0 @@
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., 59 Temple  
19 -# Place, Suite 330, Boston, MA, 02111-1307, USA  
20 -#  
21 -# Contatos:  
22 -#  
23 -# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)  
24 -# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)  
25 -# licinio@bb.com.br (Licínio Luis Branco)  
26 -# kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
27 -#  
28 -  
29 -#---[ Sources ]----------------------------------------------------------------  
30 -  
31 -MODULE_NAME=3270dbus  
32 -DEPENDS=Makefile dbus-glue.h  
33 -PLUGIN_SRC=main.c gobject.c misc.c  
34 -DAEMON_SRC=daemon.c gobject.c iocallback.c misc.c  
35 -  
36 -#---[ Paths ]------------------------------------------------------------------  
37 -  
38 -ROOTDIR ?= .  
39 -OBJDIR ?= $(ROOTDIR)/.obj  
40 -BINDIR ?= $(ROOTDIR)/.bin  
41 -BINDBG ?= $(BINDIR)/Debug  
42 -BINRLS ?= $(BINDIR)/Release  
43 -  
44 -OBJDBG = $(OBJDIR)/Debug  
45 -OBJRLS = $(OBJDIR)/Release  
46 -OBJEXT = o  
47 -  
48 -#---[ Tools ]------------------------------------------------------------------  
49 -  
50 -MKDIR=@MKDIR_P@  
51 -CC=@CC@  
52 -LD=@CC@  
53 -DBUSBINDINGTOOL=@DBUSBINDINGTOOL@  
54 -  
55 -#---[ Flags ]------------------------------------------------------------------  
56 -  
57 -DLL_FLAGS=-shared  
58 -DLL_CFLAGS=@DLL_CFLAGS@  
59 -DEBUG_CFLAGS=-DDEBUG=1 -g -Wall  
60 -  
61 -LIB3270_CFLAGS ?= `pkg-config --cflags lib3270`  
62 -DBUS_CFLAGS=@DBUS_CFLAGS@  
63 -GLIB_CFLAGS=@GLIB_CFLAGS@  
64 -GTK_CFLAGS=@GTK_CFLAGS@  
65 -  
66 -LIB3270_LIBS ?= `pkg-config --libs lib3270`  
67 -DBUS_LIBS=@DBUS_LIBS@  
68 -GLIB_LIBS=@GLIB_LIBS@  
69 -GTK_LIBS=@GTK_LIBS@  
70 -  
71 -#---[ Rules ]------------------------------------------------------------------  
72 -  
73 -$(OBJDBG)/%.o: %.c $(DEPENDS)  
74 - @echo " CC `basename $@`"  
75 - @$(MKDIR) `dirname $@`  
76 - @$(CC) $(CFLAGS) $(DLL_CFLAGS) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GTK_CFLAGS) $(DEBUG_CFLAGS) $(LIB3270_CFLAGS) -o $@ -c $<  
77 -  
78 -$(OBJRLS)/%.o: %.c $(DEPENDS)  
79 - @echo " CC `basename $@`"  
80 - @$(MKDIR) `dirname $@`  
81 - @$(CC) $(CFLAGS) $(DLL_CFLAGS) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GTK_CFLAGS) $(LIB3270_CFLAGS) -o $@ -c $<  
82 -  
83 -  
84 -#---[ Release targets ]--------------------------------------------------------  
85 -  
86 -Release: $(BINRLS)/plugins/$(MODULE_NAME).so  
87 -  
88 -$(BINRLS)/plugins/$(MODULE_NAME).so: $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/$(SRC).o)  
89 - @echo " CCLD `basename $@`"  
90 - @$(MKDIR) `dirname $@`  
91 - @$(LD) $(DLL_FLAGS) -Wl,-soname,`basename $@` $(LDFLAGS) -o $@ $^ $(LIBS)  
92 -  
93 -#---[ Debug targets ]----------------------------------------------------------  
94 -  
95 -Debug: $(BINDBG)/plugins/$(MODULE_NAME).so  
96 -  
97 -$(BINDBG)/plugins/$(MODULE_NAME).so: $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJDBG)/$(SRC).o)  
98 - @echo " CCLD `basename $@`"  
99 - @$(MKDIR) `dirname $@`  
100 - @$(LD) $(DLL_FLAGS) -Wl,-soname,`basename $@` $(LDFLAGS) -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GLIB_LIBS) $(GTK_LIBS)  
101 -  
102 -#---[ Misc targets ]-----------------------------------------------------------  
103 -  
104 -debug-service: $(BINDBG)/@PACKAGE_NAME@d  
105 -  
106 -dbus-glue.h: pw3270dbus.xml  
107 - @$(DBUSBINDINGTOOL) --mode=glib-server --output=$@ --prefix=pw3270_dbus $^  
108 -  
109 -$(BINDBG)/@PACKAGE_NAME@d: $(foreach SRC, $(basename $(DAEMON_SRC)), $(OBJDBG)/$(SRC).o)  
110 - @echo " CCLD `basename $@`"  
111 - @$(MKDIR) `dirname $@`  
112 - @$(CC) $(CFLAGS) -o $@ $^ $(DBUS_LIBS) $(GLIB_LIBS) $(LIB3270_LIBS)  
113 -  
114 -cleandebug-service: clean  
115 -  
116 -clean:  
117 - @rm -fr $(OBJDIR)  
118 - @rm -fr $(BINDIR)  
119 - @rm -f dbus-glue.h  
120 - @find . -name "*~" -exec rm -f {} \;  
src/plugins/3270dbus/daemon.c
@@ -1,112 +0,0 @@ @@ -1,112 +0,0 @@
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 daemon.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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - * Referencias:  
31 - *  
32 - * https://live.gnome.org/DBusGlibBindings  
33 - *  
34 - */  
35 -  
36 -#include <glib.h>  
37 -#include <dbus/dbus.h>  
38 -#include <dbus/dbus-glib-lowlevel.h>  
39 -#include <dbus/dbus-glib.h>  
40 -  
41 -#include "daemon.h"  
42 -#include "dbus-glue.h"  
43 -  
44 -/*---[ Globals ]---------------------------------------------------------------------------------*/  
45 -  
46 - static DBusGConnection * connection = NULL;  
47 - static DBusGProxy * proxy = NULL;  
48 - static H3270 * hSession = NULL;  
49 -  
50 - GMainLoop * main_loop = NULL;  
51 -  
52 -  
53 -/*---[ Implement ]-------------------------------------------------------------------------------*/  
54 -  
55 -static int initialize(void)  
56 -{  
57 - GError * error = NULL;  
58 - guint result;  
59 -  
60 - connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);  
61 - if(error)  
62 - {  
63 - g_message("Error \"%s\" getting session dbus",error->message);  
64 - g_error_free(error);  
65 - return -1;  
66 - }  
67 -  
68 - proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);  
69 -  
70 - org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);  
71 -  
72 - pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);  
73 -  
74 - return 0;  
75 -}  
76 -  
77 -int main(int numpar, char *param[])  
78 -{  
79 - g_type_init ();  
80 -  
81 - if (!g_thread_supported ())  
82 - g_thread_init (NULL);  
83 -  
84 - dbus_g_thread_init ();  
85 -  
86 - pw3270_dbus_register_io_handlers();  
87 -  
88 - hSession = lib3270_session_new("");  
89 -  
90 - main_loop = g_main_loop_new (NULL, FALSE);  
91 -  
92 - if(initialize())  
93 - return -1;  
94 -  
95 - g_main_loop_run(main_loop);  
96 -  
97 - lib3270_session_free(hSession);  
98 -  
99 - return 0;  
100 -}  
101 -  
102 -void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)  
103 -{  
104 - g_main_loop_quit(main_loop);  
105 - dbus_g_method_return(context,0);  
106 -}  
107 -  
108 -H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)  
109 -{  
110 - return hSession;  
111 -}  
112 -  
src/plugins/3270dbus/daemon.h
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
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 daemon.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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - * Referencias:  
31 - *  
32 - * https://live.gnome.org/DBusGlibBindings  
33 - *  
34 - */  
35 -  
36 - #include "service.h"  
37 -  
38 -/*---[ Globals ]---------------------------------------------------------------------------------*/  
39 -  
40 - G_GNUC_INTERNAL GMainLoop * main_loop;  
41 -  
42 -  
43 -/*---[ Prototipes ]------------------------------------------------------------------------------*/  
44 -  
45 - G_GNUC_INTERNAL void pw3270_dbus_register_io_handlers(void);  
46 -  
src/plugins/3270dbus/gobject.c
@@ -1,191 +0,0 @@ @@ -1,191 +0,0 @@
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 gobject.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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - * Referencias:  
31 - *  
32 - * https://live.gnome.org/DBusGlibBindings  
33 - *  
34 - */  
35 -  
36 -#include <glib.h>  
37 -#include <dbus/dbus.h>  
38 -#include <dbus/dbus-glib-lowlevel.h>  
39 -#include <dbus/dbus-glib.h>  
40 -  
41 -#include <lib3270/config.h>  
42 -  
43 -#include "service.h"  
44 -  
45 -/*---[ Globals ]---------------------------------------------------------------------------------*/  
46 -  
47 -  
48 -/*---[ Implement ]-------------------------------------------------------------------------------*/  
49 -  
50 -G_DEFINE_TYPE(PW3270Dbus, pw3270_dbus, G_TYPE_OBJECT)  
51 -  
52 -static void pw3270_dbus_finalize(GObject *object)  
53 -{  
54 - G_OBJECT_CLASS(pw3270_dbus_parent_class)->finalize (object);  
55 -}  
56 -  
57 -  
58 -static void pw3270_dbus_class_init(PW3270DbusClass *klass)  
59 -{  
60 - GObjectClass *object_class;  
61 - object_class = G_OBJECT_CLASS (klass);  
62 - object_class->finalize = pw3270_dbus_finalize;  
63 -}  
64 -  
65 -static void pw3270_dbus_init(PW3270Dbus *object)  
66 -{  
67 -  
68 -}  
69 -  
70 -PW3270Dbus * pw3270_dbus_new(void)  
71 -{  
72 - return g_object_new(PW3270_TYPE_DBUS, NULL);  
73 -}  
74 -  
75 -void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context)  
76 -{  
77 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
78 - dbus_g_method_return(context,PACKAGE_REVISION);  
79 -}  
80 -  
81 -void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)  
82 -{  
83 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
84 -  
85 - g_message("Connecting to \"%s\" by remote request",uri);  
86 - dbus_g_method_return(context,lib3270_connect(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri,0));  
87 -}  
88 -  
89 -void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context)  
90 -{  
91 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
92 -  
93 - g_message("Disconnecting by remote request");  
94 - lib3270_disconnect(pw3270_dbus_get_session_handle(object));  
95 - dbus_g_method_return(context,0);  
96 -}  
97 -  
98 -void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context)  
99 -{  
100 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
101 - dbus_g_method_return(context,lib3270_get_program_message(pw3270_dbus_get_session_handle(object)));  
102 -}  
103 -  
104 -GError * pw3270_dbus_get_error_from_errno(int code)  
105 -{  
106 - return g_error_new(ERROR_DOMAIN,code,"%s",g_strerror(code));  
107 -}  
108 -  
109 -int pw3270_dbus_check_valid_state(PW3270Dbus *object, DBusGMethodInvocation *context)  
110 -{  
111 - H3270 * hSession = pw3270_dbus_get_session_handle(object);  
112 - GError * error = NULL;  
113 -  
114 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
115 -  
116 - if(!lib3270_is_connected(hSession))  
117 - {  
118 - error = pw3270_dbus_get_error_from_errno(ENOTCONN);  
119 - }  
120 - else  
121 - {  
122 - LIB3270_MESSAGE state = lib3270_get_program_message(hSession);  
123 -  
124 - switch(state)  
125 - {  
126 - case LIB3270_MESSAGE_NONE:  
127 - return 0;  
128 -  
129 - case LIB3270_MESSAGE_DISCONNECTED:  
130 - error = pw3270_dbus_get_error_from_errno(ENOTCONN);  
131 - break;  
132 -  
133 - case LIB3270_MESSAGE_MINUS:  
134 - case LIB3270_MESSAGE_PROTECTED:  
135 - case LIB3270_MESSAGE_NUMERIC:  
136 - case LIB3270_MESSAGE_OVERFLOW:  
137 - case LIB3270_MESSAGE_INHIBIT:  
138 - case LIB3270_MESSAGE_KYBDLOCK:  
139 - case LIB3270_MESSAGE_X:  
140 - error = g_error_new(ERROR_DOMAIN,-1,_( "State %04d can't accept requests" ),state);  
141 - break;  
142 -  
143 - case LIB3270_MESSAGE_SYSWAIT:  
144 - case LIB3270_MESSAGE_TWAIT:  
145 - case LIB3270_MESSAGE_CONNECTED:  
146 - case LIB3270_MESSAGE_AWAITING_FIRST:  
147 - error = pw3270_dbus_get_error_from_errno(EBUSY);  
148 - break;  
149 -  
150 - case LIB3270_MESSAGE_RESOLVING:  
151 - case LIB3270_MESSAGE_CONNECTING:  
152 - error = g_error_new(ERROR_DOMAIN,EINPROGRESS,_( "Connecting to host" ));  
153 -  
154 - case LIB3270_MESSAGE_USER:  
155 - error = g_error_new(ERROR_DOMAIN,-1,_( "Unexpected state %04d" ),state);  
156 - }  
157 - }  
158 -  
159 - if(error)  
160 - {  
161 - dbus_g_method_return_error(context,error);  
162 - g_error_free(error);  
163 - return -1;  
164 - }  
165 -  
166 - return 0;  
167 -}  
168 -  
169 -void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context)  
170 -{  
171 - char * text;  
172 - gchar * utftext;  
173 - H3270 * hSession = pw3270_dbus_get_session_handle(object);  
174 -  
175 - trace("%s object=%p context=%p",__FUNCTION__,object,context);  
176 -  
177 - if(pw3270_dbus_check_valid_state(object,context))  
178 - return;  
179 -  
180 - text = lib3270_get_text(hSession,0,-1);  
181 -  
182 - utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_charset(hSession),"?",NULL,NULL,NULL);  
183 -  
184 - lib3270_free(text);  
185 -  
186 - dbus_g_method_return(context,utftext);  
187 -  
188 - g_free(utftext);  
189 -  
190 -}  
191 -  
src/plugins/3270dbus/iocallback.c
@@ -1,364 +0,0 @@ @@ -1,364 +0,0 @@
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 iocallback.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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - */  
31 -  
32 -#if defined(_WIN32) /*[*/  
33 - #include <windows.h>  
34 -#elif defined(__APPLE__)  
35 - #include <poll.h>  
36 - #include <string.h>  
37 -#else  
38 - #include <poll.h>  
39 - #include <string.h>  
40 -#endif /*]*/  
41 -  
42 -#include <stdio.h>  
43 -#include <glib.h>  
44 -#include "daemon.h"  
45 -  
46 -static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm);  
47 -static void static_RemoveSource(void *id);  
48 -  
49 -#ifdef WIN32  
50 -static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session));  
51 -static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session));  
52 -#else  
53 -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session));  
54 -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session));  
55 -#endif // WIN32  
56 -  
57 -static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session));  
58 -static void static_RemoveTimeOut(void * timer);  
59 -static int static_Sleep(H3270 *hSession, int seconds);  
60 -static int static_RunPendingEvents(H3270 *hSession, int wait);  
61 -  
62 -static gboolean IO_prepare(GSource *source, gint *timeout);  
63 -static gboolean IO_check(GSource *source);  
64 -static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data);  
65 -static void IO_finalize(GSource *source); /* Can be NULL */  
66 -static gboolean IO_closure(gpointer data);  
67 -  
68 -/*---[ Structs ]-------------------------------------------------------------------------------------------*/  
69 -  
70 - typedef struct _IO_Source  
71 - {  
72 - GSource gsrc;  
73 - GPollFD poll;  
74 -#if defined(_WIN32)  
75 - HANDLE source;  
76 -#else  
77 - int source;  
78 -#endif // WIN32  
79 - void (*fn)(H3270 *session);  
80 - H3270 *session;  
81 - } IO_Source;  
82 -  
83 - typedef struct _timer  
84 - {  
85 - unsigned char remove;  
86 - void (*fn)(H3270 *session);  
87 - H3270 *session;  
88 - } TIMER;  
89 -  
90 - static GSourceFuncs IOSources =  
91 - {  
92 - IO_prepare,  
93 - IO_check,  
94 - IO_dispatch,  
95 - IO_finalize,  
96 - IO_closure,  
97 - NULL  
98 - };  
99 -  
100 -/*---[ Implement ]-----------------------------------------------------------------------------------------*/  
101 -  
102 -#ifdef WIN32  
103 -static void * AddSource(HANDLE source, H3270 *session, gushort events, void (*fn)(H3270 *session))  
104 -#else  
105 -static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session))  
106 -#endif // WIN32  
107 -{  
108 - IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source));  
109 -  
110 - src->source = source;  
111 - src->fn = fn;  
112 - src->poll.fd = (int) source;  
113 - src->poll.events = events;  
114 - src->session = session;  
115 -  
116 - g_source_attach((GSource *) src,NULL);  
117 - g_source_add_poll((GSource *) src,&src->poll);  
118 -  
119 - return src;  
120 -}  
121 -  
122 -#ifdef WIN32  
123 -static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session))  
124 -#else  
125 -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session))  
126 -#endif // WIN32  
127 -{  
128 - return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn);  
129 -}  
130 -  
131 -static void static_RemoveSource(void *id)  
132 -{  
133 - if(id)  
134 - g_source_destroy((GSource *) id);  
135 -}  
136 -  
137 -#if defined(WIN32)  
138 -static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session))  
139 -{  
140 - return 0;  
141 -}  
142 -#else  
143 -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session))  
144 -{  
145 - return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn);  
146 -}  
147 -#endif // WIN32  
148 -  
149 -static gboolean do_timer(TIMER *t)  
150 -{  
151 - if(!t->remove)  
152 - t->fn(t->session);  
153 - return FALSE;  
154 -}  
155 -  
156 -static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session))  
157 -{  
158 - TIMER *t = g_malloc0(sizeof(TIMER));  
159 -  
160 - t->fn = proc;  
161 - t->session = session;  
162 -  
163 - g_timeout_add_full(G_PRIORITY_DEFAULT, (guint) interval, (GSourceFunc) do_timer, t, g_free);  
164 -  
165 - return t;  
166 -}  
167 -  
168 -static void static_RemoveTimeOut(void * timer)  
169 -{  
170 - ((TIMER *) timer)->remove++;  
171 -}  
172 -  
173 -static gboolean IO_prepare(GSource *source, gint *timeout)  
174 -{  
175 - /*  
176 - * Called before all the file descriptors are polled.  
177 - * If the source can determine that it is ready here  
178 - * (without waiting for the results of the poll() call)  
179 - * it should return TRUE.  
180 - *  
181 - * It can also return a timeout_ value which should be the maximum  
182 - * timeout (in milliseconds) which should be passed to the poll() call.  
183 - * The actual timeout used will be -1 if all sources returned -1,  
184 - * or it will be the minimum of all the timeout_ values  
185 - * returned which were >= 0.  
186 - *  
187 - */  
188 - return 0;  
189 -}  
190 -  
191 -static gboolean IO_check(GSource *source)  
192 -{  
193 - /*  
194 - * Called after all the file descriptors are polled.  
195 - * The source should return TRUE if it is ready to be dispatched.  
196 - * Note that some time may have passed since the previous prepare  
197 - * function was called, so the source should be checked again here.  
198 - *  
199 - */  
200 -#if defined(_WIN32) /*[*/  
201 -  
202 - if(WaitForSingleObject(((IO_Source *) source)->source,0) == WAIT_OBJECT_0)  
203 - return TRUE;  
204 -  
205 -#else /*][*/  
206 -  
207 - struct pollfd fds;  
208 -  
209 - memset(&fds,0,sizeof(fds));  
210 -  
211 - fds.fd = ((IO_Source *) source)->poll.fd;  
212 - fds.events = ((IO_Source *) source)->poll.events;  
213 -  
214 - if(poll(&fds,1,0) > 0)  
215 - return TRUE;  
216 -  
217 -#endif /*]*/  
218 -  
219 - return FALSE;  
220 -}  
221 -  
222 -static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data)  
223 -{  
224 - /*  
225 - * Called to dispatch the event source,  
226 - * after it has returned TRUE in either its prepare or its check function.  
227 - * The dispatch function is passed in a callback function and data.  
228 - * The callback function may be NULL if the source was never connected  
229 - * to a callback using g_source_set_callback(). The dispatch function  
230 - * should call the callback function with user_data and whatever additional  
231 - * parameters are needed for this type of event source.  
232 - */  
233 - ((IO_Source *) source)->fn(((IO_Source *) source)->session);  
234 - return TRUE;  
235 -}  
236 -  
237 -static void IO_finalize(GSource *source)  
238 -{  
239 -  
240 -}  
241 -  
242 -static gboolean IO_closure(gpointer data)  
243 -{  
244 - return 0;  
245 -}  
246 -  
247 -struct bgParameter  
248 -{  
249 - gboolean running;  
250 - gboolean timer;  
251 - H3270 *session;  
252 - int rc;  
253 - int(*callback)(H3270 *session, void *);  
254 - void *parm;  
255 -  
256 -};  
257 -  
258 -gpointer BgCall(struct bgParameter *p)  
259 -{  
260 -// trace("%s starts",__FUNCTION__);  
261 - p->rc = p->callback(p->session, p->parm);  
262 - p->running = FALSE;  
263 -// trace("%s ends",__FUNCTION__);  
264 - return 0;  
265 -}  
266 -  
267 -static gboolean wait_for_thread(struct bgParameter *p)  
268 -{  
269 - if(!p->running)  
270 - {  
271 - p->timer = 0;  
272 - return FALSE;  
273 - }  
274 - return TRUE;  
275 -}  
276 -  
277 -static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm)  
278 -{  
279 - struct bgParameter p = { TRUE, TRUE, session, -1, callback, parm };  
280 - GThread * thread;  
281 -  
282 -// trace("Starting auxiliary thread for callback %p",callback);  
283 -  
284 - p.running = TRUE;  
285 - p.timer = TRUE;  
286 -  
287 - thread = g_thread_create( (GThreadFunc) BgCall, &p, 0, NULL);  
288 -  
289 - if(!thread)  
290 - {  
291 - g_error("Can't start background thread");  
292 - return -1;  
293 - }  
294 -  
295 - g_timeout_add(50,(GSourceFunc) wait_for_thread,(gpointer) &p);  
296 -  
297 - while(p.timer)  
298 - g_main_context_iteration(g_main_loop_get_context(main_loop),TRUE);  
299 -  
300 - return p.rc;  
301 -}  
302 -  
303 -static int static_Sleep(H3270 *hSession, int seconds)  
304 -{  
305 - time_t end = time(0) + seconds;  
306 -  
307 - while(time(0) < end)  
308 - g_main_iteration(TRUE);  
309 -  
310 - return 0;  
311 -}  
312 -  
313 -static int static_RunPendingEvents(H3270 *hSession, int wait)  
314 -{  
315 - GMainContext *context = g_main_loop_get_context(main_loop);  
316 - int rc = 0;  
317 - while(g_main_context_pending(context))  
318 - {  
319 - rc = 1;  
320 - g_main_context_iteration(context,FALSE);  
321 - }  
322 -  
323 - if(wait)  
324 - g_main_context_iteration(context,TRUE);  
325 -  
326 - return rc;  
327 -}  
328 -  
329 -static void beep(H3270 *session)  
330 -{  
331 -}  
332 -  
333 -void pw3270_dbus_register_io_handlers(void)  
334 -{  
335 - static const struct lib3270_callbacks hdl =  
336 - {  
337 - sizeof(struct lib3270_callbacks),  
338 -  
339 - static_AddTimeOut,  
340 - static_RemoveTimeOut,  
341 -  
342 - static_AddInput,  
343 - static_RemoveSource,  
344 -  
345 - static_AddExcept,  
346 -  
347 -#ifdef G_THREADS_ENABLED  
348 - static_CallAndWait,  
349 -#else  
350 - NULL,  
351 -#endif  
352 -  
353 - static_Sleep,  
354 - static_RunPendingEvents,  
355 - beep  
356 -  
357 - };  
358 -  
359 - if(lib3270_register_handlers(&hdl))  
360 - {  
361 - g_error("%s","Can't set lib3270 I/O handlers");  
362 - }  
363 -  
364 -}  
src/plugins/3270dbus/main.c
@@ -1,114 +0,0 @@ @@ -1,114 +0,0 @@
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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - */  
31 -  
32 -#include <glib.h>  
33 -#include <dbus/dbus.h>  
34 -#include <dbus/dbus-glib-lowlevel.h>  
35 -#include <dbus/dbus-glib.h>  
36 -  
37 -#include <pw3270.h>  
38 -#include <pw3270/plugin.h>  
39 -  
40 -#include "service.h"  
41 -#include "dbus-glue.h"  
42 -  
43 -#include <gtk/gtk.h>  
44 -  
45 -/*---[ Globals ]---------------------------------------------------------------------------------*/  
46 -  
47 - static DBusGConnection * connection = NULL;  
48 - static DBusGProxy * proxy = NULL;  
49 -  
50 -/*---[ Implement ]-------------------------------------------------------------------------------*/  
51 -  
52 - LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window)  
53 - {  
54 -  
55 - GError * error = NULL;  
56 - guint result;  
57 -  
58 - connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);  
59 - if(error)  
60 - {  
61 - GtkWidget *dialog = gtk_message_dialog_new(  
62 - GTK_WINDOW(window),  
63 - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,  
64 - GTK_MESSAGE_ERROR,  
65 - GTK_BUTTONS_OK,  
66 - _( "Can't connect to DBUS server" ));  
67 -  
68 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);  
69 -  
70 - g_message("Error \"%s\" getting session dbus",error->message);  
71 -  
72 - g_error_free(error);  
73 -  
74 - gtk_dialog_run(GTK_DIALOG(dialog));  
75 - gtk_widget_destroy(dialog);  
76 -  
77 - return -1;  
78 - }  
79 -  
80 -  
81 - proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);  
82 -  
83 - org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);  
84 - if(error)  
85 - {  
86 - GtkWidget *dialog = gtk_message_dialog_new(  
87 - GTK_WINDOW(window),  
88 - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,  
89 - GTK_MESSAGE_ERROR,  
90 - GTK_BUTTONS_OK,  
91 - _( "Can't get DBUS object name" ));  
92 -  
93 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);  
94 -  
95 - g_message("Error \"%s\" requesting DBUS name",error->message);  
96 -  
97 - g_error_free(error);  
98 -  
99 - gtk_dialog_run(GTK_DIALOG(dialog));  
100 - gtk_widget_destroy(dialog);  
101 -  
102 - return -1;  
103 - }  
104 -  
105 - pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);  
106 -  
107 - return 0;  
108 - }  
109 -  
110 - LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window)  
111 - {  
112 -  
113 - return 0;  
114 - }  
src/plugins/3270dbus/misc.c
@@ -1,47 +0,0 @@ @@ -1,47 +0,0 @@
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 misc.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 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - * Referencias:  
31 - *  
32 - * https://live.gnome.org/DBusGlibBindings  
33 - *  
34 - */  
35 -  
36 -#include "globals.h"  
37 -  
38 -/*---[ Implement ]-------------------------------------------------------------------------------*/  
39 -  
40 -gpointer pw3270_dbus_register_object(DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path)  
41 -{  
42 - GObject *object = g_object_new (object_type, NULL);  
43 - dbus_g_object_type_install_info (object_type, info);  
44 - dbus_g_connection_register_g_object (connection, path, object);  
45 - return object;  
46 -}  
47 -  
src/plugins/3270dbus/pw3270dbus.cbp
@@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
2 -<CodeBlocks_project_file>  
3 - <FileVersion major="1" minor="6" />  
4 - <Project>  
5 - <Option title="pw3270dbus" />  
6 - <Option makefile_is_custom="1" />  
7 - <Option pch_mode="2" />  
8 - <Option compiler="gcc" />  
9 - <Build>  
10 - <Target title="Debug">  
11 - <Option output=".bin/Debug/pw3270dbus" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="0" extension_auto="1" />  
12 - <Option object_output=".obj/Debug/" />  
13 - <Option type="3" />  
14 - <Option compiler="gcc" />  
15 - <Compiler>  
16 - <Add option="-g" />  
17 - </Compiler>  
18 - </Target>  
19 - <Target title="Release">  
20 - <Option output=".bin/Release/pw3270dbus" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="0" extension_auto="1" />  
21 - <Option object_output=".obj/Release/" />  
22 - <Option type="3" />  
23 - <Option compiler="gcc" />  
24 - <Compiler>  
25 - <Add option="-O2" />  
26 - </Compiler>  
27 - <Linker>  
28 - <Add option="-s" />  
29 - </Linker>  
30 - </Target>  
31 - <Target title="debug-service">  
32 - <Option output=".bin/Debug/pw3270d" prefix_auto="1" extension_auto="1" />  
33 - <Option object_output=".obj/Debug/" />  
34 - <Option type="1" />  
35 - <Option compiler="gcc" />  
36 - <Compiler>  
37 - <Add option="-g" />  
38 - </Compiler>  
39 - </Target>  
40 - </Build>  
41 - <Compiler>  
42 - <Add option="-Wall" />  
43 - </Compiler>  
44 - <Unit filename="Makefile.in" />  
45 - <Unit filename="daemon.c">  
46 - <Option compilerVar="CC" />  
47 - </Unit>  
48 - <Unit filename="daemon.h" />  
49 - <Unit filename="dbus-glue.h" />  
50 - <Unit filename="globals.h" />  
51 - <Unit filename="gobject.c">  
52 - <Option compilerVar="CC" />  
53 - </Unit>  
54 - <Unit filename="iocallback.c">  
55 - <Option compilerVar="CC" />  
56 - </Unit>  
57 - <Unit filename="main.c">  
58 - <Option compilerVar="CC" />  
59 - </Unit>  
60 - <Unit filename="misc.c">  
61 - <Option compilerVar="CC" />  
62 - </Unit>  
63 - <Unit filename="pw3270dbus.xml" />  
64 - <Unit filename="service.h" />  
65 - <Unit filename="test.sh" />  
66 - <Extensions>  
67 - <code_completion />  
68 - <debugger />  
69 - </Extensions>  
70 - </Project>  
71 -</CodeBlocks_project_file>  
src/plugins/3270dbus/pw3270dbus.xml
@@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" ?>  
2 -<node name="/br/com/bb/pw3270">  
3 - <interface name="br.com.bb.pw3270">  
4 - <method name="getRevision">  
5 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
6 - <arg type="s" name="revision" direction="out" />  
7 - </method>  
8 - <method name="quit">  
9 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
10 - <arg type="i" name="result" direction="out" />  
11 - </method>  
12 - <method name="connect">  
13 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
14 - <arg type="s" name="uri" direction="in" />  
15 - <arg type="i" name="result" direction="out" />  
16 - </method>  
17 - <method name="disconnect">  
18 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
19 - <arg type="i" name="result" direction="out" />  
20 - </method>  
21 - <method name="getMessageID">  
22 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
23 - <arg type="i" name="status" direction="out" />  
24 - </method>  
25 - <method name="getScreenContents">  
26 - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>  
27 - <arg type="s" name="contents" direction="out" />  
28 - </method>  
29 - </interface>  
30 -</node>  
src/plugins/3270dbus/service.h
@@ -1,80 +0,0 @@ @@ -1,80 +0,0 @@
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 service.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 Mendonça)  
27 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - *  
30 - */  
31 -  
32 -#ifndef _PW3270_DBUS_SERVICE_H  
33 -  
34 - #define _PW3270_DBUS_SERVICE_H 1  
35 -  
36 - #define ENABLE_NLS  
37 - #define GETTEXT_PACKAGE PACKAGE_NAME  
38 -  
39 - #include "globals.h"  
40 -  
41 - #define PW3270_DBUS_SERVICE_PATH "/br/com/bb/pw3270"  
42 - #define PW3270_DBUS_SERVICE "br.com.bb.pw3270"  
43 -  
44 - #define PW3270_TYPE_DBUS (pw3270_dbus_get_type ())  
45 - #define PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PW3270_TYPE_DBUS, PW3270Dbus))  
46 - #define PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_DBUS, PW3270DbusClass))  
47 - #define IS_PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PW3270_TYPE_DBUS))  
48 - #define IS_PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_DBUS))  
49 - #define PW3270_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_DBUS, PW3270DbusClass))  
50 -  
51 - G_BEGIN_DECLS  
52 -  
53 - typedef struct _PW3270Dbus PW3270Dbus;  
54 - typedef struct _PW3270DbusClass PW3270DbusClass;  
55 -  
56 - struct _PW3270Dbus  
57 - {  
58 - GObject parent;  
59 - };  
60 -  
61 - struct _PW3270DbusClass  
62 - {  
63 - GObjectClass parent;  
64 - };  
65 -  
66 - PW3270Dbus * pw3270_dbus_new (void);  
67 - GType pw3270_dbus_get_type (void);  
68 -  
69 - void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context);  
70 - void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context);  
71 - void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);  
72 - void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context);  
73 - void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context);  
74 - void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context);  
75 - H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object);  
76 - GError * pw3270_dbus_get_error_from_errno(int code);  
77 -  
78 - G_END_DECLS  
79 -  
80 -#endif // _PW3270_DBUS_SERVICE_H  
src/plugins/3270dbus/test.sh
@@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -case $1 in  
4 -  
5 - revision)  
6 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getRevision  
7 - ;;  
8 -  
9 - message)  
10 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getProgramMessage  
11 - ;;  
12 -  
13 - connect)  
14 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.connect string:$2  
15 - ;;  
16 -  
17 - disconnect)  
18 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.disconnect  
19 - ;;  
20 -  
21 - quit)  
22 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.quit  
23 - ;;  
24 -  
25 - get)  
26 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getScreenContents  
27 - ;;  
28 -  
29 - *)  
30 - dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getRevision  
31 - ;;  
32 -  
33 -esac  
34 -  
src/plugins/dbus3270/Makefile.in 0 → 100644
@@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
  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., 59 Temple
  19 +# Place, Suite 330, Boston, MA, 02111-1307, USA
  20 +#
  21 +# Contatos:
  22 +#
  23 +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  24 +# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
  25 +# licinio@bb.com.br (Licínio Luis Branco)
  26 +# kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  27 +#
  28 +
  29 +#---[ Sources ]----------------------------------------------------------------
  30 +
  31 +MODULE_NAME=dbus3270
  32 +DEPENDS=Makefile dbus-glue.h
  33 +PLUGIN_SRC=main.c gobject.c misc.c
  34 +DAEMON_SRC=daemon.c gobject.c iocallback.c misc.c
  35 +
  36 +#---[ Paths ]------------------------------------------------------------------
  37 +
  38 +ROOTDIR ?= .
  39 +OBJDIR ?= $(ROOTDIR)/.obj
  40 +BINDIR ?= $(ROOTDIR)/.bin
  41 +BINDBG ?= $(BINDIR)/Debug
  42 +BINRLS ?= $(BINDIR)/Release
  43 +
  44 +OBJDBG = $(OBJDIR)/Debug
  45 +OBJRLS = $(OBJDIR)/Release
  46 +OBJEXT = o
  47 +
  48 +#---[ Tools ]------------------------------------------------------------------
  49 +
  50 +MKDIR=@MKDIR_P@
  51 +CC=@CC@
  52 +LD=@CC@
  53 +DBUSBINDINGTOOL=@DBUSBINDINGTOOL@
  54 +
  55 +#---[ Flags ]------------------------------------------------------------------
  56 +
  57 +DLL_FLAGS=-shared
  58 +DLL_CFLAGS=@DLL_CFLAGS@
  59 +DEBUG_CFLAGS=-DDEBUG=1 -g -Wall
  60 +
  61 +LIB3270_CFLAGS ?= `pkg-config --cflags lib3270`
  62 +DBUS_CFLAGS=@DBUS_CFLAGS@
  63 +GLIB_CFLAGS=@GLIB_CFLAGS@
  64 +GTK_CFLAGS=@GTK_CFLAGS@
  65 +
  66 +LIB3270_LIBS ?= `pkg-config --libs lib3270`
  67 +DBUS_LIBS=@DBUS_LIBS@
  68 +GLIB_LIBS=@GLIB_LIBS@
  69 +GTK_LIBS=@GTK_LIBS@
  70 +
  71 +#---[ Rules ]------------------------------------------------------------------
  72 +
  73 +$(OBJDBG)/%.o: %.c $(DEPENDS)
  74 + @echo " CC `basename $@`"
  75 + @$(MKDIR) `dirname $@`
  76 + @$(CC) $(CFLAGS) $(DLL_CFLAGS) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GTK_CFLAGS) $(DEBUG_CFLAGS) $(LIB3270_CFLAGS) -o $@ -c $<
  77 +
  78 +$(OBJRLS)/%.o: %.c $(DEPENDS)
  79 + @echo " CC `basename $@`"
  80 + @$(MKDIR) `dirname $@`
  81 + @$(CC) $(CFLAGS) $(DLL_CFLAGS) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GTK_CFLAGS) $(LIB3270_CFLAGS) -o $@ -c $<
  82 +
  83 +
  84 +#---[ Release targets ]--------------------------------------------------------
  85 +
  86 +Release: $(BINRLS)/plugins/$(MODULE_NAME).so
  87 +
  88 +$(BINRLS)/plugins/$(MODULE_NAME).so: $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/$(SRC).o)
  89 + @echo " CCLD `basename $@`"
  90 + @$(MKDIR) `dirname $@`
  91 + @$(LD) $(DLL_FLAGS) -Wl,-soname,`basename $@` $(LDFLAGS) -o $@ $^ $(LIBS)
  92 +
  93 +#---[ Debug targets ]----------------------------------------------------------
  94 +
  95 +Debug: $(BINDBG)/plugins/$(MODULE_NAME).so
  96 +
  97 +$(BINDBG)/plugins/$(MODULE_NAME).so: $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJDBG)/$(SRC).o)
  98 + @echo " CCLD `basename $@`"
  99 + @$(MKDIR) `dirname $@`
  100 + @$(LD) $(DLL_FLAGS) -Wl,-soname,`basename $@` $(LDFLAGS) -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GLIB_LIBS) $(GTK_LIBS)
  101 +
  102 +#---[ Misc targets ]-----------------------------------------------------------
  103 +
  104 +debug-service: $(BINDBG)/@PACKAGE_NAME@d
  105 +
  106 +dbus-glue.h: pw3270dbus.xml
  107 + @$(DBUSBINDINGTOOL) --mode=glib-server --output=$@ --prefix=pw3270_dbus $^
  108 +
  109 +$(BINDBG)/@PACKAGE_NAME@d: $(foreach SRC, $(basename $(DAEMON_SRC)), $(OBJDBG)/$(SRC).o)
  110 + @echo " CCLD `basename $@`"
  111 + @$(MKDIR) `dirname $@`
  112 + @$(CC) $(CFLAGS) -o $@ $^ $(DBUS_LIBS) $(GLIB_LIBS) $(LIB3270_LIBS)
  113 +
  114 +cleandebug-service: clean
  115 +
  116 +clean:
  117 + @rm -fr $(OBJDIR)
  118 + @rm -fr $(BINDIR)
  119 + @rm -f dbus-glue.h
  120 + @find . -name "*~" -exec rm -f {} \;
src/plugins/dbus3270/daemon.c 0 → 100644
@@ -0,0 +1,118 @@ @@ -0,0 +1,118 @@
  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 daemon.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include <glib.h>
  37 +#include <dbus/dbus.h>
  38 +#include <dbus/dbus-glib-lowlevel.h>
  39 +#include <dbus/dbus-glib.h>
  40 +
  41 +#include "daemon.h"
  42 +#include "dbus-glue.h"
  43 +
  44 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  45 +
  46 + static DBusGConnection * connection = NULL;
  47 + static DBusGProxy * proxy = NULL;
  48 + static H3270 * hSession = NULL;
  49 +
  50 + GMainLoop * main_loop = NULL;
  51 +
  52 +
  53 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  54 +
  55 +static int initialize(void)
  56 +{
  57 + GError * error = NULL;
  58 + guint result;
  59 +
  60 + connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
  61 + if(error)
  62 + {
  63 + g_message("Error \"%s\" getting session dbus",error->message);
  64 + g_error_free(error);
  65 + return -1;
  66 + }
  67 +
  68 + proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
  69 +
  70 + org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
  71 +
  72 + pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);
  73 +
  74 + return 0;
  75 +}
  76 +
  77 +static void loghandler(H3270 *session, const char *module, int rc, const char *fmt, va_list args)
  78 +{
  79 + g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args);
  80 +}
  81 +
  82 +int main(int numpar, char *param[])
  83 +{
  84 + g_type_init ();
  85 +
  86 + if (!g_thread_supported ())
  87 + g_thread_init (NULL);
  88 +
  89 + dbus_g_thread_init ();
  90 +
  91 + lib3270_set_log_handler(loghandler);
  92 + pw3270_dbus_register_io_handlers();
  93 +
  94 + hSession = lib3270_session_new("");
  95 +
  96 + main_loop = g_main_loop_new (NULL, FALSE);
  97 +
  98 + if(initialize())
  99 + return -1;
  100 +
  101 + g_main_loop_run(main_loop);
  102 +
  103 + lib3270_session_free(hSession);
  104 +
  105 + return 0;
  106 +}
  107 +
  108 +void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)
  109 +{
  110 + g_main_loop_quit(main_loop);
  111 + dbus_g_method_return(context,0);
  112 +}
  113 +
  114 +H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
  115 +{
  116 + return hSession;
  117 +}
  118 +
src/plugins/dbus3270/daemon.h 0 → 100644
@@ -0,0 +1,46 @@ @@ -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.
  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 daemon.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 + #include "service.h"
  37 +
  38 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  39 +
  40 + G_GNUC_INTERNAL GMainLoop * main_loop;
  41 +
  42 +
  43 +/*---[ Prototipes ]------------------------------------------------------------------------------*/
  44 +
  45 + G_GNUC_INTERNAL void pw3270_dbus_register_io_handlers(void);
  46 +
src/plugins/dbus3270/globals.h 0 → 100644
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
  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 globals.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 Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#ifndef PW3270_DBUS_GLOBALS_H_INCLUDED
  33 +
  34 + #define PW3270_DBUS_GLOBALS_H_INCLUDED 1
  35 +
  36 + #include <libintl.h>
  37 + #include <glib/gi18n.h>
  38 +
  39 + #include <errno.h>
  40 + #include <lib3270.h>
  41 + #include <lib3270/log.h>
  42 + #include <glib.h>
  43 +
  44 + #include <dbus/dbus-glib.h>
  45 + #include <dbus/dbus-glib-bindings.h>
  46 + #include <dbus/dbus-glib-lowlevel.h>
  47 +
  48 + #define ERROR_DOMAIN g_quark_from_static_string("pw3270DBUS")
  49 +
  50 + G_GNUC_INTERNAL gpointer pw3270_dbus_register_object (DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path);
  51 +
  52 +
  53 +#endif // PW3270_DBUS_GLOBALS_H_INCLUDED
src/plugins/dbus3270/gobject.c 0 → 100644
@@ -0,0 +1,200 @@ @@ -0,0 +1,200 @@
  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 gobject.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include <glib.h>
  37 +#include <dbus/dbus.h>
  38 +#include <dbus/dbus-glib-lowlevel.h>
  39 +#include <dbus/dbus-glib.h>
  40 +
  41 +#include <lib3270/config.h>
  42 +#include <lib3270.h>
  43 +#include <lib3270/actions.h>
  44 +
  45 +#include "service.h"
  46 +
  47 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  48 +
  49 +
  50 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  51 +
  52 +G_DEFINE_TYPE(PW3270Dbus, pw3270_dbus, G_TYPE_OBJECT)
  53 +
  54 +static void pw3270_dbus_finalize(GObject *object)
  55 +{
  56 + G_OBJECT_CLASS(pw3270_dbus_parent_class)->finalize (object);
  57 +}
  58 +
  59 +
  60 +static void pw3270_dbus_class_init(PW3270DbusClass *klass)
  61 +{
  62 + GObjectClass *object_class;
  63 + object_class = G_OBJECT_CLASS (klass);
  64 + object_class->finalize = pw3270_dbus_finalize;
  65 +}
  66 +
  67 +static void pw3270_dbus_init(PW3270Dbus *object)
  68 +{
  69 +
  70 +}
  71 +
  72 +PW3270Dbus * pw3270_dbus_new(void)
  73 +{
  74 + return g_object_new(PW3270_TYPE_DBUS, NULL);
  75 +}
  76 +
  77 +void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context)
  78 +{
  79 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  80 + dbus_g_method_return(context,PACKAGE_REVISION);
  81 +}
  82 +
  83 +void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)
  84 +{
  85 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  86 +
  87 + g_message("Connecting to \"%s\" by remote request",uri);
  88 + dbus_g_method_return(context,lib3270_connect(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri,0));
  89 +}
  90 +
  91 +void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context)
  92 +{
  93 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  94 +
  95 + g_message("Disconnecting by remote request");
  96 + lib3270_disconnect(pw3270_dbus_get_session_handle(object));
  97 + dbus_g_method_return(context,0);
  98 +}
  99 +
  100 +void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context)
  101 +{
  102 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  103 + dbus_g_method_return(context,lib3270_get_program_message(pw3270_dbus_get_session_handle(object)));
  104 +}
  105 +
  106 +GError * pw3270_dbus_get_error_from_errno(int code)
  107 +{
  108 + return g_error_new(ERROR_DOMAIN,code,"%s",g_strerror(code));
  109 +}
  110 +
  111 +int pw3270_dbus_check_valid_state(PW3270Dbus *object, DBusGMethodInvocation *context)
  112 +{
  113 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  114 + GError * error = NULL;
  115 +
  116 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  117 +
  118 + if(!lib3270_is_connected(hSession))
  119 + {
  120 + error = pw3270_dbus_get_error_from_errno(ENOTCONN);
  121 + }
  122 + else
  123 + {
  124 + LIB3270_MESSAGE state = lib3270_get_program_message(hSession);
  125 +
  126 + switch(state)
  127 + {
  128 + case LIB3270_MESSAGE_NONE:
  129 + return 0;
  130 +
  131 + case LIB3270_MESSAGE_DISCONNECTED:
  132 + error = pw3270_dbus_get_error_from_errno(ENOTCONN);
  133 + break;
  134 +
  135 + case LIB3270_MESSAGE_MINUS:
  136 + case LIB3270_MESSAGE_PROTECTED:
  137 + case LIB3270_MESSAGE_NUMERIC:
  138 + case LIB3270_MESSAGE_OVERFLOW:
  139 + case LIB3270_MESSAGE_INHIBIT:
  140 + case LIB3270_MESSAGE_KYBDLOCK:
  141 + case LIB3270_MESSAGE_X:
  142 + error = g_error_new(ERROR_DOMAIN,-1,_( "State %04d can't accept requests" ),state);
  143 + break;
  144 +
  145 + case LIB3270_MESSAGE_SYSWAIT:
  146 + case LIB3270_MESSAGE_TWAIT:
  147 + case LIB3270_MESSAGE_CONNECTED:
  148 + case LIB3270_MESSAGE_AWAITING_FIRST:
  149 + error = pw3270_dbus_get_error_from_errno(EBUSY);
  150 + break;
  151 +
  152 + case LIB3270_MESSAGE_RESOLVING:
  153 + case LIB3270_MESSAGE_CONNECTING:
  154 + error = g_error_new(ERROR_DOMAIN,EINPROGRESS,_( "Connecting to host" ));
  155 +
  156 + case LIB3270_MESSAGE_USER:
  157 + error = g_error_new(ERROR_DOMAIN,-1,_( "Unexpected state %04d" ),state);
  158 + }
  159 + }
  160 +
  161 + if(error)
  162 + {
  163 + dbus_g_method_return_error(context,error);
  164 + g_error_free(error);
  165 + return -1;
  166 + }
  167 +
  168 + return 0;
  169 +}
  170 +
  171 +void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context)
  172 +{
  173 + char * text;
  174 + gchar * utftext;
  175 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  176 +
  177 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  178 +
  179 + if(pw3270_dbus_check_valid_state(object,context))
  180 + return;
  181 +
  182 + text = lib3270_get_text(hSession,0,-1);
  183 +
  184 + utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_charset(hSession),"?",NULL,NULL,NULL);
  185 +
  186 + lib3270_free(text);
  187 +
  188 + dbus_g_method_return(context,utftext);
  189 +
  190 + g_free(utftext);
  191 +
  192 +}
  193 +
  194 +void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context)
  195 +{
  196 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  197 + if(pw3270_dbus_check_valid_state(object,context))
  198 + return;
  199 + dbus_g_method_return(context,lib3270_enter(pw3270_dbus_get_session_handle(object)));
  200 +}
src/plugins/dbus3270/iocallback.c 0 → 100644
@@ -0,0 +1,364 @@ @@ -0,0 +1,364 @@
  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 iocallback.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#if defined(_WIN32) /*[*/
  33 + #include <windows.h>
  34 +#elif defined(__APPLE__)
  35 + #include <poll.h>
  36 + #include <string.h>
  37 +#else
  38 + #include <poll.h>
  39 + #include <string.h>
  40 +#endif /*]*/
  41 +
  42 +#include <stdio.h>
  43 +#include <glib.h>
  44 +#include "daemon.h"
  45 +
  46 +static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm);
  47 +static void static_RemoveSource(void *id);
  48 +
  49 +#ifdef WIN32
  50 +static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session));
  51 +static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session));
  52 +#else
  53 +static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session));
  54 +static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session));
  55 +#endif // WIN32
  56 +
  57 +static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session));
  58 +static void static_RemoveTimeOut(void * timer);
  59 +static int static_Sleep(H3270 *hSession, int seconds);
  60 +static int static_RunPendingEvents(H3270 *hSession, int wait);
  61 +
  62 +static gboolean IO_prepare(GSource *source, gint *timeout);
  63 +static gboolean IO_check(GSource *source);
  64 +static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data);
  65 +static void IO_finalize(GSource *source); /* Can be NULL */
  66 +static gboolean IO_closure(gpointer data);
  67 +
  68 +/*---[ Structs ]-------------------------------------------------------------------------------------------*/
  69 +
  70 + typedef struct _IO_Source
  71 + {
  72 + GSource gsrc;
  73 + GPollFD poll;
  74 +#if defined(_WIN32)
  75 + HANDLE source;
  76 +#else
  77 + int source;
  78 +#endif // WIN32
  79 + void (*fn)(H3270 *session);
  80 + H3270 *session;
  81 + } IO_Source;
  82 +
  83 + typedef struct _timer
  84 + {
  85 + unsigned char remove;
  86 + void (*fn)(H3270 *session);
  87 + H3270 *session;
  88 + } TIMER;
  89 +
  90 + static GSourceFuncs IOSources =
  91 + {
  92 + IO_prepare,
  93 + IO_check,
  94 + IO_dispatch,
  95 + IO_finalize,
  96 + IO_closure,
  97 + NULL
  98 + };
  99 +
  100 +/*---[ Implement ]-----------------------------------------------------------------------------------------*/
  101 +
  102 +#ifdef WIN32
  103 +static void * AddSource(HANDLE source, H3270 *session, gushort events, void (*fn)(H3270 *session))
  104 +#else
  105 +static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session))
  106 +#endif // WIN32
  107 +{
  108 + IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source));
  109 +
  110 + src->source = source;
  111 + src->fn = fn;
  112 + src->poll.fd = (int) source;
  113 + src->poll.events = events;
  114 + src->session = session;
  115 +
  116 + g_source_attach((GSource *) src,NULL);
  117 + g_source_add_poll((GSource *) src,&src->poll);
  118 +
  119 + return src;
  120 +}
  121 +
  122 +#ifdef WIN32
  123 +static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
  124 +#else
  125 +static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session))
  126 +#endif // WIN32
  127 +{
  128 + return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn);
  129 +}
  130 +
  131 +static void static_RemoveSource(void *id)
  132 +{
  133 + if(id)
  134 + g_source_destroy((GSource *) id);
  135 +}
  136 +
  137 +#if defined(WIN32)
  138 +static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
  139 +{
  140 + return 0;
  141 +}
  142 +#else
  143 +static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session))
  144 +{
  145 + return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn);
  146 +}
  147 +#endif // WIN32
  148 +
  149 +static gboolean do_timer(TIMER *t)
  150 +{
  151 + if(!t->remove)
  152 + t->fn(t->session);
  153 + return FALSE;
  154 +}
  155 +
  156 +static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session))
  157 +{
  158 + TIMER *t = g_malloc0(sizeof(TIMER));
  159 +
  160 + t->fn = proc;
  161 + t->session = session;
  162 +
  163 + g_timeout_add_full(G_PRIORITY_DEFAULT, (guint) interval, (GSourceFunc) do_timer, t, g_free);
  164 +
  165 + return t;
  166 +}
  167 +
  168 +static void static_RemoveTimeOut(void * timer)
  169 +{
  170 + ((TIMER *) timer)->remove++;
  171 +}
  172 +
  173 +static gboolean IO_prepare(GSource *source, gint *timeout)
  174 +{
  175 + /*
  176 + * Called before all the file descriptors are polled.
  177 + * If the source can determine that it is ready here
  178 + * (without waiting for the results of the poll() call)
  179 + * it should return TRUE.
  180 + *
  181 + * It can also return a timeout_ value which should be the maximum
  182 + * timeout (in milliseconds) which should be passed to the poll() call.
  183 + * The actual timeout used will be -1 if all sources returned -1,
  184 + * or it will be the minimum of all the timeout_ values
  185 + * returned which were >= 0.
  186 + *
  187 + */
  188 + return 0;
  189 +}
  190 +
  191 +static gboolean IO_check(GSource *source)
  192 +{
  193 + /*
  194 + * Called after all the file descriptors are polled.
  195 + * The source should return TRUE if it is ready to be dispatched.
  196 + * Note that some time may have passed since the previous prepare
  197 + * function was called, so the source should be checked again here.
  198 + *
  199 + */
  200 +#if defined(_WIN32) /*[*/
  201 +
  202 + if(WaitForSingleObject(((IO_Source *) source)->source,0) == WAIT_OBJECT_0)
  203 + return TRUE;
  204 +
  205 +#else /*][*/
  206 +
  207 + struct pollfd fds;
  208 +
  209 + memset(&fds,0,sizeof(fds));
  210 +
  211 + fds.fd = ((IO_Source *) source)->poll.fd;
  212 + fds.events = ((IO_Source *) source)->poll.events;
  213 +
  214 + if(poll(&fds,1,0) > 0)
  215 + return TRUE;
  216 +
  217 +#endif /*]*/
  218 +
  219 + return FALSE;
  220 +}
  221 +
  222 +static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data)
  223 +{
  224 + /*
  225 + * Called to dispatch the event source,
  226 + * after it has returned TRUE in either its prepare or its check function.
  227 + * The dispatch function is passed in a callback function and data.
  228 + * The callback function may be NULL if the source was never connected
  229 + * to a callback using g_source_set_callback(). The dispatch function
  230 + * should call the callback function with user_data and whatever additional
  231 + * parameters are needed for this type of event source.
  232 + */
  233 + ((IO_Source *) source)->fn(((IO_Source *) source)->session);
  234 + return TRUE;
  235 +}
  236 +
  237 +static void IO_finalize(GSource *source)
  238 +{
  239 +
  240 +}
  241 +
  242 +static gboolean IO_closure(gpointer data)
  243 +{
  244 + return 0;
  245 +}
  246 +
  247 +struct bgParameter
  248 +{
  249 + gboolean running;
  250 + gboolean timer;
  251 + H3270 *session;
  252 + int rc;
  253 + int(*callback)(H3270 *session, void *);
  254 + void *parm;
  255 +
  256 +};
  257 +
  258 +gpointer BgCall(struct bgParameter *p)
  259 +{
  260 +// trace("%s starts",__FUNCTION__);
  261 + p->rc = p->callback(p->session, p->parm);
  262 + p->running = FALSE;
  263 +// trace("%s ends",__FUNCTION__);
  264 + return 0;
  265 +}
  266 +
  267 +static gboolean wait_for_thread(struct bgParameter *p)
  268 +{
  269 + if(!p->running)
  270 + {
  271 + p->timer = 0;
  272 + return FALSE;
  273 + }
  274 + return TRUE;
  275 +}
  276 +
  277 +static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm)
  278 +{
  279 + struct bgParameter p = { TRUE, TRUE, session, -1, callback, parm };
  280 + GThread * thread;
  281 +
  282 +// trace("Starting auxiliary thread for callback %p",callback);
  283 +
  284 + p.running = TRUE;
  285 + p.timer = TRUE;
  286 +
  287 + thread = g_thread_create( (GThreadFunc) BgCall, &p, 0, NULL);
  288 +
  289 + if(!thread)
  290 + {
  291 + g_error("Can't start background thread");
  292 + return -1;
  293 + }
  294 +
  295 + g_timeout_add(50,(GSourceFunc) wait_for_thread,(gpointer) &p);
  296 +
  297 + while(p.timer)
  298 + g_main_context_iteration(g_main_loop_get_context(main_loop),TRUE);
  299 +
  300 + return p.rc;
  301 +}
  302 +
  303 +static int static_Sleep(H3270 *hSession, int seconds)
  304 +{
  305 + time_t end = time(0) + seconds;
  306 +
  307 + while(time(0) < end)
  308 + g_main_iteration(TRUE);
  309 +
  310 + return 0;
  311 +}
  312 +
  313 +static int static_RunPendingEvents(H3270 *hSession, int wait)
  314 +{
  315 + GMainContext *context = g_main_loop_get_context(main_loop);
  316 + int rc = 0;
  317 + while(g_main_context_pending(context))
  318 + {
  319 + rc = 1;
  320 + g_main_context_iteration(context,FALSE);
  321 + }
  322 +
  323 + if(wait)
  324 + g_main_context_iteration(context,TRUE);
  325 +
  326 + return rc;
  327 +}
  328 +
  329 +static void beep(H3270 *session)
  330 +{
  331 +}
  332 +
  333 +void pw3270_dbus_register_io_handlers(void)
  334 +{
  335 + static const struct lib3270_callbacks hdl =
  336 + {
  337 + sizeof(struct lib3270_callbacks),
  338 +
  339 + static_AddTimeOut,
  340 + static_RemoveTimeOut,
  341 +
  342 + static_AddInput,
  343 + static_RemoveSource,
  344 +
  345 + static_AddExcept,
  346 +
  347 +#ifdef G_THREADS_ENABLED
  348 + static_CallAndWait,
  349 +#else
  350 + NULL,
  351 +#endif
  352 +
  353 + static_Sleep,
  354 + static_RunPendingEvents,
  355 + beep
  356 +
  357 + };
  358 +
  359 + if(lib3270_register_handlers(&hdl))
  360 + {
  361 + g_error("%s","Can't set lib3270 I/O handlers");
  362 + }
  363 +
  364 +}
src/plugins/dbus3270/main.c 0 → 100644
@@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
  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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#include <glib.h>
  33 +#include <dbus/dbus.h>
  34 +#include <dbus/dbus-glib-lowlevel.h>
  35 +#include <dbus/dbus-glib.h>
  36 +
  37 +#include <pw3270.h>
  38 +#include <pw3270/plugin.h>
  39 +
  40 +#include "service.h"
  41 +#include "dbus-glue.h"
  42 +
  43 +#include <gtk/gtk.h>
  44 +
  45 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  46 +
  47 + static DBusGConnection * connection = NULL;
  48 + static DBusGProxy * proxy = NULL;
  49 +
  50 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  51 +
  52 + LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window)
  53 + {
  54 +
  55 + GError * error = NULL;
  56 + guint result;
  57 +
  58 + connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
  59 + if(error)
  60 + {
  61 + GtkWidget *dialog = gtk_message_dialog_new(
  62 + GTK_WINDOW(window),
  63 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  64 + GTK_MESSAGE_ERROR,
  65 + GTK_BUTTONS_OK,
  66 + _( "Can't connect to DBUS server" ));
  67 +
  68 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
  69 +
  70 + g_message("Error \"%s\" getting session dbus",error->message);
  71 +
  72 + g_error_free(error);
  73 +
  74 + gtk_dialog_run(GTK_DIALOG(dialog));
  75 + gtk_widget_destroy(dialog);
  76 +
  77 + return -1;
  78 + }
  79 +
  80 +
  81 + proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
  82 +
  83 + org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
  84 + if(error)
  85 + {
  86 + GtkWidget *dialog = gtk_message_dialog_new(
  87 + GTK_WINDOW(window),
  88 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  89 + GTK_MESSAGE_ERROR,
  90 + GTK_BUTTONS_OK,
  91 + _( "Can't get DBUS object name" ));
  92 +
  93 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
  94 +
  95 + g_message("Error \"%s\" requesting DBUS name",error->message);
  96 +
  97 + g_error_free(error);
  98 +
  99 + gtk_dialog_run(GTK_DIALOG(dialog));
  100 + gtk_widget_destroy(dialog);
  101 +
  102 + return -1;
  103 + }
  104 +
  105 + pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);
  106 +
  107 + return 0;
  108 + }
  109 +
  110 + LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window)
  111 + {
  112 +
  113 + return 0;
  114 + }
src/plugins/dbus3270/misc.c 0 → 100644
@@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
  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 misc.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include "globals.h"
  37 +
  38 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  39 +
  40 +gpointer pw3270_dbus_register_object(DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path)
  41 +{
  42 + GObject *object = g_object_new (object_type, NULL);
  43 + dbus_g_object_type_install_info (object_type, info);
  44 + dbus_g_connection_register_g_object (connection, path, object);
  45 + return object;
  46 +}
  47 +
src/plugins/dbus3270/pw3270dbus.cbp 0 → 100644
@@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  2 +<CodeBlocks_project_file>
  3 + <FileVersion major="1" minor="6" />
  4 + <Project>
  5 + <Option title="pw3270dbus" />
  6 + <Option makefile_is_custom="1" />
  7 + <Option pch_mode="2" />
  8 + <Option compiler="gcc" />
  9 + <Build>
  10 + <Target title="Debug">
  11 + <Option output=".bin/Debug/pw3270dbus" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="0" extension_auto="1" />
  12 + <Option object_output=".obj/Debug/" />
  13 + <Option type="3" />
  14 + <Option compiler="gcc" />
  15 + <Compiler>
  16 + <Add option="-g" />
  17 + </Compiler>
  18 + </Target>
  19 + <Target title="Release">
  20 + <Option output=".bin/Release/pw3270dbus" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="0" extension_auto="1" />
  21 + <Option object_output=".obj/Release/" />
  22 + <Option type="3" />
  23 + <Option compiler="gcc" />
  24 + <Compiler>
  25 + <Add option="-O2" />
  26 + </Compiler>
  27 + <Linker>
  28 + <Add option="-s" />
  29 + </Linker>
  30 + </Target>
  31 + <Target title="debug-service">
  32 + <Option output=".bin/Debug/pw3270d" prefix_auto="1" extension_auto="1" />
  33 + <Option object_output=".obj/Debug/" />
  34 + <Option type="1" />
  35 + <Option compiler="gcc" />
  36 + <Compiler>
  37 + <Add option="-g" />
  38 + </Compiler>
  39 + </Target>
  40 + </Build>
  41 + <Compiler>
  42 + <Add option="-Wall" />
  43 + </Compiler>
  44 + <Unit filename="Makefile.in" />
  45 + <Unit filename="daemon.c">
  46 + <Option compilerVar="CC" />
  47 + </Unit>
  48 + <Unit filename="daemon.h" />
  49 + <Unit filename="dbus-glue.h" />
  50 + <Unit filename="globals.h" />
  51 + <Unit filename="gobject.c">
  52 + <Option compilerVar="CC" />
  53 + </Unit>
  54 + <Unit filename="iocallback.c">
  55 + <Option compilerVar="CC" />
  56 + </Unit>
  57 + <Unit filename="main.c">
  58 + <Option compilerVar="CC" />
  59 + </Unit>
  60 + <Unit filename="misc.c">
  61 + <Option compilerVar="CC" />
  62 + </Unit>
  63 + <Unit filename="pw3270dbus.xml" />
  64 + <Unit filename="service.h" />
  65 + <Unit filename="test.sh" />
  66 + <Extensions>
  67 + <code_completion />
  68 + <debugger />
  69 + </Extensions>
  70 + </Project>
  71 +</CodeBlocks_project_file>
src/plugins/dbus3270/pw3270dbus.xml 0 → 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<node name="/br/com/bb/pw3270">
  3 + <interface name="br.com.bb.pw3270">
  4 + <method name="getRevision">
  5 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  6 + <arg type="s" name="revision" direction="out" />
  7 + </method>
  8 + <method name="quit">
  9 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  10 + <arg type="i" name="result" direction="out" />
  11 + </method>
  12 + <method name="connect">
  13 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  14 + <arg type="s" name="uri" direction="in" />
  15 + <arg type="i" name="result" direction="out" />
  16 + </method>
  17 + <method name="disconnect">
  18 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  19 + <arg type="i" name="result" direction="out" />
  20 + </method>
  21 + <method name="getMessageID">
  22 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  23 + <arg type="i" name="status" direction="out" />
  24 + </method>
  25 + <method name="getScreenContents">
  26 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  27 + <arg type="s" name="contents" direction="out" />
  28 + </method>
  29 + <method name="enter">
  30 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  31 + <arg type="i" name="result" direction="out" />
  32 + </method>
  33 + </interface>
  34 +</node>
src/plugins/dbus3270/service.h 0 → 100644
@@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
  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 service.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 Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#ifndef _PW3270_DBUS_SERVICE_H
  33 +
  34 + #define _PW3270_DBUS_SERVICE_H 1
  35 +
  36 + #define ENABLE_NLS
  37 + #define GETTEXT_PACKAGE PACKAGE_NAME
  38 +
  39 + #include "globals.h"
  40 +
  41 + #define PW3270_DBUS_SERVICE_PATH "/br/com/bb/pw3270"
  42 + #define PW3270_DBUS_SERVICE "br.com.bb.pw3270"
  43 +
  44 + #define PW3270_TYPE_DBUS (pw3270_dbus_get_type ())
  45 + #define PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PW3270_TYPE_DBUS, PW3270Dbus))
  46 + #define PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_DBUS, PW3270DbusClass))
  47 + #define IS_PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PW3270_TYPE_DBUS))
  48 + #define IS_PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_DBUS))
  49 + #define PW3270_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_DBUS, PW3270DbusClass))
  50 +
  51 + G_BEGIN_DECLS
  52 +
  53 + typedef struct _PW3270Dbus PW3270Dbus;
  54 + typedef struct _PW3270DbusClass PW3270DbusClass;
  55 +
  56 + struct _PW3270Dbus
  57 + {
  58 + GObject parent;
  59 + };
  60 +
  61 + struct _PW3270DbusClass
  62 + {
  63 + GObjectClass parent;
  64 + };
  65 +
  66 + PW3270Dbus * pw3270_dbus_new (void);
  67 + GType pw3270_dbus_get_type (void);
  68 +
  69 + void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context);
  70 + void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context);
  71 + void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);
  72 + void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context);
  73 + void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context);
  74 + void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context);
  75 + H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object);
  76 + GError * pw3270_dbus_get_error_from_errno(int code);
  77 +
  78 + // Actions
  79 + void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context);
  80 +
  81 +
  82 + G_END_DECLS
  83 +
  84 +#endif // _PW3270_DBUS_SERVICE_H
src/plugins/dbus3270/test.sh 0 → 100755
@@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
  1 +#!/bin/bash
  2 +
  3 +case $1 in
  4 +
  5 + revision)
  6 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getRevision
  7 + ;;
  8 +
  9 + message)
  10 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getMessageID
  11 + ;;
  12 +
  13 + connect)
  14 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.connect string:$2
  15 + ;;
  16 +
  17 + disconnect)
  18 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.disconnect
  19 + ;;
  20 +
  21 + quit)
  22 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.quit
  23 + ;;
  24 +
  25 + get)
  26 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.getScreenContents
  27 + ;;
  28 +
  29 + enter)
  30 + dbus-send --session --print-reply --dest=br.com.bb.pw3270 /br/com/bb/pw3270 br.com.bb.pw3270.enter
  31 + ;;
  32 +
  33 + *)
  34 + echo "Comando $1 desconhecido"
  35 + ;;
  36 +
  37 +esac
  38 +