Commit b6bfda0d46fd608e56166e98d8a40e7355f8da8a

Authored by Perry Werneck
1 parent dff8b36d
Exists in master and in 1 other branch develop

Fixing windows error messages.

client/src/core/windows/request.cc
... ... @@ -147,7 +147,16 @@
147 147 uint16_t rc = *((uint16_t *) (in.block + in.current));
148 148 in.current += sizeof(uint16_t);
149 149  
150   - // Extract argc
  150 + if(rc) {
  151 +
  152 + // It´s an error, extract message
  153 + in.block[in.used] = 0;
  154 + debug("Error was ",rc," (\"",(const char *) (in.block + in.current),"\")");
  155 + throw std::system_error(std::error_code(rc,std::system_category()),(const char *) (in.block + in.current));
  156 +
  157 + }
  158 +
  159 + // It´s not an error, extract argument count
151 160 uint16_t argc = *((uint16_t *) (in.block + in.current));
152 161 in.current += sizeof(uint16_t);
153 162  
... ...
client/src/host/pop.cc
... ... @@ -41,41 +41,17 @@
41 41 /*---[ Implement ]----------------------------------------------------------------------------------*/
42 42  
43 43 TN3270::Host & TN3270::Host::pop(int baddr, std::string &text) {
44   -
45   - this->session->waitForReady(this->timeout);
46   -
47   - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {
48   - chkResponse(ENOTCONN);
49   - }
50   -
51 44 session->pop(baddr, text);
52   -
53 45 return *this;
54 46 }
55 47  
56 48 TN3270::Host & TN3270::Host::pop(unsigned short row, unsigned short col, std::string &text) {
57   -
58   - this->session->waitForReady(this->timeout);
59   -
60   - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {
61   - chkResponse(ENOTCONN);
62   - }
63   -
64 49 session->pop(row,col,text);
65   -
66 50 return *this;
67 51 }
68 52  
69 53 TN3270::Host & TN3270::Host::pop(std::string &text) {
70   -
71   - this->session->waitForReady(this->timeout);
72   -
73   - if(this->session->getConnectionState() == TN3270::DISCONNECTED) {
74   - chkResponse(ENOTCONN);
75   - }
76   -
77 54 session->pop(text);
78   -
79 55 return *this;
80 56 }
81 57  
... ...
client/src/host/stream.cc
... ... @@ -42,7 +42,6 @@
42 42  
43 43 /// @brief Writes characters to the associated file from the put area
44 44 int TN3270::Host::sync() {
45   - this->session->waitForReady(this->timeout);
46 45 return 0;
47 46 }
48 47  
... ...
client/src/host/string.cc
... ... @@ -41,52 +41,32 @@
41 41 /*---[ Implement ]----------------------------------------------------------------------------------*/
42 42  
43 43 std::string TN3270::Host::toString() const {
44   -
45   - this->session->waitForReady(this->timeout);
46 44 return this->session->toString();
47 45 }
48 46  
49 47 std::string TN3270::Host::toString(int baddr, int len, char lf) const {
50   -
51   - this->session->waitForReady(this->timeout);
52 48 return this->session->toString(baddr,len,lf);
53   -
54 49 }
55 50  
56 51 std::string TN3270::Host::toString(unsigned short row, unsigned short col, int len, char lf) const {
57   -
58   - this->session->waitForReady(this->timeout);
59 52 return this->session->toString(row,col,len,lf);
60   -
61 53 }
62 54  
63 55 /// @brief Checks if the terminal contains the string.
64 56 size_t TN3270::Host::find(const char * str, size_t pos) const {
65   -
66   - this->session->waitForReady(this->timeout);
67 57 return this->session->find(str,pos);
68   -
69 58 }
70 59  
71 60 /// @brief Get the number of occurrences of a string in the terminal.
72 61 size_t TN3270::Host::count(const char * str, size_t pos) const {
73   -
74   - this->session->waitForReady(this->timeout);
75 62 return this->session->count(str,pos);
76   -
77 63 }
78 64  
79 65 /// @brief Compare contents.
80 66 int TN3270::Host::compare(int baddr, const char* s, int len) const {
81   -
82   - this->session->waitForReady(this->timeout);
83 67 return this->session->compare(baddr, s, len);
84   -
85 68 }
86 69  
87 70 int TN3270::Host::compare(unsigned short row, unsigned short col, const char* s, int len) const {
88   -
89   - this->session->waitForReady(this->timeout);
90 71 return this->session->compare(row,col,s,len);
91   -
92 72 }
... ...
client/src/testprogram/testprogram.cc
... ... @@ -170,25 +170,13 @@
170 170  
171 171 TN3270::Host host{session};
172 172  
173   - host.connect();
  173 + // host.connect();
174 174  
175   - {
176   - auto start = time(nullptr);
177   - for(size_t ix = 0; ix < 100; ix++) {
178   - host.waitForReady(5);
179   - }
180   - cout << endl << "Time for waitForReady method: " << (time(nullptr) - start) << endl << endl;
181   - }
  175 + cout << endl << "------------------------" << endl;
  176 + host.toString(14,1,75,0);
  177 + cout << endl << "------------------------" << endl;
182 178  
183   - {
184   - auto start = time(nullptr);
185   - for(size_t ix = 0; ix < 100; ix++) {
186   - host.toString(14,1,80,0);
187   - }
188   - cout << endl << "Time for toString method: " << (time(nullptr) - start) << endl << endl;
189   - }
190   -
191   - host.disconnect();
  179 + // host.disconnect();
192 180  
193 181 /*
194 182 cout
... ... @@ -275,8 +263,8 @@
275 263  
276 264 cout << "Session: " << session << endl;
277 265  
278   - // testHost(session);
279   - testPerformance(session);
  266 + testHost(session);
  267 + // testPerformance(session);
280 268  
281 269  
282 270 //testAttributes(session);
... ...
server/src/core/linux/gobject.c
... ... @@ -302,11 +302,6 @@ H3270 * ipc3270_get_session(GObject *object) {
302 302 return IPC3270(object)->hSession;
303 303 }
304 304  
305   -void ipc3270_set_error(GObject *object, int errcode, GError **error) {
306   - if(error && !*error)
307   - g_set_error(error,IPC3270(object)->error_domain,errcode,"%s",strerror(errcode));
308   -}
309   -
310 305 GQuark ipc3270_get_error_domain(GObject *object) {
311 306 return IPC3270(object)->error_domain;
312 307 }
... ...
server/src/core/methods/methods.c
... ... @@ -88,12 +88,21 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req
88 88  
89 89 if(!g_ascii_strcasecmp(methods[ix].name,method_name)) {
90 90  
  91 +#ifdef _DEBUG_
  92 + g_message("Calling %s",methods[ix].name);
  93 +#endif // _DEBUG_
  94 +
91 95 int rc = methods[ix].call(object,request,response,error);
92 96  
93 97 debug("rc=%d error=%p",rc,*error);
94 98  
95 99 if(rc)
  100 + {
  101 + debug("%s exits with rc=%d (%s)",methods[ix].name,rc,ipc3270_get_error_message(rc));
  102 + g_message("%s exits with rc=%d (%s)",methods[ix].name,rc,ipc3270_get_error_message(rc));
96 103 ipc3270_set_error(object,rc,error);
  104 + debug("Error Message was set to %s",(*error)->message);
  105 + }
97 106  
98 107 return 0;
99 108 }
... ...
server/src/core/tools.c
... ... @@ -43,3 +43,30 @@
43 43  
44 44 #endif // ! GLIB(2,44,0)
45 45  
  46 + const char * ipc3270_get_error_message(int errcode) {
  47 +
  48 + static const struct Messages {
  49 + int errcode;
  50 + const char *msg;
  51 + } messages[] = {
  52 + { ENOTCONN, "Not connected to host" }
  53 + };
  54 +
  55 + size_t ix;
  56 +
  57 + for(ix = 0; ix < G_N_ELEMENTS(messages); ix++) {
  58 + if(messages[ix].errcode == errcode) {
  59 + return messages[ix].msg;
  60 + }
  61 + }
  62 +
  63 + return strerror(errcode);
  64 +}
  65 +
  66 +void ipc3270_set_error(GObject *object, int errcode, GError **error) {
  67 + if(error && !*error) {
  68 + g_set_error(error,ipc3270_get_error_domain(object),errcode,"%s",ipc3270_get_error_message(errcode));
  69 + }
  70 +}
  71 +
  72 +
... ...
server/src/core/windows/gobject.c
... ... @@ -112,10 +112,6 @@ H3270 * ipc3270_get_session(GObject *object) {
112 112 return IPC3270(object)->hSession;
113 113 }
114 114  
115   -void ipc3270_set_error(GObject *object, int errcode, GError **error) {
116   - g_set_error(error,IPC3270(object)->error_domain,errcode,"%s",strerror(errcode));
117   -}
118   -
119 115 GQuark ipc3270_get_error_domain(GObject *object) {
120 116 return IPC3270(object)->error_domain;
121 117 }
... ...
server/src/include/ipc-glib.h
... ... @@ -139,6 +139,7 @@
139 139 GQuark ipc3270_get_error_domain(GObject *object);
140 140  
141 141 void ipc3270_set_error(GObject *object, int errcode, GError **error);
  142 + const char * ipc3270_get_error_message(int errcode);
142 143  
143 144 int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *request, GObject *response, GError **error);
144 145 gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVariant *value, GError **error);
... ...