Commit b9c3bf7296b4a18ee377ff77f8c071fab8446628
1 parent
bce5593a
Exists in
master
and in
5 other branches
Simplificando módulo IPC windows
Showing
1 changed file
with
70 additions
and
155 deletions
Show diff stats
src/classlib/remote.cc
| ... | ... | @@ -100,9 +100,35 @@ |
| 100 | 100 | return s; |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | + int query_intval(void *pkt, size_t szQuery, bool dynamic = false) | |
| 104 | + { | |
| 105 | + struct hllapi_packet_result response; | |
| 106 | + DWORD cbSize = (DWORD) szQuery; | |
| 107 | + BOOL status; | |
| 108 | + | |
| 109 | + status = TransactNamedPipe(hPipe,(LPVOID) pkt, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 110 | + | |
| 111 | + if(dynamic) | |
| 112 | + free(pkt); | |
| 113 | + | |
| 114 | + if(status) | |
| 115 | + return response.rc; | |
| 116 | + | |
| 117 | + throw exception(GetLastError(),"%s","Transaction error"); | |
| 118 | + | |
| 119 | + } | |
| 120 | + | |
| 103 | 121 | |
| 104 | 122 | #elif defined(HAVE_DBUS) |
| 105 | 123 | |
| 124 | + #define HLLAPI_PACKET_IS_CONNECTED "isConnected" | |
| 125 | + #define HLLAPI_PACKET_GET_CSTATE "getConnectionState" | |
| 126 | + #define HLLAPI_PACKET_IS_READY "isReady" | |
| 127 | + #define HLLAPI_PACKET_DISCONNECT "disconnect" | |
| 128 | + #define HLLAPI_PACKET_GET_CURSOR "getCursorAddress" | |
| 129 | + #define HLLAPI_PACKET_ENTER "enter" | |
| 130 | + #define HLLAPI_PACKET_QUIT "quit" | |
| 131 | + | |
| 106 | 132 | DBusConnection * conn; |
| 107 | 133 | char * dest; |
| 108 | 134 | char * path; |
| ... | ... | @@ -116,7 +142,7 @@ |
| 116 | 142 | method); // method |
| 117 | 143 | |
| 118 | 144 | if (!msg) |
| 119 | - throw exception("Error creating message for method %s",method); | |
| 145 | + throw exception("Error creating DBUS message for method %s",method); | |
| 120 | 146 | |
| 121 | 147 | return msg; |
| 122 | 148 | |
| ... | ... | @@ -163,7 +189,7 @@ |
| 163 | 189 | dbus_message_unref(msg); |
| 164 | 190 | |
| 165 | 191 | throw e; |
| 166 | - return NULL; | |
| 192 | + | |
| 167 | 193 | } |
| 168 | 194 | |
| 169 | 195 | } |
| ... | ... | @@ -208,6 +234,14 @@ |
| 208 | 234 | return -1; |
| 209 | 235 | } |
| 210 | 236 | |
| 237 | +#else | |
| 238 | + | |
| 239 | + int query_intval(const char *method) | |
| 240 | + { | |
| 241 | + throw exception("Call to unimplemented RPC method \"%s\"",method); | |
| 242 | + return -1 | |
| 243 | + } | |
| 244 | + | |
| 211 | 245 | #endif |
| 212 | 246 | |
| 213 | 247 | public: |
| ... | ... | @@ -388,7 +422,9 @@ |
| 388 | 422 | get_intval(call(msg)); |
| 389 | 423 | } |
| 390 | 424 | |
| 391 | - #else | |
| 425 | +#else | |
| 426 | + | |
| 427 | + throw exception("%s","RPC support is incomplete."); | |
| 392 | 428 | |
| 393 | 429 | #endif |
| 394 | 430 | } |
| ... | ... | @@ -429,46 +465,20 @@ |
| 429 | 465 | |
| 430 | 466 | bool is_connected(void) |
| 431 | 467 | { |
| 432 | -#if defined(WIN32) | |
| 433 | - | |
| 434 | 468 | return query_intval(HLLAPI_PACKET_IS_CONNECTED) != 0; |
| 435 | - | |
| 436 | -#elif defined(HAVE_DBUS) | |
| 437 | - | |
| 438 | - return query_intval("isConnected") != 0; | |
| 439 | - | |
| 440 | -#endif | |
| 441 | - | |
| 442 | - return false; | |
| 443 | 469 | } |
| 444 | 470 | |
| 445 | 471 | LIB3270_CSTATE get_cstate(void) |
| 446 | 472 | { |
| 447 | -#if defined(WIN32) | |
| 448 | - | |
| 449 | 473 | return (LIB3270_CSTATE) query_intval(HLLAPI_PACKET_GET_CSTATE); |
| 450 | - | |
| 451 | -#elif defined(HAVE_DBUS) | |
| 452 | - | |
| 453 | - return (LIB3270_CSTATE) query_intval("getConnectionState"); | |
| 454 | - | |
| 455 | -#else | |
| 456 | - | |
| 457 | - return (LIB3270_CSTATE) -1; | |
| 458 | - | |
| 459 | -#endif | |
| 460 | - | |
| 461 | 474 | } |
| 462 | 475 | |
| 463 | 476 | int connect(const char *uri, bool wait) |
| 464 | 477 | { |
| 465 | 478 | #if defined(WIN32) |
| 466 | - struct hllapi_packet_connect * pkt; | |
| 467 | - struct hllapi_packet_result response; | |
| 468 | - DWORD cbSize; | |
| 469 | 479 | |
| 470 | - cbSize = sizeof(struct hllapi_packet_connect)+strlen(uri); | |
| 471 | - pkt = (struct hllapi_packet_connect *) malloc(cbSize); | |
| 480 | + size_t cbSize = sizeof(struct hllapi_packet_connect)+strlen(uri); | |
| 481 | + struct hllapi_packet_connect * pkt = (struct hllapi_packet_connect *) malloc(cbSize); | |
| 472 | 482 | |
| 473 | 483 | pkt->packet_id = HLLAPI_PACKET_CONNECT; |
| 474 | 484 | pkt->wait = (unsigned char) wait; |
| ... | ... | @@ -476,15 +486,7 @@ |
| 476 | 486 | |
| 477 | 487 | trace("Sending %s",pkt->hostname); |
| 478 | 488 | |
| 479 | - if(TransactNamedPipe(hPipe,(LPVOID) pkt, cbSize, &response, sizeof(response), &cbSize,NULL)) | |
| 480 | - { | |
| 481 | - free(pkt); | |
| 482 | - return response.rc; | |
| 483 | - } | |
| 484 | - | |
| 485 | - free(pkt); | |
| 486 | - | |
| 487 | - throw exception(GetLastError(),"%s","Transaction error"); | |
| 489 | + return query_intval((void *) pkt,cbSize,true); | |
| 488 | 490 | |
| 489 | 491 | #elif defined(HAVE_DBUS) |
| 490 | 492 | |
| ... | ... | @@ -562,36 +564,13 @@ |
| 562 | 564 | |
| 563 | 565 | bool is_ready(void) |
| 564 | 566 | { |
| 565 | -#if defined(WIN32) | |
| 566 | - | |
| 567 | 567 | return query_intval(HLLAPI_PACKET_IS_READY) != 0; |
| 568 | - | |
| 569 | -#elif defined(HAVE_DBUS) | |
| 570 | - | |
| 571 | - return query_intval("isReady") != 0; | |
| 572 | - | |
| 573 | -#endif | |
| 574 | - | |
| 575 | - return false; | |
| 576 | 568 | } |
| 577 | 569 | |
| 578 | 570 | |
| 579 | 571 | int disconnect(void) |
| 580 | 572 | { |
| 581 | -#if defined(WIN32) | |
| 582 | - | |
| 583 | 573 | return query_intval(HLLAPI_PACKET_DISCONNECT); |
| 584 | - | |
| 585 | -#elif defined(HAVE_DBUS) | |
| 586 | - | |
| 587 | - return query_intval("disconnect"); | |
| 588 | - | |
| 589 | -#else | |
| 590 | - | |
| 591 | - return -1; | |
| 592 | - | |
| 593 | -#endif | |
| 594 | - | |
| 595 | 574 | } |
| 596 | 575 | |
| 597 | 576 | |
| ... | ... | @@ -720,8 +699,7 @@ |
| 720 | 699 | #if defined(WIN32) |
| 721 | 700 | |
| 722 | 701 | struct hllapi_packet_text_at * query; |
| 723 | - struct hllapi_packet_result response; | |
| 724 | - DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen(text); | |
| 702 | + size_t cbSize = sizeof(struct hllapi_packet_text_at)+strlen(text); | |
| 725 | 703 | |
| 726 | 704 | query = (struct hllapi_packet_text_at *) malloc(cbSize); |
| 727 | 705 | query->packet_id = HLLAPI_PACKET_CMP_TEXT_AT; |
| ... | ... | @@ -729,11 +707,7 @@ |
| 729 | 707 | query->col = col; |
| 730 | 708 | strcpy(query->text,text); |
| 731 | 709 | |
| 732 | - TransactNamedPipe(hPipe,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 733 | - | |
| 734 | - free(query); | |
| 735 | - | |
| 736 | - return response.rc; | |
| 710 | + return query_intval((void *) query, cbSize, true); | |
| 737 | 711 | |
| 738 | 712 | #elif defined(HAVE_DBUS) |
| 739 | 713 | |
| ... | ... | @@ -799,11 +773,9 @@ |
| 799 | 773 | { |
| 800 | 774 | #if defined(WIN32) |
| 801 | 775 | |
| 802 | - struct hllapi_packet_cursor query = { HLLAPI_PACKET_SET_CURSOR_POSITION, (unsigned short) row, (unsigned short) col }; | |
| 803 | - struct hllapi_packet_result response; | |
| 804 | - DWORD cbSize = sizeof(query); | |
| 805 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 806 | - return response.rc != 0; | |
| 776 | + struct hllapi_packet_cursor query = { HLLAPI_PACKET_SET_CURSOR_POSITION, (unsigned short) row, (unsigned short) col }; | |
| 777 | + | |
| 778 | + return query_intval((void *) &query, sizeof(query)); | |
| 807 | 779 | |
| 808 | 780 | #elif defined(HAVE_DBUS) |
| 809 | 781 | |
| ... | ... | @@ -826,11 +798,9 @@ |
| 826 | 798 | { |
| 827 | 799 | #if defined(WIN32) |
| 828 | 800 | |
| 829 | - struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; | |
| 830 | - struct hllapi_packet_result response; | |
| 831 | - DWORD cbSize = sizeof(query); | |
| 832 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 833 | - return response.rc; | |
| 801 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; | |
| 802 | + | |
| 803 | + return query_intval((void *) &query, sizeof(query)); | |
| 834 | 804 | |
| 835 | 805 | #elif defined(HAVE_DBUS) |
| 836 | 806 | |
| ... | ... | @@ -850,49 +820,22 @@ |
| 850 | 820 | |
| 851 | 821 | int get_cursor_addr(void) |
| 852 | 822 | { |
| 853 | -#if defined(WIN32) | |
| 854 | - | |
| 855 | 823 | return query_intval(HLLAPI_PACKET_GET_CURSOR); |
| 856 | - | |
| 857 | -#elif defined(HAVE_DBUS) | |
| 858 | - | |
| 859 | - return query_intval("getCursorAddress"); | |
| 860 | - | |
| 861 | -#else | |
| 862 | - | |
| 863 | - return -1; | |
| 864 | - | |
| 865 | -#endif | |
| 866 | 824 | } |
| 867 | 825 | |
| 868 | 826 | |
| 869 | 827 | int enter(void) |
| 870 | 828 | { |
| 871 | -#if defined(WIN32) | |
| 872 | - | |
| 873 | 829 | return query_intval(HLLAPI_PACKET_ENTER); |
| 874 | - | |
| 875 | -#elif defined(HAVE_DBUS) | |
| 876 | - | |
| 877 | - return query_intval("enter"); | |
| 878 | - | |
| 879 | -#else | |
| 880 | - | |
| 881 | - return -1; | |
| 882 | - | |
| 883 | -#endif | |
| 884 | - | |
| 885 | 830 | } |
| 886 | 831 | |
| 887 | 832 | int pfkey(int key) |
| 888 | 833 | { |
| 889 | 834 | #if defined(WIN32) |
| 890 | 835 | |
| 891 | - struct hllapi_packet_keycode query = { HLLAPI_PACKET_PFKEY, (unsigned short) key }; | |
| 892 | - struct hllapi_packet_result response; | |
| 893 | - DWORD cbSize = sizeof(query); | |
| 894 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 895 | - return response.rc; | |
| 836 | + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PFKEY, (unsigned short) key }; | |
| 837 | + | |
| 838 | + return query_intval((void *) &query, sizeof(query)); | |
| 896 | 839 | |
| 897 | 840 | #elif defined(HAVE_DBUS) |
| 898 | 841 | |
| ... | ... | @@ -919,11 +862,9 @@ |
| 919 | 862 | { |
| 920 | 863 | #if defined(WIN32) |
| 921 | 864 | |
| 922 | - struct hllapi_packet_keycode query = { HLLAPI_PACKET_PAKEY, (unsigned short) key }; | |
| 923 | - struct hllapi_packet_result response; | |
| 924 | - DWORD cbSize = sizeof(query); | |
| 925 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 926 | - return response.rc; | |
| 865 | + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PAKEY, (unsigned short) key }; | |
| 866 | + | |
| 867 | + return query_intval((void *) &query, sizeof(query)); | |
| 927 | 868 | |
| 928 | 869 | #elif defined(HAVE_DBUS) |
| 929 | 870 | |
| ... | ... | @@ -947,31 +888,16 @@ |
| 947 | 888 | |
| 948 | 889 | int quit(void) |
| 949 | 890 | { |
| 950 | -#if defined(WIN32) | |
| 951 | - | |
| 952 | 891 | return query_intval(HLLAPI_PACKET_QUIT); |
| 953 | - | |
| 954 | -#elif defined(HAVE_DBUS) | |
| 955 | - | |
| 956 | - return query_intval("quit"); | |
| 957 | - | |
| 958 | -#else | |
| 959 | - | |
| 960 | - return -1; | |
| 961 | - | |
| 962 | -#endif | |
| 963 | - | |
| 964 | 892 | } |
| 965 | 893 | |
| 966 | 894 | int set_toggle(LIB3270_TOGGLE ix, bool value) |
| 967 | 895 | { |
| 968 | 896 | #if defined(WIN32) |
| 969 | 897 | |
| 970 | - struct hllapi_packet_set query = { HLLAPI_PACKET_SET_TOGGLE, (unsigned short) ix, (unsigned short) value }; | |
| 971 | - struct hllapi_packet_result response; | |
| 972 | - DWORD cbSize = sizeof(query); | |
| 973 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 974 | - return response.rc; | |
| 898 | + struct hllapi_packet_set query = { HLLAPI_PACKET_SET_TOGGLE, (unsigned short) ix, (unsigned short) value }; | |
| 899 | + | |
| 900 | + return query_intval((void *) &query, sizeof(query)); | |
| 975 | 901 | |
| 976 | 902 | #elif defined(HAVE_DBUS) |
| 977 | 903 | |
| ... | ... | @@ -1000,8 +926,7 @@ |
| 1000 | 926 | |
| 1001 | 927 | size_t len = strlen(str); |
| 1002 | 928 | struct hllapi_packet_emulate_input * query; |
| 1003 | - struct hllapi_packet_result response; | |
| 1004 | - DWORD cbSize = sizeof(struct hllapi_packet_emulate_input)+len; | |
| 929 | + size_t cbSize = sizeof(struct hllapi_packet_emulate_input)+len; | |
| 1005 | 930 | |
| 1006 | 931 | query = (struct hllapi_packet_emulate_input *) malloc(cbSize); |
| 1007 | 932 | query->packet_id = HLLAPI_PACKET_EMULATE_INPUT; |
| ... | ... | @@ -1009,11 +934,7 @@ |
| 1009 | 934 | query->pasting = 1; |
| 1010 | 935 | strcpy(query->text,str); |
| 1011 | 936 | |
| 1012 | - TransactNamedPipe(hPipe,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 1013 | - | |
| 1014 | - free(query); | |
| 1015 | - | |
| 1016 | - return response.rc; | |
| 937 | + return query_intval((void *) query, cbSize, true); | |
| 1017 | 938 | |
| 1018 | 939 | #elif defined(HAVE_DBUS) |
| 1019 | 940 | |
| ... | ... | @@ -1037,11 +958,9 @@ |
| 1037 | 958 | { |
| 1038 | 959 | #if defined(WIN32) |
| 1039 | 960 | |
| 1040 | - struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_START, (unsigned short) baddr }; | |
| 1041 | - struct hllapi_packet_result response; | |
| 1042 | - DWORD cbSize = sizeof(query); | |
| 1043 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 1044 | - return response.rc; | |
| 961 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_START, (unsigned short) baddr }; | |
| 962 | + | |
| 963 | + return query_intval((void *) &query, sizeof(query)); | |
| 1045 | 964 | |
| 1046 | 965 | #elif defined(HAVE_DBUS) |
| 1047 | 966 | |
| ... | ... | @@ -1068,11 +987,9 @@ |
| 1068 | 987 | { |
| 1069 | 988 | #if defined(WIN32) |
| 1070 | 989 | |
| 1071 | - struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_LEN, (unsigned short) baddr }; | |
| 1072 | - struct hllapi_packet_result response; | |
| 1073 | - DWORD cbSize = sizeof(query); | |
| 1074 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 1075 | - return response.rc; | |
| 990 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_LEN, (unsigned short) baddr }; | |
| 991 | + | |
| 992 | + return query_intval((void *) &query, sizeof(query)); | |
| 1076 | 993 | |
| 1077 | 994 | #elif defined(HAVE_DBUS) |
| 1078 | 995 | |
| ... | ... | @@ -1098,11 +1015,9 @@ |
| 1098 | 1015 | { |
| 1099 | 1016 | #if defined(WIN32) |
| 1100 | 1017 | |
| 1101 | - struct hllapi_packet_addr query = { HLLAPI_PACKET_NEXT_UNPROTECTED, (unsigned short) baddr }; | |
| 1102 | - struct hllapi_packet_result response; | |
| 1103 | - DWORD cbSize = sizeof(query); | |
| 1104 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
| 1105 | - return response.rc; | |
| 1018 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_NEXT_UNPROTECTED, (unsigned short) baddr }; | |
| 1019 | + | |
| 1020 | + return query_intval((void *) &query, sizeof(query)); | |
| 1106 | 1021 | |
| 1107 | 1022 | #elif defined(HAVE_DBUS) |
| 1108 | 1023 | ... | ... |