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 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 215 this->session->input(text, sz);
224   -
  216 + return *this;
225 217 }
226 218  
227   -
228 219 Host & Host::input(const char *text, const char control_char) {
229 220  
230 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 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 204 /// @brief Set field at current posicion, jumps to next writable field.
205 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 210 TN3270::Session & push(const Action action) override;
212 211  
213 212 // Get contents.
... ... @@ -374,10 +373,9 @@
374 373 /// @brief Set field at current posicion, jumps to next writable field.
375 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 379 TN3270::Session & push(const Action action) override;
382 380  
383 381 // Get contents.
... ...
client/src/session/local/session.cc
... ... @@ -252,10 +252,10 @@
252 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 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 260 if(lib3270_set_string_at_address(this->hSession,baddr,(unsigned char *) converted.c_str(),converted.length()) < 0) {
261 261 throw std::system_error(errno, std::system_category());
... ... @@ -264,10 +264,10 @@
264 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 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 272 if(lib3270_set_string_at(this->hSession,row,col,(unsigned char *) converted.c_str())) {
273 273 throw std::system_error(errno, std::system_category());
... ... @@ -276,18 +276,6 @@
276 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 279 TN3270::Session & Local::Session::push(const Action action) {
292 280  
293 281 typedef int (*ActionCallback)(H3270 *);
... ...
client/src/session/remote/session.cc
... ... @@ -127,6 +127,8 @@
127 127  
128 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 132 return *this;
131 133 }
132 134  
... ... @@ -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 155 int rc;
154 156  
  157 + if(length < 0)
  158 + length = strlen(text);
  159 +
155 160 Request(*this,"setStringAtAddress")
156 161 .push((uint32_t) baddr)
157   - .push(text.c_str())
  162 + .push(text)
  163 + .push((uint32_t) length)
158 164 .call()
159 165 .pop(rc);
160 166  
... ... @@ -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 177 int32_t rc;
172 178  
  179 + if(length < 0)
  180 + length = strlen(text);
  181 +
173 182 Request(*this,"setStringAt")
174 183 .push((uint32_t) row)
175 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 187 .call()
212 188 .pop(rc);
213 189  
... ...
common/src/include/lib3270/ipc.h
... ... @@ -294,10 +294,15 @@
294 294 /// @brief Send PA.
295 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 306 virtual Session & push(const Action action) = 0;
302 307  
303 308 // Get contents.
... ... @@ -342,8 +347,6 @@
342 347 /// @brief Write error to log file.
343 348 void error(const char *fmt, ...) const;
344 349  
345   - void input(const char *text, size_t sz);
346   -
347 350 public:
348 351 Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT);
349 352 ~Host();
... ... @@ -435,6 +438,8 @@
435 438 /// @param control_char Control character used to identify commands.
436 439 Host & input(const char *text, const char control_char = '@');
437 440  
  441 + Host & input(const char *text, size_t sz);
  442 +
438 443 /// @brief Set field at current posicion, jumps to next writable field.
439 444 inline Host & push(const char *text) {
440 445 session->push(text);
... ... @@ -452,11 +457,21 @@
452 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 465 inline Host & push(int row, int col, const std::string &text) {
456 466 session->push(row,col,text);
457 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 475 inline Host & push(const PFKey key) {
461 476 session->push(key);
462 477 return *this;
... ...