Commit b8f2f9aae155ccfbeb304432fe16445e7c3558a6
1 parent
a3cd3d81
Exists in
master
and in
5 other branches
Implementando novo método remoto.
Showing
6 changed files
with
104 additions
and
48 deletions
Show diff stats
src/include/pw3270cpp.h
| @@ -180,8 +180,11 @@ | @@ -180,8 +180,11 @@ | ||
| 180 | virtual string get_display_charset(void); | 180 | virtual string get_display_charset(void); |
| 181 | 181 | ||
| 182 | // Connection & Network | 182 | // Connection & Network |
| 183 | - virtual int connect(const char *host = "", time_t wait = 0) = 0; | 183 | + virtual int connect() = 0; |
| 184 | + virtual int connect(const char *url, time_t wait = 0); | ||
| 184 | int set_host(const char *host); | 185 | int set_host(const char *host); |
| 186 | + virtual int set_url(const char *uri) = 0; | ||
| 187 | + virtual string get_url() = 0; | ||
| 185 | 188 | ||
| 186 | virtual int disconnect(void) = 0; | 189 | virtual int disconnect(void) = 0; |
| 187 | virtual int wait_for_ready(int seconds) = 0; | 190 | virtual int wait_for_ready(int seconds) = 0; |
src/libpw3270cpp/local.cc
| @@ -127,7 +127,7 @@ | @@ -127,7 +127,7 @@ | ||
| 127 | 127 | ||
| 128 | 128 | ||
| 129 | int (*_disconnect)(H3270 *h); | 129 | int (*_disconnect)(H3270 *h); |
| 130 | - int (*_connect)(H3270 *h,int wait); | 130 | + int (*_connect)(H3270 *h, const char *url, int wait); |
| 131 | const char (*_set_url)(H3270 *h, const char *n); | 131 | const char (*_set_url)(H3270 *h, const char *n); |
| 132 | const char * (*_get_url)(H3270 *h, char *str, int len); | 132 | const char * (*_get_url)(H3270 *h, char *str, int len); |
| 133 | int (*_is_connected)(H3270 *h); | 133 | int (*_is_connected)(H3270 *h); |
| @@ -197,7 +197,7 @@ | @@ -197,7 +197,7 @@ | ||
| 197 | 197 | ||
| 198 | { (void **) & _get_version, "lib3270_get_version" }, | 198 | { (void **) & _get_version, "lib3270_get_version" }, |
| 199 | { (void **) & _disconnect, "lib3270_disconnect" }, | 199 | { (void **) & _disconnect, "lib3270_disconnect" }, |
| 200 | - { (void **) & _connect, "lib3270_connect" }, | 200 | + { (void **) & _connect, "lib3270_connect_url" }, |
| 201 | { (void **) & _set_url, "lib3270_set_url" }, | 201 | { (void **) & _set_url, "lib3270_set_url" }, |
| 202 | { (void **) & _get_url, "lib3270_get_url" }, | 202 | { (void **) & _get_url, "lib3270_get_url" }, |
| 203 | { (void **) & _main_iterate, "lib3270_main_iterate" }, | 203 | { (void **) & _main_iterate, "lib3270_main_iterate" }, |
| @@ -288,6 +288,18 @@ | @@ -288,6 +288,18 @@ | ||
| 288 | return _get_secure(hSession); | 288 | return _get_secure(hSession); |
| 289 | }; | 289 | }; |
| 290 | 290 | ||
| 291 | + int connect(const char *host, time_t wait = 0) { | ||
| 292 | + this->lock(); | ||
| 293 | + int rc = _connect(hSession,host,wait); | ||
| 294 | + this->unlock(); | ||
| 295 | + return rc; | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + int connect() { | ||
| 299 | + return connect(""); | ||
| 300 | + } | ||
| 301 | + | ||
| 302 | + /* | ||
| 291 | int connect(void) | 303 | int connect(void) |
| 292 | { | 304 | { |
| 293 | this->lock(); | 305 | this->lock(); |
| @@ -296,6 +308,7 @@ | @@ -296,6 +308,7 @@ | ||
| 296 | 308 | ||
| 297 | return rc; | 309 | return rc; |
| 298 | } | 310 | } |
| 311 | + */ | ||
| 299 | 312 | ||
| 300 | int set_url(const char *uri) | 313 | int set_url(const char *uri) |
| 301 | { | 314 | { |
src/libpw3270cpp/remote.cc
src/libpw3270cpp/service.cc
| @@ -60,7 +60,8 @@ | @@ -60,7 +60,8 @@ | ||
| 60 | #define DBUS_INTERFACE "br.com.bb.pw3270.service" | 60 | #define DBUS_INTERFACE "br.com.bb.pw3270.service" |
| 61 | 61 | ||
| 62 | DBusConnection * conn; | 62 | DBusConnection * conn; |
| 63 | - string id; | 63 | + string name; |
| 64 | + const char * id; | ||
| 64 | 65 | ||
| 65 | DBusMessage * createMessage(const char *method) | 66 | DBusMessage * createMessage(const char *method) |
| 66 | { | 67 | { |
| @@ -184,6 +185,17 @@ | @@ -184,6 +185,17 @@ | ||
| 184 | return getInteger(call(msg)); | 185 | return getInteger(call(msg)); |
| 185 | } | 186 | } |
| 186 | 187 | ||
| 188 | + string getString(const char *method, int first_arg_type, ...) | ||
| 189 | + { | ||
| 190 | + va_list var_args; | ||
| 191 | + DBusMessage * msg = createMessage(method); | ||
| 192 | + | ||
| 193 | + va_start(var_args, first_arg_type); | ||
| 194 | + dbus_message_append_args_valist(msg,first_arg_type,var_args); | ||
| 195 | + va_end(var_args); | ||
| 196 | + | ||
| 197 | + return getString(call(msg)); | ||
| 198 | + } | ||
| 187 | 199 | ||
| 188 | protected: | 200 | protected: |
| 189 | 201 | ||
| @@ -194,17 +206,43 @@ | @@ -194,17 +206,43 @@ | ||
| 194 | 206 | ||
| 195 | virtual string get_text_at(int row, int col, size_t sz) | 207 | virtual string get_text_at(int row, int col, size_t sz) |
| 196 | { | 208 | { |
| 209 | + dbus_int32_t r = (dbus_int32_t) row; | ||
| 210 | + dbus_int32_t c = (dbus_int32_t) col; | ||
| 211 | + dbus_int32_t s = (dbus_int32_t) sz; | ||
| 212 | + | ||
| 213 | + return getString( "getTextAt", | ||
| 214 | + DBUS_TYPE_STRING, this->id, | ||
| 215 | + DBUS_TYPE_INT32, &r, | ||
| 216 | + DBUS_TYPE_INT32, &c, | ||
| 217 | + DBUS_TYPE_INT32, &s, | ||
| 218 | + DBUS_TYPE_INVALID); | ||
| 197 | 219 | ||
| 198 | } | 220 | } |
| 199 | 221 | ||
| 200 | virtual int set_text_at(int row, int col, const char *str) | 222 | virtual int set_text_at(int row, int col, const char *str) |
| 201 | { | 223 | { |
| 224 | + dbus_int32_t r = (dbus_int32_t) row; | ||
| 225 | + dbus_int32_t c = (dbus_int32_t) col; | ||
| 202 | 226 | ||
| 227 | + return getInteger( "setTextAt", | ||
| 228 | + DBUS_TYPE_STRING, this->id, | ||
| 229 | + DBUS_TYPE_INT32, &r, | ||
| 230 | + DBUS_TYPE_INT32, &c, | ||
| 231 | + DBUS_TYPE_STRING, str, | ||
| 232 | + DBUS_TYPE_INVALID); | ||
| 203 | } | 233 | } |
| 204 | 234 | ||
| 205 | - virtual int cmp_text_at(int row, int col, const char *text) | 235 | + virtual int cmp_text_at(int row, int col, const char *str) |
| 206 | { | 236 | { |
| 237 | + dbus_int32_t r = (dbus_int32_t) row; | ||
| 238 | + dbus_int32_t c = (dbus_int32_t) col; | ||
| 207 | 239 | ||
| 240 | + return getInteger( "cmpTextAt", | ||
| 241 | + DBUS_TYPE_STRING, this->id, | ||
| 242 | + DBUS_TYPE_INT32, &r, | ||
| 243 | + DBUS_TYPE_INT32, &c, | ||
| 244 | + DBUS_TYPE_STRING, str, | ||
| 245 | + DBUS_TYPE_INVALID); | ||
| 208 | } | 246 | } |
| 209 | 247 | ||
| 210 | virtual int emulate_input(const char *str) | 248 | virtual int emulate_input(const char *str) |
| @@ -235,16 +273,17 @@ | @@ -235,16 +273,17 @@ | ||
| 235 | if(*session != '?') | 273 | if(*session != '?') |
| 236 | { | 274 | { |
| 237 | // Já tem sessão definida, usa. | 275 | // Já tem sessão definida, usa. |
| 238 | - this->id = session; | 276 | + this->name = session; |
| 239 | } | 277 | } |
| 240 | else | 278 | else |
| 241 | { | 279 | { |
| 242 | // Obter um ID de sessão no serviço | 280 | // Obter um ID de sessão no serviço |
| 243 | - this->id = getString("createSession"); | 281 | + this->name = getString("createSession"); |
| 244 | } | 282 | } |
| 245 | 283 | ||
| 246 | - trace("Session=%s",this->id.c_str()); | 284 | + trace("Session=%s",this->name.c_str()); |
| 247 | 285 | ||
| 286 | + this->id = this->name.c_str(); | ||
| 248 | } | 287 | } |
| 249 | 288 | ||
| 250 | virtual ~client() | 289 | virtual ~client() |
| @@ -254,48 +293,48 @@ | @@ -254,48 +293,48 @@ | ||
| 254 | 293 | ||
| 255 | virtual bool is_connected(void) | 294 | virtual bool is_connected(void) |
| 256 | { | 295 | { |
| 257 | - return getInteger("isConnected", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 296 | + return getInteger("isConnected", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 258 | } | 297 | } |
| 259 | 298 | ||
| 260 | virtual bool is_ready(void) | 299 | virtual bool is_ready(void) |
| 261 | { | 300 | { |
| 262 | - return getInteger("isReady", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 301 | + return getInteger("isReady", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 263 | } | 302 | } |
| 264 | 303 | ||
| 265 | virtual LIB3270_CSTATE get_cstate(void) | 304 | virtual LIB3270_CSTATE get_cstate(void) |
| 266 | { | 305 | { |
| 267 | - return (LIB3270_CSTATE) getInteger("getConnectionState", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 306 | + return (LIB3270_CSTATE) getInteger("getConnectionState", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 268 | } | 307 | } |
| 269 | 308 | ||
| 270 | virtual LIB3270_MESSAGE get_program_message(void) | 309 | virtual LIB3270_MESSAGE get_program_message(void) |
| 271 | { | 310 | { |
| 272 | - return (LIB3270_MESSAGE) getInteger("getProgramMessage", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 311 | + return (LIB3270_MESSAGE) getInteger("getProgramMessage", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 273 | } | 312 | } |
| 274 | 313 | ||
| 275 | virtual LIB3270_SSL_STATE get_secure(void) | 314 | virtual LIB3270_SSL_STATE get_secure(void) |
| 276 | { | 315 | { |
| 277 | - return (LIB3270_SSL_STATE) getInteger("getSecureState", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 316 | + return (LIB3270_SSL_STATE) getInteger("getSecureState", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 278 | } | 317 | } |
| 279 | 318 | ||
| 280 | virtual int get_width(void) | 319 | virtual int get_width(void) |
| 281 | { | 320 | { |
| 282 | - return getInteger("getScreenWidth", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 321 | + return getInteger("getScreenWidth", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 283 | } | 322 | } |
| 284 | 323 | ||
| 285 | virtual int get_height(void) | 324 | virtual int get_height(void) |
| 286 | { | 325 | { |
| 287 | - return getInteger("getScreenHeight", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 326 | + return getInteger("getScreenHeight", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 288 | } | 327 | } |
| 289 | 328 | ||
| 290 | virtual int get_length(void) | 329 | virtual int get_length(void) |
| 291 | { | 330 | { |
| 292 | - return getInteger("getScreenLength", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 331 | + return getInteger("getScreenLength", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 293 | } | 332 | } |
| 294 | 333 | ||
| 295 | virtual void set_unlock_delay(unsigned short ms) | 334 | virtual void set_unlock_delay(unsigned short ms) |
| 296 | { | 335 | { |
| 297 | dbus_int32_t val = (dbus_int32_t) ms; | 336 | dbus_int32_t val = (dbus_int32_t) ms; |
| 298 | - getInteger("setUnlockDelay", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INT32, val, DBUS_TYPE_INVALID); | 337 | + getInteger("setUnlockDelay", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID); |
| 299 | } | 338 | } |
| 300 | 339 | ||
| 301 | virtual int set_host_charset(const char *charset) | 340 | virtual int set_host_charset(const char *charset) |
| @@ -308,14 +347,26 @@ | @@ -308,14 +347,26 @@ | ||
| 308 | 347 | ||
| 309 | } | 348 | } |
| 310 | 349 | ||
| 311 | - virtual int connect(void) | 350 | + virtual int connect() |
| 312 | { | 351 | { |
| 313 | - return getInteger("connect", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_STRING, "", DBUS_TYPE_INVALID); | 352 | + return connect("",0); |
| 353 | + } | ||
| 354 | + | ||
| 355 | + virtual int connect(const char *url, time_t wait) | ||
| 356 | + { | ||
| 357 | + int rc = getInteger("connect", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_STRING, &url, DBUS_TYPE_INVALID); | ||
| 358 | + | ||
| 359 | + if(!rc && wait) { | ||
| 360 | + rc = wait_for_ready(wait); | ||
| 361 | + } | ||
| 362 | + | ||
| 363 | + return rc; | ||
| 364 | + | ||
| 314 | } | 365 | } |
| 315 | 366 | ||
| 316 | virtual int set_url(const char *hostname) | 367 | virtual int set_url(const char *hostname) |
| 317 | { | 368 | { |
| 318 | - return getInteger("setURL", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_STRING, hostname, DBUS_TYPE_INVALID); | 369 | + return getInteger("setURL", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_STRING, &hostname, DBUS_TYPE_INVALID); |
| 319 | } | 370 | } |
| 320 | 371 | ||
| 321 | virtual string get_url() | 372 | virtual string get_url() |
| @@ -325,7 +376,7 @@ | @@ -325,7 +376,7 @@ | ||
| 325 | 376 | ||
| 326 | virtual int disconnect(void) | 377 | virtual int disconnect(void) |
| 327 | { | 378 | { |
| 328 | - return getInteger("disconnect", DBUS_TYPE_STRING, this->id.c_str(), DBUS_TYPE_INVALID); | 379 | + return getInteger("disconnect", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 329 | } | 380 | } |
| 330 | 381 | ||
| 331 | virtual int wait_for_ready(int seconds) | 382 | virtual int wait_for_ready(int seconds) |
| @@ -398,27 +449,29 @@ | @@ -398,27 +449,29 @@ | ||
| 398 | 449 | ||
| 399 | } | 450 | } |
| 400 | 451 | ||
| 401 | - virtual int enter(void) | 452 | + virtual int enter(void) |
| 402 | { | 453 | { |
| 403 | - | 454 | + return getInteger("enter", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INVALID); |
| 404 | } | 455 | } |
| 405 | 456 | ||
| 406 | - virtual int pfkey(int key) | 457 | + virtual int pfkey(int key) |
| 407 | { | 458 | { |
| 408 | - | 459 | + dbus_int32_t val = (dbus_int32_t) key; |
| 460 | + getInteger("pfKey", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID); | ||
| 409 | } | 461 | } |
| 410 | 462 | ||
| 411 | - virtual int pakey(int key) | 463 | + virtual int pakey(int key) |
| 412 | { | 464 | { |
| 413 | - | 465 | + dbus_int32_t val = (dbus_int32_t) key; |
| 466 | + getInteger("paKey", DBUS_TYPE_STRING, &this->id, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID); | ||
| 414 | } | 467 | } |
| 415 | 468 | ||
| 416 | - virtual int quit(void) | 469 | + virtual int quit(void) |
| 417 | { | 470 | { |
| 418 | 471 | ||
| 419 | } | 472 | } |
| 420 | 473 | ||
| 421 | - virtual int action(const char *name) | 474 | + virtual int action(const char *name) |
| 422 | { | 475 | { |
| 423 | 476 | ||
| 424 | } | 477 | } |
src/libpw3270cpp/session.cc
| @@ -621,14 +621,13 @@ | @@ -621,14 +621,13 @@ | ||
| 621 | return set_url(host); | 621 | return set_url(host); |
| 622 | } | 622 | } |
| 623 | 623 | ||
| 624 | - int session::connect(const char *host, time_t wait) | 624 | + int session::connect(const char *url, time_t wait) |
| 625 | { | 625 | { |
| 626 | int rc = 0; | 626 | int rc = 0; |
| 627 | 627 | ||
| 628 | - if(host && *host) | 628 | + if(url && *url) |
| 629 | { | 629 | { |
| 630 | - rc = set_url(host); | ||
| 631 | - trace("%s: set_url(%s) = %d",__FUNCTION__,host,rc); | 630 | + set_url(url); |
| 632 | } | 631 | } |
| 633 | 632 | ||
| 634 | rc = connect(); | 633 | rc = connect(); |
| @@ -636,16 +635,7 @@ | @@ -636,16 +635,7 @@ | ||
| 636 | 635 | ||
| 637 | if(!rc && wait) | 636 | if(!rc && wait) |
| 638 | { | 637 | { |
| 639 | - time_t timeout = time(0)+wait; | ||
| 640 | - rc = ETIMEDOUT; | ||
| 641 | - | ||
| 642 | - while(time(0) < timeout && rc == ETIMEDOUT) | ||
| 643 | - { | ||
| 644 | - trace("%s: Waiting",__FUNCTION__); | ||
| 645 | - if(is_connected()) | ||
| 646 | - rc = 0; | ||
| 647 | - iterate(true); | ||
| 648 | - } | 638 | + rc = wait_for_ready(wait); |
| 649 | } | 639 | } |
| 650 | 640 | ||
| 651 | return rc; | 641 | return rc; |
src/libpw3270cpp/testprogram.cc
| @@ -46,12 +46,9 @@ | @@ -46,12 +46,9 @@ | ||
| 46 | // session *session = session::start(""); | 46 | // session *session = session::start(""); |
| 47 | // session *session = session::start("new"); | 47 | // session *session = session::start("new"); |
| 48 | 48 | ||
| 49 | - return 0; | ||
| 50 | - | ||
| 51 | cout << "pw3270 version: " << session->get_version() << endl; | 49 | cout << "pw3270 version: " << session->get_version() << endl; |
| 52 | cout << "pw3270 revision: " << session->get_revision() << endl << endl; | 50 | cout << "pw3270 revision: " << session->get_revision() << endl << endl; |
| 53 | 51 | ||
| 54 | - /* | ||
| 55 | if(session->is_connected()) | 52 | if(session->is_connected()) |
| 56 | cout << "\tConnected to host" << endl; | 53 | cout << "\tConnected to host" << endl; |
| 57 | else | 54 | else |
| @@ -64,7 +61,8 @@ | @@ -64,7 +61,8 @@ | ||
| 64 | 61 | ||
| 65 | s = session->get_host_charset(); | 62 | s = session->get_host_charset(); |
| 66 | cout << "\tHost charset: " << s.c_str() << endl; | 63 | cout << "\tHost charset: " << s.c_str() << endl; |
| 67 | - */ | 64 | + |
| 65 | + return 0; | ||
| 68 | 66 | ||
| 69 | cout << "Connect: " << session->connect("fandezhi.efglobe.com:23",60) << endl << endl; | 67 | cout << "Connect: " << session->connect("fandezhi.efglobe.com:23",60) << endl << endl; |
| 70 | 68 |