Commit b6bfda0d46fd608e56166e98d8a40e7355f8da8a
1 parent
dff8b36d
Exists in
master
and in
1 other branch
Fixing windows error messages.
Showing
10 changed files
with
54 additions
and
74 deletions
Show diff stats
client/src/core/windows/request.cc
@@ -147,7 +147,16 @@ | @@ -147,7 +147,16 @@ | ||
147 | uint16_t rc = *((uint16_t *) (in.block + in.current)); | 147 | uint16_t rc = *((uint16_t *) (in.block + in.current)); |
148 | in.current += sizeof(uint16_t); | 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 | uint16_t argc = *((uint16_t *) (in.block + in.current)); | 160 | uint16_t argc = *((uint16_t *) (in.block + in.current)); |
152 | in.current += sizeof(uint16_t); | 161 | in.current += sizeof(uint16_t); |
153 | 162 |
client/src/host/pop.cc
@@ -41,41 +41,17 @@ | @@ -41,41 +41,17 @@ | ||
41 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 41 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
42 | 42 | ||
43 | TN3270::Host & TN3270::Host::pop(int baddr, std::string &text) { | 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 | session->pop(baddr, text); | 44 | session->pop(baddr, text); |
52 | - | ||
53 | return *this; | 45 | return *this; |
54 | } | 46 | } |
55 | 47 | ||
56 | TN3270::Host & TN3270::Host::pop(unsigned short row, unsigned short col, std::string &text) { | 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 | session->pop(row,col,text); | 49 | session->pop(row,col,text); |
65 | - | ||
66 | return *this; | 50 | return *this; |
67 | } | 51 | } |
68 | 52 | ||
69 | TN3270::Host & TN3270::Host::pop(std::string &text) { | 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 | session->pop(text); | 54 | session->pop(text); |
78 | - | ||
79 | return *this; | 55 | return *this; |
80 | } | 56 | } |
81 | 57 |
client/src/host/stream.cc
@@ -42,7 +42,6 @@ | @@ -42,7 +42,6 @@ | ||
42 | 42 | ||
43 | /// @brief Writes characters to the associated file from the put area | 43 | /// @brief Writes characters to the associated file from the put area |
44 | int TN3270::Host::sync() { | 44 | int TN3270::Host::sync() { |
45 | - this->session->waitForReady(this->timeout); | ||
46 | return 0; | 45 | return 0; |
47 | } | 46 | } |
48 | 47 |
client/src/host/string.cc
@@ -41,52 +41,32 @@ | @@ -41,52 +41,32 @@ | ||
41 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 41 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
42 | 42 | ||
43 | std::string TN3270::Host::toString() const { | 43 | std::string TN3270::Host::toString() const { |
44 | - | ||
45 | - this->session->waitForReady(this->timeout); | ||
46 | return this->session->toString(); | 44 | return this->session->toString(); |
47 | } | 45 | } |
48 | 46 | ||
49 | std::string TN3270::Host::toString(int baddr, int len, char lf) const { | 47 | std::string TN3270::Host::toString(int baddr, int len, char lf) const { |
50 | - | ||
51 | - this->session->waitForReady(this->timeout); | ||
52 | return this->session->toString(baddr,len,lf); | 48 | return this->session->toString(baddr,len,lf); |
53 | - | ||
54 | } | 49 | } |
55 | 50 | ||
56 | std::string TN3270::Host::toString(unsigned short row, unsigned short col, int len, char lf) const { | 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 | return this->session->toString(row,col,len,lf); | 52 | return this->session->toString(row,col,len,lf); |
60 | - | ||
61 | } | 53 | } |
62 | 54 | ||
63 | /// @brief Checks if the terminal contains the string. | 55 | /// @brief Checks if the terminal contains the string. |
64 | size_t TN3270::Host::find(const char * str, size_t pos) const { | 56 | size_t TN3270::Host::find(const char * str, size_t pos) const { |
65 | - | ||
66 | - this->session->waitForReady(this->timeout); | ||
67 | return this->session->find(str,pos); | 57 | return this->session->find(str,pos); |
68 | - | ||
69 | } | 58 | } |
70 | 59 | ||
71 | /// @brief Get the number of occurrences of a string in the terminal. | 60 | /// @brief Get the number of occurrences of a string in the terminal. |
72 | size_t TN3270::Host::count(const char * str, size_t pos) const { | 61 | size_t TN3270::Host::count(const char * str, size_t pos) const { |
73 | - | ||
74 | - this->session->waitForReady(this->timeout); | ||
75 | return this->session->count(str,pos); | 62 | return this->session->count(str,pos); |
76 | - | ||
77 | } | 63 | } |
78 | 64 | ||
79 | /// @brief Compare contents. | 65 | /// @brief Compare contents. |
80 | int TN3270::Host::compare(int baddr, const char* s, int len) const { | 66 | int TN3270::Host::compare(int baddr, const char* s, int len) const { |
81 | - | ||
82 | - this->session->waitForReady(this->timeout); | ||
83 | return this->session->compare(baddr, s, len); | 67 | return this->session->compare(baddr, s, len); |
84 | - | ||
85 | } | 68 | } |
86 | 69 | ||
87 | int TN3270::Host::compare(unsigned short row, unsigned short col, const char* s, int len) const { | 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 | return this->session->compare(row,col,s,len); | 71 | return this->session->compare(row,col,s,len); |
91 | - | ||
92 | } | 72 | } |
client/src/testprogram/testprogram.cc
@@ -170,25 +170,13 @@ | @@ -170,25 +170,13 @@ | ||
170 | 170 | ||
171 | TN3270::Host host{session}; | 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 | cout | 182 | cout |
@@ -275,8 +263,8 @@ | @@ -275,8 +263,8 @@ | ||
275 | 263 | ||
276 | cout << "Session: " << session << endl; | 264 | cout << "Session: " << session << endl; |
277 | 265 | ||
278 | - // testHost(session); | ||
279 | - testPerformance(session); | 266 | + testHost(session); |
267 | + // testPerformance(session); | ||
280 | 268 | ||
281 | 269 | ||
282 | //testAttributes(session); | 270 | //testAttributes(session); |
server/src/core/linux/gobject.c
@@ -302,11 +302,6 @@ H3270 * ipc3270_get_session(GObject *object) { | @@ -302,11 +302,6 @@ H3270 * ipc3270_get_session(GObject *object) { | ||
302 | return IPC3270(object)->hSession; | 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 | GQuark ipc3270_get_error_domain(GObject *object) { | 305 | GQuark ipc3270_get_error_domain(GObject *object) { |
311 | return IPC3270(object)->error_domain; | 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,12 +88,21 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req | ||
88 | 88 | ||
89 | if(!g_ascii_strcasecmp(methods[ix].name,method_name)) { | 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 | int rc = methods[ix].call(object,request,response,error); | 95 | int rc = methods[ix].call(object,request,response,error); |
92 | 96 | ||
93 | debug("rc=%d error=%p",rc,*error); | 97 | debug("rc=%d error=%p",rc,*error); |
94 | 98 | ||
95 | if(rc) | 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 | ipc3270_set_error(object,rc,error); | 103 | ipc3270_set_error(object,rc,error); |
104 | + debug("Error Message was set to %s",(*error)->message); | ||
105 | + } | ||
97 | 106 | ||
98 | return 0; | 107 | return 0; |
99 | } | 108 | } |
server/src/core/tools.c
@@ -43,3 +43,30 @@ | @@ -43,3 +43,30 @@ | ||
43 | 43 | ||
44 | #endif // ! GLIB(2,44,0) | 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,10 +112,6 @@ H3270 * ipc3270_get_session(GObject *object) { | ||
112 | return IPC3270(object)->hSession; | 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 | GQuark ipc3270_get_error_domain(GObject *object) { | 115 | GQuark ipc3270_get_error_domain(GObject *object) { |
120 | return IPC3270(object)->error_domain; | 116 | return IPC3270(object)->error_domain; |
121 | } | 117 | } |
server/src/include/ipc-glib.h
@@ -139,6 +139,7 @@ | @@ -139,6 +139,7 @@ | ||
139 | GQuark ipc3270_get_error_domain(GObject *object); | 139 | GQuark ipc3270_get_error_domain(GObject *object); |
140 | 140 | ||
141 | void ipc3270_set_error(GObject *object, int errcode, GError **error); | 141 | void ipc3270_set_error(GObject *object, int errcode, GError **error); |
142 | + const char * ipc3270_get_error_message(int errcode); | ||
142 | 143 | ||
143 | int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *request, GObject *response, GError **error); | 144 | int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *request, GObject *response, GError **error); |
144 | gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVariant *value, GError **error); | 145 | gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVariant *value, GError **error); |