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 | 180 | virtual string get_display_charset(void); |
| 181 | 181 | |
| 182 | 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 | 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 | 189 | virtual int disconnect(void) = 0; |
| 187 | 190 | virtual int wait_for_ready(int seconds) = 0; | ... | ... |
src/libpw3270cpp/local.cc
| ... | ... | @@ -127,7 +127,7 @@ |
| 127 | 127 | |
| 128 | 128 | |
| 129 | 129 | int (*_disconnect)(H3270 *h); |
| 130 | - int (*_connect)(H3270 *h,int wait); | |
| 130 | + int (*_connect)(H3270 *h, const char *url, int wait); | |
| 131 | 131 | const char (*_set_url)(H3270 *h, const char *n); |
| 132 | 132 | const char * (*_get_url)(H3270 *h, char *str, int len); |
| 133 | 133 | int (*_is_connected)(H3270 *h); |
| ... | ... | @@ -197,7 +197,7 @@ |
| 197 | 197 | |
| 198 | 198 | { (void **) & _get_version, "lib3270_get_version" }, |
| 199 | 199 | { (void **) & _disconnect, "lib3270_disconnect" }, |
| 200 | - { (void **) & _connect, "lib3270_connect" }, | |
| 200 | + { (void **) & _connect, "lib3270_connect_url" }, | |
| 201 | 201 | { (void **) & _set_url, "lib3270_set_url" }, |
| 202 | 202 | { (void **) & _get_url, "lib3270_get_url" }, |
| 203 | 203 | { (void **) & _main_iterate, "lib3270_main_iterate" }, |
| ... | ... | @@ -288,6 +288,18 @@ |
| 288 | 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 | 303 | int connect(void) |
| 292 | 304 | { |
| 293 | 305 | this->lock(); |
| ... | ... | @@ -296,6 +308,7 @@ |
| 296 | 308 | |
| 297 | 309 | return rc; |
| 298 | 310 | } |
| 311 | + */ | |
| 299 | 312 | |
| 300 | 313 | int set_url(const char *uri) |
| 301 | 314 | { | ... | ... |
src/libpw3270cpp/remote.cc
src/libpw3270cpp/service.cc
| ... | ... | @@ -60,7 +60,8 @@ |
| 60 | 60 | #define DBUS_INTERFACE "br.com.bb.pw3270.service" |
| 61 | 61 | |
| 62 | 62 | DBusConnection * conn; |
| 63 | - string id; | |
| 63 | + string name; | |
| 64 | + const char * id; | |
| 64 | 65 | |
| 65 | 66 | DBusMessage * createMessage(const char *method) |
| 66 | 67 | { |
| ... | ... | @@ -184,6 +185,17 @@ |
| 184 | 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 | 200 | protected: |
| 189 | 201 | |
| ... | ... | @@ -194,17 +206,43 @@ |
| 194 | 206 | |
| 195 | 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 | 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 | 248 | virtual int emulate_input(const char *str) |
| ... | ... | @@ -235,16 +273,17 @@ |
| 235 | 273 | if(*session != '?') |
| 236 | 274 | { |
| 237 | 275 | // Já tem sessão definida, usa. |
| 238 | - this->id = session; | |
| 276 | + this->name = session; | |
| 239 | 277 | } |
| 240 | 278 | else |
| 241 | 279 | { |
| 242 | 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 | 289 | virtual ~client() |
| ... | ... | @@ -254,48 +293,48 @@ |
| 254 | 293 | |
| 255 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 334 | virtual void set_unlock_delay(unsigned short ms) |
| 296 | 335 | { |
| 297 | 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 | 340 | virtual int set_host_charset(const char *charset) |
| ... | ... | @@ -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 | 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 | 372 | virtual string get_url() |
| ... | ... | @@ -325,7 +376,7 @@ |
| 325 | 376 | |
| 326 | 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 | 382 | virtual int wait_for_ready(int seconds) |
| ... | ... | @@ -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 | 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 | 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 | 633 | rc = connect(); |
| ... | ... | @@ -636,16 +635,7 @@ |
| 636 | 635 | |
| 637 | 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 | 641 | return rc; | ... | ... |
src/libpw3270cpp/testprogram.cc
| ... | ... | @@ -46,12 +46,9 @@ |
| 46 | 46 | // session *session = session::start(""); |
| 47 | 47 | // session *session = session::start("new"); |
| 48 | 48 | |
| 49 | - return 0; | |
| 50 | - | |
| 51 | 49 | cout << "pw3270 version: " << session->get_version() << endl; |
| 52 | 50 | cout << "pw3270 revision: " << session->get_revision() << endl << endl; |
| 53 | 51 | |
| 54 | - /* | |
| 55 | 52 | if(session->is_connected()) |
| 56 | 53 | cout << "\tConnected to host" << endl; |
| 57 | 54 | else |
| ... | ... | @@ -64,7 +61,8 @@ |
| 64 | 61 | |
| 65 | 62 | s = session->get_host_charset(); |
| 66 | 63 | cout << "\tHost charset: " << s.c_str() << endl; |
| 67 | - */ | |
| 64 | + | |
| 65 | + return 0; | |
| 68 | 66 | |
| 69 | 67 | cout << "Connect: " << session->connect("fandezhi.efglobe.com:23",60) << endl << endl; |
| 70 | 68 | ... | ... |