Commit ae5138b907310e41ad13a732ab430e0857e36e52
1 parent
bbf9264c
Exists in
master
and in
1 other branch
Reorganizing paths for documentation.
Showing
35 changed files
with
969 additions
and
897 deletions
Show diff stats
client/Makefile.in
| @@ -91,7 +91,8 @@ DEPENDS= \ | @@ -91,7 +91,8 @@ DEPENDS= \ | ||
| 91 | Makefile \ | 91 | Makefile \ |
| 92 | src/include/*.h \ | 92 | src/include/*.h \ |
| 93 | $(BASEDIR)/common/src/include/*.h \ | 93 | $(BASEDIR)/common/src/include/*.h \ |
| 94 | - $(BASEDIR)/common/src/include/lib3270/*.h | 94 | + $(BASEDIR)/client/src/include/lib3270/*.h \ |
| 95 | + $(BASEDIR)/client/src/include/lib3270/ipc/*.h \ | ||
| 95 | 96 | ||
| 96 | CFLAGS= \ | 97 | CFLAGS= \ |
| 97 | @CFLAGS@ \ | 98 | @CFLAGS@ \ |
client/ipcclient.cbp
| @@ -61,6 +61,8 @@ | @@ -61,6 +61,8 @@ | ||
| 61 | <Unit filename="src/host/stream.cc" /> | 61 | <Unit filename="src/host/stream.cc" /> |
| 62 | <Unit filename="src/host/string.cc" /> | 62 | <Unit filename="src/host/string.cc" /> |
| 63 | <Unit filename="src/include/ipc-client-internals.h" /> | 63 | <Unit filename="src/include/ipc-client-internals.h" /> |
| 64 | + <Unit filename="src/include/lib3270/ipc.h" /> | ||
| 65 | + <Unit filename="src/include/lib3270/ipc/request.h" /> | ||
| 64 | <Unit filename="src/session/get.cc" /> | 66 | <Unit filename="src/session/get.cc" /> |
| 65 | <Unit filename="src/session/local/actions.cc" /> | 67 | <Unit filename="src/session/local/actions.cc" /> |
| 66 | <Unit filename="src/session/local/events.cc" /> | 68 | <Unit filename="src/session/local/events.cc" /> |
client/src/core/linux/request.cc
| @@ -44,6 +44,12 @@ | @@ -44,6 +44,12 @@ | ||
| 44 | 44 | ||
| 45 | namespace TN3270 { | 45 | namespace TN3270 { |
| 46 | 46 | ||
| 47 | + IPC::Request::Request(DBusConnection * conn) { | ||
| 48 | + this->conn = conn; | ||
| 49 | + this->msg.in = nullptr; | ||
| 50 | + this->msg.out = nullptr; | ||
| 51 | + } | ||
| 52 | + | ||
| 47 | IPC::Request::~Request() { | 53 | IPC::Request::~Request() { |
| 48 | if(msg.out) { | 54 | if(msg.out) { |
| 49 | dbus_message_unref(msg.out); | 55 | dbus_message_unref(msg.out); |
client/src/include/ipc-client-internals.h
| @@ -53,6 +53,7 @@ | @@ -53,6 +53,7 @@ | ||
| 53 | #include <iostream> | 53 | #include <iostream> |
| 54 | #include <mutex> | 54 | #include <mutex> |
| 55 | #include <lib3270/ipc.h> | 55 | #include <lib3270/ipc.h> |
| 56 | + #include <lib3270/ipc/request.h> | ||
| 56 | #include <lib3270/popup.h> | 57 | #include <lib3270/popup.h> |
| 57 | #include <system_error> | 58 | #include <system_error> |
| 58 | #include <stdexcept> | 59 | #include <stdexcept> |
| @@ -174,105 +175,8 @@ | @@ -174,105 +175,8 @@ | ||
| 174 | namespace IPC { | 175 | namespace IPC { |
| 175 | 176 | ||
| 176 | TN3270_PRIVATE TN3270::Session * getSessionInstance(const char *id); | 177 | TN3270_PRIVATE TN3270::Session * getSessionInstance(const char *id); |
| 177 | - | ||
| 178 | class Session; | 178 | class Session; |
| 179 | 179 | ||
| 180 | - /// @brief PW3270 IPC Request/Response. | ||
| 181 | - class Request { | ||
| 182 | - private: | ||
| 183 | - | ||
| 184 | -#ifdef _WIN32 | ||
| 185 | - /// @brief Pipe Handle. | ||
| 186 | - HANDLE hPipe; | ||
| 187 | - | ||
| 188 | - /// @brief IPC Data type. | ||
| 189 | - enum Type : uint8_t { | ||
| 190 | - String = 's', | ||
| 191 | - Boolean = 'b', | ||
| 192 | - Uchar = 'y', | ||
| 193 | - Int16 = 'n', | ||
| 194 | - Uint16 = 'q', | ||
| 195 | - Int32 = 'i', | ||
| 196 | - Int32x = 'h', | ||
| 197 | - Uint32 = 'u', | ||
| 198 | - Int64 = 'x', | ||
| 199 | - Uint64 = 't' | ||
| 200 | - }; | ||
| 201 | - | ||
| 202 | - struct { | ||
| 203 | - DWORD length; ///< @brief Length of input buffer. | ||
| 204 | - DWORD used; ///< @brief Length of used block. | ||
| 205 | - DWORD current; ///< @brief Offset of the current argument. | ||
| 206 | - uint8_t * block; | ||
| 207 | - } in; | ||
| 208 | - | ||
| 209 | - struct { | ||
| 210 | - DWORD length; | ||
| 211 | - DWORD used; | ||
| 212 | - uint8_t * block; | ||
| 213 | - } out; | ||
| 214 | - | ||
| 215 | - struct DataBlock { | ||
| 216 | - Type type; | ||
| 217 | - }; | ||
| 218 | - | ||
| 219 | - /// @brief Store value on data block. | ||
| 220 | - DataBlock * pushBlock(const void *ptr, size_t len); | ||
| 221 | - | ||
| 222 | - /// @brief Get next argument. | ||
| 223 | - DataBlock * getNextBlock() const; | ||
| 224 | - | ||
| 225 | - /// @brief Pointer to number of variants in the output buffer. | ||
| 226 | - uint16_t * outvalues; | ||
| 227 | - | ||
| 228 | -#else | ||
| 229 | - struct { | ||
| 230 | - DBusMessage * in; | ||
| 231 | - DBusMessage * out; | ||
| 232 | - DBusMessageIter iter; | ||
| 233 | - | ||
| 234 | - } msg; | ||
| 235 | - DBusConnection * conn; | ||
| 236 | - | ||
| 237 | -#endif // _WIN32 | ||
| 238 | - | ||
| 239 | - protected: | ||
| 240 | - | ||
| 241 | -#ifdef _WIN32 | ||
| 242 | - Request(HANDLE hPipe, const char *name, uint16_t type); | ||
| 243 | -#endif // _WIN32 | ||
| 244 | - | ||
| 245 | - public: | ||
| 246 | - | ||
| 247 | - /// @brief Create a method call. | ||
| 248 | - Request(const IPC::Session &session, const char *method); | ||
| 249 | - | ||
| 250 | - /// @brief Create a get/set property call. | ||
| 251 | - /// | ||
| 252 | - /// @param session Session object. | ||
| 253 | - /// @param isSet true if this is a setProperty call. | ||
| 254 | - /// @param property Property name. | ||
| 255 | - // | ||
| 256 | - Request(const IPC::Session &session, bool isSet, const char *property); | ||
| 257 | - | ||
| 258 | - ~Request(); | ||
| 259 | - | ||
| 260 | - Request & call(); | ||
| 261 | - | ||
| 262 | - // Push values | ||
| 263 | - Request & push(const char *arg); | ||
| 264 | - Request & push(const bool arg); | ||
| 265 | - Request & push(const int32_t arg); | ||
| 266 | - Request & push(const uint32_t arg); | ||
| 267 | - Request & push(const uint8_t arg); | ||
| 268 | - | ||
| 269 | - // Pop values | ||
| 270 | - Request & pop(std::string &value); | ||
| 271 | - Request & pop(int &value); | ||
| 272 | - Request & pop(unsigned int &value); | ||
| 273 | - | ||
| 274 | - }; | ||
| 275 | - | ||
| 276 | } | 180 | } |
| 277 | 181 | ||
| 278 | } | 182 | } |
| @@ -0,0 +1,624 @@ | @@ -0,0 +1,624 @@ | ||
| 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 ipc.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 | +#ifndef LIB3270_IPC_H_INCLUDED | ||
| 31 | + | ||
| 32 | + #define LIB3270_IPC_H_INCLUDED 1 | ||
| 33 | + | ||
| 34 | + #include <iostream> | ||
| 35 | + #include <cstdarg> | ||
| 36 | + #include <vector> | ||
| 37 | + #include <functional> | ||
| 38 | + #include <lib3270.h> | ||
| 39 | + #include <lib3270/keyboard.h> | ||
| 40 | + | ||
| 41 | + #if defined(_WIN32) | ||
| 42 | + | ||
| 43 | + #define TN3270_PUBLIC __declspec (dllexport) | ||
| 44 | + #define TN3270_PRIVATE | ||
| 45 | + | ||
| 46 | + #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) | ||
| 47 | + | ||
| 48 | + #define TN3270_PUBLIC | ||
| 49 | + #define TN3270_PRIVATE | ||
| 50 | + | ||
| 51 | + #elif defined(__GNUC__) | ||
| 52 | + | ||
| 53 | + #define TN3270_PUBLIC __attribute__((visibility("default"))) | ||
| 54 | + #define TN3270_PRIVATE __attribute__((visibility("hidden"))) | ||
| 55 | + | ||
| 56 | + #else | ||
| 57 | + | ||
| 58 | + #error Unable to set visibility attribute | ||
| 59 | + | ||
| 60 | + #endif | ||
| 61 | + | ||
| 62 | +#ifdef __cplusplus | ||
| 63 | + | ||
| 64 | + #include <string> | ||
| 65 | + | ||
| 66 | + namespace TN3270 { | ||
| 67 | + | ||
| 68 | + class Host; | ||
| 69 | + class Controller; | ||
| 70 | + | ||
| 71 | + #define DEFAULT_TIMEOUT 5 | ||
| 72 | + | ||
| 73 | + TN3270_PUBLIC const char * getVersion(); | ||
| 74 | + TN3270_PUBLIC const char * getRevision(); | ||
| 75 | + | ||
| 76 | + class TN3270_PUBLIC Event { | ||
| 77 | + public: | ||
| 78 | + enum Type : uint8_t { | ||
| 79 | + All, ///< @brief All events (undefined). | ||
| 80 | + Popup, ///< @brief Popup message. | ||
| 81 | + Trace, ///< @brief Trace message. | ||
| 82 | + Message, ///< @brief Generic message. | ||
| 83 | + Connection ///< @brief Connect/Disconnect event. | ||
| 84 | + }; | ||
| 85 | + | ||
| 86 | + private: | ||
| 87 | + Type type; | ||
| 88 | + | ||
| 89 | + protected: | ||
| 90 | + Event(enum Type type); | ||
| 91 | + | ||
| 92 | + public: | ||
| 93 | + virtual ~Event(); | ||
| 94 | + | ||
| 95 | + /// @brief Check event type | ||
| 96 | + inline bool is(Event::Type type) const noexcept { | ||
| 97 | + return this->type == type; | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + /// @brief Check event type | ||
| 101 | + inline bool operator==(Event::Type type) const noexcept { | ||
| 102 | + return this->type == type; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + inline operator Event::Type() const noexcept { | ||
| 106 | + return this->type; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + /// @brief Get event description. | ||
| 110 | + virtual std::string toString() const = 0; | ||
| 111 | + | ||
| 112 | + }; | ||
| 113 | + | ||
| 114 | + enum ProgramMessage : uint8_t { | ||
| 115 | + MESSAGE_NONE = LIB3270_MESSAGE_NONE, ///< @brief No message | ||
| 116 | + MESSAGE_SYSWAIT = LIB3270_MESSAGE_SYSWAIT, ///< @brief -- | ||
| 117 | + MESSAGE_TWAIT = LIB3270_MESSAGE_TWAIT, ///< @brief -- | ||
| 118 | + MESSAGE_CONNECTED = LIB3270_MESSAGE_CONNECTED, ///< @brief Connected | ||
| 119 | + MESSAGE_DISCONNECTED = LIB3270_MESSAGE_DISCONNECTED, ///< @brief Disconnected from host | ||
| 120 | + MESSAGE_AWAITING_FIRST = LIB3270_MESSAGE_AWAITING_FIRST, ///< @brief -- | ||
| 121 | + MESSAGE_MINUS = LIB3270_MESSAGE_MINUS, ///< @brief -- | ||
| 122 | + MESSAGE_PROTECTED = LIB3270_MESSAGE_PROTECTED, ///< @brief -- | ||
| 123 | + MESSAGE_NUMERIC = LIB3270_MESSAGE_NUMERIC, ///< @brief -- | ||
| 124 | + MESSAGE_OVERFLOW = LIB3270_MESSAGE_OVERFLOW, ///< @brief -- | ||
| 125 | + MESSAGE_INHIBIT = LIB3270_MESSAGE_INHIBIT, ///< @brief -- | ||
| 126 | + MESSAGE_KYBDLOCK = LIB3270_MESSAGE_KYBDLOCK, ///< @brief Keyboard is locked | ||
| 127 | + | ||
| 128 | + MESSAGE_X = LIB3270_MESSAGE_X, ///< @brief -- | ||
| 129 | + MESSAGE_RESOLVING = LIB3270_MESSAGE_RESOLVING, ///< @brief Resolving hostname (running DNS query) | ||
| 130 | + MESSAGE_CONNECTING = LIB3270_MESSAGE_CONNECTING ///< @brief Connecting to host | ||
| 131 | + | ||
| 132 | + }; | ||
| 133 | + | ||
| 134 | + /// @brief connection state. | ||
| 135 | + enum ConnectionState : uint8_t { | ||
| 136 | + DISCONNECTED = LIB3270_NOT_CONNECTED, ///< @brief disconnected | ||
| 137 | + RESOLVING = LIB3270_RESOLVING, ///< @brief resolving hostname | ||
| 138 | + PENDING = LIB3270_PENDING, ///< @brief connection pending | ||
| 139 | + CONNECTED_INITIAL = LIB3270_CONNECTED_INITIAL, ///< @brief connected, no mode yet | ||
| 140 | + CONNECTED_ANSI = LIB3270_CONNECTED_ANSI, ///< @brief connected in NVT ANSI mode | ||
| 141 | + CONNECTED_3270 = LIB3270_CONNECTED_3270, ///< @brief connected in old-style 3270 mode | ||
| 142 | + CONNECTED_INITIAL_E = LIB3270_CONNECTED_INITIAL_E, ///< @brief connected in TN3270E mode, unnegotiated | ||
| 143 | + CONNECTED_NVT = LIB3270_CONNECTED_NVT, ///< @brief connected in TN3270E mode, NVT mode | ||
| 144 | + CONNECTED_SSCP = LIB3270_CONNECTED_SSCP, ///< @brief connected in TN3270E mode, SSCP-LU mode | ||
| 145 | + CONNECTED_TN3270E = LIB3270_CONNECTED_TN3270E, ///< @brief connected in TN3270E mode, 3270 mode | ||
| 146 | + }; | ||
| 147 | + | ||
| 148 | + enum SSLState : uint8_t { | ||
| 149 | + SSL_UNSECURE = LIB3270_SSL_UNSECURE, ///< @brief No secure connection | ||
| 150 | + SSL_SECURE = LIB3270_SSL_SECURE, ///< @brief Connection secure with CA check | ||
| 151 | + SSL_NEGOTIATED = LIB3270_SSL_NEGOTIATED, ///< @brief Connection secure, no CA, self-signed or expired CRL | ||
| 152 | + SSL_NEGOTIATING = LIB3270_SSL_NEGOTIATING, ///< @brief Negotiating SSL | ||
| 153 | + SSL_UNDEFINED = LIB3270_SSL_UNDEFINED ///< @brief Undefined | ||
| 154 | + }; | ||
| 155 | + | ||
| 156 | + /// @brief PF Keys | ||
| 157 | + enum PFKey : uint8_t { | ||
| 158 | + PF_1, | ||
| 159 | + PF_2, | ||
| 160 | + PF_3, | ||
| 161 | + PF_4, | ||
| 162 | + PF_5, | ||
| 163 | + PF_6, | ||
| 164 | + PF_7, | ||
| 165 | + PF_8, | ||
| 166 | + PF_9, | ||
| 167 | + PF_10, | ||
| 168 | + PF_11, | ||
| 169 | + PF_12, | ||
| 170 | + PF_13, | ||
| 171 | + PF_14, | ||
| 172 | + PF_15, | ||
| 173 | + PF_16, | ||
| 174 | + PF_17, | ||
| 175 | + PF_18, | ||
| 176 | + PF_19, | ||
| 177 | + PF_20, | ||
| 178 | + PF_21, | ||
| 179 | + PF_22, | ||
| 180 | + PF_23, | ||
| 181 | + PF_24 | ||
| 182 | + }; | ||
| 183 | + | ||
| 184 | + /// @brief PF Keys | ||
| 185 | + enum PAKey : uint8_t { | ||
| 186 | + PA_1, | ||
| 187 | + PA_2, | ||
| 188 | + PA_3 | ||
| 189 | + }; | ||
| 190 | + | ||
| 191 | + /// @brief Actions keys | ||
| 192 | + enum Action : uint8_t { | ||
| 193 | + ENTER, ///< @brief Enter key | ||
| 194 | + ERASE, | ||
| 195 | + ERASE_EOF, | ||
| 196 | + ERASE_EOL, | ||
| 197 | + ERASE_INPUT, | ||
| 198 | + KYBD_RESET, | ||
| 199 | + NEWLINE, | ||
| 200 | + CLEAR, | ||
| 201 | + SELECT_FIELD, | ||
| 202 | + SELECT_ALL, | ||
| 203 | + UNSELECT, | ||
| 204 | + RESELECT, | ||
| 205 | + CHAR_DELETE, | ||
| 206 | + DUP, | ||
| 207 | + FIELDMARK, | ||
| 208 | + BACKSPACE, | ||
| 209 | + WORD_PREVIOUS, | ||
| 210 | + WORD_NEXT, | ||
| 211 | + FIELD_END, ///< @brief Move the cursor to the first blank after the last nonblank in the field. | ||
| 212 | + FIELD_FIRST, ///< @brief Move to first unprotected field on screen. | ||
| 213 | + FIELD_NEXT, ///< @brief Jump to the next field. | ||
| 214 | + FIELD_PREVIOUS, ///< @brief Tab backward to previous field. | ||
| 215 | + ATTN, ///< @brief ATTN key, per RFC 2355. Sends IP, regardless. | ||
| 216 | + BREAK, | ||
| 217 | + WORD_DELETE, ///< @brief Backspaces the cursor until it hits the front of a word (does a ^W). | ||
| 218 | + FIELD_DELETE, ///< @brief Delete field key (does a ^U). | ||
| 219 | + SYSREQ, | ||
| 220 | + KYBD_UNLOCK, ///< @brief Unlock the keyboard if it was locked by operator error. | ||
| 221 | + }; | ||
| 222 | + | ||
| 223 | + /// @brief TN3270 Session. | ||
| 224 | + class TN3270_PUBLIC Session { | ||
| 225 | + protected: | ||
| 226 | + Session(); | ||
| 227 | + | ||
| 228 | + /// @brief Write information to log file. | ||
| 229 | + void info(const char *fmt, ...) const; | ||
| 230 | + | ||
| 231 | + /// @brief Write warning to log file. | ||
| 232 | + void warning(const char *fmt, ...) const; | ||
| 233 | + | ||
| 234 | + /// @brief Write error to log file. | ||
| 235 | + void error(const char *fmt, ...) const; | ||
| 236 | + | ||
| 237 | + /// @brief Fire event. | ||
| 238 | + void fire(const Event &event); | ||
| 239 | + | ||
| 240 | + public: | ||
| 241 | + | ||
| 242 | + /// @brief Get an instance of the TN3270 session based on the supplied ID. | ||
| 243 | + static Session * getInstance(const char *id = nullptr); | ||
| 244 | + virtual ~Session(); | ||
| 245 | + | ||
| 246 | + // States | ||
| 247 | + virtual ProgramMessage getProgramMessage() const = 0; | ||
| 248 | + virtual ConnectionState getConnectionState() const = 0; | ||
| 249 | + virtual SSLState getSSLState() const = 0; | ||
| 250 | + | ||
| 251 | + // Contents | ||
| 252 | + virtual std::string toString(int baddr = 0, int len = -1, char lf = '\n') const = 0; | ||
| 253 | + virtual std::string toString(unsigned int row, unsigned int col, int len, char lf = '\n') const = 0; | ||
| 254 | + | ||
| 255 | + /// @brief Input string. | ||
| 256 | + virtual void push(const char *text, size_t length) = 0; | ||
| 257 | + virtual void push(int baddr, const char *text, int length) = 0; | ||
| 258 | + virtual void push(int row, int col, const char *text, int length) = 0; | ||
| 259 | + | ||
| 260 | + inline void push(const std::string &text) { | ||
| 261 | + push(-1,text.c_str(),text.size()); | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + inline void push(int baddr, const std::string &text) { | ||
| 265 | + push(baddr,text.c_str(),text.size()); | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + inline void push(int row, int col, const std::string &text) { | ||
| 269 | + push(row,col,text.c_str(),text.size()); | ||
| 270 | + } | ||
| 271 | + | ||
| 272 | + void push(const PFKey key); | ||
| 273 | + void push(const PAKey key); | ||
| 274 | + virtual void push(const Action action) = 0; | ||
| 275 | + | ||
| 276 | + /// @brief Get contents of field ad address. | ||
| 277 | + virtual void pop(int baddr, std::string &text) = 0; | ||
| 278 | + | ||
| 279 | + /// @brief Get contents of field at position. | ||
| 280 | + virtual void pop(int row, int col, std::string &text) = 0; | ||
| 281 | + | ||
| 282 | + /// @brief Get contents of field at cursor position. | ||
| 283 | + virtual void pop(std::string &text) = 0; | ||
| 284 | + | ||
| 285 | + /** | ||
| 286 | + * @brief Input string parsing control char. | ||
| 287 | + */ | ||
| 288 | + LIB3270_KEYBOARD_LOCK_STATE input(const std::string &str, const char control_char = '@'); | ||
| 289 | + | ||
| 290 | + // Properties. | ||
| 291 | + virtual void getProperty(const char *name, int &value) const = 0; | ||
| 292 | + virtual void getProperty(const char *name, unsigned int &value) const = 0; | ||
| 293 | + virtual void getProperty(const char *name, std::string &value) const = 0; | ||
| 294 | + virtual void getProperty(const char *name, bool &value) const = 0; | ||
| 295 | + virtual void setProperty(const char *name, const int value) = 0; | ||
| 296 | + virtual void setProperty(const char *name, const char *value) = 0; | ||
| 297 | + | ||
| 298 | + virtual std::string getVersion() const = 0; | ||
| 299 | + virtual std::string getRevision() const = 0; | ||
| 300 | + virtual std::string getLUName() const = 0; | ||
| 301 | + virtual LIB3270_KEYBOARD_LOCK_STATE getKeyboardLockState() const = 0; | ||
| 302 | + | ||
| 303 | + virtual std::string getHostURL() const = 0; | ||
| 304 | + virtual void setHostURL(const char *url) = 0; | ||
| 305 | + | ||
| 306 | + virtual void setUnlockDelay(unsigned short delay = 350) = 0; | ||
| 307 | + virtual void setLockOnOperatorError(bool lock = true) = 0; | ||
| 308 | + | ||
| 309 | + virtual unsigned short getScreenWidth() const = 0; | ||
| 310 | + virtual unsigned short getScreenHeight() const = 0; | ||
| 311 | + virtual unsigned short getScreenLength() const = 0; | ||
| 312 | + | ||
| 313 | + /// @brief Set cursor address. | ||
| 314 | + virtual unsigned short setCursor(int addr = -1) = 0; | ||
| 315 | + | ||
| 316 | + /// @brief Set cursor position. | ||
| 317 | + virtual unsigned short setCursor(unsigned short row, unsigned short col) = 0; | ||
| 318 | + | ||
| 319 | + /// @brief Get cursor address | ||
| 320 | + virtual unsigned short getCursorAddress() = 0; | ||
| 321 | + | ||
| 322 | + /// @brief Set local charset. | ||
| 323 | + virtual void setCharSet(const char *charset = NULL) = 0; | ||
| 324 | + | ||
| 325 | + // Actions | ||
| 326 | + | ||
| 327 | + /// @brief Execute action by name. | ||
| 328 | + virtual void action(const char *action_name) = 0; | ||
| 329 | + | ||
| 330 | + // Connect/disconnect | ||
| 331 | + virtual void connect(const char *url = nullptr, int seconds = DEFAULT_TIMEOUT) = 0; | ||
| 332 | + virtual void disconnect() = 0; | ||
| 333 | + | ||
| 334 | + /// @brief Wait. | ||
| 335 | + virtual void wait(time_t seconds) const = 0; | ||
| 336 | + | ||
| 337 | + /// @brief Wait until session state changes to "ready". | ||
| 338 | + virtual void waitForReady(time_t timeout = DEFAULT_TIMEOUT) const = 0; | ||
| 339 | + | ||
| 340 | + /// @brief Wait for screen changes. | ||
| 341 | + virtual void waitForChange(time_t seconds = DEFAULT_TIMEOUT) const = 0; | ||
| 342 | + | ||
| 343 | + /// @brief Wait for screen changes. | ||
| 344 | + virtual LIB3270_KEYBOARD_LOCK_STATE waitForKeyboardUnlock(time_t seconds = DEFAULT_TIMEOUT) const = 0; | ||
| 345 | + | ||
| 346 | + /// @brief Send PF. | ||
| 347 | + virtual void pfkey(unsigned short value) = 0; | ||
| 348 | + | ||
| 349 | + /// @brief Send PA. | ||
| 350 | + virtual void pakey(unsigned short value) = 0; | ||
| 351 | + | ||
| 352 | + /// @brief Request print | ||
| 353 | + virtual void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) = 0; | ||
| 354 | + | ||
| 355 | + /// @brief Insert event listener. | ||
| 356 | + // void insert(Event::Type type, std::function <void(const Event &event)> listener); | ||
| 357 | + | ||
| 358 | + // Misc | ||
| 359 | + | ||
| 360 | + /// @brief Search | ||
| 361 | + size_t find(const char * str, size_t pos = 0) const; | ||
| 362 | + | ||
| 363 | + /// @brief Compare contents. | ||
| 364 | + int compare(int baddr, const char* s, int len = -1) const; | ||
| 365 | + int compare(unsigned int row, unsigned int col, const char* s, int len = -1) const; | ||
| 366 | + | ||
| 367 | + }; | ||
| 368 | + | ||
| 369 | + /// @brief TN3270 Host | ||
| 370 | + class TN3270_PUBLIC Host : public std::basic_streambuf<char, std::char_traits<char> > { | ||
| 371 | + private: | ||
| 372 | + | ||
| 373 | + /// @brief Connection with the host | ||
| 374 | + Session *session; | ||
| 375 | + | ||
| 376 | + /// @brief How much seconds we wait for the terminal to be ready? | ||
| 377 | + time_t timeout; | ||
| 378 | + | ||
| 379 | + protected: | ||
| 380 | + | ||
| 381 | + /// @brief Writes characters to the associated file from the put area | ||
| 382 | + int sync() override; | ||
| 383 | + | ||
| 384 | + /// @brief Writes characters to the associated output sequence from the put area. | ||
| 385 | + int overflow(int c) override; | ||
| 386 | + | ||
| 387 | + /* | ||
| 388 | + /// @brief Write information to log file. | ||
| 389 | + void info(const char *fmt, ...) const; | ||
| 390 | + | ||
| 391 | + /// @brief Write warning to log file. | ||
| 392 | + void warning(const char *fmt, ...) const; | ||
| 393 | + | ||
| 394 | + /// @brief Write error to log file. | ||
| 395 | + void error(const char *fmt, ...) const; | ||
| 396 | + */ | ||
| 397 | + | ||
| 398 | + public: | ||
| 399 | + Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT); | ||
| 400 | + ~Host(); | ||
| 401 | + | ||
| 402 | + inline bool operator==(ConnectionState state) const noexcept { | ||
| 403 | + return session->getConnectionState() == state; | ||
| 404 | + } | ||
| 405 | + | ||
| 406 | + // Contents | ||
| 407 | + | ||
| 408 | + /** | ||
| 409 | + * @brief Input string parsing control char. | ||
| 410 | + */ | ||
| 411 | + LIB3270_KEYBOARD_LOCK_STATE input(const char *text, int length = -1, const char control_char = '@'); | ||
| 412 | + | ||
| 413 | + Host & push(int baddr, const std::string &text); | ||
| 414 | + Host & push(int row, int col, const std::string &text); | ||
| 415 | + Host & push(const std::string &text); | ||
| 416 | + | ||
| 417 | + Host & push(int baddr, const char *str, int len = -1); | ||
| 418 | + Host & push(int row, int col, const char *str, int len = -1); | ||
| 419 | + Host & push(const char *str, int len = -1); | ||
| 420 | + | ||
| 421 | + Host & pop(int baddr, std::string &text); | ||
| 422 | + Host & pop(int row, int col, std::string &text); | ||
| 423 | + Host & pop(std::string &text); | ||
| 424 | + | ||
| 425 | + std::string toString() const; | ||
| 426 | + std::string toString(int baddr, int len = -1, char lf = '\n') const; | ||
| 427 | + std::string toString(unsigned int row, unsigned int col, int len = -1, char lf = '\n') const; | ||
| 428 | + | ||
| 429 | + template<typename T> | ||
| 430 | + Host & push(T value) { | ||
| 431 | + session->push(value); | ||
| 432 | + sync(); | ||
| 433 | + return *this; | ||
| 434 | + } | ||
| 435 | + | ||
| 436 | + template<typename T> | ||
| 437 | + Host & pop(T value) { | ||
| 438 | + sync(); | ||
| 439 | + session->pop(value); | ||
| 440 | + return *this; | ||
| 441 | + } | ||
| 442 | + | ||
| 443 | + // Actions | ||
| 444 | + Host & connect(const char *url = nullptr); | ||
| 445 | + Host & disconnect(); | ||
| 446 | + Host & waitForReady(time_t seconds); | ||
| 447 | + | ||
| 448 | + inline Host & waitForReady() { | ||
| 449 | + return waitForReady(this->timeout); | ||
| 450 | + } | ||
| 451 | + | ||
| 452 | + inline LIB3270_KEYBOARD_LOCK_STATE waitForKeyboardUnlock() noexcept { | ||
| 453 | + return this->session->waitForKeyboardUnlock(timeout); | ||
| 454 | + } | ||
| 455 | + | ||
| 456 | + /// @brief Execute action by name. | ||
| 457 | + inline Host & action(const char *action_name) { | ||
| 458 | + session->action(action_name); | ||
| 459 | + return *this; | ||
| 460 | + } | ||
| 461 | + | ||
| 462 | + inline ProgramMessage getProgramMessage() const { | ||
| 463 | + return session->getProgramMessage(); | ||
| 464 | + } | ||
| 465 | + | ||
| 466 | + operator bool() const; | ||
| 467 | + | ||
| 468 | + inline operator ProgramMessage() const { | ||
| 469 | + return getProgramMessage(); | ||
| 470 | + } | ||
| 471 | + | ||
| 472 | + inline ConnectionState getConnectionState() const { | ||
| 473 | + return session->getConnectionState(); | ||
| 474 | + } | ||
| 475 | + | ||
| 476 | + bool isReady() const; | ||
| 477 | + bool isConnected() const; | ||
| 478 | + | ||
| 479 | + inline operator ConnectionState() const { | ||
| 480 | + return getConnectionState(); | ||
| 481 | + } | ||
| 482 | + | ||
| 483 | + /// @brief Set cursor address. | ||
| 484 | + inline Host & setCursor(unsigned short addr) { | ||
| 485 | + session->setCursor(addr); | ||
| 486 | + return *this; | ||
| 487 | + } | ||
| 488 | + | ||
| 489 | + /// @brief Set cursor position. | ||
| 490 | + inline Host & setCursor(unsigned short row, unsigned short col) { | ||
| 491 | + session->setCursor(row,col); | ||
| 492 | + return *this; | ||
| 493 | + } | ||
| 494 | + | ||
| 495 | + /// @brief Get cursor address | ||
| 496 | + inline unsigned short getCursorAddress() { | ||
| 497 | + return session->getCursorAddress(); | ||
| 498 | + } | ||
| 499 | + | ||
| 500 | + inline void setUnlockDelay(unsigned short delay) { | ||
| 501 | + return session->setUnlockDelay(delay); | ||
| 502 | + } | ||
| 503 | + | ||
| 504 | + inline void setLockOnOperatorError(bool lock = true) { | ||
| 505 | + return session->setLockOnOperatorError(lock); | ||
| 506 | + } | ||
| 507 | + | ||
| 508 | + inline void setCharSet(const char *charset) { | ||
| 509 | + return session->setCharSet(charset); | ||
| 510 | + } | ||
| 511 | + | ||
| 512 | + // Get properties | ||
| 513 | + | ||
| 514 | + /// @brief Get lib3270 version. | ||
| 515 | + inline std::string getVersion() const { | ||
| 516 | + return session->getVersion(); | ||
| 517 | + } | ||
| 518 | + | ||
| 519 | + /// @brief Get lib3270 revision. | ||
| 520 | + std::string getRevision() const { | ||
| 521 | + return session->getRevision(); | ||
| 522 | + } | ||
| 523 | + | ||
| 524 | + /// @brief Get LU Name. | ||
| 525 | + std::string getLUName() const { | ||
| 526 | + return session->getLUName(); | ||
| 527 | + } | ||
| 528 | + | ||
| 529 | + inline LIB3270_KEYBOARD_LOCK_STATE getKeyboardLockState() const { | ||
| 530 | + return session->getKeyboardLockState(); | ||
| 531 | + } | ||
| 532 | + | ||
| 533 | + // Actions | ||
| 534 | + | ||
| 535 | + /// @brief Send PF. | ||
| 536 | + inline Host & pfkey(unsigned short value) { | ||
| 537 | + session->pfkey(value); | ||
| 538 | + return *this; | ||
| 539 | + } | ||
| 540 | + | ||
| 541 | + /// @brief Send PA. | ||
| 542 | + inline Host & pakey(unsigned short value) { | ||
| 543 | + session->pakey(value); | ||
| 544 | + return *this; | ||
| 545 | + } | ||
| 546 | + | ||
| 547 | + /// @brief Request print | ||
| 548 | + inline Host & print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) { | ||
| 549 | + session->print(option); | ||
| 550 | + return *this; | ||
| 551 | + } | ||
| 552 | + | ||
| 553 | + /// @brief Wait. | ||
| 554 | + inline Host & wait(unsigned short seconds) { | ||
| 555 | + session->wait(seconds); | ||
| 556 | + return *this; | ||
| 557 | + } | ||
| 558 | + | ||
| 559 | + /// @brief Wait for update. | ||
| 560 | + inline Host & waitForChange(unsigned short seconds) { | ||
| 561 | + session->waitForChange(seconds); | ||
| 562 | + return *this; | ||
| 563 | + } | ||
| 564 | + | ||
| 565 | + // Set contents. | ||
| 566 | + | ||
| 567 | + /// @brief Input string. | ||
| 568 | + /// | ||
| 569 | + /// Input the supplied string processing commands delimited by the control char in | ||
| 570 | + /// the same way of the old HLLAPI. | ||
| 571 | + /// | ||
| 572 | + /// @param text String with the text to input. | ||
| 573 | + /// @param control_char Control character used to identify commands. | ||
| 574 | + // Host & input(const char *text, const char control_char = '@'); | ||
| 575 | + | ||
| 576 | + // Host & input(const char *text, size_t sz); | ||
| 577 | + | ||
| 578 | + /// @brief Set field at current position, jumps to next writable field. | ||
| 579 | + inline Host & push(const char *text) { | ||
| 580 | + session->push(text,-1); | ||
| 581 | + return *this; | ||
| 582 | + }; | ||
| 583 | + | ||
| 584 | + /* | ||
| 585 | + // Event listeners | ||
| 586 | + inline Host & insert(Event::Type type, std::function <void(const Event &event)> listener) noexcept { | ||
| 587 | + session->insert(type, listener); | ||
| 588 | + return *this; | ||
| 589 | + } | ||
| 590 | + */ | ||
| 591 | + | ||
| 592 | + | ||
| 593 | + }; | ||
| 594 | + | ||
| 595 | + } | ||
| 596 | + | ||
| 597 | + TN3270_PUBLIC const char * toCharString(const TN3270::ProgramMessage programMessage); | ||
| 598 | + TN3270_PUBLIC const char * toCharString(const TN3270::ConnectionState connectionState); | ||
| 599 | + TN3270_PUBLIC const char * toCharString(const TN3270::Action action); | ||
| 600 | + | ||
| 601 | + template <typename T> | ||
| 602 | + inline TN3270_PUBLIC TN3270::Session & operator<<(TN3270::Session& session, const T value) { | ||
| 603 | + return session.push(value); | ||
| 604 | + } | ||
| 605 | + | ||
| 606 | + template <typename T> | ||
| 607 | + inline TN3270_PUBLIC TN3270::Session & operator>>(TN3270::Session& session, const T value) { | ||
| 608 | + return session.pop(value); | ||
| 609 | + } | ||
| 610 | + | ||
| 611 | + template <typename T> | ||
| 612 | + inline TN3270_PUBLIC TN3270::Host & operator<<(TN3270::Host& host, const T value) { | ||
| 613 | + return host.push(value); | ||
| 614 | + } | ||
| 615 | + | ||
| 616 | + inline std::ostream & operator<<(std::ostream &stream, const TN3270::Host& host) { | ||
| 617 | + stream << host.toString(); | ||
| 618 | + return stream; | ||
| 619 | + } | ||
| 620 | + | ||
| 621 | + | ||
| 622 | +#endif | ||
| 623 | + | ||
| 624 | +#endif // LIB3270_IPC_H_INCLUDED |
| @@ -0,0 +1,165 @@ | @@ -0,0 +1,165 @@ | ||
| 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 lib3270/ipc/request.h | ||
| 32 | + * | ||
| 33 | + * @brief Declares the TN3270 IPC Request object. | ||
| 34 | + * | ||
| 35 | + * @author perry.werneck@gmail.com | ||
| 36 | + * | ||
| 37 | + */ | ||
| 38 | + | ||
| 39 | +#ifndef IPC3270_REQUEST_H_INCLUDED | ||
| 40 | + | ||
| 41 | + #define IPC3270_REQUEST_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 | + namespace TN3270 { | ||
| 54 | + | ||
| 55 | + namespace IPC { | ||
| 56 | + | ||
| 57 | + class Session; | ||
| 58 | + | ||
| 59 | + /// @brief PW3270 IPC Request/Response. | ||
| 60 | + class TN3270_PUBLIC Request { | ||
| 61 | + private: | ||
| 62 | + | ||
| 63 | +#ifdef _WIN32 | ||
| 64 | + /// @brief Pipe Handle. | ||
| 65 | + HANDLE hPipe; | ||
| 66 | + | ||
| 67 | + /// @brief IPC Data type. | ||
| 68 | + enum Type : uint8_t { | ||
| 69 | + String = 's', | ||
| 70 | + Boolean = 'b', | ||
| 71 | + Uchar = 'y', | ||
| 72 | + Int16 = 'n', | ||
| 73 | + Uint16 = 'q', | ||
| 74 | + Int32 = 'i', | ||
| 75 | + Int32x = 'h', | ||
| 76 | + Uint32 = 'u', | ||
| 77 | + Int64 = 'x', | ||
| 78 | + Uint64 = 't' | ||
| 79 | + }; | ||
| 80 | + | ||
| 81 | + struct { | ||
| 82 | + DWORD length; ///< @brief Length of input buffer. | ||
| 83 | + DWORD used; ///< @brief Length of used block. | ||
| 84 | + DWORD current; ///< @brief Offset of the current argument. | ||
| 85 | + uint8_t * block; | ||
| 86 | + } in; | ||
| 87 | + | ||
| 88 | + struct { | ||
| 89 | + DWORD length; | ||
| 90 | + DWORD used; | ||
| 91 | + uint8_t * block; | ||
| 92 | + } out; | ||
| 93 | + | ||
| 94 | + struct DataBlock { | ||
| 95 | + Type type; | ||
| 96 | + }; | ||
| 97 | + | ||
| 98 | + /// @brief Store value on data block. | ||
| 99 | + DataBlock * pushBlock(const void *ptr, size_t len); | ||
| 100 | + | ||
| 101 | + /// @brief Get next argument. | ||
| 102 | + DataBlock * getNextBlock() const; | ||
| 103 | + | ||
| 104 | + /// @brief Pointer to number of variants in the output buffer. | ||
| 105 | + uint16_t * outvalues; | ||
| 106 | + | ||
| 107 | +#else | ||
| 108 | + struct { | ||
| 109 | + DBusMessage * in; | ||
| 110 | + DBusMessage * out; | ||
| 111 | + DBusMessageIter iter; | ||
| 112 | + | ||
| 113 | + } msg; | ||
| 114 | + DBusConnection * conn; | ||
| 115 | + | ||
| 116 | + Request(DBusConnection * conn); | ||
| 117 | + | ||
| 118 | +#endif // _WIN32 | ||
| 119 | + | ||
| 120 | + protected: | ||
| 121 | + | ||
| 122 | +#ifdef _WIN32 | ||
| 123 | + Request(HANDLE hPipe, const char *name, uint16_t type); | ||
| 124 | +#endif // _WIN32 | ||
| 125 | + | ||
| 126 | + public: | ||
| 127 | + | ||
| 128 | + /// @brief Create a method call. | ||
| 129 | + /// | ||
| 130 | + /// @param session Session object. | ||
| 131 | + /// @param method Method name. | ||
| 132 | + /// | ||
| 133 | + Request(const IPC::Session &session, const char *method); | ||
| 134 | + | ||
| 135 | + /// @brief Create a get/set property call. | ||
| 136 | + /// | ||
| 137 | + /// @param session Session object. | ||
| 138 | + /// @param isSet true if this is a setProperty call. | ||
| 139 | + /// @param property Property name. | ||
| 140 | + /// | ||
| 141 | + Request(const IPC::Session &session, bool isSet, const char *property); | ||
| 142 | + | ||
| 143 | + ~Request(); | ||
| 144 | + | ||
| 145 | + Request & call(); | ||
| 146 | + | ||
| 147 | + // Push values | ||
| 148 | + Request & push(const char *arg); | ||
| 149 | + Request & push(const bool arg); | ||
| 150 | + Request & push(const int32_t arg); | ||
| 151 | + Request & push(const uint32_t arg); | ||
| 152 | + Request & push(const uint8_t arg); | ||
| 153 | + | ||
| 154 | + // Pop values | ||
| 155 | + Request & pop(std::string &value); | ||
| 156 | + Request & pop(int &value); | ||
| 157 | + Request & pop(unsigned int &value); | ||
| 158 | + | ||
| 159 | + }; | ||
| 160 | + | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | +#endif // IPC3270_REQUEST_H_INCLUDED |
client/src/session/remote/linux/request.cc
| @@ -47,13 +47,7 @@ | @@ -47,13 +47,7 @@ | ||
| 47 | 47 | ||
| 48 | namespace TN3270 { | 48 | namespace TN3270 { |
| 49 | 49 | ||
| 50 | - IPC::Request::Request(const IPC::Session &session) { | ||
| 51 | - this->conn = session.conn; | ||
| 52 | - this->msg.in = nullptr; | ||
| 53 | - this->msg.out = nullptr; | ||
| 54 | - } | ||
| 55 | - | ||
| 56 | - IPC::Request::Request(const IPC::Session &session, const char *method) : Request(session) { | 50 | + IPC::Request::Request(const IPC::Session &session, const char *method) : Request(session.conn) { |
| 57 | 51 | ||
| 58 | #ifdef DEBUG | 52 | #ifdef DEBUG |
| 59 | clog << "Creating request \"" << method << "\"" << endl; | 53 | clog << "Creating request \"" << method << "\"" << endl; |
| @@ -72,7 +66,7 @@ | @@ -72,7 +66,7 @@ | ||
| 72 | 66 | ||
| 73 | } | 67 | } |
| 74 | 68 | ||
| 75 | - IPC::Request::Request(const IPC::Session &session, bool isSet, const char *property) : Request(session) { | 69 | + IPC::Request::Request(const IPC::Session &session, bool isSet, const char *property) : Request(session.conn) { |
| 76 | 70 | ||
| 77 | this->msg.out = dbus_message_new_method_call( | 71 | this->msg.out = dbus_message_new_method_call( |
| 78 | session.name.c_str(), // Destination | 72 | session.name.c_str(), // Destination |
common/src/include/lib3270/ipc-glib.h
| @@ -1,138 +0,0 @@ | @@ -1,138 +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. Registro no INPI sob | ||
| 5 | - * o nome G3270. | ||
| 6 | - * | ||
| 7 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 8 | - * | ||
| 9 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 10 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 11 | - * Free Software Foundation. | ||
| 12 | - * | ||
| 13 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 14 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 15 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 16 | - * obter mais detalhes. | ||
| 17 | - * | ||
| 18 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 19 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
| 20 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 21 | - * | ||
| 22 | - * Este programa está nomeado como - e possui - linhas de código. | ||
| 23 | - * | ||
| 24 | - * Contatos: | ||
| 25 | - * | ||
| 26 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 27 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
| 28 | - * | ||
| 29 | - */ | ||
| 30 | - | ||
| 31 | - /** | ||
| 32 | - * @brief Common definitions for pw3270 IPC plugin. | ||
| 33 | - * | ||
| 34 | - * @author Perry Werneck <perry.werneck@gmail.com> | ||
| 35 | - * | ||
| 36 | - */ | ||
| 37 | - | ||
| 38 | -#ifndef PW3270_IPC_H_INCLUDED | ||
| 39 | - | ||
| 40 | - #define PW3270_IPC_H_INCLUDED | ||
| 41 | - | ||
| 42 | - #ifdef _WIN32 | ||
| 43 | - | ||
| 44 | - #define PW3270_IPC_SESSION_BUS_NAME "\\\\.\\pipe\\%s\\%c" | ||
| 45 | - | ||
| 46 | - #else | ||
| 47 | - | ||
| 48 | - #define PW3270_IPC_SESSION_BUS_NAME "br.com.bb.%s.%c" | ||
| 49 | - #define PW3270_IPC_SESSION_INTERFACE_NAME "br.com.bb.tn3270.session" | ||
| 50 | - #define PW3270_IPC_SESSION_OBJECT_PATH "/br/com/bb/tn3270/session" | ||
| 51 | - | ||
| 52 | - #define PW3270_IPC_SERVICE_BUS_NAME "br.com.bb.tn3270.service" | ||
| 53 | - #define PW3270_IPC_SERVICE_INTERFACE_NAME "br.com.bb.tn3270.service" | ||
| 54 | - #define PW3270_IPC_SERVICE_OBJECT_PATH "/br/com/bb/tn3270/service" | ||
| 55 | - | ||
| 56 | - #endif // _WIN32 | ||
| 57 | - | ||
| 58 | - #include <glib.h> | ||
| 59 | - #include <gtk/gtk.h> | ||
| 60 | - #include <lib3270.h> | ||
| 61 | - | ||
| 62 | - G_BEGIN_DECLS | ||
| 63 | - | ||
| 64 | - #define GLIB_TYPE_IPC3270_RESPONSE (ipc3270Response_get_type ()) | ||
| 65 | - #define IPC3270_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLIB_TYPE_IPC3270_RESPONSE, ipc3270Response)) | ||
| 66 | - #define IPC3270_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLIB_TYPE_IPC3270_RESPONSE, ipc3270ResponseClass)) | ||
| 67 | - #define IS_IPC3270_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLIB_TYPE_IPC3270_RESPONSE)) | ||
| 68 | - #define IS_IPC3270_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLIB_TYPE_IPC3270_RESPONSE)) | ||
| 69 | - #define IPC3270_RESPONSE_GET_CLASS(obj) G_TYPE_INSTANCE_GET_CLASS ((obj), GLIB_TYPE_IPC3270_RESPONSE, ipc3270ResponseClass)) | ||
| 70 | - | ||
| 71 | - typedef struct _ipc3270Response ipc3270Response; | ||
| 72 | - typedef struct _ipc3270ResponseClass ipc3270ResponseClass; | ||
| 73 | - | ||
| 74 | - GObject * ipc3270_response_new(); | ||
| 75 | - | ||
| 76 | - void ipc3270_response_append_int32(GObject *object, gint32 value); | ||
| 77 | - void ipc3270_response_append_uint32(GObject *object, guint32 value); | ||
| 78 | - void ipc3270_response_append_string(GObject *object, const gchar *text); | ||
| 79 | - gboolean ipc3270_response_has_values(GObject *object); | ||
| 80 | - GVariant * ipc3270_response_steal_value(GObject *object); | ||
| 81 | - | ||
| 82 | - | ||
| 83 | - #define GLIB_TYPE_IPC3270 (ipc3270_get_type ()) | ||
| 84 | - #define IPC3270(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLIB_TYPE_IPC3270, ipc3270)) | ||
| 85 | - #define IPC3270_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLIB_TYPE_IPC3270, ipc3270Class)) | ||
| 86 | - #define IS_IPC3270(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLIB_TYPE_IPC3270)) | ||
| 87 | - #define IS_IPC3270_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLIB_TYPE_IPC3270)) | ||
| 88 | - #define IPC3270_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLIB_TYPE_IPC3270, ipc3270Class)) | ||
| 89 | - | ||
| 90 | - typedef struct _ipc3270 ipc3270; | ||
| 91 | - typedef struct _ipc3270Class ipc3270Class; | ||
| 92 | - | ||
| 93 | - GObject * ipc3270_new(); | ||
| 94 | - GType ipc3270_get_type(void); | ||
| 95 | - void ipc3270_set_terminal_widget(GObject *object, GtkWidget *widget); | ||
| 96 | - void ipc3270_export_object(GObject *object, const char *name, GError **error); | ||
| 97 | - | ||
| 98 | - void ipc3270_add_terminal_introspection(GString *string); | ||
| 99 | - | ||
| 100 | - const gchar * ipc3270_get_display_charset(GObject *object); | ||
| 101 | - H3270 * ipc3270_get_session(GObject *object); | ||
| 102 | - | ||
| 103 | - GQuark ipc3270_get_error_domain(GObject *object); | ||
| 104 | - | ||
| 105 | - void ipc3270_set_error(GObject *object, int errcode, GError **error); | ||
| 106 | - | ||
| 107 | - int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *request, GObject *response, GError **error); | ||
| 108 | - gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVariant *value, GError **error); | ||
| 109 | - GVariant * ipc3270_get_property(GObject *object, const gchar *property_name, GError **error); | ||
| 110 | - | ||
| 111 | - #ifdef _WIN32 | ||
| 112 | - unsigned char * ipc3270_pack(const gchar *name, int id, GVariant *values, size_t * szPacket); | ||
| 113 | - unsigned char * ipc3270_pack_value(const gchar *name, int id, GVariant *value, size_t * szPacket); | ||
| 114 | - unsigned char * ipc3270_pack_error(const GError *error, size_t * szPacket); | ||
| 115 | - GVariant * ipc3270_unpack(const unsigned char *packet, int *id); | ||
| 116 | - #endif // _WIN32 | ||
| 117 | - | ||
| 118 | - G_END_DECLS | ||
| 119 | - | ||
| 120 | - #if ! GLIB_CHECK_VERSION(2,44,0) | ||
| 121 | - G_GNUC_INTERNAL void ipc3270_autoptr_cleanup_generic_gfree(void *p); | ||
| 122 | - #define g_autofree __attribute__((cleanup(ipc3270_autoptr_cleanup_generic_gfree))) | ||
| 123 | - #endif // ! GLIB(2,44,0) | ||
| 124 | - | ||
| 125 | - #ifdef DEBUG | ||
| 126 | - #define debug( fmt, ... ) fprintf(stderr,"%s(%d) " fmt "\n", __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr); | ||
| 127 | - #else | ||
| 128 | - #define debug(...) /* __VA_ARGS */ | ||
| 129 | - #endif | ||
| 130 | - | ||
| 131 | - typedef struct _ipc_method_int_arg { | ||
| 132 | - const gchar *name; | ||
| 133 | - int (*call)(H3270 *hSession, int keycode); | ||
| 134 | - } IPC_METHOD_INT_ARG; | ||
| 135 | - | ||
| 136 | - const IPC_METHOD_INT_ARG * ipc3270_get_int_arg_methods(); | ||
| 137 | - | ||
| 138 | -#endif // PW3270_IPC_H_INCLUDED |
common/src/include/lib3270/ipc.h
| @@ -1,624 +0,0 @@ | @@ -1,624 +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 ipc.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 | -#ifndef LIB3270_IPC_H_INCLUDED | ||
| 31 | - | ||
| 32 | - #define LIB3270_IPC_H_INCLUDED 1 | ||
| 33 | - | ||
| 34 | - #include <iostream> | ||
| 35 | - #include <cstdarg> | ||
| 36 | - #include <vector> | ||
| 37 | - #include <functional> | ||
| 38 | - #include <lib3270.h> | ||
| 39 | - #include <lib3270/keyboard.h> | ||
| 40 | - | ||
| 41 | - #if defined(_WIN32) | ||
| 42 | - | ||
| 43 | - #define TN3270_PUBLIC __declspec (dllexport) | ||
| 44 | - #define TN3270_PRIVATE | ||
| 45 | - | ||
| 46 | - #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) | ||
| 47 | - | ||
| 48 | - #define TN3270_PUBLIC | ||
| 49 | - #define TN3270_PRIVATE | ||
| 50 | - | ||
| 51 | - #elif defined(__GNUC__) | ||
| 52 | - | ||
| 53 | - #define TN3270_PUBLIC __attribute__((visibility("default"))) | ||
| 54 | - #define TN3270_PRIVATE __attribute__((visibility("hidden"))) | ||
| 55 | - | ||
| 56 | - #else | ||
| 57 | - | ||
| 58 | - #error Unable to set visibility attribute | ||
| 59 | - | ||
| 60 | - #endif | ||
| 61 | - | ||
| 62 | -#ifdef __cplusplus | ||
| 63 | - | ||
| 64 | - #include <string> | ||
| 65 | - | ||
| 66 | - namespace TN3270 { | ||
| 67 | - | ||
| 68 | - class Host; | ||
| 69 | - class Controller; | ||
| 70 | - | ||
| 71 | - #define DEFAULT_TIMEOUT 5 | ||
| 72 | - | ||
| 73 | - TN3270_PUBLIC const char * getVersion(); | ||
| 74 | - TN3270_PUBLIC const char * getRevision(); | ||
| 75 | - | ||
| 76 | - class TN3270_PUBLIC Event { | ||
| 77 | - public: | ||
| 78 | - enum Type : uint8_t { | ||
| 79 | - All, ///< @brief All events (undefined). | ||
| 80 | - Popup, ///< @brief Popup message. | ||
| 81 | - Trace, ///< @brief Trace message. | ||
| 82 | - Message, ///< @brief Generic message. | ||
| 83 | - Connection ///< @brief Connect/Disconnect event. | ||
| 84 | - }; | ||
| 85 | - | ||
| 86 | - private: | ||
| 87 | - Type type; | ||
| 88 | - | ||
| 89 | - protected: | ||
| 90 | - Event(enum Type type); | ||
| 91 | - | ||
| 92 | - public: | ||
| 93 | - virtual ~Event(); | ||
| 94 | - | ||
| 95 | - /// @brief Check event type | ||
| 96 | - inline bool is(Event::Type type) const noexcept { | ||
| 97 | - return this->type == type; | ||
| 98 | - } | ||
| 99 | - | ||
| 100 | - /// @brief Check event type | ||
| 101 | - inline bool operator==(Event::Type type) const noexcept { | ||
| 102 | - return this->type == type; | ||
| 103 | - } | ||
| 104 | - | ||
| 105 | - inline operator Event::Type() const noexcept { | ||
| 106 | - return this->type; | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - /// @brief Get event description. | ||
| 110 | - virtual std::string toString() const = 0; | ||
| 111 | - | ||
| 112 | - }; | ||
| 113 | - | ||
| 114 | - enum ProgramMessage : uint8_t { | ||
| 115 | - MESSAGE_NONE = LIB3270_MESSAGE_NONE, ///< @brief No message | ||
| 116 | - MESSAGE_SYSWAIT = LIB3270_MESSAGE_SYSWAIT, ///< @brief -- | ||
| 117 | - MESSAGE_TWAIT = LIB3270_MESSAGE_TWAIT, ///< @brief -- | ||
| 118 | - MESSAGE_CONNECTED = LIB3270_MESSAGE_CONNECTED, ///< @brief Connected | ||
| 119 | - MESSAGE_DISCONNECTED = LIB3270_MESSAGE_DISCONNECTED, ///< @brief Disconnected from host | ||
| 120 | - MESSAGE_AWAITING_FIRST = LIB3270_MESSAGE_AWAITING_FIRST, ///< @brief -- | ||
| 121 | - MESSAGE_MINUS = LIB3270_MESSAGE_MINUS, ///< @brief -- | ||
| 122 | - MESSAGE_PROTECTED = LIB3270_MESSAGE_PROTECTED, ///< @brief -- | ||
| 123 | - MESSAGE_NUMERIC = LIB3270_MESSAGE_NUMERIC, ///< @brief -- | ||
| 124 | - MESSAGE_OVERFLOW = LIB3270_MESSAGE_OVERFLOW, ///< @brief -- | ||
| 125 | - MESSAGE_INHIBIT = LIB3270_MESSAGE_INHIBIT, ///< @brief -- | ||
| 126 | - MESSAGE_KYBDLOCK = LIB3270_MESSAGE_KYBDLOCK, ///< @brief Keyboard is locked | ||
| 127 | - | ||
| 128 | - MESSAGE_X = LIB3270_MESSAGE_X, ///< @brief -- | ||
| 129 | - MESSAGE_RESOLVING = LIB3270_MESSAGE_RESOLVING, ///< @brief Resolving hostname (running DNS query) | ||
| 130 | - MESSAGE_CONNECTING = LIB3270_MESSAGE_CONNECTING ///< @brief Connecting to host | ||
| 131 | - | ||
| 132 | - }; | ||
| 133 | - | ||
| 134 | - /// @brief connection state. | ||
| 135 | - enum ConnectionState : uint8_t { | ||
| 136 | - DISCONNECTED = LIB3270_NOT_CONNECTED, ///< @brief disconnected | ||
| 137 | - RESOLVING = LIB3270_RESOLVING, ///< @brief resolving hostname | ||
| 138 | - PENDING = LIB3270_PENDING, ///< @brief connection pending | ||
| 139 | - CONNECTED_INITIAL = LIB3270_CONNECTED_INITIAL, ///< @brief connected, no mode yet | ||
| 140 | - CONNECTED_ANSI = LIB3270_CONNECTED_ANSI, ///< @brief connected in NVT ANSI mode | ||
| 141 | - CONNECTED_3270 = LIB3270_CONNECTED_3270, ///< @brief connected in old-style 3270 mode | ||
| 142 | - CONNECTED_INITIAL_E = LIB3270_CONNECTED_INITIAL_E, ///< @brief connected in TN3270E mode, unnegotiated | ||
| 143 | - CONNECTED_NVT = LIB3270_CONNECTED_NVT, ///< @brief connected in TN3270E mode, NVT mode | ||
| 144 | - CONNECTED_SSCP = LIB3270_CONNECTED_SSCP, ///< @brief connected in TN3270E mode, SSCP-LU mode | ||
| 145 | - CONNECTED_TN3270E = LIB3270_CONNECTED_TN3270E, ///< @brief connected in TN3270E mode, 3270 mode | ||
| 146 | - }; | ||
| 147 | - | ||
| 148 | - enum SSLState : uint8_t { | ||
| 149 | - SSL_UNSECURE = LIB3270_SSL_UNSECURE, ///< @brief No secure connection | ||
| 150 | - SSL_SECURE = LIB3270_SSL_SECURE, ///< @brief Connection secure with CA check | ||
| 151 | - SSL_NEGOTIATED = LIB3270_SSL_NEGOTIATED, ///< @brief Connection secure, no CA, self-signed or expired CRL | ||
| 152 | - SSL_NEGOTIATING = LIB3270_SSL_NEGOTIATING, ///< @brief Negotiating SSL | ||
| 153 | - SSL_UNDEFINED = LIB3270_SSL_UNDEFINED ///< @brief Undefined | ||
| 154 | - }; | ||
| 155 | - | ||
| 156 | - /// @brief PF Keys | ||
| 157 | - enum PFKey : uint8_t { | ||
| 158 | - PF_1, | ||
| 159 | - PF_2, | ||
| 160 | - PF_3, | ||
| 161 | - PF_4, | ||
| 162 | - PF_5, | ||
| 163 | - PF_6, | ||
| 164 | - PF_7, | ||
| 165 | - PF_8, | ||
| 166 | - PF_9, | ||
| 167 | - PF_10, | ||
| 168 | - PF_11, | ||
| 169 | - PF_12, | ||
| 170 | - PF_13, | ||
| 171 | - PF_14, | ||
| 172 | - PF_15, | ||
| 173 | - PF_16, | ||
| 174 | - PF_17, | ||
| 175 | - PF_18, | ||
| 176 | - PF_19, | ||
| 177 | - PF_20, | ||
| 178 | - PF_21, | ||
| 179 | - PF_22, | ||
| 180 | - PF_23, | ||
| 181 | - PF_24 | ||
| 182 | - }; | ||
| 183 | - | ||
| 184 | - /// @brief PF Keys | ||
| 185 | - enum PAKey : uint8_t { | ||
| 186 | - PA_1, | ||
| 187 | - PA_2, | ||
| 188 | - PA_3 | ||
| 189 | - }; | ||
| 190 | - | ||
| 191 | - /// @brief Actions keys | ||
| 192 | - enum Action : uint8_t { | ||
| 193 | - ENTER, ///< @brief Enter key | ||
| 194 | - ERASE, | ||
| 195 | - ERASE_EOF, | ||
| 196 | - ERASE_EOL, | ||
| 197 | - ERASE_INPUT, | ||
| 198 | - KYBD_RESET, | ||
| 199 | - NEWLINE, | ||
| 200 | - CLEAR, | ||
| 201 | - SELECT_FIELD, | ||
| 202 | - SELECT_ALL, | ||
| 203 | - UNSELECT, | ||
| 204 | - RESELECT, | ||
| 205 | - CHAR_DELETE, | ||
| 206 | - DUP, | ||
| 207 | - FIELDMARK, | ||
| 208 | - BACKSPACE, | ||
| 209 | - WORD_PREVIOUS, | ||
| 210 | - WORD_NEXT, | ||
| 211 | - FIELD_END, ///< @brief Move the cursor to the first blank after the last nonblank in the field. | ||
| 212 | - FIELD_FIRST, ///< @brief Move to first unprotected field on screen. | ||
| 213 | - FIELD_NEXT, ///< @brief Jump to the next field. | ||
| 214 | - FIELD_PREVIOUS, ///< @brief Tab backward to previous field. | ||
| 215 | - ATTN, ///< @brief ATTN key, per RFC 2355. Sends IP, regardless. | ||
| 216 | - BREAK, | ||
| 217 | - WORD_DELETE, ///< @brief Backspaces the cursor until it hits the front of a word (does a ^W). | ||
| 218 | - FIELD_DELETE, ///< @brief Delete field key (does a ^U). | ||
| 219 | - SYSREQ, | ||
| 220 | - KYBD_UNLOCK, ///< @brief Unlock the keyboard if it was locked by operator error. | ||
| 221 | - }; | ||
| 222 | - | ||
| 223 | - /// @brief TN3270 Session. | ||
| 224 | - class TN3270_PUBLIC Session { | ||
| 225 | - protected: | ||
| 226 | - Session(); | ||
| 227 | - | ||
| 228 | - /// @brief Write information to log file. | ||
| 229 | - void info(const char *fmt, ...) const; | ||
| 230 | - | ||
| 231 | - /// @brief Write warning to log file. | ||
| 232 | - void warning(const char *fmt, ...) const; | ||
| 233 | - | ||
| 234 | - /// @brief Write error to log file. | ||
| 235 | - void error(const char *fmt, ...) const; | ||
| 236 | - | ||
| 237 | - /// @brief Fire event. | ||
| 238 | - void fire(const Event &event); | ||
| 239 | - | ||
| 240 | - public: | ||
| 241 | - | ||
| 242 | - /// @brief Get an instance of the TN3270 session based on the supplied ID. | ||
| 243 | - static Session * getInstance(const char *id = nullptr); | ||
| 244 | - virtual ~Session(); | ||
| 245 | - | ||
| 246 | - // States | ||
| 247 | - virtual ProgramMessage getProgramMessage() const = 0; | ||
| 248 | - virtual ConnectionState getConnectionState() const = 0; | ||
| 249 | - virtual SSLState getSSLState() const = 0; | ||
| 250 | - | ||
| 251 | - // Contents | ||
| 252 | - virtual std::string toString(int baddr = 0, int len = -1, char lf = '\n') const = 0; | ||
| 253 | - virtual std::string toString(unsigned int row, unsigned int col, int len, char lf = '\n') const = 0; | ||
| 254 | - | ||
| 255 | - /// @brief Input string. | ||
| 256 | - virtual void push(const char *text, size_t length) = 0; | ||
| 257 | - virtual void push(int baddr, const char *text, int length) = 0; | ||
| 258 | - virtual void push(int row, int col, const char *text, int length) = 0; | ||
| 259 | - | ||
| 260 | - inline void push(const std::string &text) { | ||
| 261 | - push(-1,text.c_str(),text.size()); | ||
| 262 | - } | ||
| 263 | - | ||
| 264 | - inline void push(int baddr, const std::string &text) { | ||
| 265 | - push(baddr,text.c_str(),text.size()); | ||
| 266 | - } | ||
| 267 | - | ||
| 268 | - inline void push(int row, int col, const std::string &text) { | ||
| 269 | - push(row,col,text.c_str(),text.size()); | ||
| 270 | - } | ||
| 271 | - | ||
| 272 | - void push(const PFKey key); | ||
| 273 | - void push(const PAKey key); | ||
| 274 | - virtual void push(const Action action) = 0; | ||
| 275 | - | ||
| 276 | - /// @brief Get contents of field ad address. | ||
| 277 | - virtual void pop(int baddr, std::string &text) = 0; | ||
| 278 | - | ||
| 279 | - /// @brief Get contents of field at position. | ||
| 280 | - virtual void pop(int row, int col, std::string &text) = 0; | ||
| 281 | - | ||
| 282 | - /// @brief Get contents of field at cursor position. | ||
| 283 | - virtual void pop(std::string &text) = 0; | ||
| 284 | - | ||
| 285 | - /** | ||
| 286 | - * @brief Input string parsing control char. | ||
| 287 | - */ | ||
| 288 | - LIB3270_KEYBOARD_LOCK_STATE input(const std::string &str, const char control_char = '@'); | ||
| 289 | - | ||
| 290 | - // Properties. | ||
| 291 | - virtual void getProperty(const char *name, int &value) const = 0; | ||
| 292 | - virtual void getProperty(const char *name, unsigned int &value) const = 0; | ||
| 293 | - virtual void getProperty(const char *name, std::string &value) const = 0; | ||
| 294 | - virtual void getProperty(const char *name, bool &value) const = 0; | ||
| 295 | - virtual void setProperty(const char *name, const int value) = 0; | ||
| 296 | - virtual void setProperty(const char *name, const char *value) = 0; | ||
| 297 | - | ||
| 298 | - virtual std::string getVersion() const = 0; | ||
| 299 | - virtual std::string getRevision() const = 0; | ||
| 300 | - virtual std::string getLUName() const = 0; | ||
| 301 | - virtual LIB3270_KEYBOARD_LOCK_STATE getKeyboardLockState() const = 0; | ||
| 302 | - | ||
| 303 | - virtual std::string getHostURL() const = 0; | ||
| 304 | - virtual void setHostURL(const char *url) = 0; | ||
| 305 | - | ||
| 306 | - virtual void setUnlockDelay(unsigned short delay = 350) = 0; | ||
| 307 | - virtual void setLockOnOperatorError(bool lock = true) = 0; | ||
| 308 | - | ||
| 309 | - virtual unsigned short getScreenWidth() const = 0; | ||
| 310 | - virtual unsigned short getScreenHeight() const = 0; | ||
| 311 | - virtual unsigned short getScreenLength() const = 0; | ||
| 312 | - | ||
| 313 | - /// @brief Set cursor address. | ||
| 314 | - virtual unsigned short setCursor(int addr = -1) = 0; | ||
| 315 | - | ||
| 316 | - /// @brief Set cursor position. | ||
| 317 | - virtual unsigned short setCursor(unsigned short row, unsigned short col) = 0; | ||
| 318 | - | ||
| 319 | - /// @brief Get cursor address | ||
| 320 | - virtual unsigned short getCursorAddress() = 0; | ||
| 321 | - | ||
| 322 | - /// @brief Set local charset. | ||
| 323 | - virtual void setCharSet(const char *charset = NULL) = 0; | ||
| 324 | - | ||
| 325 | - // Actions | ||
| 326 | - | ||
| 327 | - /// @brief Execute action by name. | ||
| 328 | - virtual void action(const char *action_name) = 0; | ||
| 329 | - | ||
| 330 | - // Connect/disconnect | ||
| 331 | - virtual void connect(const char *url = nullptr, int seconds = DEFAULT_TIMEOUT) = 0; | ||
| 332 | - virtual void disconnect() = 0; | ||
| 333 | - | ||
| 334 | - /// @brief Wait. | ||
| 335 | - virtual void wait(time_t seconds) const = 0; | ||
| 336 | - | ||
| 337 | - /// @brief Wait until session state changes to "ready". | ||
| 338 | - virtual void waitForReady(time_t timeout = DEFAULT_TIMEOUT) const = 0; | ||
| 339 | - | ||
| 340 | - /// @brief Wait for screen changes. | ||
| 341 | - virtual void waitForChange(time_t seconds = DEFAULT_TIMEOUT) const = 0; | ||
| 342 | - | ||
| 343 | - /// @brief Wait for screen changes. | ||
| 344 | - virtual LIB3270_KEYBOARD_LOCK_STATE waitForKeyboardUnlock(time_t seconds = DEFAULT_TIMEOUT) const = 0; | ||
| 345 | - | ||
| 346 | - /// @brief Send PF. | ||
| 347 | - virtual void pfkey(unsigned short value) = 0; | ||
| 348 | - | ||
| 349 | - /// @brief Send PA. | ||
| 350 | - virtual void pakey(unsigned short value) = 0; | ||
| 351 | - | ||
| 352 | - /// @brief Request print | ||
| 353 | - virtual void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) = 0; | ||
| 354 | - | ||
| 355 | - /// @brief Insert event listener. | ||
| 356 | - // void insert(Event::Type type, std::function <void(const Event &event)> listener); | ||
| 357 | - | ||
| 358 | - // Misc | ||
| 359 | - | ||
| 360 | - /// @brief Search | ||
| 361 | - size_t find(const char * str, size_t pos = 0) const; | ||
| 362 | - | ||
| 363 | - /// @brief Compare contents. | ||
| 364 | - int compare(int baddr, const char* s, int len = -1) const; | ||
| 365 | - int compare(unsigned int row, unsigned int col, const char* s, int len = -1) const; | ||
| 366 | - | ||
| 367 | - }; | ||
| 368 | - | ||
| 369 | - /// @brief TN3270 Host | ||
| 370 | - class TN3270_PUBLIC Host : public std::basic_streambuf<char, std::char_traits<char> > { | ||
| 371 | - private: | ||
| 372 | - | ||
| 373 | - /// @brief Connection with the host | ||
| 374 | - Session *session; | ||
| 375 | - | ||
| 376 | - /// @brief How much seconds we wait for the terminal to be ready? | ||
| 377 | - time_t timeout; | ||
| 378 | - | ||
| 379 | - protected: | ||
| 380 | - | ||
| 381 | - /// @brief Writes characters to the associated file from the put area | ||
| 382 | - int sync() override; | ||
| 383 | - | ||
| 384 | - /// @brief Writes characters to the associated output sequence from the put area. | ||
| 385 | - int overflow(int c) override; | ||
| 386 | - | ||
| 387 | - /* | ||
| 388 | - /// @brief Write information to log file. | ||
| 389 | - void info(const char *fmt, ...) const; | ||
| 390 | - | ||
| 391 | - /// @brief Write warning to log file. | ||
| 392 | - void warning(const char *fmt, ...) const; | ||
| 393 | - | ||
| 394 | - /// @brief Write error to log file. | ||
| 395 | - void error(const char *fmt, ...) const; | ||
| 396 | - */ | ||
| 397 | - | ||
| 398 | - public: | ||
| 399 | - Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT); | ||
| 400 | - ~Host(); | ||
| 401 | - | ||
| 402 | - inline bool operator==(ConnectionState state) const noexcept { | ||
| 403 | - return session->getConnectionState() == state; | ||
| 404 | - } | ||
| 405 | - | ||
| 406 | - // Contents | ||
| 407 | - | ||
| 408 | - /** | ||
| 409 | - * @brief Input string parsing control char. | ||
| 410 | - */ | ||
| 411 | - LIB3270_KEYBOARD_LOCK_STATE input(const char *text, int length = -1, const char control_char = '@'); | ||
| 412 | - | ||
| 413 | - Host & push(int baddr, const std::string &text); | ||
| 414 | - Host & push(int row, int col, const std::string &text); | ||
| 415 | - Host & push(const std::string &text); | ||
| 416 | - | ||
| 417 | - Host & push(int baddr, const char *str, int len = -1); | ||
| 418 | - Host & push(int row, int col, const char *str, int len = -1); | ||
| 419 | - Host & push(const char *str, int len = -1); | ||
| 420 | - | ||
| 421 | - Host & pop(int baddr, std::string &text); | ||
| 422 | - Host & pop(int row, int col, std::string &text); | ||
| 423 | - Host & pop(std::string &text); | ||
| 424 | - | ||
| 425 | - std::string toString() const; | ||
| 426 | - std::string toString(int baddr, int len = -1, char lf = '\n') const; | ||
| 427 | - std::string toString(unsigned int row, unsigned int col, int len = -1, char lf = '\n') const; | ||
| 428 | - | ||
| 429 | - template<typename T> | ||
| 430 | - Host & push(T value) { | ||
| 431 | - session->push(value); | ||
| 432 | - sync(); | ||
| 433 | - return *this; | ||
| 434 | - } | ||
| 435 | - | ||
| 436 | - template<typename T> | ||
| 437 | - Host & pop(T value) { | ||
| 438 | - sync(); | ||
| 439 | - session->pop(value); | ||
| 440 | - return *this; | ||
| 441 | - } | ||
| 442 | - | ||
| 443 | - // Actions | ||
| 444 | - Host & connect(const char *url = nullptr); | ||
| 445 | - Host & disconnect(); | ||
| 446 | - Host & waitForReady(time_t seconds); | ||
| 447 | - | ||
| 448 | - inline Host & waitForReady() { | ||
| 449 | - return waitForReady(this->timeout); | ||
| 450 | - } | ||
| 451 | - | ||
| 452 | - inline LIB3270_KEYBOARD_LOCK_STATE waitForKeyboardUnlock() noexcept { | ||
| 453 | - return this->session->waitForKeyboardUnlock(timeout); | ||
| 454 | - } | ||
| 455 | - | ||
| 456 | - /// @brief Execute action by name. | ||
| 457 | - inline Host & action(const char *action_name) { | ||
| 458 | - session->action(action_name); | ||
| 459 | - return *this; | ||
| 460 | - } | ||
| 461 | - | ||
| 462 | - inline ProgramMessage getProgramMessage() const { | ||
| 463 | - return session->getProgramMessage(); | ||
| 464 | - } | ||
| 465 | - | ||
| 466 | - operator bool() const; | ||
| 467 | - | ||
| 468 | - inline operator ProgramMessage() const { | ||
| 469 | - return getProgramMessage(); | ||
| 470 | - } | ||
| 471 | - | ||
| 472 | - inline ConnectionState getConnectionState() const { | ||
| 473 | - return session->getConnectionState(); | ||
| 474 | - } | ||
| 475 | - | ||
| 476 | - bool isReady() const; | ||
| 477 | - bool isConnected() const; | ||
| 478 | - | ||
| 479 | - inline operator ConnectionState() const { | ||
| 480 | - return getConnectionState(); | ||
| 481 | - } | ||
| 482 | - | ||
| 483 | - /// @brief Set cursor address. | ||
| 484 | - inline Host & setCursor(unsigned short addr) { | ||
| 485 | - session->setCursor(addr); | ||
| 486 | - return *this; | ||
| 487 | - } | ||
| 488 | - | ||
| 489 | - /// @brief Set cursor position. | ||
| 490 | - inline Host & setCursor(unsigned short row, unsigned short col) { | ||
| 491 | - session->setCursor(row,col); | ||
| 492 | - return *this; | ||
| 493 | - } | ||
| 494 | - | ||
| 495 | - /// @brief Get cursor address | ||
| 496 | - inline unsigned short getCursorAddress() { | ||
| 497 | - return session->getCursorAddress(); | ||
| 498 | - } | ||
| 499 | - | ||
| 500 | - inline void setUnlockDelay(unsigned short delay) { | ||
| 501 | - return session->setUnlockDelay(delay); | ||
| 502 | - } | ||
| 503 | - | ||
| 504 | - inline void setLockOnOperatorError(bool lock = true) { | ||
| 505 | - return session->setLockOnOperatorError(lock); | ||
| 506 | - } | ||
| 507 | - | ||
| 508 | - inline void setCharSet(const char *charset) { | ||
| 509 | - return session->setCharSet(charset); | ||
| 510 | - } | ||
| 511 | - | ||
| 512 | - // Get properties | ||
| 513 | - | ||
| 514 | - /// @brief Get lib3270 version. | ||
| 515 | - inline std::string getVersion() const { | ||
| 516 | - return session->getVersion(); | ||
| 517 | - } | ||
| 518 | - | ||
| 519 | - /// @brief Get lib3270 revision. | ||
| 520 | - std::string getRevision() const { | ||
| 521 | - return session->getRevision(); | ||
| 522 | - } | ||
| 523 | - | ||
| 524 | - /// @brief Get LU Name. | ||
| 525 | - std::string getLUName() const { | ||
| 526 | - return session->getLUName(); | ||
| 527 | - } | ||
| 528 | - | ||
| 529 | - inline LIB3270_KEYBOARD_LOCK_STATE getKeyboardLockState() const { | ||
| 530 | - return session->getKeyboardLockState(); | ||
| 531 | - } | ||
| 532 | - | ||
| 533 | - // Actions | ||
| 534 | - | ||
| 535 | - /// @brief Send PF. | ||
| 536 | - inline Host & pfkey(unsigned short value) { | ||
| 537 | - session->pfkey(value); | ||
| 538 | - return *this; | ||
| 539 | - } | ||
| 540 | - | ||
| 541 | - /// @brief Send PA. | ||
| 542 | - inline Host & pakey(unsigned short value) { | ||
| 543 | - session->pakey(value); | ||
| 544 | - return *this; | ||
| 545 | - } | ||
| 546 | - | ||
| 547 | - /// @brief Request print | ||
| 548 | - inline Host & print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) { | ||
| 549 | - session->print(option); | ||
| 550 | - return *this; | ||
| 551 | - } | ||
| 552 | - | ||
| 553 | - /// @brief Wait. | ||
| 554 | - inline Host & wait(unsigned short seconds) { | ||
| 555 | - session->wait(seconds); | ||
| 556 | - return *this; | ||
| 557 | - } | ||
| 558 | - | ||
| 559 | - /// @brief Wait for update. | ||
| 560 | - inline Host & waitForChange(unsigned short seconds) { | ||
| 561 | - session->waitForChange(seconds); | ||
| 562 | - return *this; | ||
| 563 | - } | ||
| 564 | - | ||
| 565 | - // Set contents. | ||
| 566 | - | ||
| 567 | - /// @brief Input string. | ||
| 568 | - /// | ||
| 569 | - /// Input the supplied string processing commands delimited by the control char in | ||
| 570 | - /// the same way of the old HLLAPI. | ||
| 571 | - /// | ||
| 572 | - /// @param text String with the text to input. | ||
| 573 | - /// @param control_char Control character used to identify commands. | ||
| 574 | - // Host & input(const char *text, const char control_char = '@'); | ||
| 575 | - | ||
| 576 | - // Host & input(const char *text, size_t sz); | ||
| 577 | - | ||
| 578 | - /// @brief Set field at current position, jumps to next writable field. | ||
| 579 | - inline Host & push(const char *text) { | ||
| 580 | - session->push(text,-1); | ||
| 581 | - return *this; | ||
| 582 | - }; | ||
| 583 | - | ||
| 584 | - /* | ||
| 585 | - // Event listeners | ||
| 586 | - inline Host & insert(Event::Type type, std::function <void(const Event &event)> listener) noexcept { | ||
| 587 | - session->insert(type, listener); | ||
| 588 | - return *this; | ||
| 589 | - } | ||
| 590 | - */ | ||
| 591 | - | ||
| 592 | - | ||
| 593 | - }; | ||
| 594 | - | ||
| 595 | - } | ||
| 596 | - | ||
| 597 | - TN3270_PUBLIC const char * toCharString(const TN3270::ProgramMessage programMessage); | ||
| 598 | - TN3270_PUBLIC const char * toCharString(const TN3270::ConnectionState connectionState); | ||
| 599 | - TN3270_PUBLIC const char * toCharString(const TN3270::Action action); | ||
| 600 | - | ||
| 601 | - template <typename T> | ||
| 602 | - inline TN3270_PUBLIC TN3270::Session & operator<<(TN3270::Session& session, const T value) { | ||
| 603 | - return session.push(value); | ||
| 604 | - } | ||
| 605 | - | ||
| 606 | - template <typename T> | ||
| 607 | - inline TN3270_PUBLIC TN3270::Session & operator>>(TN3270::Session& session, const T value) { | ||
| 608 | - return session.pop(value); | ||
| 609 | - } | ||
| 610 | - | ||
| 611 | - template <typename T> | ||
| 612 | - inline TN3270_PUBLIC TN3270::Host & operator<<(TN3270::Host& host, const T value) { | ||
| 613 | - return host.push(value); | ||
| 614 | - } | ||
| 615 | - | ||
| 616 | - inline std::ostream & operator<<(std::ostream &stream, const TN3270::Host& host) { | ||
| 617 | - stream << host.toString(); | ||
| 618 | - return stream; | ||
| 619 | - } | ||
| 620 | - | ||
| 621 | - | ||
| 622 | -#endif | ||
| 623 | - | ||
| 624 | -#endif // LIB3270_IPC_H_INCLUDED |
doxygen/doxyfile.in
| @@ -140,7 +140,7 @@ FULL_PATH_NAMES = YES | @@ -140,7 +140,7 @@ FULL_PATH_NAMES = YES | ||
| 140 | # relative paths, which will be relative from the directory where doxygen is | 140 | # relative paths, which will be relative from the directory where doxygen is |
| 141 | # started. | 141 | # started. |
| 142 | 142 | ||
| 143 | -STRIP_FROM_PATH = @BASEDIR@ | 143 | +STRIP_FROM_PATH = @BASEDIR@/client/src |
| 144 | 144 | ||
| 145 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of | 145 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of |
| 146 | # the path mentioned in the documentation of a class, which tells | 146 | # the path mentioned in the documentation of a class, which tells |
| @@ -149,7 +149,7 @@ STRIP_FROM_PATH = @BASEDIR@ | @@ -149,7 +149,7 @@ STRIP_FROM_PATH = @BASEDIR@ | ||
| 149 | # definition is used. Otherwise one should specify the include paths that | 149 | # definition is used. Otherwise one should specify the include paths that |
| 150 | # are normally passed to the compiler using the -I flag. | 150 | # are normally passed to the compiler using the -I flag. |
| 151 | 151 | ||
| 152 | -STRIP_FROM_INC_PATH = | 152 | +STRIP_FROM_INC_PATH = @BASEDIR@/client/src |
| 153 | 153 | ||
| 154 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter | 154 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter |
| 155 | # (but less readable) file names. This can be useful if your file system | 155 | # (but less readable) file names. This can be useful if your file system |
| @@ -659,7 +659,7 @@ WARN_LOGFILE = @BASEDIR@/doxygen/doxygen.log | @@ -659,7 +659,7 @@ WARN_LOGFILE = @BASEDIR@/doxygen/doxygen.log | ||
| 659 | # directories like "/usr/src/myproject". Separate the files or directories | 659 | # directories like "/usr/src/myproject". Separate the files or directories |
| 660 | # with spaces. | 660 | # with spaces. |
| 661 | 661 | ||
| 662 | -INPUT = @BASEDIR@ | 662 | +INPUT = @BASEDIR@/client/src |
| 663 | 663 | ||
| 664 | # This tag can be used to specify the character encoding of the source files | 664 | # This tag can be used to specify the character encoding of the source files |
| 665 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is | 665 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is |
| @@ -1539,7 +1539,7 @@ INCLUDE_FILE_PATTERNS = | @@ -1539,7 +1539,7 @@ INCLUDE_FILE_PATTERNS = | ||
| 1539 | # undefined via #undef or recursively expanded use the := operator | 1539 | # undefined via #undef or recursively expanded use the := operator |
| 1540 | # instead of the = operator. | 1540 | # instead of the = operator. |
| 1541 | 1541 | ||
| 1542 | -PREDEFINED = | 1542 | +PREDEFINED = __cplusplus |
| 1543 | 1543 | ||
| 1544 | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then | 1544 | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then |
| 1545 | # this tag can be used to specify a list of macro names that should be expanded. | 1545 | # this tag can be used to specify a list of macro names that should be expanded. |
server/Makefile.in
| @@ -91,11 +91,11 @@ BINRLS=$(BINDIR)/Release | @@ -91,11 +91,11 @@ BINRLS=$(BINDIR)/Release | ||
| 91 | 91 | ||
| 92 | DEPENDS= \ | 92 | DEPENDS= \ |
| 93 | Makefile \ | 93 | Makefile \ |
| 94 | - $(BASEDIR)/common/src/include/*.h \ | ||
| 95 | - $(BASEDIR)/common/src/include/lib3270/*.h | 94 | + $(BASEDIR)/common/src/include/*.h |
| 96 | 95 | ||
| 97 | CFLAGS= \ | 96 | CFLAGS= \ |
| 98 | @CFLAGS@ \ | 97 | @CFLAGS@ \ |
| 98 | + -I$(BASEDIR)/server/src/include \ | ||
| 99 | -I$(BASEDIR)/common/src/include \ | 99 | -I$(BASEDIR)/common/src/include \ |
| 100 | -DBUILD_DATE=`date +%Y%m%d` \ | 100 | -DBUILD_DATE=`date +%Y%m%d` \ |
| 101 | @LIB3270_CFLAGS@ \ | 101 | @LIB3270_CFLAGS@ \ |
server/src/core/constants.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include <lib3270.h> | 35 | #include <lib3270.h> |
| 36 | #include <lib3270/actions.h> | 36 | #include <lib3270/actions.h> |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | 38 | ||
| 39 | const IPC_METHOD_INT_ARG * ipc3270_get_int_arg_methods() { | 39 | const IPC_METHOD_INT_ARG * ipc3270_get_int_arg_methods() { |
| 40 | 40 |
server/src/core/getproperties.c
| @@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
| 33 | */ | 33 | */ |
| 34 | 34 | ||
| 35 | #include <config.h> | 35 | #include <config.h> |
| 36 | -#include <lib3270/ipc-glib.h> | 36 | +#include <ipc-glib.h> |
| 37 | #include <lib3270.h> | 37 | #include <lib3270.h> |
| 38 | #include <lib3270/properties.h> | 38 | #include <lib3270/properties.h> |
| 39 | #include <lib3270/toggle.h> | 39 | #include <lib3270/toggle.h> |
server/src/core/linux/gobject.h
server/src/core/linux/start.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include "gobject.h" | 35 | #include "gobject.h" |
| 36 | #include <lib3270.h> | 36 | #include <lib3270.h> |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | 38 | ||
| 39 | #include <dbus/dbus-glib.h> | 39 | #include <dbus/dbus-glib.h> |
| 40 | #include <dbus/dbus-glib-bindings.h> | 40 | #include <dbus/dbus-glib-bindings.h> |
server/src/core/linux/stop.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include "gobject.h" | 35 | #include "gobject.h" |
| 36 | #include <lib3270.h> | 36 | #include <lib3270.h> |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | 38 | ||
| 39 | #include <dbus/dbus-glib.h> | 39 | #include <dbus/dbus-glib.h> |
| 40 | #include <dbus/dbus-glib-bindings.h> | 40 | #include <dbus/dbus-glib-bindings.h> |
server/src/core/methods/private.h
| @@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
| 38 | 38 | ||
| 39 | #include <config.h> | 39 | #include <config.h> |
| 40 | #include <lib3270.h> | 40 | #include <lib3270.h> |
| 41 | - #include <lib3270/ipc-glib.h> | 41 | + #include <ipc-glib.h> |
| 42 | 42 | ||
| 43 | G_GNUC_INTERNAL int ipc3270_method_connect(GObject *session, GVariant *request, GObject *response, GError **error); | 43 | G_GNUC_INTERNAL int ipc3270_method_connect(GObject *session, GVariant *request, GObject *response, GError **error); |
| 44 | G_GNUC_INTERNAL int ipc3270_method_disconnect(GObject *session, GVariant *request, GObject *response, GError **error); | 44 | G_GNUC_INTERNAL int ipc3270_method_disconnect(GObject *session, GVariant *request, GObject *response, GError **error); |
server/src/core/setproperties.c
| @@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
| 33 | */ | 33 | */ |
| 34 | 34 | ||
| 35 | #include <config.h> | 35 | #include <config.h> |
| 36 | -#include <lib3270/ipc-glib.h> | 36 | +#include <ipc-glib.h> |
| 37 | #include <lib3270.h> | 37 | #include <lib3270.h> |
| 38 | #include <lib3270/properties.h> | 38 | #include <lib3270/properties.h> |
| 39 | #include <lib3270/toggle.h> | 39 | #include <lib3270/toggle.h> |
server/src/core/tools.c
| @@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #include <lib3270.h> | 30 | #include <lib3270.h> |
| 31 | -#include <lib3270/ipc-glib.h> | 31 | +#include <ipc-glib.h> |
| 32 | 32 | ||
| 33 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 33 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 34 | 34 |
server/src/core/windows/gobject.c
| @@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
| 31 | #include <lib3270.h> | 31 | #include <lib3270.h> |
| 32 | #include <lib3270/actions.h> | 32 | #include <lib3270/actions.h> |
| 33 | #include <lib3270/properties.h> | 33 | #include <lib3270/properties.h> |
| 34 | -#include <lib3270/ipc-glib.h> | 34 | +#include <ipc-glib.h> |
| 35 | #include <v3270.h> | 35 | #include <v3270.h> |
| 36 | 36 | ||
| 37 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ | 37 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
server/src/core/windows/gobject.h
server/src/core/windows/inout.c
server/src/core/windows/pipesource.c
server/src/core/windows/start.c
| @@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
| 31 | #include <lib3270.h> | 31 | #include <lib3270.h> |
| 32 | #include <lib3270/actions.h> | 32 | #include <lib3270/actions.h> |
| 33 | #include <lib3270/properties.h> | 33 | #include <lib3270/properties.h> |
| 34 | -#include <lib3270/ipc-glib.h> | 34 | +#include <ipc-glib.h> |
| 35 | 35 | ||
| 36 | void ipc3270_export_object(GObject *object, const char *name, GError G_GNUC_UNUSED(**error)) { | 36 | void ipc3270_export_object(GObject *object, const char *name, GError G_GNUC_UNUSED(**error)) { |
| 37 | 37 |
server/src/core/windows/stop.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include "gobject.h" | 35 | #include "gobject.h" |
| 36 | #include <lib3270.h> | 36 | #include <lib3270.h> |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | 38 | ||
| 39 | void ipc3270_release_object(ipc3270 *object) { | 39 | void ipc3270_release_object(ipc3270 *object) { |
| 40 | 40 |
| @@ -0,0 +1,138 @@ | @@ -0,0 +1,138 @@ | ||
| 1 | +/* | ||
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob | ||
| 5 | + * o nome G3270. | ||
| 6 | + * | ||
| 7 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 8 | + * | ||
| 9 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 10 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 11 | + * Free Software Foundation. | ||
| 12 | + * | ||
| 13 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 14 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 15 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 16 | + * obter mais detalhes. | ||
| 17 | + * | ||
| 18 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 19 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
| 20 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 21 | + * | ||
| 22 | + * Este programa está nomeado como - e possui - linhas de código. | ||
| 23 | + * | ||
| 24 | + * Contatos: | ||
| 25 | + * | ||
| 26 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 27 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
| 28 | + * | ||
| 29 | + */ | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * @brief Common definitions for pw3270 IPC plugin. | ||
| 33 | + * | ||
| 34 | + * @author Perry Werneck <perry.werneck@gmail.com> | ||
| 35 | + * | ||
| 36 | + */ | ||
| 37 | + | ||
| 38 | +#ifndef PW3270_IPC_H_INCLUDED | ||
| 39 | + | ||
| 40 | + #define PW3270_IPC_H_INCLUDED | ||
| 41 | + | ||
| 42 | + #ifdef _WIN32 | ||
| 43 | + | ||
| 44 | + #define PW3270_IPC_SESSION_BUS_NAME "\\\\.\\pipe\\%s\\%c" | ||
| 45 | + | ||
| 46 | + #else | ||
| 47 | + | ||
| 48 | + #define PW3270_IPC_SESSION_BUS_NAME "br.com.bb.%s.%c" | ||
| 49 | + #define PW3270_IPC_SESSION_INTERFACE_NAME "br.com.bb.tn3270.session" | ||
| 50 | + #define PW3270_IPC_SESSION_OBJECT_PATH "/br/com/bb/tn3270/session" | ||
| 51 | + | ||
| 52 | + #define PW3270_IPC_SERVICE_BUS_NAME "br.com.bb.tn3270.service" | ||
| 53 | + #define PW3270_IPC_SERVICE_INTERFACE_NAME "br.com.bb.tn3270.service" | ||
| 54 | + #define PW3270_IPC_SERVICE_OBJECT_PATH "/br/com/bb/tn3270/service" | ||
| 55 | + | ||
| 56 | + #endif // _WIN32 | ||
| 57 | + | ||
| 58 | + #include <glib.h> | ||
| 59 | + #include <gtk/gtk.h> | ||
| 60 | + #include <lib3270.h> | ||
| 61 | + | ||
| 62 | + G_BEGIN_DECLS | ||
| 63 | + | ||
| 64 | + #define GLIB_TYPE_IPC3270_RESPONSE (ipc3270Response_get_type ()) | ||
| 65 | + #define IPC3270_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLIB_TYPE_IPC3270_RESPONSE, ipc3270Response)) | ||
| 66 | + #define IPC3270_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLIB_TYPE_IPC3270_RESPONSE, ipc3270ResponseClass)) | ||
| 67 | + #define IS_IPC3270_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLIB_TYPE_IPC3270_RESPONSE)) | ||
| 68 | + #define IS_IPC3270_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLIB_TYPE_IPC3270_RESPONSE)) | ||
| 69 | + #define IPC3270_RESPONSE_GET_CLASS(obj) G_TYPE_INSTANCE_GET_CLASS ((obj), GLIB_TYPE_IPC3270_RESPONSE, ipc3270ResponseClass)) | ||
| 70 | + | ||
| 71 | + typedef struct _ipc3270Response ipc3270Response; | ||
| 72 | + typedef struct _ipc3270ResponseClass ipc3270ResponseClass; | ||
| 73 | + | ||
| 74 | + GObject * ipc3270_response_new(); | ||
| 75 | + | ||
| 76 | + void ipc3270_response_append_int32(GObject *object, gint32 value); | ||
| 77 | + void ipc3270_response_append_uint32(GObject *object, guint32 value); | ||
| 78 | + void ipc3270_response_append_string(GObject *object, const gchar *text); | ||
| 79 | + gboolean ipc3270_response_has_values(GObject *object); | ||
| 80 | + GVariant * ipc3270_response_steal_value(GObject *object); | ||
| 81 | + | ||
| 82 | + | ||
| 83 | + #define GLIB_TYPE_IPC3270 (ipc3270_get_type ()) | ||
| 84 | + #define IPC3270(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLIB_TYPE_IPC3270, ipc3270)) | ||
| 85 | + #define IPC3270_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLIB_TYPE_IPC3270, ipc3270Class)) | ||
| 86 | + #define IS_IPC3270(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLIB_TYPE_IPC3270)) | ||
| 87 | + #define IS_IPC3270_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLIB_TYPE_IPC3270)) | ||
| 88 | + #define IPC3270_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLIB_TYPE_IPC3270, ipc3270Class)) | ||
| 89 | + | ||
| 90 | + typedef struct _ipc3270 ipc3270; | ||
| 91 | + typedef struct _ipc3270Class ipc3270Class; | ||
| 92 | + | ||
| 93 | + GObject * ipc3270_new(); | ||
| 94 | + GType ipc3270_get_type(void); | ||
| 95 | + void ipc3270_set_terminal_widget(GObject *object, GtkWidget *widget); | ||
| 96 | + void ipc3270_export_object(GObject *object, const char *name, GError **error); | ||
| 97 | + | ||
| 98 | + void ipc3270_add_terminal_introspection(GString *string); | ||
| 99 | + | ||
| 100 | + const gchar * ipc3270_get_display_charset(GObject *object); | ||
| 101 | + H3270 * ipc3270_get_session(GObject *object); | ||
| 102 | + | ||
| 103 | + GQuark ipc3270_get_error_domain(GObject *object); | ||
| 104 | + | ||
| 105 | + void ipc3270_set_error(GObject *object, int errcode, GError **error); | ||
| 106 | + | ||
| 107 | + int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *request, GObject *response, GError **error); | ||
| 108 | + gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVariant *value, GError **error); | ||
| 109 | + GVariant * ipc3270_get_property(GObject *object, const gchar *property_name, GError **error); | ||
| 110 | + | ||
| 111 | + #ifdef _WIN32 | ||
| 112 | + unsigned char * ipc3270_pack(const gchar *name, int id, GVariant *values, size_t * szPacket); | ||
| 113 | + unsigned char * ipc3270_pack_value(const gchar *name, int id, GVariant *value, size_t * szPacket); | ||
| 114 | + unsigned char * ipc3270_pack_error(const GError *error, size_t * szPacket); | ||
| 115 | + GVariant * ipc3270_unpack(const unsigned char *packet, int *id); | ||
| 116 | + #endif // _WIN32 | ||
| 117 | + | ||
| 118 | + G_END_DECLS | ||
| 119 | + | ||
| 120 | + #if ! GLIB_CHECK_VERSION(2,44,0) | ||
| 121 | + G_GNUC_INTERNAL void ipc3270_autoptr_cleanup_generic_gfree(void *p); | ||
| 122 | + #define g_autofree __attribute__((cleanup(ipc3270_autoptr_cleanup_generic_gfree))) | ||
| 123 | + #endif // ! GLIB(2,44,0) | ||
| 124 | + | ||
| 125 | + #ifdef DEBUG | ||
| 126 | + #define debug( fmt, ... ) fprintf(stderr,"%s(%d) " fmt "\n", __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr); | ||
| 127 | + #else | ||
| 128 | + #define debug(...) /* __VA_ARGS */ | ||
| 129 | + #endif | ||
| 130 | + | ||
| 131 | + typedef struct _ipc_method_int_arg { | ||
| 132 | + const gchar *name; | ||
| 133 | + int (*call)(H3270 *hSession, int keycode); | ||
| 134 | + } IPC_METHOD_INT_ARG; | ||
| 135 | + | ||
| 136 | + const IPC_METHOD_INT_ARG * ipc3270_get_int_arg_methods(); | ||
| 137 | + | ||
| 138 | +#endif // PW3270_IPC_H_INCLUDED |
server/src/plugin/plugin.c
| @@ -43,7 +43,7 @@ | @@ -43,7 +43,7 @@ | ||
| 43 | 43 | ||
| 44 | #include "private.h" | 44 | #include "private.h" |
| 45 | #include <v3270.h> | 45 | #include <v3270.h> |
| 46 | - #include <lib3270/ipc-glib.h> | 46 | + #include <ipc-glib.h> |
| 47 | 47 | ||
| 48 | int pw3270_plugin_stop(GtkWidget G_GNUC_UNUSED(*window), GtkWidget *terminal) { | 48 | int pw3270_plugin_stop(GtkWidget G_GNUC_UNUSED(*window), GtkWidget *terminal) { |
| 49 | debug("%s(%p)",__FUNCTION__,g_object_get_data(G_OBJECT(terminal),"ipc-object-info")); | 49 | debug("%s(%p)",__FUNCTION__,g_object_get_data(G_OBJECT(terminal),"ipc-object-info")); |
server/src/plugin/private.h
| @@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
| 38 | #define PRIVATE_H_INCLUDED | 38 | #define PRIVATE_H_INCLUDED |
| 39 | 39 | ||
| 40 | #include <config.h> | 40 | #include <config.h> |
| 41 | - #include <lib3270/ipc-glib.h> | 41 | + #include <ipc-glib.h> |
| 42 | 42 | ||
| 43 | int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal); | 43 | int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal); |
| 44 | int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal); | 44 | int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal); |
server/src/service/getproperties.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include <config.h> | 35 | #include <config.h> |
| 36 | #include "private.h" | 36 | #include "private.h" |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | #include <lib3270.h> | 38 | #include <lib3270.h> |
| 39 | #include <lib3270/properties.h> | 39 | #include <lib3270/properties.h> |
| 40 | 40 |
server/src/service/linux/start.c
| @@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
| 32 | */ | 32 | */ |
| 33 | 33 | ||
| 34 | #include <config.h> | 34 | #include <config.h> |
| 35 | -#include <lib3270/ipc-glib.h> | 35 | +#include <ipc-glib.h> |
| 36 | #include "../private.h" | 36 | #include "../private.h" |
| 37 | 37 | ||
| 38 | static GDBusNodeInfo *introspection_data = NULL; | 38 | static GDBusNodeInfo *introspection_data = NULL; |
server/src/service/methods.c
| @@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
| 35 | #include <config.h> | 35 | #include <config.h> |
| 36 | #include "private.h" | 36 | #include "private.h" |
| 37 | #include <string.h> | 37 | #include <string.h> |
| 38 | -#include <lib3270/ipc-glib.h> | 38 | +#include <ipc-glib.h> |
| 39 | #include <lib3270.h> | 39 | #include <lib3270.h> |
| 40 | #include <lib3270/actions.h> | 40 | #include <lib3270/actions.h> |
| 41 | 41 |
server/src/service/service.c
| @@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
| 30 | #include <errno.h> | 30 | #include <errno.h> |
| 31 | #include <string.h> | 31 | #include <string.h> |
| 32 | #include <stdlib.h> | 32 | #include <stdlib.h> |
| 33 | -#include <lib3270/ipc-glib.h> | 33 | +#include <ipc-glib.h> |
| 34 | 34 | ||
| 35 | #ifndef _WIN32 | 35 | #ifndef _WIN32 |
| 36 | #include <signal.h> | 36 | #include <signal.h> |
server/src/service/session.c
server/src/service/setproperties.c
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | #include <config.h> | 35 | #include <config.h> |
| 36 | #include "private.h" | 36 | #include "private.h" |
| 37 | -#include <lib3270/ipc-glib.h> | 37 | +#include <ipc-glib.h> |
| 38 | #include <lib3270.h> | 38 | #include <lib3270.h> |
| 39 | #include <lib3270/properties.h> | 39 | #include <lib3270/properties.h> |
| 40 | 40 |
server/src/testprogram/testprogram.c
| @@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
| 37 | #include <config.h> | 37 | #include <config.h> |
| 38 | #include <v3270.h> | 38 | #include <v3270.h> |
| 39 | #include <v3270/trace.h> | 39 | #include <v3270/trace.h> |
| 40 | - #include <lib3270/ipc-glib.h> | 40 | + #include <ipc-glib.h> |
| 41 | #include <string.h> | 41 | #include <string.h> |
| 42 | #include <stdlib.h> | 42 | #include <stdlib.h> |
| 43 | #include <glib.h> | 43 | #include <glib.h> |