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 | ... | ... |