Commit 816f7f49b7b7a03522099b6885de7a49be3b0fca
1 parent
6d6dd3a3
Exists in
master
and in
3 other branches
Language bindings library is now part of the IPC plugin package.
Showing
21 changed files
with
1 additions
and
3139 deletions
Show diff stats
Makefile.in
| ... | ... | @@ -87,12 +87,6 @@ $(BINDBG)/lib@LIB3270_NAME@@DLLEXT@: \ |
| 87 | 87 | |
| 88 | 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 | 90 | #---[ Release Rules ]-------------------------------------------------------------------- |
| 97 | 91 | |
| 98 | 92 | $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ |
| ... | ... | @@ -101,13 +95,6 @@ $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ |
| 101 | 95 | |
| 102 | 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 | 98 | #---[ Misc Rules ]----------------------------------------------------------------------- |
| 112 | 99 | |
| 113 | 100 | $(POTDIR)/lib3270.pot: \ |
| ... | ... | @@ -119,24 +106,13 @@ $(POTDIR)/lib3270.pot: \ |
| 119 | 106 | |
| 120 | 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 | 109 | #---[ Release Targets ]------------------------------------------------------------------ |
| 132 | 110 | |
| 133 | 111 | all: |
| 134 | 112 | @$(MAKE) -C src/lib3270 $@ |
| 135 | - @$(MAKE) -C src/lib3270++ $@ | |
| 136 | 113 | |
| 137 | 114 | Release: \ |
| 138 | - $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@ \ | |
| 139 | - $(BINRLS)/lib@LIB3270_NAME@++@DLLEXT@ | |
| 115 | + $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@ | |
| 140 | 116 | |
| 141 | 117 | #---[ Misc Targets ]--------------------------------------------------------------------- |
| 142 | 118 | |
| ... | ... | @@ -161,17 +137,14 @@ install: \ |
| 161 | 137 | |
| 162 | 138 | install-shared: |
| 163 | 139 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
| 164 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
| 165 | 140 | |
| 166 | 141 | install-static: |
| 167 | 142 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
| 168 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
| 169 | 143 | |
| 170 | 144 | install-dev: \ |
| 171 | 145 | lib@LIB3270_NAME@.pot |
| 172 | 146 | |
| 173 | 147 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
| 174 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
| 175 | 148 | |
| 176 | 149 | @$(MKDIR) $(DESTDIR)$(datarootdir)/pw3270/pot |
| 177 | 150 | @$(INSTALL_DATA) lib@LIB3270_NAME@.pot $(DESTDIR)$(datarootdir)/pw3270/pot/lib3270.pot |
| ... | ... | @@ -196,13 +169,11 @@ cleanDebug: |
| 196 | 169 | |
| 197 | 170 | @rm -fr $(BINDBG) |
| 198 | 171 | @$(MAKE) -C src/lib3270 $@ |
| 199 | - @$(MAKE) -C src/lib3270++ $@ | |
| 200 | 172 | |
| 201 | 173 | cleanRelease: |
| 202 | 174 | |
| 203 | 175 | @rm -fr $(BINRLS) |
| 204 | 176 | @$(MAKE) -C src/lib3270 $@ |
| 205 | - @$(MAKE) -C src/lib3270++ $@ | |
| 206 | 177 | |
| 207 | 178 | clean: \ |
| 208 | 179 | cleanDebug \ | ... | ... |
configure.ac
| ... | ... | @@ -88,7 +88,6 @@ case "$host" in |
| 88 | 88 | AC_SUBST(WIN32_VERSION,$app_win32_revision) |
| 89 | 89 | |
| 90 | 90 | AC_CONFIG_FILES(src/lib3270/windows/resources.rc) |
| 91 | - AC_CONFIG_FILES(src/lib3270++/windows/resources.rc) | |
| 92 | 91 | |
| 93 | 92 | app_cv_static='yes' |
| 94 | 93 | |
| ... | ... | @@ -589,11 +588,6 @@ AC_CONFIG_FILES(src/lib3270/version.c) |
| 589 | 588 | AC_CONFIG_FILES(src/lib3270/lib3270.pc) |
| 590 | 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 | 591 | dnl --------------------------------------------------------------------------- |
| 598 | 592 | dnl Output the generated config.status script. |
| 599 | 593 | dnl --------------------------------------------------------------------------- | ... | ... |
src/lib3270++/Makefile.in
| ... | ... | @@ -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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -<?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 | -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 | -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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -/* | |
| 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 | -#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 | -/* | |
| 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 | - |