Commit 816f7f49b7b7a03522099b6885de7a49be3b0fca

Authored by Perry Werneck
1 parent 6d6dd3a3

Language bindings library is now part of the IPC plugin package.

@@ -87,12 +87,6 @@ $(BINDBG)/lib@LIB3270_NAME@@DLLEXT@: \ @@ -87,12 +87,6 @@ $(BINDBG)/lib@LIB3270_NAME@@DLLEXT@: \
87 87
88 @$(MAKE) -C src/lib3270 $@ 88 @$(MAKE) -C src/lib3270 $@
89 89
90 -$(BINDBG)/lib@LIB3270_NAME@++@DLLEXT@: \  
91 - src/lib3270++/* \  
92 - $(DEPENDS)  
93 -  
94 - @$(MAKE) -C src/lib3270++ $@  
95 -  
96 #---[ Release Rules ]-------------------------------------------------------------------- 90 #---[ Release Rules ]--------------------------------------------------------------------
97 91
98 $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ 92 $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \
@@ -101,13 +95,6 @@ $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ @@ -101,13 +95,6 @@ $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \
101 95
102 @$(MAKE) -C src/lib3270 $@ 96 @$(MAKE) -C src/lib3270 $@
103 97
104 -$(BINRLS)/lib@LIB3270_NAME@++@DLLEXT@: \  
105 - src/lib3270/* \  
106 - $(DEPENDS)  
107 -  
108 - @$(MAKE) -C src/lib3270++ $@  
109 -  
110 -  
111 #---[ Misc Rules ]----------------------------------------------------------------------- 98 #---[ Misc Rules ]-----------------------------------------------------------------------
112 99
113 $(POTDIR)/lib3270.pot: \ 100 $(POTDIR)/lib3270.pot: \
@@ -119,24 +106,13 @@ $(POTDIR)/lib3270.pot: \ @@ -119,24 +106,13 @@ $(POTDIR)/lib3270.pot: \
119 106
120 @$(MAKE) -C src/lib3270 $@ 107 @$(MAKE) -C src/lib3270 $@
121 108
122 -$(POTDIR)/lib3270++.pot: \  
123 - src/lib3270++/* \  
124 - src/lib3270++/local/* \  
125 - src/lib3270++/@OSNAME@/* \  
126 - src/lib3270++/ipc/* \  
127 - $(DEPENDS)  
128 -  
129 - @$(MAKE) -C src/lib3270++ $@  
130 -  
131 #---[ Release Targets ]------------------------------------------------------------------ 109 #---[ Release Targets ]------------------------------------------------------------------
132 110
133 all: 111 all:
134 @$(MAKE) -C src/lib3270 $@ 112 @$(MAKE) -C src/lib3270 $@
135 - @$(MAKE) -C src/lib3270++ $@  
136 113
137 Release: \ 114 Release: \
138 - $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@ \  
139 - $(BINRLS)/lib@LIB3270_NAME@++@DLLEXT@ 115 + $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@
140 116
141 #---[ Misc Targets ]--------------------------------------------------------------------- 117 #---[ Misc Targets ]---------------------------------------------------------------------
142 118
@@ -161,17 +137,14 @@ install: \ @@ -161,17 +137,14 @@ install: \
161 137
162 install-shared: 138 install-shared:
163 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ 139 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@
164 - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@  
165 140
166 install-static: 141 install-static:
167 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ 142 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@
168 - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@  
169 143
170 install-dev: \ 144 install-dev: \
171 lib@LIB3270_NAME@.pot 145 lib@LIB3270_NAME@.pot
172 146
173 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ 147 @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@
174 - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@  
175 148
176 @$(MKDIR) $(DESTDIR)$(datarootdir)/pw3270/pot 149 @$(MKDIR) $(DESTDIR)$(datarootdir)/pw3270/pot
177 @$(INSTALL_DATA) lib@LIB3270_NAME@.pot $(DESTDIR)$(datarootdir)/pw3270/pot/lib3270.pot 150 @$(INSTALL_DATA) lib@LIB3270_NAME@.pot $(DESTDIR)$(datarootdir)/pw3270/pot/lib3270.pot
@@ -196,13 +169,11 @@ cleanDebug: @@ -196,13 +169,11 @@ cleanDebug:
196 169
197 @rm -fr $(BINDBG) 170 @rm -fr $(BINDBG)
198 @$(MAKE) -C src/lib3270 $@ 171 @$(MAKE) -C src/lib3270 $@
199 - @$(MAKE) -C src/lib3270++ $@  
200 172
201 cleanRelease: 173 cleanRelease:
202 174
203 @rm -fr $(BINRLS) 175 @rm -fr $(BINRLS)
204 @$(MAKE) -C src/lib3270 $@ 176 @$(MAKE) -C src/lib3270 $@
205 - @$(MAKE) -C src/lib3270++ $@  
206 177
207 clean: \ 178 clean: \
208 cleanDebug \ 179 cleanDebug \
@@ -88,7 +88,6 @@ case "$host" in @@ -88,7 +88,6 @@ case "$host" in
88 AC_SUBST(WIN32_VERSION,$app_win32_revision) 88 AC_SUBST(WIN32_VERSION,$app_win32_revision)
89 89
90 AC_CONFIG_FILES(src/lib3270/windows/resources.rc) 90 AC_CONFIG_FILES(src/lib3270/windows/resources.rc)
91 - AC_CONFIG_FILES(src/lib3270++/windows/resources.rc)  
92 91
93 app_cv_static='yes' 92 app_cv_static='yes'
94 93
@@ -589,11 +588,6 @@ AC_CONFIG_FILES(src/lib3270/version.c) @@ -589,11 +588,6 @@ AC_CONFIG_FILES(src/lib3270/version.c)
589 AC_CONFIG_FILES(src/lib3270/lib3270.pc) 588 AC_CONFIG_FILES(src/lib3270/lib3270.pc)
590 AC_CONFIG_FILES(src/lib3270/lib3270-static.pc) 589 AC_CONFIG_FILES(src/lib3270/lib3270-static.pc)
591 590
592 -AC_CONFIG_FILES(src/lib3270++/lib3270++.pc)  
593 -AC_CONFIG_FILES(src/lib3270++/lib3270++static.pc)  
594 -  
595 -AC_CONFIG_FILES(src/lib3270++/Makefile)  
596 -  
597 dnl --------------------------------------------------------------------------- 591 dnl ---------------------------------------------------------------------------
598 dnl Output the generated config.status script. 592 dnl Output the generated config.status script.
599 dnl --------------------------------------------------------------------------- 593 dnl ---------------------------------------------------------------------------
src/lib3270++/Makefile.in
@@ -1,391 +0,0 @@ @@ -1,391 +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 -#  
26 -  
27 -#---[ Library configuration ]------------------------------------------------------------  
28 -  
29 -LIBNAME=lib@LIB3270_NAME@++  
30 -  
31 -SOURCES= \  
32 - $(wildcard *.cc) \  
33 - $(wildcard local/*.cc) \  
34 - $(wildcard ipc/*.cc) \  
35 - $(wildcard @OSNAME@/*.cc) \  
36 - $(wildcard @OSNAME@/*.rc)  
37 -  
38 -TEST_SOURCES= \  
39 - $(wildcard testprogram/*.cc)  
40 -  
41 -#---[ Tools ]----------------------------------------------------------------------------  
42 -  
43 -CXX=@CXX@  
44 -HOST_CC=@HOST_CC@  
45 -LD=@CXX@  
46 -LN_S=@LN_S@  
47 -MKDIR=@MKDIR_P@  
48 -INSTALL=@INSTALL@  
49 -INSTALL_DATA=@INSTALL_DATA@  
50 -INSTALL_PROGRAM=@INSTALL_PROGRAM@  
51 -XGETTEXT=@XGETTEXT@  
52 -MSGCAT=@MSGCAT@  
53 -WINDRES=@WINDRES@  
54 -AR=@AR@  
55 -VALGRIND=@VALGRIND@  
56 -  
57 -#---[ Paths ]----------------------------------------------------------------------------  
58 -  
59 -prefix=@prefix@  
60 -exec_prefix=@exec_prefix@  
61 -bindir=@bindir@  
62 -sbindir=@sbindir@  
63 -libdir=@libdir@  
64 -includedir=@includedir@  
65 -datarootdir=@datarootdir@  
66 -localedir=@localedir@  
67 -docdir=@docdir@  
68 -sysconfdir=@sysconfdir@  
69 -  
70 -BASEDIR=@BASEDIR@  
71 -  
72 -POTDIR=$(BASEDIR)/.pot  
73 -  
74 -OBJDIR=$(BASEDIR)/.obj/$(LIBNAME)  
75 -OBJDBG=$(OBJDIR)/Debug  
76 -OBJRLS=$(OBJDIR)/Release  
77 -  
78 -BINDIR=$(BASEDIR)/.bin  
79 -BINDBG=$(BINDIR)/Debug  
80 -BINRLS=$(BINDIR)/Release  
81 -  
82 -#---[ Rules ]----------------------------------------------------------------------------  
83 -  
84 -DEPENDS= \  
85 - Makefile \  
86 - ../include/*.h \  
87 - ../include/lib3270/*.h \  
88 - ../lib3270/*.h  
89 -  
90 -  
91 -CFLAGS= \  
92 - @CFLAGS@ \  
93 - @CPPFLAGS@ \  
94 - -g \  
95 - -I../include \  
96 - -DBUILD_DATE=`date +%Y%m%d` \  
97 - @DBUS_CFLAGS@  
98 -  
99 -LIBS= \  
100 - @LIBS@ \  
101 - @LIBSSL_LIBS@ \  
102 - @LIBICONV@ \  
103 - @INTL_LIBS@ \  
104 - @DBUS_LIBS@  
105 -  
106 -  
107 -#---[ Debug Rules ]----------------------------------------------------------------------  
108 -  
109 -$(OBJDBG)/%.o: \  
110 - %.cc \  
111 - $(DEPENDS)  
112 -  
113 - @echo $< ...  
114 - @$(MKDIR) `dirname $@`  
115 - @$(CXX) \  
116 - $(CFLAGS) \  
117 - -Wall -Wextra -fstack-check \  
118 - -DDEBUG=1 \  
119 - -o $@ -c $<  
120 -  
121 -$(OBJDBG)/%.o: \  
122 - %.rc  
123 -  
124 - @echo $< ...  
125 - @$(MKDIR) `dirname $@`  
126 - @$(WINDRES) $< -O coff -o $@  
127 -  
128 -#---[ Release Rules ]--------------------------------------------------------------------  
129 -  
130 -$(OBJRLS)/%.o: \  
131 - %.cc \  
132 - $(DEPENDS)  
133 -  
134 - @echo $< ...  
135 - @$(MKDIR) `dirname $@`  
136 - @$(CXX) \  
137 - $(CFLAGS) \  
138 - -DNDEBUG=1 \  
139 - -o $@ -c $<  
140 -  
141 -$(OBJRLS)/%.o: \  
142 - %.rc  
143 -  
144 - @echo $< ...  
145 - @$(MKDIR) `dirname $@`  
146 - @$(WINDRES) $< -O coff -o $@  
147 -  
148 -#---[ Misc Rules ]-----------------------------------------------------------------------  
149 -  
150 -$(POTDIR)/$(LIBNAME)/%.pot: \  
151 - %.cc  
152 -  
153 - @echo $(notdir $@) ...  
154 - @$(MKDIR) `dirname $@`  
155 - @$(XGETTEXT) \  
156 - --language=C \  
157 - --keyword=_ \  
158 - --keyword=N_ \  
159 - --keyword=MSG_:2 \  
160 - --output=$@ \  
161 - $<  
162 - @touch $@  
163 -  
164 -$(POTDIR)/$(LIBNAME)/%.pot: \  
165 - %.rc  
166 -  
167 - @echo $< ...  
168 - @$(MKDIR) `dirname $@`  
169 - @touch $@  
170 -  
171 -#---[ Release Targets ]------------------------------------------------------------------  
172 -  
173 -all: \  
174 - $(BINRLS)/$(LIBNAME)@DLLEXT@ \  
175 - $(BINRLS)/static/$(LIBNAME).a \  
176 - $(POTDIR)/$(LIBNAME).pot  
177 -  
178 -  
179 -Release: \  
180 - $(BINRLS)/$(LIBNAME)@DLLEXT@ \  
181 - $(BINRLS)/static/$(LIBNAME).a  
182 -  
183 -  
184 -$(BINRLS)/$(LIBNAME)@DLLEXT@: \  
185 - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@  
186 -  
187 - @echo $< ...  
188 - @rm -f $@  
189 - @$(LN_S) \  
190 - $^ \  
191 - $@  
192 -  
193 -$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \  
194 - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@  
195 -  
196 - @rm -f $@  
197 - @$(LN_S) \  
198 - $^ \  
199 - $@  
200 -  
201 -$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \  
202 - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o)  
203 -  
204 - @$(MKDIR) $(@D)  
205 - @echo $< ...  
206 -  
207 - @$(LD) \  
208 - @DLL_LDFLAGS@ \  
209 - -o $@ \  
210 - $(LDFLAGS) \  
211 - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) \  
212 - -L$(BINRLS) \  
213 - $(LIBS) \  
214 - -l@LIB3270_NAME@  
215 -  
216 -$(BINRLS)/static/$(LIBNAME).a: \  
217 - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o)  
218 -  
219 - @echo $@ ...  
220 - @$(MKDIR) `dirname $@`  
221 - @$(AR) rcs $@ $^  
222 -  
223 -  
224 -#---[ Install Targets ]------------------------------------------------------------------  
225 -  
226 -install: \  
227 - install-shared \  
228 - install-static \  
229 - install-dev  
230 -  
231 -install-shared: \  
232 - $(BINRLS)/$(LIBNAME)@DLLEXT@  
233 -  
234 - # Install library  
235 - @mkdir -p $(DESTDIR)$(libdir)  
236 -  
237 - @$(INSTALL_PROGRAM) \  
238 - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \  
239 - $(DESTDIR)$(libdir)  
240 -  
241 -  
242 - @$(LN_S) \  
243 - $(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \  
244 - $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@  
245 -  
246 - @$(LN_S) \  
247 - $(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ \  
248 - $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@  
249 -  
250 -install-static: \  
251 - $(BINRLS)/static/$(LIBNAME).a  
252 -  
253 - # Install static library  
254 - @mkdir -p $(DESTDIR)$(libdir)  
255 - @$(INSTALL_DATA) \  
256 - $(BINRLS)/static/$(LIBNAME).a \  
257 - $(DESTDIR)$(libdir)/$(LIBNAME)static.a  
258 -  
259 - # Install static PKG-CONFIG files  
260 - @mkdir -p $(DESTDIR)$(libdir)/pkgconfig  
261 - @$(INSTALL_DATA) \  
262 - lib3270++static.pc \  
263 - $(DESTDIR)$(libdir)/pkgconfig/lib3270++static.pc  
264 -  
265 -install-dev:  
266 -  
267 - # Install SDK  
268 - @$(INSTALL_DATA) \  
269 - ../include/lib3270++.h \  
270 - $(DESTDIR)$(includedir)/lib3270++.h  
271 -  
272 - # Install PKG-CONFIG files  
273 - @mkdir -p $(DESTDIR)$(libdir)/pkgconfig  
274 - @$(INSTALL_DATA) \  
275 - lib3270++.pc \  
276 - $(DESTDIR)$(libdir)/pkgconfig/lib3270++.pc  
277 -  
278 -  
279 -#---[ Misc Targets ]---------------------------------------------------------------------  
280 -  
281 -$(POTDIR)/$(LIBNAME).pot: \  
282 - $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot)  
283 -  
284 - @rm -f $@  
285 - @mkdir -p `dirname $@`  
286 - @$(MSGCAT) --sort-output $^ > $@  
287 -  
288 -locale: \  
289 - $(POTDIR)/$(LIBNAME).pot  
290 -  
291 -  
292 -#---[ Debug Targets ]--------------------------------------------------------------------  
293 -  
294 -Debug: \  
295 - $(BINDBG)/$(LIBNAME)@EXEEXT@  
296 -  
297 -$(BINDBG)/$(LIBNAME)@EXEEXT@: \  
298 - $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \  
299 - $(BINDBG)/$(LIBNAME)@DLLEXT@  
300 -  
301 - @$(MKDIR) `dirname $@`  
302 - @echo $< ...  
303 - @$(LD) \  
304 - -Wl,--rpath,$(BINDBG) \  
305 - -o $@ \  
306 - $^ \  
307 - $(LDFLAGS) \  
308 - $(LIBS)  
309 -  
310 -run: \  
311 - $(BINDBG)/$(LIBNAME)@EXEEXT@  
312 -  
313 -ifeq ($(VALGRIND),no)  
314 -  
315 - @LD_LIBRARY_PATH=$(BINDBG) \  
316 - $(BINDBG)/$(LIBNAME)@EXEEXT@  
317 -  
318 -else  
319 - @touch valgrind.suppression  
320 -  
321 - @LD_LIBRARY_PATH=$(BINDBG) \  
322 - $(VALGRIND) --leak-check=full --track-origins=yes --gen-suppressions=all --suppressions=valgrind.suppression \  
323 - $(BINDBG)/$(LIBNAME)@EXEEXT@  
324 -endif  
325 -  
326 -  
327 -$(BINDBG)/$(LIBNAME)@DLLEXT@: \  
328 - $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@  
329 -  
330 - @echo $< ...  
331 - @rm -f $@  
332 - @$(LN_S) \  
333 - $^ \  
334 - $@  
335 -  
336 -$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \  
337 - $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@  
338 -  
339 - @rm -f $@  
340 - @$(LN_S) \  
341 - $^ \  
342 - $@  
343 -  
344 -$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \  
345 - $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o)  
346 -  
347 - @$(MKDIR) `dirname $@`  
348 - @echo $< ...  
349 - @$(LD) \  
350 - -shared \  
351 - -Wl,-soname,$(@F) \  
352 - -Wl,--rpath,$(BINDBG) \  
353 - -o $@ \  
354 - $(LDFLAGS) \  
355 - $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) \  
356 - -L$(BINDBG) \  
357 - $(LIBS) \  
358 - -l@LIB3270_NAME@  
359 -  
360 -#---[ Clean Targets ]--------------------------------------------------------------------  
361 -  
362 -clean: \  
363 - cleanDebug \  
364 - cleanRelease  
365 -  
366 - @rm -fr $(BASEDIR)/.tmp/$(LIBNAME)  
367 - @rm -fr $(POTDIR)/$(LIBNAME)  
368 -  
369 -cleanDebug:  
370 -  
371 - @rm -fr $(OBJDBG)  
372 - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@  
373 - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@  
374 - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@  
375 -  
376 -cleanRelease:  
377 -  
378 - @rm -fr $(OBJRLS)  
379 -  
380 - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@  
381 - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@  
382 - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@  
383 -  
384 - @rm -fr $(POTDIR)  
385 - @rm -f lib$(LIBNAME).pot  
386 -  
387 -clean: \  
388 - cleanDebug \  
389 - cleanRelease  
390 -  
391 -  
src/lib3270++/abstract.cc
@@ -1,153 +0,0 @@ @@ -1,153 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/abstract.cc  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "private.h"  
40 - #include <cstring>  
41 -  
42 -  
43 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
44 -  
45 - namespace TN3270 {  
46 -  
47 - Abstract::Session::Session() {  
48 -  
49 -#ifdef HAVE_ICONV  
50 - this->converter.local = (iconv_t) (-1);  
51 - this->converter.host = (iconv_t) (-1);  
52 -#endif  
53 -  
54 - this->baddr = 0;  
55 -  
56 - }  
57 -  
58 - Abstract::Session::~Session() {  
59 -  
60 -#ifdef HAVE_ICONV  
61 -  
62 - if(this->converter.local != (iconv_t) (-1))  
63 - iconv_close(this->converter.local);  
64 -  
65 - if(this->converter.host != (iconv_t) (-1))  
66 - iconv_close(this->converter.host);  
67 -  
68 -#endif  
69 -  
70 - }  
71 -  
72 - /// @brief Setup charsets  
73 - void Abstract::Session::setCharSet(const char *remote, const char *local) {  
74 -  
75 -#ifdef HAVE_ICONV  
76 -  
77 - if(this->converter.local != (iconv_t) (-1))  
78 - iconv_close(converter.local);  
79 -  
80 - if(this->converter.host != (iconv_t) (-1))  
81 - iconv_close(converter.host);  
82 -  
83 - if(strcmp(local,remote)) {  
84 -  
85 - // Local and remote charsets aren't the same, setup conversion  
86 - converter.local = iconv_open(local, remote);  
87 - converter.host = iconv_open(remote,local);  
88 -  
89 - } else {  
90 - // Same charset, doesn't convert  
91 - converter.local = converter.host = (iconv_t)(-1);  
92 - }  
93 -  
94 -#else  
95 -  
96 - #error No ICONV Support  
97 -  
98 -#endif  
99 -  
100 -  
101 - }  
102 -  
103 - /// @brief Converte charset.  
104 - std::string Abstract::Session::convertCharset(iconv_t &converter, const char *str) {  
105 -  
106 - std::string rc;  
107 -  
108 -#ifdef HAVE_ICONV  
109 - size_t in = strlen(str);  
110 -  
111 - if(in && converter != (iconv_t)(-1)) {  
112 -  
113 - size_t out = (in << 1);  
114 - char * ptr;  
115 - char * outBuffer = (char *) malloc(out);  
116 - ICONV_CONST char * inBuffer = (ICONV_CONST char *) str;  
117 -  
118 - memset(ptr=outBuffer,0,out);  
119 -  
120 - iconv(converter,NULL,NULL,NULL,NULL); // Reset state  
121 -  
122 - if(iconv(converter,&inBuffer,&in,&ptr,&out) != ((size_t) -1))  
123 - rc.assign(outBuffer);  
124 -  
125 - free(outBuffer);  
126 -  
127 - }  
128 -  
129 -#else  
130 -  
131 - rc = str;  
132 -  
133 -#endif // HAVE_ICONV  
134 -  
135 - return rc;  
136 - }  
137 -  
138 - /// @brief Converte string recebida do host para o charset atual.  
139 - std::string Abstract::Session::convertFromHost(const char *str) const {  
140 - return convertCharset(const_cast<Abstract::Session *>(this)->converter.local,str);  
141 - }  
142 -  
143 - /// @brief Converte string do charset atual para o charset do host.  
144 - std::string Abstract::Session::convertToHost(const char *str) const {  
145 - return convertCharset(const_cast<Abstract::Session *>(this)->converter.host,str);  
146 - }  
147 -  
148 -  
149 - }  
150 -  
151 -  
152 -  
153 -  
src/lib3270++/events.cc
@@ -1,56 +0,0 @@ @@ -1,56 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/events.cc  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "private.h"  
40 -  
41 -  
42 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
43 -  
44 - namespace TN3270 {  
45 -  
46 - Event::Event(enum Event::Type type) {  
47 - this->type = type;  
48 - }  
49 -  
50 - Event::~Event() {  
51 - }  
52 -  
53 - }  
54 -  
55 -  
56 -  
src/lib3270++/host.cc
@@ -1,180 +0,0 @@ @@ -1,180 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/host.cc  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "private.h"  
40 -  
41 -  
42 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
43 -  
44 - namespace TN3270 {  
45 -  
46 - Host::Host(const char *id, const char *url, time_t timeout) {  
47 - this->timeout = timeout;  
48 - this->session = Session::create(id);  
49 - if(url) {  
50 - this->connect(url);  
51 - }  
52 - }  
53 -  
54 - Host::~Host() {  
55 - delete this->session;  
56 - this->session = nullptr;  
57 - }  
58 -  
59 - void Host::connect(const char *url, bool sync) {  
60 - this->session->connect(url);  
61 - if(sync) {  
62 - this->sync();  
63 - }  
64 - }  
65 -  
66 -  
67 - /// @brief Writes characters to the associated file from the put area  
68 - int Host::sync() {  
69 - this->session->waitForReady(this->timeout);  
70 - return 0;  
71 - }  
72 -  
73 - /// @brief Writes characters to the associated output sequence from the put area.  
74 - int Host::overflow(int c) {  
75 -  
76 - if (c != EOF) {  
77 - char str[] = { static_cast<char>(c), 0 };  
78 - this->session->push((const char *) str);  
79 - } else {  
80 - sync();  
81 - }  
82 -  
83 - return c;  
84 -  
85 - }  
86 -  
87 - Host & Host::push(const Action action) {  
88 - session->push(action);  
89 - sync();  
90 - return *this;  
91 - }  
92 -  
93 - bool Host::isReady() const {  
94 - this->session->waitForReady(this->timeout);  
95 - return getProgramMessage() == MESSAGE_NONE;  
96 - }  
97 -  
98 - bool Host::isConnected() const {  
99 - this->session->waitForReady(this->timeout);  
100 - return getConnectionState() == CONNECTED_TN3270E;  
101 - }  
102 -  
103 - std::string Host::toString() const {  
104 -  
105 - this->session->waitForReady(this->timeout);  
106 -  
107 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
108 - throw std::system_error(ENOTCONN, std::system_category());  
109 - }  
110 -  
111 - return this->session->toString();  
112 - }  
113 -  
114 - std::string Host::toString(int baddr, size_t len, char lf) const {  
115 -  
116 - this->session->waitForReady(this->timeout);  
117 -  
118 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
119 - throw std::system_error(ENOTCONN, std::system_category());  
120 - }  
121 -  
122 - return this->session->toString(baddr,len,lf);  
123 -  
124 - }  
125 -  
126 - std::string Host::toString(int row, int col, size_t sz, char lf) const {  
127 -  
128 - this->session->waitForReady(this->timeout);  
129 -  
130 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
131 - throw std::system_error(ENOTCONN, std::system_category());  
132 - }  
133 -  
134 - return this->session->toString(row,col,sz,lf);  
135 -  
136 -  
137 - }  
138 -  
139 - Host & Host::pop(int baddr, std::string &text) {  
140 -  
141 - this->session->waitForReady(this->timeout);  
142 -  
143 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
144 - throw std::system_error(ENOTCONN, std::system_category());  
145 - }  
146 -  
147 - session->pop(baddr, text);  
148 -  
149 - return *this;  
150 - }  
151 -  
152 - Host & Host::pop(int row, int col, std::string &text) {  
153 -  
154 - this->session->waitForReady(this->timeout);  
155 -  
156 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
157 - throw std::system_error(ENOTCONN, std::system_category());  
158 - }  
159 -  
160 - session->pop(row,col,text);  
161 -  
162 - return *this;  
163 - }  
164 -  
165 - Host & Host::pop(std::string &text) {  
166 -  
167 - this->session->waitForReady(this->timeout);  
168 -  
169 - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {  
170 - throw std::system_error(ENOTCONN, std::system_category());  
171 - }  
172 -  
173 - session->pop(text);  
174 -  
175 - return *this;  
176 - }  
177 -  
178 -  
179 - }  
180 -  
src/lib3270++/ipc/session.cc
@@ -1,365 +0,0 @@ @@ -1,365 +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 - 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 -/**  
31 - * @file src/lib3270++/ipc/session.cc  
32 - *  
33 - * @brief Implements lib3270 access using IPC calls.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 - #include <cstring>  
41 -  
42 - using std::string;  
43 -  
44 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
45 -  
46 - namespace TN3270 {  
47 -  
48 - void IPC::Session::connect(const char *url) {  
49 - Request request(*this,"connect");  
50 - request.push(url).call();  
51 - }  
52 -  
53 - void IPC::Session::disconnect() {  
54 - Request(*this,"disconnect").call();  
55 - }  
56 -  
57 - // Wait for session state.  
58 - void IPC::Session::waitForReady(time_t timeout) {  
59 -  
60 - int rc;  
61 -  
62 - time_t end = time(nullptr) + timeout;  
63 -  
64 - while(time(nullptr) < end) {  
65 -  
66 - debug("Running waitForReady request...");  
67 -  
68 - Request(*this,"waitForReady")  
69 - .push((uint32_t) 1)  
70 - .call()  
71 - .pop(rc);  
72 -  
73 - debug("Wait for ready returned ",rc);  
74 -  
75 - if(rc == 0)  
76 - return;  
77 -  
78 - }  
79 -  
80 - throw std::system_error(ETIMEDOUT, std::system_category());  
81 - }  
82 -  
83 - std::string IPC::Session::toString(int baddr, size_t len, char lf) const {  
84 -  
85 - std::string rc;  
86 -  
87 - Request(*this,"getStringAtAddress")  
88 - .push((uint32_t) baddr)  
89 - .push((uint32_t) len)  
90 - .push((uint8_t) lf)  
91 - .call()  
92 - .pop(rc);  
93 -  
94 - return rc;  
95 - }  
96 -  
97 - std::string IPC::Session::toString(int row, int col, size_t sz, char lf) const {  
98 -  
99 - std::string rc;  
100 -  
101 - Request(*this,"getStringAt")  
102 - .push((uint32_t) row)  
103 - .push((uint32_t) col)  
104 - .push((uint32_t) sz)  
105 - .push((uint8_t) lf)  
106 - .call()  
107 - .pop(rc);  
108 -  
109 - return rc;  
110 - }  
111 -  
112 - ProgramMessage IPC::Session::getProgramMessage() const {  
113 -  
114 - int program_message;  
115 - getProperty("program_message",program_message);  
116 - return (ProgramMessage) program_message;  
117 -  
118 - }  
119 -  
120 - ConnectionState IPC::Session::getConnectionState() const {  
121 -  
122 - int cstate;  
123 - getProperty("cstate",cstate);  
124 - return (ConnectionState) cstate;  
125 -  
126 - }  
127 -  
128 - /// @brief Set field at current position, jumps to next writable field.  
129 - TN3270::Session & IPC::Session::push(const char *text) {  
130 -  
131 - int rc;  
132 -  
133 - Request(*this,"setString")  
134 - .push(text)  
135 - .call()  
136 - .pop(rc);  
137 -  
138 - if(rc) {  
139 - throw std::system_error((int) rc, std::system_category());  
140 - }  
141 -  
142 - return *this;  
143 -  
144 - }  
145 -  
146 - TN3270::Session & IPC::Session::push(int baddr, const std::string &text) {  
147 -  
148 - int rc;  
149 -  
150 - Request(*this,"setStringAtAddress")  
151 - .push((uint32_t) baddr)  
152 - .push(text.c_str())  
153 - .call()  
154 - .pop(rc);  
155 -  
156 - if(rc) {  
157 - throw std::system_error((int) rc, std::system_category());  
158 - }  
159 -  
160 - return *this;  
161 -  
162 - }  
163 -  
164 - TN3270::Session & IPC::Session::push(int row, int col, const std::string &text) {  
165 -  
166 - int32_t rc;  
167 -  
168 - Request(*this,"setStringAt")  
169 - .push((uint32_t) row)  
170 - .push((uint32_t) col)  
171 - .push(text.c_str())  
172 - .call()  
173 - .pop(rc);  
174 -  
175 - if(rc) {  
176 - throw std::system_error((int) rc, std::system_category());  
177 - }  
178 -  
179 - return *this;  
180 -  
181 - }  
182 -  
183 - TN3270::Session & IPC::Session::push(const PFKey key) {  
184 -  
185 - int32_t rc;  
186 -  
187 - Request(*this,"pfkey")  
188 - .push((uint32_t) key)  
189 - .call()  
190 - .pop(rc);  
191 -  
192 - if(rc) {  
193 - throw std::system_error((int) rc, std::system_category());  
194 - }  
195 -  
196 - return *this;  
197 -  
198 - }  
199 -  
200 - TN3270::Session & IPC::Session::push(const PAKey key) {  
201 -  
202 - int32_t rc;  
203 -  
204 - Request(*this,"pakey")  
205 - .push((uint32_t) key)  
206 - .call()  
207 - .pop(rc);  
208 -  
209 - if(rc) {  
210 - throw std::system_error((int) rc, std::system_category());  
211 - }  
212 -  
213 - return *this;  
214 -  
215 - }  
216 -  
217 - TN3270::Session & IPC::Session::push(const Action action) {  
218 -  
219 - const char * actions[] = {  
220 - "enter",  
221 - "erase",  
222 - "eraseeof",  
223 - "eraseeol",  
224 - "eraseinput"  
225 - };  
226 -  
227 - if( ((size_t) action) > (sizeof(actions)/sizeof(actions[0]))) {  
228 - throw std::system_error(EINVAL, std::system_category());  
229 - }  
230 -  
231 - return this->action(actions[action]);  
232 -  
233 - }  
234 -  
235 - TN3270::Session & IPC::Session::pop(int baddr, std::string &text) {  
236 -  
237 - Request(*this,"getFieldAtAddress")  
238 - .push((uint32_t) baddr)  
239 - .call()  
240 - .pop(text);  
241 -  
242 - return *this;  
243 - }  
244 -  
245 - TN3270::Session & IPC::Session::pop(int row, int col, std::string &text) {  
246 -  
247 - Request(*this,"getFieldAt")  
248 - .push((uint32_t) row)  
249 - .push((uint32_t) col)  
250 - .call()  
251 - .pop(text);  
252 -  
253 - return *this;  
254 - }  
255 -  
256 - TN3270::Session & IPC::Session::pop(std::string &text) {  
257 -  
258 - Request(*this,"getFieldAtCursor")  
259 - .call()  
260 - .pop(text);  
261 -  
262 - return *this;  
263 -  
264 - }  
265 -  
266 - /// @brief Set cursor address.  
267 - ///  
268 - /// @param addr Cursor address.  
269 - TN3270::Session & IPC::Session::setCursorPosition(unsigned short addr) {  
270 -  
271 - int32_t rc;  
272 -  
273 - Request(*this,"setCursorAddress")  
274 - .push((uint32_t) addr)  
275 - .call()  
276 - .pop(rc);  
277 -  
278 - if(rc) {  
279 - throw std::system_error((int) rc, std::system_category());  
280 - }  
281 -  
282 - return *this;  
283 -  
284 - }  
285 -  
286 - /// @brief Set cursor position.  
287 - ///  
288 - /// @param row New cursor row.  
289 - /// @param col New cursor column.  
290 - TN3270::Session & IPC::Session::setCursorPosition(unsigned short row, unsigned short col) {  
291 -  
292 - int32_t rc;  
293 -  
294 - Request(*this,"setCursorPosition")  
295 - .push((uint32_t) row)  
296 - .push((uint32_t) col)  
297 - .call()  
298 - .pop(rc);  
299 -  
300 - if(rc) {  
301 - throw std::system_error((int) rc, std::system_category());  
302 - }  
303 -  
304 - return *this;  
305 -  
306 - }  
307 -  
308 - void IPC::Session::getProperty(const char *name, int &value) const {  
309 -  
310 - Request(*this,false,name)  
311 - .call()  
312 - .pop(value);  
313 -  
314 - }  
315 -  
316 - void IPC::Session::getProperty(const char *name, std::string &value) const {  
317 -  
318 - Request(*this,false,name)  
319 - .call()  
320 - .pop(value);  
321 -  
322 - }  
323 -  
324 - void IPC::Session::getProperty(const char *name, bool &value) const {  
325 - throw std::system_error(ENOENT, std::system_category());  
326 - }  
327 -  
328 - /// @brief Get lib3270 version.  
329 - std::string IPC::Session::getVersion() const {  
330 -  
331 - string rc;  
332 - getProperty("version",rc);  
333 - return rc;  
334 -  
335 - }  
336 -  
337 - /// @brief Get lib3270 revision.  
338 - std::string IPC::Session::getRevision() const {  
339 -  
340 - string rc;  
341 - getProperty("revision",rc);  
342 - return rc;  
343 -  
344 - }  
345 -  
346 - /// @brief Execute action by name.  
347 - TN3270::Session & IPC::Session::action(const char *action_name) {  
348 -  
349 - int32_t rc;  
350 -  
351 - Request(*this,"action")  
352 - .push(action_name)  
353 - .call()  
354 - .pop(rc);  
355 -  
356 - if(rc) {  
357 - throw std::system_error((int) rc, std::system_category());  
358 - }  
359 -  
360 - return *this;  
361 - }  
362 -  
363 - }  
364 -  
365 -  
src/lib3270++/lib3270++.cbp
@@ -1,70 +0,0 @@ @@ -1,70 +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="C++ Bindings for lib3270" />  
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/lib3270++" prefix_auto="1" extension_auto="1" />  
12 - <Option object_output=".obj/Debug/" />  
13 - <Option type="1" />  
14 - <Option compiler="gcc" />  
15 - <Compiler>  
16 - <Add option="-g" />  
17 - <Add option="-DDEBUG=1" />  
18 - </Compiler>  
19 - </Target>  
20 - <Target title="Release">  
21 - <Option output=".bin/Release/C++ Bindings for lib3270" prefix_auto="1" extension_auto="1" />  
22 - <Option object_output=".obj/Release/" />  
23 - <Option type="1" />  
24 - <Option compiler="gcc" />  
25 - <Compiler>  
26 - <Add option="-O2" />  
27 - <Add option="-std=c++11" />  
28 - <Add option="-DNDEBUG=1" />  
29 - </Compiler>  
30 - <Linker>  
31 - <Add option="-s" />  
32 - </Linker>  
33 - </Target>  
34 - </Build>  
35 - <Compiler>  
36 - <Add option="-Wall" />  
37 - <Add option="`pkg-config --clags lib3270`" />  
38 - <Add directory="../include" />  
39 - </Compiler>  
40 - <Linker>  
41 - <Add option="`pkg-config --libs lib3270`" />  
42 - </Linker>  
43 - <Unit filename="../include/config.h.in" />  
44 - <Unit filename="../include/lib3270++.h" />  
45 - <Unit filename="../include/lib3270.h" />  
46 - <Unit filename="../include/lib3270/action_table.h" />  
47 - <Unit filename="../include/lib3270/actions.h" />  
48 - <Unit filename="../include/lib3270/popup.h" />  
49 - <Unit filename="../include/lib3270/session.h" />  
50 - <Unit filename="abstract.cc" />  
51 - <Unit filename="events.cc" />  
52 - <Unit filename="host.cc" />  
53 - <Unit filename="ipc/session.cc" />  
54 - <Unit filename="linux/request.cc" />  
55 - <Unit filename="linux/session.cc" />  
56 - <Unit filename="local/events.cc" />  
57 - <Unit filename="local/session.cc" />  
58 - <Unit filename="private.h" />  
59 - <Unit filename="session.cc" />  
60 - <Unit filename="testprogram/testprogram.cc" />  
61 - <Unit filename="windows/request.cc" />  
62 - <Unit filename="windows/session.cc" />  
63 - <Extensions>  
64 - <code_completion />  
65 - <envvars />  
66 - <debugger />  
67 - <lib_finder disable_auto="1" />  
68 - </Extensions>  
69 - </Project>  
70 -</CodeBlocks_project_file>  
src/lib3270++/lib3270++.pc.in
@@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
1 -prefix=@prefix@  
2 -exec_prefix=@exec_prefix@  
3 -libdir=@libdir@  
4 -includedir=@includedir@  
5 -  
6 -version_major=@PACKAGE_MAJOR_VERSION@  
7 -version_minor=@PACKAGE_MINOR_VERSION@  
8 -sdk_version=@LIB3270_SDK_VERSION@  
9 -  
10 -Name: @PACKAGE_NAME@  
11 -Description: @PACKAGE_DESCRIPTION@  
12 -Version: @PACKAGE_VERSION@  
13 -Libs: -L\@libdir@ -l3270++  
14 -Libs.private: @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ -l@LIB3270_NAME@  
15 -Cflags: -I@includedir@  
16 -  
src/lib3270++/lib3270++static.pc.in
@@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
1 -prefix=@prefix@  
2 -exec_prefix=@exec_prefix@  
3 -libdir=@libdir@  
4 -includedir=@includedir@  
5 -  
6 -version_major=@PACKAGE_MAJOR_VERSION@  
7 -version_minor=@PACKAGE_MINOR_VERSION@  
8 -sdk_version=@LIB3270_SDK_VERSION@  
9 -  
10 -Name: @PACKAGE_NAME@  
11 -Description: @PACKAGE_DESCRIPTION@  
12 -Version: @PACKAGE_VERSION@  
13 -Libs: -L\@libdir@ -l@LIB3270_NAME@++static @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@  
14 -Cflags: -I@includedir@  
15 -  
src/lib3270++/linux/request.cc
@@ -1,267 +0,0 @@ @@ -1,267 +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 - 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 -/**  
31 - * @file src/lib3270++/linux/request.cc  
32 - *  
33 - * @brief Implements D-Bus message.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 -  
41 - using std::string;  
42 -  
43 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
44 -  
45 - namespace TN3270 {  
46 -  
47 - IPC::Request::Request(const Session &session) {  
48 - this->conn = session.conn;  
49 - this->msg.in = nullptr;  
50 - this->msg.out = nullptr;  
51 - }  
52 -  
53 - IPC::Request::Request(const Session &session, const char *method) : Request(session) {  
54 -  
55 - this->msg.out = dbus_message_new_method_call(  
56 - session.name.c_str(), // Destination  
57 - session.path.c_str(), // Path  
58 - session.interface.c_str(), // Interface  
59 - method // Method  
60 - );  
61 -  
62 - if(!msg.out) {  
63 - throw std::runtime_error("Can't create D-Bus Method Call");  
64 - }  
65 -  
66 - }  
67 -  
68 - IPC::Request::Request(const Session &session, bool isSet, const char *property) : Request(session) {  
69 -  
70 -/*  
71 - dbus-send \  
72 - --session \  
73 - --dest=br.com.bb.pw3270.a\  
74 - --print-reply \  
75 - "/br/com/bb/tn3270/session" \  
76 - "org.freedesktop.DBus.Properties.Get" \  
77 - string:br.com.bb.tn3270.session \  
78 - string:${1}  
79 -*/  
80 - this->msg.out = dbus_message_new_method_call(  
81 - session.name.c_str(), // Destination  
82 - session.path.c_str(), // Path  
83 - "org.freedesktop.DBus.Properties", // Interface  
84 - (isSet ? "Set" : "Get")  
85 - );  
86 -  
87 - if(!msg.out) {  
88 - throw std::runtime_error("Can't create D-Bus Property Call");  
89 - }  
90 -  
91 - //  
92 - // https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties  
93 - // org.freedesktop.DBus.Properties.Get (in STRING interface_name,  
94 - // in STRING property_name,  
95 - // out VARIANT value);  
96 - // org.freedesktop.DBus.Properties.Set (in STRING interface_name,  
97 - // in STRING property_name,  
98 - //  
99 - const char *interface_name = session.interface.c_str();  
100 -  
101 - dbus_message_append_args(  
102 - this->msg.out,  
103 - DBUS_TYPE_STRING,&interface_name,  
104 - DBUS_TYPE_STRING,&property,  
105 - DBUS_TYPE_INVALID  
106 - );  
107 -  
108 - }  
109 -  
110 - IPC::Request::~Request() {  
111 - if(msg.out) {  
112 - dbus_message_unref(msg.out);  
113 - }  
114 - if(msg.in) {  
115 - dbus_message_unref(msg.in);  
116 - }  
117 - }  
118 -  
119 - IPC::Request & IPC::Request::call() {  
120 -  
121 - if(msg.in) {  
122 - dbus_message_unref(msg.in);  
123 - msg.in = nullptr;  
124 - }  
125 -  
126 - DBusError error;  
127 - dbus_error_init(&error);  
128 - this->msg.in = dbus_connection_send_with_reply_and_block(this->conn,this->msg.out,10000,&error);  
129 -  
130 - if(!this->msg.in) {  
131 - string message = error.message;  
132 - dbus_error_free(&error);  
133 - throw std::runtime_error(message.c_str());  
134 - }  
135 -  
136 - dbus_message_iter_init(msg.in, &msg.iter);  
137 -  
138 - debug(__FUNCTION__," got a valid response");  
139 -  
140 - return *this;  
141 -  
142 - }  
143 -  
144 - IPC::Request & IPC::Request::push(const char *arg) {  
145 - dbus_message_append_args(this->msg.out,DBUS_TYPE_STRING,&arg,DBUS_TYPE_INVALID);  
146 - return *this;  
147 - }  
148 -  
149 - IPC::Request & IPC::Request::push(const bool arg) {  
150 - dbus_message_append_args(this->msg.out,DBUS_TYPE_BOOLEAN,&arg,DBUS_TYPE_INVALID);  
151 - return *this;  
152 - }  
153 -  
154 - IPC::Request & IPC::Request::push(const uint8_t arg) {  
155 - dbus_message_append_args(this->msg.out,DBUS_TYPE_BYTE,&arg,DBUS_TYPE_INVALID);  
156 - return *this;  
157 - }  
158 -  
159 - IPC::Request & IPC::Request::push(const int32_t arg) {  
160 - dbus_message_append_args(this->msg.out,DBUS_TYPE_INT32,&arg,DBUS_TYPE_INVALID);  
161 - return *this;  
162 - }  
163 -  
164 - IPC::Request & IPC::Request::push(const uint32_t arg) {  
165 - dbus_message_append_args(this->msg.out,DBUS_TYPE_UINT32,&arg,DBUS_TYPE_INVALID);  
166 - return *this;  
167 - }  
168 -  
169 -  
170 - IPC::Request & IPC::Request::pop(std::string &value) {  
171 -  
172 - const char * str = "";  
173 -  
174 - if(dbus_message_iter_get_arg_type(&msg.iter) == DBUS_TYPE_STRING) {  
175 -  
176 - dbus_message_iter_get_basic(&msg.iter, &str);  
177 -  
178 - } else if(dbus_message_iter_get_arg_type(&msg.iter) == DBUS_TYPE_VARIANT) {  
179 -  
180 - DBusMessageIter sub;  
181 - int current_type;  
182 -  
183 - dbus_message_iter_recurse(&msg.iter, &sub);  
184 -  
185 - while ((current_type = dbus_message_iter_get_arg_type(&sub)) != DBUS_TYPE_INVALID) {  
186 -  
187 - if (current_type == DBUS_TYPE_STRING) {  
188 - dbus_message_iter_get_basic(&sub, &str);  
189 - break;  
190 - }  
191 - dbus_message_iter_next(&sub);  
192 - }  
193 -  
194 - } else {  
195 -  
196 - debug("Argument type is ", ((char) dbus_message_iter_get_arg_type(&msg.iter)) );  
197 - throw std::runtime_error("Expected an string data type");  
198 -  
199 - }  
200 -  
201 - dbus_message_iter_next(&msg.iter);  
202 -  
203 - value.assign(str);  
204 -  
205 - debug(__FUNCTION__,"= \"",str,"\"");  
206 -  
207 - return *this;  
208 - }  
209 -  
210 - static int getIntValue(DBusMessageIter &iter) {  
211 -  
212 - if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32) {  
213 -  
214 - dbus_int32_t rc = 0;  
215 - dbus_message_iter_get_basic(&iter, &rc);  
216 - return (int) rc;  
217 -  
218 - } else if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT16) {  
219 -  
220 - dbus_int16_t rc = 0;  
221 - dbus_message_iter_get_basic(&iter, &rc);  
222 - return (int) rc;  
223 -  
224 - } else if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT) {  
225 -  
226 - DBusMessageIter sub;  
227 - int current_type;  
228 -  
229 - dbus_message_iter_recurse(&iter, &sub);  
230 -  
231 - while ((current_type = dbus_message_iter_get_arg_type(&sub)) != DBUS_TYPE_INVALID) {  
232 -  
233 - if (current_type == DBUS_TYPE_INT32) {  
234 -  
235 - dbus_int32_t rc = 0;  
236 - dbus_message_iter_get_basic(&sub, &rc);  
237 - return (int) rc;  
238 -  
239 - } else if (current_type == DBUS_TYPE_INT16) {  
240 - dbus_int16_t rc = 0;  
241 - dbus_message_iter_get_basic(&sub, &rc);  
242 - return (int) rc;  
243 -  
244 - }  
245 - dbus_message_iter_next(&sub);  
246 - }  
247 -  
248 - }  
249 -  
250 - debug("Argument type is ", ((char) dbus_message_iter_get_arg_type(&iter)) );  
251 - throw std::runtime_error("Expected an integer data type");  
252 -  
253 - }  
254 -  
255 - IPC::Request & IPC::Request::Request::pop(int &value) {  
256 -  
257 - value = getIntValue(msg.iter);  
258 - dbus_message_iter_next(&msg.iter);  
259 - debug(__FUNCTION__,"= \"",value,"\"");  
260 -  
261 - return *this;  
262 -  
263 - }  
264 -  
265 - }  
266 -  
267 -  
src/lib3270++/linux/session.cc
@@ -1,98 +0,0 @@ @@ -1,98 +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 - 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 -/**  
31 - * @file src/lib3270++/ipc/linux/session.cc  
32 - *  
33 - * @brief Implements Linux session create/destroy session.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 - #include <cstring>  
41 - #include <lib3270/trace.h>  
42 -  
43 - using std::string;  
44 -  
45 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
46 -  
47 - static void throws_if_error(DBusError &err) {  
48 -  
49 - if(dbus_error_is_set(&err)) {  
50 - string message = err.message;  
51 - dbus_error_free(&err);  
52 - throw std::runtime_error(message.c_str());  
53 - }  
54 -  
55 - return;  
56 -  
57 - }  
58 -  
59 - namespace TN3270 {  
60 -  
61 - IPC::Session::Session(const char *id) : Abstract::Session() {  
62 -  
63 - // Create D-Bus session.  
64 - DBusError err;  
65 -  
66 - dbus_error_init(&err);  
67 - this->conn = dbus_bus_get(DBUS_BUS_SESSION, &err);  
68 -  
69 - debug("dbus_bus_get conn=",conn);  
70 -  
71 - throws_if_error(err);  
72 -  
73 - if(!conn)  
74 - throw std::runtime_error("DBUS Connection failed");  
75 -  
76 - auto sep = strchr(id,':');  
77 - if(!sep) {  
78 - throw std::system_error(EINVAL, std::system_category());  
79 - }  
80 -  
81 - this->name = "br.com.bb.";  
82 - this->name += string(id,(sep - id));  
83 - this->name += ".";  
84 - this->name += (sep+1);  
85 - this->path = "/br/com/bb/tn3270/session";  
86 - this->interface = "br.com.bb.tn3270.session";  
87 -  
88 - debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\"");  
89 -  
90 - }  
91 -  
92 - IPC::Session::~Session() {  
93 -  
94 - }  
95 -  
96 - }  
97 -  
98 -  
src/lib3270++/local/events.cc
@@ -1,175 +0,0 @@ @@ -1,175 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/local/events.cc  
32 - *  
33 - * @brief Implement lib3270 direct access events.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 - #include <stdio.h>  
41 -  
42 - extern "C" {  
43 - #include <lib3270/actions.h>  
44 - #include <lib3270/session.h>  
45 - }  
46 -  
47 - using std::string;  
48 -  
49 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
50 -  
51 -#ifndef HAVE_VASPRINTF  
52 - int vasprintf(char **strp, const char *fmt, va_list ap) {  
53 - char buf[1024];  
54 -  
55 - int nc = vsnprintf(buf, sizeof(buf), fmt, args);  
56 -  
57 - if(nc < 0) {  
58 -  
59 - *strp = strdup(_("Error in vasprintf"));  
60 -  
61 - } else if (nc < sizeof(buf)) {  
62 -  
63 - *strp = malloc(nc+1);  
64 - strcpy(*strp, buf);  
65 -  
66 - } else {  
67 -  
68 - *strp = malloc(nc + 1);  
69 - if(vsnprintf(*strp, nc, fmt, args) < 0) {  
70 - free(*strp);  
71 - *strp = strdup(NULL,_( "Out of memory in vasprintf" ) );  
72 - }  
73 -  
74 - }  
75 -  
76 - return nc;  
77 - }  
78 -#endif // !HAVE_VASPRINTF  
79 -  
80 - namespace TN3270 {  
81 -  
82 - /// @brief Popup Handler.  
83 - void Local::Session::popupHandler(H3270 *h3270, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) {  
84 -  
85 - Local::Session * session = (Local::Session *) lib3270_get_user_data(h3270);  
86 -  
87 - if(!session) {  
88 - throw std::runtime_error(_( "Invalid session handler" ));  
89 - }  
90 -  
91 - class PopupEvent : public TN3270::Event {  
92 - private:  
93 - LIB3270_NOTIFY type;  
94 - string title;  
95 - string msg;  
96 - string description;  
97 -  
98 - public:  
99 - PopupEvent(LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) : Event(Event::Popup) {  
100 -  
101 - this->type = type;  
102 - this->title = title;  
103 - this->msg = msg;  
104 -  
105 - char * buffer = NULL;  
106 - if(vasprintf(&buffer,fmt,arg) != -1) {  
107 - this->description = buffer;  
108 - free(buffer);  
109 - }  
110 -  
111 -#ifdef DEBUG  
112 - std::cerr << "Popup:" << std::endl  
113 - << "\t" << title << std::endl  
114 - << "\t" << msg << std::endl  
115 - << "\t" << description << std::endl;  
116 -#endif // DEBUG  
117 -  
118 - }  
119 -  
120 - virtual ~PopupEvent() {  
121 - }  
122 -  
123 - /// @brief Get event description.  
124 - std::string toString() const override {  
125 - return msg;  
126 - }  
127 -  
128 -  
129 - };  
130 -  
131 - session->fire(PopupEvent(type,title,msg,fmt,arg));  
132 -  
133 - }  
134 -  
135 - /// @brief Connect Handler.  
136 - void Local::Session::connectHandler(H3270 *h3270, unsigned char connected) {  
137 -  
138 - Local::Session * session = (Local::Session *) lib3270_get_user_data(h3270);  
139 -  
140 - if(!session) {  
141 - throw std::runtime_error(_("Invalid session handler"));  
142 - }  
143 -  
144 - class ConnectionEvent : public TN3270::Event {  
145 - private:  
146 - bool connected;  
147 -  
148 - public:  
149 - ConnectionEvent(unsigned char connected) : Event(Event::Connection) {  
150 - this->connected = (connected != 0);  
151 -  
152 -#ifdef DEBUG  
153 - std::cerr << "Session is " << this->toString().c_str() << std::endl;  
154 -#endif // DEBUG  
155 -  
156 - }  
157 -  
158 - virtual ~ConnectionEvent() {  
159 - }  
160 -  
161 - /// @brief Get event description.  
162 - std::string toString() const override {  
163 - return this->connected ? _("connected") : _("disconnected");  
164 - }  
165 -  
166 - };  
167 -  
168 - session->fire(ConnectionEvent(connected));  
169 -  
170 - }  
171 -  
172 -  
173 - }  
174 -  
175 -  
src/lib3270++/local/session.cc
@@ -1,389 +0,0 @@ @@ -1,389 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/local/session.cc  
32 - *  
33 - * @brief Implement lib3270 direct access layout (NO IPC).  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 - #include <lib3270/actions.h>  
41 - #include <lib3270/properties.h>  
42 - #include <cstring>  
43 -  
44 - extern "C" {  
45 - #include <lib3270/session.h>  
46 - }  
47 -  
48 - using std::string;  
49 -  
50 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
51 -  
52 - namespace TN3270 {  
53 -  
54 - Local::Session::Session() : Abstract::Session() {  
55 -  
56 - std::lock_guard<std::mutex> lock(sync);  
57 -  
58 - this->hSession = lib3270_session_new("");  
59 - lib3270_set_user_data(this->hSession,(void *) this);  
60 - setCharSet(lib3270_get_display_charset(this->hSession));  
61 -  
62 - lib3270_set_popup_handler(this->hSession, popupHandler);  
63 -  
64 - // Setup callbacks  
65 - struct lib3270_session_callbacks *cbk;  
66 -  
67 - cbk = lib3270_get_session_callbacks(this->hSession,sizeof(struct lib3270_session_callbacks));  
68 - if(!cbk) {  
69 - throw std::runtime_error( _("Invalid callback table, possible version mismatch in lib3270") );  
70 - }  
71 -  
72 - cbk->update_connect = connectHandler;  
73 -  
74 -  
75 - }  
76 -  
77 - Local::Session::~Session() {  
78 -  
79 - std::lock_guard<std::mutex> lock(sync);  
80 -  
81 - lib3270_session_free(this->hSession);  
82 - this->hSession = nullptr;  
83 - }  
84 -  
85 - void Local::Session::wait(time_t timeout) {  
86 -  
87 - std::lock_guard<std::mutex> lock(sync);  
88 -  
89 - int rc = lib3270_wait_for_ready(this->hSession, timeout);  
90 -  
91 - if(rc) {  
92 - throw std::system_error(rc, std::system_category());  
93 - }  
94 -  
95 - }  
96 -  
97 - void Local::Session::connect(const char *url) {  
98 - std::lock_guard<std::mutex> lock(sync);  
99 - int rc = lib3270_connect_url(hSession,url,0);  
100 -  
101 - if(rc) {  
102 - throw std::system_error(rc, std::system_category());  
103 - }  
104 -  
105 - }  
106 -  
107 - void Local::Session::disconnect() {  
108 - std::lock_guard<std::mutex> lock(sync);  
109 - lib3270_disconnect(hSession);  
110 - }  
111 -  
112 - // Wait for session state.  
113 - void Local::Session::waitForReady(time_t timeout) throw() {  
114 - this->wait(timeout);  
115 - }  
116 -  
117 - std::string Local::Session::toString(int baddr, size_t len, char lf) const {  
118 -  
119 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
120 -  
121 - char * text = lib3270_get_string_at_address(hSession, baddr, len, lf);  
122 -  
123 - if(!text) {  
124 - throw std::runtime_error( _("Can't get screen contents") );  
125 - }  
126 -  
127 - string rc = convertFromHost(text);  
128 -  
129 - lib3270_free(text);  
130 -  
131 - return rc;  
132 -  
133 - }  
134 -  
135 - std::string Local::Session::toString(int row, int col, size_t sz, char lf) const {  
136 -  
137 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
138 -  
139 - char * text = lib3270_get_string_at(hSession, row, col, sz, lf);  
140 -  
141 - if(!text) {  
142 - throw std::runtime_error( _("Can't get screen contents") );  
143 - }  
144 -  
145 - string rc = convertFromHost(text);  
146 -  
147 - lib3270_free(text);  
148 -  
149 - return rc;  
150 - }  
151 -  
152 - void Local::Session::getProperty(const char *name, int &value) const {  
153 -  
154 - const LIB3270_INT_PROPERTY * intprop = lib3270_get_int_properties_list();  
155 - for(size_t ix = 0; intprop[ix].name; ix++) {  
156 -  
157 - if(!strcasecmp(name,intprop[ix].name)) {  
158 -  
159 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
160 -  
161 - value = intprop[ix].get(hSession);  
162 -  
163 - if(value < 0 && errno != 0) {  
164 - throw std::system_error(errno, std::system_category());  
165 - }  
166 -  
167 -  
168 - }  
169 -  
170 - }  
171 -  
172 - throw std::system_error(ENOENT, std::system_category());  
173 -  
174 - }  
175 -  
176 - void Local::Session::getProperty(const char *name, std::string &value) const {  
177 -  
178 - const LIB3270_STRING_PROPERTY * strprop = lib3270_get_string_properties_list();  
179 -  
180 - for(size_t ix = 0; strprop[ix].name; ix++) {  
181 -  
182 - if(!strcasecmp(name,strprop[ix].name)) {  
183 -  
184 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
185 -  
186 - // Found it!  
187 - const char * str = strprop[ix].get(hSession);  
188 -  
189 - if(str) {  
190 - value.assign(str);  
191 - return;  
192 - }  
193 -  
194 - throw std::system_error(errno, std::system_category());  
195 -  
196 - }  
197 -  
198 - }  
199 -  
200 - throw std::system_error(ENOENT, std::system_category());  
201 - }  
202 -  
203 - void Local::Session::getProperty(const char *name, bool &value) const {  
204 -  
205 - LIB3270_TOGGLE toggle = lib3270_get_toggle_id(name);  
206 - if(toggle != (LIB3270_TOGGLE) -1) {  
207 -  
208 - // Is a Tn3270 toggle, get it!  
209 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
210 - value = lib3270_get_toggle(hSession,toggle);  
211 -  
212 - }  
213 -  
214 - throw std::system_error(ENOENT, std::system_category());  
215 - }  
216 -  
217 - ProgramMessage Local::Session::getProgramMessage() const {  
218 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
219 - return (ProgramMessage) lib3270_get_program_message(this->hSession);  
220 - }  
221 -  
222 - ConnectionState Local::Session::getConnectionState() const {  
223 - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);  
224 - return (ConnectionState) lib3270_get_connection_state(this->hSession);  
225 - }  
226 -  
227 - /// @brief Set field at current position, jumps to next writable field.  
228 - TN3270::Session & Local::Session::push(const char *text) {  
229 - std::lock_guard<std::mutex> lock(sync);  
230 - return *this;  
231 - }  
232 -  
233 - TN3270::Session & Local::Session::push(int baddr, const std::string &text) {  
234 - std::lock_guard<std::mutex> lock(sync);  
235 - return *this;  
236 - }  
237 -  
238 - TN3270::Session & Local::Session::push(int row, int col, const std::string &text) {  
239 - std::lock_guard<std::mutex> lock(sync);  
240 - return *this;  
241 - }  
242 -  
243 - TN3270::Session & Local::Session::push(const PFKey key) {  
244 - std::lock_guard<std::mutex> lock(sync);  
245 - lib3270_pfkey(hSession,(int) key);  
246 - return *this;  
247 - }  
248 -  
249 - TN3270::Session & Local::Session::push(const PAKey key) {  
250 - std::lock_guard<std::mutex> lock(sync);  
251 - lib3270_pakey(hSession,(int) key);  
252 - return *this;  
253 - }  
254 -  
255 - TN3270::Session & Local::Session::push(const Action action) {  
256 -  
257 - typedef int (*ActionCallback)(H3270 *);  
258 -  
259 - static const ActionCallback actions[] = {  
260 - lib3270_enter,  
261 - lib3270_erase,  
262 - lib3270_eraseeof,  
263 - lib3270_eraseeol,  
264 - lib3270_eraseinput  
265 - };  
266 -  
267 - if( ((size_t) action) > (sizeof(actions)/sizeof(actions[0]))) {  
268 - throw std::system_error(EINVAL, std::system_category());  
269 - }  
270 -  
271 - std::lock_guard<std::mutex> lock(sync);  
272 -  
273 - int rc = actions[(size_t) action](hSession);  
274 -  
275 - if(rc) {  
276 - throw std::system_error(errno, std::system_category());  
277 - }  
278 -  
279 - return *this;  
280 - }  
281 -  
282 - TN3270::Session & Local::Session::pop(int baddr, std::string &text) {  
283 -  
284 - std::lock_guard<std::mutex> lock(sync);  
285 -  
286 - if(!lib3270_is_connected(hSession)) {  
287 - throw std::system_error(ENOTCONN, std::system_category());  
288 - }  
289 -  
290 - char *contents = lib3270_get_field_text_at(hSession, baddr);  
291 -  
292 - if(!contents) {  
293 - throw std::system_error(errno, std::system_category());  
294 - }  
295 -  
296 - text.assign(convertFromHost(contents).c_str());  
297 -  
298 - lib3270_free(contents);  
299 -  
300 - return *this;  
301 - }  
302 -  
303 - TN3270::Session & Local::Session::pop(int row, int col, std::string &text) {  
304 - return this->pop(lib3270_translate_to_address(hSession,row,col),text);  
305 - }  
306 -  
307 - TN3270::Session & Local::Session::pop(std::string &text) {  
308 -  
309 - std::lock_guard<std::mutex> lock(sync);  
310 -  
311 - if(!lib3270_is_connected(hSession)) {  
312 - throw std::system_error(ENOTCONN, std::system_category());  
313 - }  
314 -  
315 - int baddr = lib3270_get_cursor_address(hSession);  
316 - if(baddr < 0) {  
317 - throw std::system_error(errno, std::system_category());  
318 - }  
319 -  
320 - char *contents = lib3270_get_field_text_at(hSession, baddr);  
321 -  
322 - if(!contents) {  
323 - throw std::system_error(errno, std::system_category());  
324 - }  
325 -  
326 - text.assign(convertFromHost(contents).c_str());  
327 -  
328 - lib3270_free(contents);  
329 -  
330 - baddr = lib3270_get_next_unprotected(hSession,baddr);  
331 - if(!baddr) {  
332 - baddr = lib3270_get_next_unprotected(hSession,0);  
333 - }  
334 -  
335 - if(lib3270_set_cursor_address(hSession,baddr)) {  
336 - throw std::system_error(errno, std::system_category());  
337 - }  
338 -  
339 - return *this;  
340 - }  
341 -  
342 - /// @brief Set cursor address.  
343 - ///  
344 - /// @param addr Cursor address.  
345 - TN3270::Session & Local::Session::setCursorPosition(unsigned short addr) {  
346 -  
347 - if(lib3270_set_cursor_address(hSession,addr) < 0) {  
348 - throw std::system_error(errno, std::system_category());  
349 - }  
350 -  
351 - return *this;  
352 - }  
353 -  
354 - /// @brief Set cursor position.  
355 - ///  
356 - /// @param row New cursor row.  
357 - /// @param col New cursor column.  
358 - TN3270::Session & Local::Session::setCursorPosition(unsigned short row, unsigned short col) {  
359 -  
360 - if(lib3270_set_cursor_position(hSession,row,col)) {  
361 - throw std::system_error(errno, std::system_category());  
362 - }  
363 -  
364 - return *this;  
365 -  
366 - }  
367 -  
368 - // Get properties.  
369 - std::string Local::Session::getVersion() const {  
370 - return lib3270_get_version();  
371 - }  
372 -  
373 - std::string Local::Session::getRevision() const {  
374 - return lib3270_get_revision();  
375 - }  
376 -  
377 - /// @brief Execute action by name.  
378 - TN3270::Session & Local::Session::action(const char *action_name) {  
379 -  
380 - if(lib3270_action(hSession,action_name)) {  
381 - throw std::system_error(errno, std::system_category());  
382 - }  
383 -  
384 - return *this;  
385 - }  
386 -  
387 - }  
388 -  
389 -  
src/lib3270++/private.h
@@ -1,385 +0,0 @@ @@ -1,385 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/private.h  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 -#ifndef PRIVATE_H_INCLUDED  
40 -  
41 - #define PRIVATE_H_INCLUDED  
42 -  
43 - #include <config.h>  
44 -  
45 - #ifdef _WIN32  
46 - #include <winsock2.h>  
47 - #include <windows.h>  
48 - #include <ws2tcpip.h>  
49 - #else  
50 - #include <dbus/dbus.h>  
51 - #endif // WIN32  
52 -  
53 - #include <iostream>  
54 - #include <mutex>  
55 - #include <lib3270++.h>  
56 - #include <lib3270/popup.h>  
57 - #include <system_error>  
58 - #include <stdexcept>  
59 -  
60 -#ifdef HAVE_LIBINTL  
61 - #include <libintl.h>  
62 - #define _( x ) gettext(x)  
63 - #define N_( x ) x  
64 -#else  
65 - #define _( x ) x  
66 - #define N_( x ) x  
67 -#endif // HAVE_LIBINTL  
68 -  
69 -#ifdef HAVE_ICONV  
70 - #include <iconv.h>  
71 -#endif // HAVE_ICONV  
72 -  
73 -#ifdef WIN32  
74 - #define SYSTEM_CHARSET "CP1252"  
75 -#else  
76 - #define SYSTEM_CHARSET "UTF-8"  
77 -#endif // WIN32  
78 -  
79 -#ifdef DEBUG  
80 -  
81 - inline void console(std::ostream &out) {  
82 - out << std::endl;  
83 - }  
84 -  
85 - template<typename T, typename... Targs>  
86 - void console(std::ostream &out, T value, Targs... Fargs) {  
87 - out << value;  
88 - console(out, Fargs...);  
89 - }  
90 -  
91 - template<typename T, typename... Targs>  
92 - void log(T value, Targs... Fargs) {  
93 - console(std::clog,value,Fargs...);  
94 - }  
95 -  
96 - #define debug(...) log(__FILE__, "(", __LINE__, ") ", __VA_ARGS__);  
97 -  
98 -#else  
99 -  
100 - #define debug(...) /* __VA_ARGS__ */  
101 -  
102 -#endif  
103 -  
104 - namespace TN3270 {  
105 -  
106 - namespace Abstract {  
107 -  
108 - class TN3270_PRIVATE Session : public TN3270::Session {  
109 - private:  
110 -  
111 -#ifdef HAVE_ICONV  
112 - struct {  
113 -  
114 - /// @brief Convert strings from host codepage to local codepage.  
115 - iconv_t local;  
116 -  
117 - /// @brief Convert string from local codepage to host codepage.  
118 - iconv_t host;  
119 -  
120 - } converter;  
121 -#endif  
122 -  
123 - /// @brief Converte charset.  
124 - static std::string convertCharset(iconv_t &converter, const char *str);  
125 -  
126 - protected:  
127 -  
128 - /// @brief Current in/out position.  
129 - int baddr;  
130 -  
131 - Session();  
132 - virtual ~Session();  
133 -  
134 - /// @brief Setup charsets  
135 - void setCharSet(const char *remote, const char *local = SYSTEM_CHARSET);  
136 -  
137 - /// @brief Converte string recebida do host para o charset atual.  
138 - std::string convertFromHost(const char *str) const;  
139 -  
140 - /// @brief Converte string do charset atual para o charset do host.  
141 - std::string convertToHost(const char *str) const;  
142 -  
143 - };  
144 -  
145 - }  
146 -  
147 - /// @brief lib3270 direct access objects (no IPC);  
148 - namespace Local {  
149 -  
150 - class TN3270_PRIVATE Session : public TN3270::Abstract::Session {  
151 - private:  
152 -  
153 - /// @brief Handle of the related instance of lib3270  
154 - H3270 * hSession;  
155 -  
156 - /// @brief Mutex to serialize access to lib3270  
157 - std::mutex sync;  
158 -  
159 - /// @brief Popup Handler.  
160 - static void popupHandler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg);  
161 -  
162 - /// @brief Connect Handler.  
163 - static void connectHandler(H3270 *session, unsigned char connected);  
164 -  
165 - /// @brief Wait for network events  
166 - void wait(time_t timeout = 5);  
167 -  
168 - public:  
169 - Session();  
170 - virtual ~Session();  
171 -  
172 - // Connect/disconnect  
173 - void connect(const char *url) override;  
174 - void disconnect() override;  
175 -  
176 - // Wait for session state.  
177 - void waitForReady(time_t timeout = 5) throw() override;  
178 -  
179 - // Get properties.  
180 - void getProperty(const char *name, int &value) const override;  
181 - void getProperty(const char *name, std::string &value) const override;  
182 - void getProperty(const char *name, bool &value) const override;  
183 -  
184 - std::string getVersion() const override;  
185 - std::string getRevision() const override;  
186 -  
187 - // Gets  
188 - std::string toString(int baddr, size_t len, char lf) const override;  
189 - std::string toString(int row, int col, size_t sz, char lf) const override;  
190 -  
191 - ProgramMessage getProgramMessage() const override;  
192 -  
193 - ConnectionState getConnectionState() const override;  
194 -  
195 - TN3270::Session & setCursorPosition(unsigned short addr) override;  
196 - TN3270::Session & setCursorPosition(unsigned short row, unsigned short col) override;  
197 -  
198 - /// @brief Set field at current posicion, jumps to next writable field.  
199 - TN3270::Session & push(const char *text) override;  
200 -  
201 - TN3270::Session & push(int baddr, const std::string &text) override;  
202 - TN3270::Session & push(int row, int col, const std::string &text) override;  
203 - TN3270::Session & push(const PFKey key) override;  
204 - TN3270::Session & push(const PAKey key) override;  
205 - TN3270::Session & push(const Action action) override;  
206 -  
207 - // Get contents.  
208 - TN3270::Session & pop(int baddr, std::string &text) override;  
209 - TN3270::Session & pop(int row, int col, std::string &text) override;  
210 - TN3270::Session & pop(std::string &text) override;  
211 -  
212 - /// @brief Execute action by name.  
213 - TN3270::Session & action(const char *action_name) override;  
214 -  
215 - };  
216 -  
217 - }  
218 -  
219 - /// @brief IPC Based acess (Access and active instance of pw3270 or pw3270d)  
220 - namespace IPC {  
221 -  
222 - class Session;  
223 -  
224 - /// @brief PW3270 IPC Request/Response.  
225 - class Request {  
226 - private:  
227 -  
228 -#ifdef _WIN32  
229 - /// @brief Pipe Handle.  
230 - HANDLE hPipe;  
231 -  
232 - /// @brief IPC Data type.  
233 - enum Type : uint8_t {  
234 - String = 's',  
235 - Boolean = 'b',  
236 - Uchar = 'y',  
237 - Int16 = 'n',  
238 - Uint16 = 'q',  
239 - Int32 = 'i',  
240 - Int32x = 'h',  
241 - Uint32 = 'u',  
242 - Int64 = 'x',  
243 - Uint64 = 't'  
244 - };  
245 -  
246 - struct {  
247 - DWORD length; ///< @brief Length of input buffer.  
248 - DWORD used; ///< @brief Length of used block.  
249 - DWORD current; ///< @brief Offset of the current argument.  
250 - uint8_t * block;  
251 - } in;  
252 -  
253 - struct {  
254 - DWORD length;  
255 - DWORD used;  
256 - uint8_t * block;  
257 - } out;  
258 -  
259 - struct DataBlock {  
260 - Type type;  
261 - };  
262 -  
263 - /// @brief Store value on data block.  
264 - DataBlock * pushBlock(const void *ptr, size_t len);  
265 -  
266 - /// @brief Get next argument.  
267 - DataBlock * getNextBlock() const;  
268 -  
269 -#else  
270 - struct {  
271 - DBusMessage * in;  
272 - DBusMessage * out;  
273 - DBusMessageIter iter;  
274 -  
275 - } msg;  
276 - DBusConnection * conn;  
277 -  
278 -#endif // _WIN32  
279 -  
280 - Request(const Session &session);  
281 -  
282 - public:  
283 -  
284 - /// @brief Create a method call.  
285 - Request(const Session &session, const char *method);  
286 -  
287 - /// @brief Create a get/set property call.  
288 - ///  
289 - /// @param session Session object.  
290 - /// @param isSet true if this is a setProperty call.  
291 - /// @param property Property name.  
292 - //  
293 - Request(const Session &session, bool isSet, const char *property);  
294 -  
295 - ~Request();  
296 -  
297 - Request & call();  
298 -  
299 - // Push values  
300 - Request & push(const char *arg);  
301 - Request & push(const bool arg);  
302 - Request & push(const int32_t arg);  
303 - Request & push(const uint32_t arg);  
304 - Request & push(const uint8_t arg);  
305 -  
306 - // Pop values  
307 - Request & pop(std::string &value);  
308 - Request & pop(int &value);  
309 -  
310 - };  
311 -  
312 - class TN3270_PRIVATE Session : public TN3270::Abstract::Session {  
313 - private:  
314 -  
315 - friend class Request;  
316 -  
317 -#ifdef _WIN32  
318 - /// @brief Pipe Handle.  
319 - HANDLE hPipe;  
320 -#else  
321 -  
322 - DBusConnection * conn;  
323 - std::string name; ///< @brief D-Bus Object name.  
324 - std::string path; ///< @brief D-Bus Object path.  
325 - std::string interface; ///< @brief D-Bus interface.  
326 -  
327 -#endif // _WIN32  
328 -  
329 - void call(Request &request);  
330 -  
331 - public:  
332 -  
333 - Session(const char *id);  
334 - virtual ~Session();  
335 -  
336 - // Connect/disconnect  
337 - void connect(const char *url) override;  
338 - void disconnect() override;  
339 -  
340 - // Wait for session state.  
341 - void waitForReady(time_t timeout = 5) override;  
342 -  
343 - // Get properties.  
344 - void getProperty(const char *name, int &value) const override;  
345 - void getProperty(const char *name, std::string &value) const override;  
346 - void getProperty(const char *name, bool &value) const override;  
347 -  
348 - std::string getVersion() const override;  
349 - std::string getRevision() const override;  
350 -  
351 - // Gets  
352 - std::string toString(int baddr, size_t len, char lf) const override;  
353 - std::string toString(int row, int col, size_t sz, char lf) const override;  
354 -  
355 - ProgramMessage getProgramMessage() const override;  
356 -  
357 - ConnectionState getConnectionState() const override;  
358 -  
359 - TN3270::Session & setCursorPosition(unsigned short addr) override;  
360 - TN3270::Session & setCursorPosition(unsigned short row, unsigned short col) override;  
361 -  
362 - /// @brief Set field at current posicion, jumps to next writable field.  
363 - TN3270::Session & push(const char *text) override;  
364 -  
365 - TN3270::Session & push(int baddr, const std::string &text) override;  
366 - TN3270::Session & push(int row, int col, const std::string &text) override;  
367 - TN3270::Session & push(const PFKey key) override;  
368 - TN3270::Session & push(const PAKey key) override;  
369 - TN3270::Session & push(const Action action) override;  
370 -  
371 - // Get contents.  
372 - TN3270::Session & pop(int baddr, std::string &text) override;  
373 - TN3270::Session & pop(int row, int col, std::string &text) override;  
374 - TN3270::Session & pop(std::string &text) override;  
375 -  
376 - /// @brief Execute action by name.  
377 - TN3270::Session & action(const char *action_name) override;  
378 -  
379 - };  
380 -  
381 - }  
382 -  
383 - }  
384 -  
385 -#endif // PRIVATE_H_INCLUDED  
src/lib3270++/session.cc
@@ -1,78 +0,0 @@ @@ -1,78 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/session.cc  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "private.h"  
40 -  
41 -  
42 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
43 -  
44 - namespace TN3270 {  
45 -  
46 - /// @brief Create a tn3270 session.  
47 - Session * Session::create(const char *id) {  
48 -  
49 - if(!id) {  
50 - return new Local::Session();  
51 - }  
52 -  
53 - return new IPC::Session(id);  
54 -  
55 - }  
56 -  
57 -  
58 - Session::Session() {  
59 -  
60 - }  
61 -  
62 - Session::~Session() {  
63 -  
64 - }  
65 -  
66 - void Session::insert(Event::Type type, std::function <void(const Event &event)> listener) {  
67 - }  
68 -  
69 - /// @brief Fire event.  
70 - void Session::fire(const Event &event) {  
71 -  
72 -  
73 - }  
74 -  
75 - }  
76 -  
77 -  
78 -  
src/lib3270++/testprogram/testprogram.cc
@@ -1,103 +0,0 @@ @@ -1,103 +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 lib3270++.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 - *  
28 - */  
29 -  
30 -/**  
31 - * @file src/lib3270++/testprogram/testprogram.cc  
32 - *  
33 - * @brief  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include <getopt.h>  
40 - #include <cstdlib>  
41 - #include <lib3270++.h>  
42 -  
43 - using namespace std;  
44 -  
45 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
46 -  
47 - int main(int argc, char **argv) {  
48 -  
49 - const char * session = "pw3270:a";  
50 -  
51 - #pragma GCC diagnostic push  
52 - #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"  
53 - static struct option options[] = {  
54 - { "session", required_argument, 0, 's' },  
55 - { 0, 0, 0, 0}  
56 -  
57 - };  
58 - #pragma GCC diagnostic pop  
59 -  
60 - int long_index =0;  
61 - int opt;  
62 - while((opt = getopt_long(argc, argv, "s:", options, &long_index )) != -1) {  
63 -  
64 - switch(opt) {  
65 - case 's':  
66 - session = optarg;  
67 - break;  
68 -  
69 - }  
70 -  
71 - }  
72 -  
73 - TN3270::Host host{session};  
74 -  
75 - try {  
76 -  
77 - cout  
78 - << "Version: " << host.getVersion()  
79 - << "\tRevision: " << host.getRevision()  
80 - << std::endl;  
81 -  
82 - cout  
83 - << "Connection state is " << host.getConnectionState()  
84 - << "\tProgram message is " << host.getProgramMessage()  
85 - << std::endl;  
86 -  
87 - // host.connect(getenv("LIB3270_DEFAULT_HOST"));  
88 -  
89 - if(host) {  
90 - cout << host << endl;  
91 - }  
92 -  
93 - } catch(const std::exception &e) {  
94 -  
95 - cerr << std::endl << e.what() << std::endl << std::endl;  
96 -  
97 - }  
98 -  
99 -  
100 - return 0;  
101 - }  
102 -  
103 -  
src/lib3270++/valgrind.suppression
src/lib3270++/windows/request.cc
@@ -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 - 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 -/**  
31 - * @file src/lib3270++/windows/request.cc  
32 - *  
33 - * @brief Implements WIN32 Pipe Based IPC.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 -  
41 - using std::string;  
42 -  
43 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
44 -  
45 - namespace TN3270 {  
46 -  
47 - #define PIPE_BUFFER_LENGTH 8192  
48 -  
49 - IPC::Request::Request(const Session &session) {  
50 -  
51 - this->hPipe = session.hPipe;  
52 -  
53 - in.length = PIPE_BUFFER_LENGTH;  
54 - in.used = 0;  
55 - in.block = new uint8_t[in.length];  
56 -  
57 - out.length = PIPE_BUFFER_LENGTH;  
58 - out.used = 0;  
59 - out.block = new uint8_t[out.length];  
60 -  
61 - }  
62 -  
63 - IPC::Request::Request(const Session &session, const char *method) : Request(session) {  
64 -  
65 - // Add name  
66 - strcpy((char *) out.block, method);  
67 - out.used += strlen((char *) method) + 1;  
68 -  
69 - // Add ID  
70 - *((uint16_t *) (out.block + out.used)) = (uint16_t) 3;  
71 - out.used += sizeof(uint16_t);  
72 -  
73 - }  
74 -  
75 - IPC::Request::Request(const Session &session, bool isSet, const char *property) : Request(session) {  
76 -  
77 - // Add name  
78 - strcpy((char *) out.block, property);  
79 - out.used += strlen((char *) property) + 1;  
80 -  
81 - // Add ID (SetProperty = 2, getProperty = 1)  
82 - *((uint16_t *) (out.block + out.used)) = (uint16_t) (isSet ? 2 : 1);  
83 - out.used += sizeof(uint16_t);  
84 -  
85 - }  
86 -  
87 - IPC::Request::~Request() {  
88 -  
89 - delete[] ((uint8_t *) in.block);  
90 - delete[] ((uint8_t *) out.block);  
91 -  
92 - }  
93 -  
94 - /// @brief Store value on data block.  
95 - IPC::Request::DataBlock * IPC::Request::pushBlock(const void *ptr, size_t length) {  
96 -  
97 - if((out.used + length + sizeof(IPC::Request::DataBlock)) >= out.length) {  
98 - throw std::runtime_error("Too big");  
99 - }  
100 -  
101 - IPC::Request::DataBlock * rc = (IPC::Request::DataBlock *) (out.block + out.used);  
102 - memcpy(((uint8_t *) (rc+1)), ((uint8_t *) ptr), length);  
103 -  
104 - out.used += (sizeof(IPC::Request::DataBlock) + length);  
105 -  
106 - return rc;  
107 -  
108 - }  
109 -  
110 - /// @brief Get next argument.  
111 - IPC::Request::DataBlock * IPC::Request::getNextBlock() const {  
112 -  
113 - if((in.current + sizeof(IPC::Request::DataBlock)) >= in.used) {  
114 - throw std::runtime_error("Out of range");  
115 - }  
116 -  
117 - return (IPC::Request::DataBlock *) (in.block + in.current);  
118 -  
119 - }  
120 -  
121 - IPC::Request & IPC::Request::push(const char *arg) {  
122 - pushBlock(arg, strlen(arg)+1)->type = IPC::Request::String;  
123 - return *this;  
124 - }  
125 -  
126 - IPC::Request & IPC::Request::push(const bool arg) {  
127 - uint8_t value = (uint8_t) (arg ? 0xff : 0);  
128 - pushBlock(&value, sizeof(value))->type = IPC::Request::Boolean;  
129 - return *this;  
130 - }  
131 -  
132 - IPC::Request & IPC::Request::push(const uint8_t arg) {  
133 - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Uchar;  
134 - return *this;  
135 - }  
136 -  
137 - IPC::Request & IPC::Request::push(const int32_t arg) {  
138 - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Int32;  
139 - return *this;  
140 - }  
141 -  
142 - IPC::Request & IPC::Request::push(const uint32_t arg) {  
143 - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Uint32;  
144 - return *this;  
145 - }  
146 -  
147 - IPC::Request & IPC::Request::pop(std::string &value) {  
148 - DataBlock * block = getNextBlock();  
149 -  
150 - if(block->type != IPC::Request::String)  
151 - throw std::runtime_error("Invalid format");  
152 -  
153 - const char *ptr = (const char *) (block+1);  
154 -  
155 - in.current += (strlen(ptr)+1+sizeof(DataBlock));  
156 -  
157 - value.assign(ptr);  
158 -  
159 - return *this;  
160 - }  
161 -  
162 - IPC::Request & IPC::Request::Request::pop(int &value) {  
163 -  
164 - DataBlock * block = getNextBlock();  
165 -  
166 - switch(block->type) {  
167 - case IPC::Request::Int16:  
168 - value = * ((int16_t *) (block+1));  
169 - in.current += sizeof(int16_t) + sizeof(DataBlock);  
170 - break;  
171 -  
172 - case IPC::Request::Int32:  
173 - value = * ((int32_t *) (block+1));  
174 - in.current += sizeof(int32_t) + sizeof(DataBlock);  
175 - break;  
176 -  
177 - case IPC::Request::Int64:  
178 - value = * ((int64_t *) (block+1));  
179 - in.current += sizeof(int64_t) + sizeof(DataBlock);  
180 - break;  
181 -  
182 - default:  
183 - throw std::runtime_error("Invalid format");  
184 - }  
185 -  
186 - return *this;  
187 - }  
188 -  
189 - }  
190 -  
191 -  
src/lib3270++/windows/resources.rc.in
@@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
1 -#include <windows.h>  
2 -  
3 -VS_VERSION_INFO VERSIONINFO  
4 -FILEVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0  
5 -PRODUCTVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0  
6 -  
7 -BEGIN  
8 -  
9 - BLOCK "StringFileInfo"  
10 - BEGIN  
11 - BLOCK "080904E4"  
12 - BEGIN  
13 - VALUE "FileDescription", "3270 C++ Access Library\0"  
14 - VALUE "CompanyName", "Banco do Brasil S/A.\0"  
15 - VALUE "FileVersion", "@WIN32_VERSION@\0"  
16 - VALUE "LegalCopyright", "(C) 2017 Banco do Brasil S/A. All Rights Reserved\0"  
17 - VALUE "OriginalFilename", "@PACKAGE_TARNAME@@DLLEXT@\0"  
18 - VALUE "ProductName", "@PACKAGE_NAME@\0"  
19 - VALUE "ProductVersion", "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.0\0"  
20 - END  
21 - END  
22 -  
23 - BLOCK "VarFileInfo"  
24 - BEGIN  
25 - VALUE "Translation", 0x809, 0x04E4  
26 - END  
27 -  
28 -END  
29 -  
src/lib3270++/windows/session.cc
@@ -1,142 +0,0 @@ @@ -1,142 +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 - 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 -/**  
31 - * @file src/lib3270++/ipc/windows/session.cc  
32 - *  
33 - * @brief Implements Windows session create/destroy session.  
34 - *  
35 - * @author perry.werneck@gmail.com  
36 - *  
37 - */  
38 -  
39 - #include "../private.h"  
40 - #include <cstring>  
41 - #include <lib3270/trace.h>  
42 - #include <algorithm>  
43 -  
44 - using std::string;  
45 -  
46 -/*---[ Implement ]----------------------------------------------------------------------------------*/  
47 -  
48 - namespace TN3270 {  
49 -  
50 - IPC::Session::Session(const char *id) : Abstract::Session() {  
51 -  
52 - char *ptr = strchr(id,':');  
53 -  
54 - if(!ptr)  
55 - throw std::system_error(EINVAL, std::system_category());  
56 -  
57 - string pipename{"\\\\.\\pipe\\"};  
58 -  
59 - pipename += string(id,ptr - id);  
60 - pipename += "\\";  
61 - pipename += (ptr+1);  
62 -  
63 - std::transform(pipename.begin(), pipename.end(), pipename.begin(), ::tolower);  
64 -  
65 - debug("pipename: \"%s\"",pipename.c_str());  
66 -  
67 - this->hPipe = CreateFile(  
68 - TEXT(pipename.c_str()), // pipe name  
69 - GENERIC_READ | // read and write access  
70 - GENERIC_WRITE,  
71 - 0, // no sharing  
72 - NULL, // default security attributes  
73 - OPEN_EXISTING, // opens existing pipe  
74 - 0, // default attributes  
75 - NULL // no template file  
76 - );  
77 -  
78 - if (hPipe == INVALID_HANDLE_VALUE) {  
79 - throw std::runtime_error("Can't open IPC Channel");  
80 - }  
81 -  
82 - // The pipe connected; change to message-read mode.  
83 - DWORD dwMode = PIPE_READMODE_MESSAGE;  
84 - if(!SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL)) {  
85 - throw std::runtime_error("Can't set IPC Channel mode");  
86 - }  
87 -  
88 - }  
89 -  
90 - IPC::Session::~Session() {  
91 - CloseHandle(this->hPipe);  
92 - }  
93 -  
94 -  
95 - IPC::Request & IPC::Request::call() {  
96 -  
97 -#ifdef DEBUG  
98 - // lib3270_trace_data(NULL,"Request block",(const char *) this->out.block, this->out.used);  
99 -#endif // DEBUG  
100 -  
101 - in.current = 0;  
102 -  
103 - if(!TransactNamedPipe(  
104 - this->hPipe,  
105 - this->out.block,  
106 - this->out.used,  
107 - this->in.block,  
108 - this->in.length,  
109 - &this->in.used,  
110 - NULL)  
111 - ) {  
112 -  
113 - throw std::runtime_error("Can't transact on IPC Channel");  
114 -  
115 - }  
116 -  
117 - debug("Received response \"", in.block, "\" with ", in.used, " bytes");  
118 -#ifdef DEBUG  
119 - // lib3270_trace_data(NULL,"Response block",(const char *) this->in.block, this->in.used);  
120 -#endif // DEBUG  
121 -  
122 - // Extract response name  
123 - in.current = strlen((const char *) in.block)+1;  
124 -  
125 - // Extract return code  
126 - uint16_t rc = *((uint16_t *) (in.block + in.current));  
127 - in.current += sizeof(uint16_t);  
128 -  
129 - // Extract argc  
130 - uint16_t argc = *((uint16_t *) (in.block + in.current));  
131 - in.current += sizeof(uint16_t);  
132 -  
133 - debug("Received response \"", ((const char *) in.block), "\" with rc=", rc, " and ", argc, " arguments");  
134 -  
135 - return *this;  
136 - }  
137 -  
138 -  
139 -  
140 - }  
141 -  
142 -