Commit 688efc9c6240e04630743e0eaa4c6ce09d44b139

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

Updating IPC components.

client/src/core/host.cc
@@ -211,20 +211,11 @@ @@ -211,20 +211,11 @@
211 throw std::system_error(ENOTSUP, std::system_category()); 211 throw std::system_error(ENOTSUP, std::system_category());
212 } 212 }
213 213
214 - void Host::input(const char *text, size_t sz) {  
215 -  
216 -#ifdef DEBUG  
217 - {  
218 - string str = string(text,sz);  
219 - clog << __FUNCTION__ << "(\"" << str << "\")" << endl;  
220 - }  
221 -#endif // DEBUG  
222 - 214 + Host & Host::input(const char *text, size_t sz) {
223 this->session->input(text, sz); 215 this->session->input(text, sz);
224 - 216 + return *this;
225 } 217 }
226 218
227 -  
228 Host & Host::input(const char *text, const char control_char) { 219 Host & Host::input(const char *text, const char control_char) {
229 220
230 for(const char * ptr = strchr(text,control_char); ptr; ptr = strchr(text,control_char)) { 221 for(const char * ptr = strchr(text,control_char); ptr; ptr = strchr(text,control_char)) {
client/src/core/session.cc
@@ -74,6 +74,24 @@ @@ -74,6 +74,24 @@
74 74
75 } 75 }
76 76
  77 + Session & Session::push(const PFKey key) {
  78 + return pfkey( ((unsigned short) key) + 1);
  79 + }
  80 +
  81 + Session & Session::push(const PAKey key) {
  82 + return pakey( ((unsigned short) key) + 1);
  83 + }
  84 +
  85 + Session & Session::push(int row, int col, const std::string &text) {
  86 + return push(row,col,text.c_str(),text.size());
  87 + }
  88 +
  89 + Session & Session::push(int baddr, const std::string &text) {
  90 + return push(baddr,text.c_str(),text.size());
  91 + }
  92 +
  93 +
  94 +
77 } 95 }
78 96
79 97
client/src/include/ipc-client-internals.h
@@ -204,10 +204,9 @@ @@ -204,10 +204,9 @@
204 /// @brief Set field at current posicion, jumps to next writable field. 204 /// @brief Set field at current posicion, jumps to next writable field.
205 TN3270::Session & push(const char *text) override; 205 TN3270::Session & push(const char *text) override;
206 206
207 - TN3270::Session & push(int baddr, const std::string &text) override;  
208 - TN3270::Session & push(int row, int col, const std::string &text) override;  
209 - TN3270::Session & push(const PFKey key) override;  
210 - TN3270::Session & push(const PAKey key) override; 207 + TN3270::Session & push(int baddr, const char *text, int length = -1) override;
  208 + TN3270::Session & push(int row, int col, const char *text, int length = -1) override;
  209 +
211 TN3270::Session & push(const Action action) override; 210 TN3270::Session & push(const Action action) override;
212 211
213 // Get contents. 212 // Get contents.
@@ -374,10 +373,9 @@ @@ -374,10 +373,9 @@
374 /// @brief Set field at current posicion, jumps to next writable field. 373 /// @brief Set field at current posicion, jumps to next writable field.
375 TN3270::Session & push(const char *text) override; 374 TN3270::Session & push(const char *text) override;
376 375
377 - TN3270::Session & push(int baddr, const std::string &text) override;  
378 - TN3270::Session & push(int row, int col, const std::string &text) override;  
379 - TN3270::Session & push(const PFKey key) override;  
380 - TN3270::Session & push(const PAKey key) override; 376 + TN3270::Session & push(int baddr, const char *text, int length = -1) override;
  377 + TN3270::Session & push(int row, int col, const char *text, int length = -1) override;
  378 +
381 TN3270::Session & push(const Action action) override; 379 TN3270::Session & push(const Action action) override;
382 380
383 // Get contents. 381 // Get contents.
client/src/session/local/session.cc
@@ -252,10 +252,10 @@ @@ -252,10 +252,10 @@
252 return *this; 252 return *this;
253 } 253 }
254 254
255 - TN3270::Session & Local::Session::push(int baddr, const std::string &text) { 255 + TN3270::Session & Local::Session::push(int baddr, const char * text, int length) {
256 std::lock_guard<std::mutex> lock(sync); 256 std::lock_guard<std::mutex> lock(sync);
257 257
258 - string converted = convertToHost(text.c_str(),text.size()); 258 + string converted = convertToHost(text, length);
259 259
260 if(lib3270_set_string_at_address(this->hSession,baddr,(unsigned char *) converted.c_str(),converted.length()) < 0) { 260 if(lib3270_set_string_at_address(this->hSession,baddr,(unsigned char *) converted.c_str(),converted.length()) < 0) {
261 throw std::system_error(errno, std::system_category()); 261 throw std::system_error(errno, std::system_category());
@@ -264,10 +264,10 @@ @@ -264,10 +264,10 @@
264 return *this; 264 return *this;
265 } 265 }
266 266
267 - TN3270::Session & Local::Session::push(int row, int col, const std::string &text) { 267 + TN3270::Session & Local::Session::push(int row, int col, const char *text, int length) {
268 std::lock_guard<std::mutex> lock(sync); 268 std::lock_guard<std::mutex> lock(sync);
269 269
270 - string converted = convertToHost(text.c_str(),text.size()); 270 + string converted = convertToHost(text,length);
271 271
272 if(lib3270_set_string_at(this->hSession,row,col,(unsigned char *) converted.c_str())) { 272 if(lib3270_set_string_at(this->hSession,row,col,(unsigned char *) converted.c_str())) {
273 throw std::system_error(errno, std::system_category()); 273 throw std::system_error(errno, std::system_category());
@@ -276,18 +276,6 @@ @@ -276,18 +276,6 @@
276 return *this; 276 return *this;
277 } 277 }
278 278
279 - TN3270::Session & Local::Session::push(const PFKey key) {  
280 - std::lock_guard<std::mutex> lock(sync);  
281 - lib3270_pfkey(hSession,(int) key);  
282 - return *this;  
283 - }  
284 -  
285 - TN3270::Session & Local::Session::push(const PAKey key) {  
286 - std::lock_guard<std::mutex> lock(sync);  
287 - lib3270_pakey(hSession,(int) key);  
288 - return *this;  
289 - }  
290 -  
291 TN3270::Session & Local::Session::push(const Action action) { 279 TN3270::Session & Local::Session::push(const Action action) {
292 280
293 typedef int (*ActionCallback)(H3270 *); 281 typedef int (*ActionCallback)(H3270 *);
client/src/session/remote/session.cc
@@ -127,6 +127,8 @@ @@ -127,6 +127,8 @@
127 127
128 TN3270::Session & IPC::Session::input(const char *text, size_t length) { 128 TN3270::Session & IPC::Session::input(const char *text, size_t length) {
129 129
  130 + throw std::system_error(ENOTSUP, std::system_category());
  131 +
130 return *this; 132 return *this;
131 } 133 }
132 134
@@ -148,13 +150,17 @@ @@ -148,13 +150,17 @@
148 150
149 } 151 }
150 152
151 - TN3270::Session & IPC::Session::push(int baddr, const std::string &text) { 153 + TN3270::Session & IPC::Session::push(int baddr, const char *text, int length) {
152 154
153 int rc; 155 int rc;
154 156
  157 + if(length < 0)
  158 + length = strlen(text);
  159 +
155 Request(*this,"setStringAtAddress") 160 Request(*this,"setStringAtAddress")
156 .push((uint32_t) baddr) 161 .push((uint32_t) baddr)
157 - .push(text.c_str()) 162 + .push(text)
  163 + .push((uint32_t) length)
158 .call() 164 .call()
159 .pop(rc); 165 .pop(rc);
160 166
@@ -166,48 +172,18 @@ @@ -166,48 +172,18 @@
166 172
167 } 173 }
168 174
169 - TN3270::Session & IPC::Session::push(int row, int col, const std::string &text) { 175 + TN3270::Session & IPC::Session::push(int row, int col, const char *text, int length) {
170 176
171 int32_t rc; 177 int32_t rc;
172 178
  179 + if(length < 0)
  180 + length = strlen(text);
  181 +
173 Request(*this,"setStringAt") 182 Request(*this,"setStringAt")
174 .push((uint32_t) row) 183 .push((uint32_t) row)
175 .push((uint32_t) col) 184 .push((uint32_t) col)
176 - .push(text.c_str())  
177 - .call()  
178 - .pop(rc);  
179 -  
180 - if(rc) {  
181 - throw std::system_error((int) rc, std::system_category());  
182 - }  
183 -  
184 - return *this;  
185 -  
186 - }  
187 -  
188 - TN3270::Session & IPC::Session::push(const PFKey key) {  
189 -  
190 - int32_t rc;  
191 -  
192 - Request(*this,"pfkey")  
193 - .push((uint32_t) key)  
194 - .call()  
195 - .pop(rc);  
196 -  
197 - if(rc) {  
198 - throw std::system_error((int) rc, std::system_category());  
199 - }  
200 -  
201 - return *this;  
202 -  
203 - }  
204 -  
205 - TN3270::Session & IPC::Session::push(const PAKey key) {  
206 -  
207 - int32_t rc;  
208 -  
209 - Request(*this,"pakey")  
210 - .push((uint32_t) key) 185 + .push(text)
  186 + .push((uint32_t) length)
211 .call() 187 .call()
212 .pop(rc); 188 .pop(rc);
213 189
common/src/include/lib3270/ipc.h
@@ -294,10 +294,15 @@ @@ -294,10 +294,15 @@
294 /// @brief Send PA. 294 /// @brief Send PA.
295 virtual Session & pakey(unsigned short value) = 0; 295 virtual Session & pakey(unsigned short value) = 0;
296 296
297 - virtual Session & push(int baddr, const std::string &text) = 0;  
298 - virtual Session & push(int row, int col, const std::string &text) = 0;  
299 - virtual Session & push(const PFKey key) = 0;  
300 - virtual Session & push(const PAKey key) = 0; 297 + virtual Session & push(int baddr, const char *text, int length) = 0;
  298 + virtual Session & push(int row, int col, const char *text, int length) = 0;
  299 +
  300 + Session & push(int row, int col, const std::string &text);
  301 + Session & push(int baddr, const std::string &text);
  302 +
  303 + Session & push(const PFKey key);
  304 + Session & push(const PAKey key);
  305 +
301 virtual Session & push(const Action action) = 0; 306 virtual Session & push(const Action action) = 0;
302 307
303 // Get contents. 308 // Get contents.
@@ -342,8 +347,6 @@ @@ -342,8 +347,6 @@
342 /// @brief Write error to log file. 347 /// @brief Write error to log file.
343 void error(const char *fmt, ...) const; 348 void error(const char *fmt, ...) const;
344 349
345 - void input(const char *text, size_t sz);  
346 -  
347 public: 350 public:
348 Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT); 351 Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT);
349 ~Host(); 352 ~Host();
@@ -435,6 +438,8 @@ @@ -435,6 +438,8 @@
435 /// @param control_char Control character used to identify commands. 438 /// @param control_char Control character used to identify commands.
436 Host & input(const char *text, const char control_char = '@'); 439 Host & input(const char *text, const char control_char = '@');
437 440
  441 + Host & input(const char *text, size_t sz);
  442 +
438 /// @brief Set field at current posicion, jumps to next writable field. 443 /// @brief Set field at current posicion, jumps to next writable field.
439 inline Host & push(const char *text) { 444 inline Host & push(const char *text) {
440 session->push(text); 445 session->push(text);
@@ -452,11 +457,21 @@ @@ -452,11 +457,21 @@
452 return *this; 457 return *this;
453 } 458 }
454 459
  460 + inline Host & push(int baddr, const char *text, int length = -1) {
  461 + session->push(baddr,text,length);
  462 + return *this;
  463 + }
  464 +
455 inline Host & push(int row, int col, const std::string &text) { 465 inline Host & push(int row, int col, const std::string &text) {
456 session->push(row,col,text); 466 session->push(row,col,text);
457 return *this; 467 return *this;
458 } 468 }
459 469
  470 + inline Host & push(int row, int col, const char *text, int length = -1) {
  471 + session->push(row,col,text,length);
  472 + return *this;
  473 + }
  474 +
460 inline Host & push(const PFKey key) { 475 inline Host & push(const PFKey key) {
461 session->push(key); 476 session->push(key);
462 return *this; 477 return *this;