Commit b9c3bf7296b4a18ee377ff77f8c071fab8446628

Authored by perry.werneck@gmail.com
1 parent bce5593a

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