Commit 07217a0d10aaeda999e2a13cf2b7ee5e07a0cdef
1 parent
eb7b2c5c
Exists in
master
and in
3 other branches
Atualizando transferência de arquivos
Showing
9 changed files
with
146 additions
and
79 deletions
Show diff stats
| ... | ... | @@ -223,18 +223,15 @@ |
| 223 | 223 | #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000 |
| 224 | 224 | #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK |
| 225 | 225 | |
| 226 | - enum ft_state | |
| 227 | - { | |
| 228 | - FT_NONE, /**< No transfer in progress */ | |
| 229 | - FT_AWAIT_ACK, /**< IND$FILE sent, awaiting acknowledgement message */ | |
| 230 | - FT_RUNNING, /**< Ack received, data flowing */ | |
| 231 | - FT_ABORT_WAIT, /**< Awaiting chance to send an abort */ | |
| 232 | - FT_ABORT_SENT /**< Abort sent; awaiting response */ | |
| 233 | - }; | |
| 226 | + #define FT_NONE LIB3270_FT_STATE_NONE | |
| 227 | + #define FT_AWAIT_ACK LIB3270_FT_STATE_AWAIT_ACK | |
| 228 | + #define FT_RUNNING LIB3270_FT_STATE_RUNNING | |
| 229 | + #define FT_ABORT_WAIT LIB3270_FT_STATE_ABORT_WAIT | |
| 230 | + #define FT_ABORT_SENT LIB3270_FT_STATE_ABORT_SENT | |
| 234 | 231 | |
| 235 | 232 | // LOCAL_EXTERN int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft); |
| 236 | 233 | LOCAL_EXTERN int CancelFileTransfer(int force); |
| 237 | - LOCAL_EXTERN enum ft_state GetFileTransferState(void); | |
| 234 | +// LOCAL_EXTERN enum ft_state GetFileTransferState(void); | |
| 238 | 235 | |
| 239 | 236 | struct filetransfer_callbacks |
| 240 | 237 | { |
| ... | ... | @@ -264,7 +261,7 @@ |
| 264 | 261 | |
| 265 | 262 | #ifndef LIB3270 |
| 266 | 263 | |
| 267 | - LOCAL_EXTERN enum ft_state QueryFTstate(void); | |
| 264 | +// LOCAL_EXTERN enum ft_state QueryFTstate(void); | |
| 268 | 265 | |
| 269 | 266 | #endif |
| 270 | 267 | ... | ... |
ctlr.c
| ... | ... | @@ -2284,10 +2284,10 @@ ps_process(void) |
| 2284 | 2284 | |
| 2285 | 2285 | #if defined(X3270_FT) /*[*/ |
| 2286 | 2286 | /* Process file transfers. */ |
| 2287 | - if (ft_state != FT_NONE && /* transfer in progress */ | |
| 2288 | - h3270.formatted && /* screen is formatted */ | |
| 2289 | - !h3270.screen_alt && /* 24x80 screen */ | |
| 2290 | - !kybdlock && /* keyboard not locked */ | |
| 2287 | + if (lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE && /* transfer in progress */ | |
| 2288 | + h3270.formatted && /* screen is formatted */ | |
| 2289 | + !h3270.screen_alt && /* 24x80 screen */ | |
| 2290 | + !kybdlock && /* keyboard not locked */ | |
| 2291 | 2291 | /* magic field */ |
| 2292 | 2292 | h3270.ea_buf[1919].fa && FA_IS_SKIP(h3270.ea_buf[1919].fa)) { |
| 2293 | 2293 | ft_cut_data(); | ... | ... |
| ... | ... | @@ -74,11 +74,11 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused); |
| 74 | 74 | #define BN (Boolean *)NULL |
| 75 | 75 | |
| 76 | 76 | // Globals. |
| 77 | -H3270FT *ftsession = NULL; | |
| 77 | +static H3270FT *ftsession = NULL; | |
| 78 | 78 | |
| 79 | 79 | #define CHECK_FT_HANDLE(x) if(!x) x = ftsession; |
| 80 | 80 | |
| 81 | -enum ft_state ft_state = FT_NONE; // File transfer state | |
| 81 | +// enum ft_state ft_state = FT_NONE; // File transfer state | |
| 82 | 82 | // char *ft_local_filename; // Local file to transfer to/from |
| 83 | 83 | Boolean ft_last_cr = False; // CR was last char in local file |
| 84 | 84 | Boolean ascii_flag = True; // Convert to ascii |
| ... | ... | @@ -89,29 +89,39 @@ static Boolean ft_is_cut; // File transfer is CUT-style |
| 89 | 89 | |
| 90 | 90 | static struct timeval starting_time; // Starting time |
| 91 | 91 | |
| 92 | -static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to main application | |
| 92 | +// static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to main application | |
| 93 | 93 | |
| 94 | 94 | #define snconcat(x,s,fmt,...) snprintf(x+strlen(x),s-strlen(x),fmt,__VA_ARGS__) |
| 95 | 95 | |
| 96 | -#define set_ft_state(x) ft_state = x | |
| 96 | +static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | |
| 97 | + | |
| 97 | 98 | |
| 98 | 99 | /*---[ Implement ]-------------------------------------------------------------------------------------------------------*/ |
| 99 | 100 | |
| 100 | - void ft_init(H3270FT *h) | |
| 101 | + static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state) | |
| 101 | 102 | { |
| 102 | - /* Register for state changes. */ | |
| 103 | + CHECK_FT_HANDLE(session); | |
| 103 | 104 | |
| 104 | - CHECK_FT_HANDLE(h); | |
| 105 | + if(session->state == state) | |
| 106 | + return; | |
| 107 | + | |
| 108 | + session->state = state; | |
| 109 | + session->state_changed(session,state); | |
| 105 | 110 | |
| 106 | - lib3270_register_schange(h->host, ST_CONNECT, ( void (*)(H3270 *, int, void *)) ft_connected, NULL); | |
| 107 | - lib3270_register_schange(h->host, ST_3270_MODE, ( void (*)(H3270 *, int, void *)) ft_in3270, NULL); | |
| 108 | 111 | } |
| 109 | 112 | |
| 110 | - enum ft_state QueryFTstate(void) | |
| 113 | + void ft_init(H3270 *session) | |
| 111 | 114 | { |
| 112 | - return ft_state; | |
| 115 | + /* Register for state changes. */ | |
| 116 | + lib3270_register_schange(session, ST_CONNECT, ( void (*)(H3270 *, int, void *)) ft_connected, NULL); | |
| 117 | + lib3270_register_schange(session, ST_3270_MODE, ( void (*)(H3270 *, int, void *)) ft_in3270, NULL); | |
| 113 | 118 | } |
| 114 | 119 | |
| 120 | +// enum ft_state QueryFTstate(void) | |
| 121 | +// { | |
| 122 | +// return ft_state; | |
| 123 | +// } | |
| 124 | + | |
| 115 | 125 | /* |
| 116 | 126 | int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk) |
| 117 | 127 | { |
| ... | ... | @@ -124,18 +134,19 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m |
| 124 | 134 | } |
| 125 | 135 | */ |
| 126 | 136 | |
| 137 | +/* | |
| 127 | 138 | enum ft_state GetFileTransferState(void) |
| 128 | 139 | { |
| 129 | 140 | return ft_state; |
| 130 | 141 | } |
| 142 | +*/ | |
| 131 | 143 | |
| 132 | 144 | LIB3270_EXPORT int lib3270_ft_cancel(H3270FT *ft, int force) |
| 133 | 145 | { |
| 134 | - if (ft_state == FT_RUNNING) | |
| 146 | + if (ft->state == LIB3270_FT_STATE_RUNNING) | |
| 135 | 147 | { |
| 136 | - set_ft_state(FT_ABORT_WAIT); | |
| 137 | - if(callbacks && callbacks->aborting) | |
| 138 | - callbacks->aborting(); | |
| 148 | + set_ft_state(ft,LIB3270_FT_STATE_ABORT_WAIT); | |
| 149 | + ft->aborting(ft); | |
| 139 | 150 | return 0; |
| 140 | 151 | } |
| 141 | 152 | |
| ... | ... | @@ -143,11 +154,42 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m |
| 143 | 154 | return EBUSY; |
| 144 | 155 | |
| 145 | 156 | // Impatient user or hung host -- just clean up. |
| 146 | - ft_complete(ft, _("Cancelled by user") ); | |
| 157 | + ft_complete(ft, N_("Cancelled by user") ); | |
| 158 | + | |
| 159 | + return 0; | |
| 160 | + } | |
| 161 | + | |
| 162 | + static void def_complete(H3270FT *ft, const char *errmsg,unsigned long length,double kbytes_sec,const char *mode) | |
| 163 | + { | |
| 164 | + | |
| 165 | + } | |
| 166 | + | |
| 167 | + static void def_setlength(H3270FT *ft, unsigned long length) | |
| 168 | + { | |
| 169 | + | |
| 170 | + } | |
| 171 | + | |
| 172 | + static void def_update(H3270FT *ft, unsigned long length,double kbytes_sec) | |
| 173 | + { | |
| 174 | + | |
| 175 | + } | |
| 176 | + | |
| 177 | + static void def_running(H3270FT *ft, int is_cut) | |
| 178 | + { | |
| 179 | + | |
| 180 | + } | |
| 181 | + | |
| 182 | + static void def_aborting(H3270FT *ft) | |
| 183 | + { | |
| 147 | 184 | |
| 148 | - return ECANCELED; | |
| 149 | 185 | } |
| 150 | 186 | |
| 187 | + static void def_state_changed(H3270FT *ft, LIB3270_FT_STATE state) | |
| 188 | + { | |
| 189 | + | |
| 190 | + } | |
| 191 | + | |
| 192 | + | |
| 151 | 193 | LIB3270_EXPORT H3270FT * lib3270_ft_start(H3270 *session, LIB3270_FT_OPTION flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft, const char **msg) |
| 152 | 194 | { |
| 153 | 195 | H3270FT * ftHandle = NULL; |
| ... | ... | @@ -172,6 +214,14 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m |
| 172 | 214 | errno = EBUSY; |
| 173 | 215 | return NULL; |
| 174 | 216 | } |
| 217 | + | |
| 218 | + if(session->ft) | |
| 219 | + { | |
| 220 | + *msg = N_( "File transfer is already active in this session" ); | |
| 221 | + errno = EBUSY; | |
| 222 | + return NULL; | |
| 223 | + } | |
| 224 | + | |
| 175 | 225 | // Check remote file |
| 176 | 226 | if(!*remote) |
| 177 | 227 | { |
| ... | ... | @@ -279,7 +329,6 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m |
| 279 | 329 | (void) lib3270_emulate_input(NULL, buffer, strlen(buffer), False); |
| 280 | 330 | |
| 281 | 331 | // Get this thing started. |
| 282 | - set_ft_state(FT_AWAIT_ACK); | |
| 283 | 332 | |
| 284 | 333 | ft_last_cr = False; |
| 285 | 334 | ft_is_cut = False; |
| ... | ... | @@ -290,6 +339,15 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m |
| 290 | 339 | ftHandle->sz = sizeof(H3270FT); |
| 291 | 340 | ftHandle->host = session; |
| 292 | 341 | ftHandle->ft_local_file = ft_local_file; |
| 342 | + ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK; | |
| 343 | + ftHandle->complete = def_complete; | |
| 344 | + ftHandle->setlength = def_setlength; | |
| 345 | + ftHandle->update = def_update; | |
| 346 | + ftHandle->running = def_running; | |
| 347 | + ftHandle->aborting = def_aborting; | |
| 348 | + ftHandle->state_changed = def_state_changed; | |
| 349 | + | |
| 350 | + session->ft = ftHandle; | |
| 293 | 351 | |
| 294 | 352 | return ftsession = ftHandle; |
| 295 | 353 | } |
| ... | ... | @@ -322,16 +380,18 @@ void ft_complete(H3270FT *session, const char *errmsg) |
| 322 | 380 | } |
| 323 | 381 | |
| 324 | 382 | // Clean up the state. |
| 325 | - set_ft_state(FT_NONE); | |
| 383 | + set_ft_state(session,FT_NONE); | |
| 326 | 384 | |
| 327 | 385 | ft_update_length(session); |
| 328 | 386 | |
| 329 | - if(callbacks && callbacks->complete) | |
| 330 | - callbacks->complete(errmsg,ft_length,kbytes_sec,ft_is_cut ? "CUT" : "DFT"); | |
| 387 | + session->complete(session,errmsg,ft_length,kbytes_sec,ft_is_cut ? "CUT" : "DFT"); | |
| 331 | 388 | |
| 332 | 389 | if(session == ftsession) |
| 333 | 390 | ftsession = NULL; |
| 334 | 391 | |
| 392 | + if(session->host) | |
| 393 | + session->host->ft = NULL; | |
| 394 | + | |
| 335 | 395 | free(session); |
| 336 | 396 | |
| 337 | 397 | } |
| ... | ... | @@ -355,8 +415,7 @@ void ft_update_length(H3270FT *session) |
| 355 | 415 | |
| 356 | 416 | Trace("%s",__FUNCTION__); |
| 357 | 417 | |
| 358 | - if(callbacks && callbacks->update) | |
| 359 | - callbacks->update(ft_length,kbytes_sec); | |
| 418 | + session->update(session,ft_length,kbytes_sec); | |
| 360 | 419 | |
| 361 | 420 | } |
| 362 | 421 | |
| ... | ... | @@ -372,11 +431,10 @@ void ft_running(H3270FT *h, Boolean is_cut) |
| 372 | 431 | |
| 373 | 432 | (void) gettimeofday(&starting_time, (struct timezone *)NULL); |
| 374 | 433 | |
| 375 | - if (ft_state == FT_AWAIT_ACK) | |
| 376 | - set_ft_state(FT_RUNNING); | |
| 434 | + if (h->state == FT_AWAIT_ACK) | |
| 435 | + set_ft_state(h,FT_RUNNING); | |
| 377 | 436 | |
| 378 | - if(callbacks && callbacks->running) | |
| 379 | - callbacks->running(is_cut); | |
| 437 | + h->running(h,is_cut); | |
| 380 | 438 | |
| 381 | 439 | ft_update_length(h); |
| 382 | 440 | |
| ... | ... | @@ -385,29 +443,37 @@ void ft_running(H3270FT *h, Boolean is_cut) |
| 385 | 443 | // Process a protocol-generated abort. |
| 386 | 444 | void ft_aborting(H3270FT *h) |
| 387 | 445 | { |
| 388 | - Trace("%s",__FUNCTION__); | |
| 446 | +// Trace("%s",__FUNCTION__); | |
| 389 | 447 | |
| 390 | 448 | CHECK_FT_HANDLE(h); |
| 391 | 449 | |
| 392 | - if (ft_state == FT_RUNNING || ft_state == FT_ABORT_WAIT) | |
| 393 | - set_ft_state(FT_ABORT_SENT); | |
| 450 | + if (h->state == FT_RUNNING || h->state == FT_ABORT_WAIT) | |
| 451 | + set_ft_state(h,FT_ABORT_SENT); | |
| 394 | 452 | |
| 395 | - if(callbacks && callbacks->aborting) | |
| 396 | - callbacks->aborting(); | |
| 453 | + h->aborting(h); | |
| 397 | 454 | |
| 398 | 455 | } |
| 399 | 456 | |
| 400 | 457 | /* Process a disconnect abort. */ |
| 401 | 458 | static void ft_connected(H3270 *session, int ignored, void *dunno) |
| 402 | 459 | { |
| 403 | - if (!CONNECTED && ft_state != FT_NONE) | |
| 404 | - ft_complete(ftsession,_("Host disconnected, transfer cancelled")); | |
| 460 | + if (!CONNECTED && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE) | |
| 461 | + ft_complete(session->ft,_("Host disconnected, transfer cancelled")); | |
| 405 | 462 | } |
| 406 | 463 | |
| 407 | 464 | /* Process an abort from no longer being in 3270 mode. */ |
| 408 | 465 | static void ft_in3270(H3270 *session, int ignored, void *dunno) |
| 409 | 466 | { |
| 410 | - if (!IN_3270 && ft_state != FT_NONE) | |
| 411 | - ft_complete(ftsession,_("Not in 3270 mode, transfer cancelled")); | |
| 467 | + if (!IN_3270 && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE) | |
| 468 | + ft_complete(session->ft,_("Not in 3270 mode, transfer cancelled")); | |
| 412 | 469 | } |
| 413 | 470 | |
| 471 | +LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session) | |
| 472 | +{ | |
| 473 | + CHECK_SESSION_HANDLE(session); | |
| 474 | + | |
| 475 | + if(!session->ft) | |
| 476 | + return LIB3270_FT_STATE_NONE; | |
| 477 | + | |
| 478 | + return ((H3270FT *) session->ft)->state; | |
| 479 | +} | ... | ... |
ft_cut.c
| ... | ... | @@ -332,7 +332,7 @@ cut_control_code(void) |
| 332 | 332 | cut_xfer_in_progress = False; |
| 333 | 333 | cut_ack(); |
| 334 | 334 | |
| 335 | - if (ft_state == FT_ABORT_SENT && saved_errmsg != CN) | |
| 335 | + if (lib3270_get_ft_state(&h3270) == FT_ABORT_SENT && saved_errmsg != CN) | |
| 336 | 336 | { |
| 337 | 337 | buf = saved_errmsg; |
| 338 | 338 | saved_errmsg = CN; |
| ... | ... | @@ -383,8 +383,9 @@ cut_data_request(void) |
| 383 | 383 | unsigned char attr; |
| 384 | 384 | |
| 385 | 385 | trace_ds("< FT DATA_REQUEST %u\n", from6(seq)); |
| 386 | - if (ft_state == FT_ABORT_WAIT) { | |
| 387 | - cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); | |
| 386 | + if (lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT) | |
| 387 | + { | |
| 388 | + cut_abort(SC_ABORT_FILE,"%s",N_("Transfer cancelled by user")); | |
| 388 | 389 | return; |
| 389 | 390 | } |
| 390 | 391 | |
| ... | ... | @@ -396,7 +397,7 @@ cut_data_request(void) |
| 396 | 397 | } |
| 397 | 398 | |
| 398 | 399 | /* Check for errors. */ |
| 399 | - if (ferror(ftsession->ft_local_file)) { | |
| 400 | + if (ferror(((H3270FT *) h3270.ft)->ft_local_file)) { | |
| 400 | 401 | int j; |
| 401 | 402 | |
| 402 | 403 | /* Clean out any data we may have written. */ |
| ... | ... | @@ -409,7 +410,7 @@ cut_data_request(void) |
| 409 | 410 | } |
| 410 | 411 | |
| 411 | 412 | /* Send special data for EOF. */ |
| 412 | - if (!count && feof(ftsession->ft_local_file)) { | |
| 413 | + if (!count && feof(((H3270FT *) h3270.ft)->ft_local_file)) { | |
| 413 | 414 | ctlr_add(O_UP_DATA, EOF_DATA1, 0); |
| 414 | 415 | ctlr_add(O_UP_DATA+1, EOF_DATA2, 0); |
| 415 | 416 | count = 2; |
| ... | ... | @@ -474,7 +475,8 @@ cut_data(void) |
| 474 | 475 | register int i; |
| 475 | 476 | |
| 476 | 477 | trace_ds("< FT DATA\n"); |
| 477 | - if (ft_state == FT_ABORT_WAIT) { | |
| 478 | + if (((H3270FT *) h3270.ft)->state == LIB3270_FT_STATE_ABORT_WAIT) | |
| 479 | + { | |
| 478 | 480 | cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); |
| 479 | 481 | return; |
| 480 | 482 | } |
| ... | ... | @@ -499,7 +501,7 @@ cut_data(void) |
| 499 | 501 | return; |
| 500 | 502 | |
| 501 | 503 | /* Write it to the file. */ |
| 502 | - if (fwrite((char *)cvbuf, conv_length, 1, ftsession->ft_local_file) == 0) { | |
| 504 | + if (fwrite((char *)cvbuf, conv_length, 1, ((H3270FT *) h3270.ft)->ft_local_file) == 0) { | |
| 503 | 505 | cut_abort(SC_ABORT_FILE,_( "Error \"%s\" writing to local file (rc=%d)" ),strerror(errno),errno); |
| 504 | 506 | } else { |
| 505 | 507 | ft_length += conv_length; |
| ... | ... | @@ -567,7 +569,7 @@ xlate_getc(void) |
| 567 | 569 | } |
| 568 | 570 | |
| 569 | 571 | /* Get the next byte from the file. */ |
| 570 | - c = fgetc(ftsession->ft_local_file); | |
| 572 | + c = fgetc(((H3270FT *) h3270.ft)->ft_local_file); | |
| 571 | 573 | if (c == EOF) |
| 572 | 574 | return c; |
| 573 | 575 | ft_length++; | ... | ... |
ft_dft.c
| ... | ... | @@ -106,7 +106,8 @@ ft_dft_data(unsigned char *data, int length unused) |
| 106 | 106 | unsigned short data_length, data_type; |
| 107 | 107 | unsigned char *cp; |
| 108 | 108 | |
| 109 | - if (ft_state == FT_NONE) { | |
| 109 | + if (lib3270_get_ft_state(&h3270) == FT_NONE) | |
| 110 | + { | |
| 110 | 111 | trace_ds(" (no transfer in progress)\n"); |
| 111 | 112 | return; |
| 112 | 113 | } |
| ... | ... | @@ -215,7 +216,7 @@ dft_data_insert(struct data_buffer *data_bufr) |
| 215 | 216 | int my_length; |
| 216 | 217 | unsigned char *cp; |
| 217 | 218 | |
| 218 | - if (!message_flag && ft_state == FT_ABORT_WAIT) | |
| 219 | + if(!message_flag && lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT) | |
| 219 | 220 | { |
| 220 | 221 | dft_abort(TR_DATA_INSERT, "%s", _("Transfer cancelled by user") ); |
| 221 | 222 | return; |
| ... | ... | @@ -257,7 +258,7 @@ dft_data_insert(struct data_buffer *data_bufr) |
| 257 | 258 | if (memcmp(msgp, END_TRANSFER, strlen(END_TRANSFER)) == 0) { |
| 258 | 259 | Free(msgp); |
| 259 | 260 | ft_complete(NULL,NULL); |
| 260 | - } else if (ft_state == FT_ABORT_SENT && abort_string != CN) { | |
| 261 | + } else if (lib3270_get_ft_state(&h3270) == FT_ABORT_SENT && abort_string != CN) { | |
| 261 | 262 | Free(msgp); |
| 262 | 263 | ft_complete(NULL,abort_string); |
| 263 | 264 | Replace(abort_string, CN); |
| ... | ... | @@ -289,7 +290,7 @@ dft_data_insert(struct data_buffer *data_bufr) |
| 289 | 290 | |
| 290 | 291 | if (l) |
| 291 | 292 | { |
| 292 | - rv = fwrite(s, l, (size_t)1,ftsession->ft_local_file); | |
| 293 | + rv = fwrite(s, l, (size_t)1,((H3270FT *) h3270.ft)->ft_local_file); | |
| 293 | 294 | if (rv == 0) |
| 294 | 295 | break; |
| 295 | 296 | ft_length += l; |
| ... | ... | @@ -300,7 +301,7 @@ dft_data_insert(struct data_buffer *data_bufr) |
| 300 | 301 | len -= l; |
| 301 | 302 | } |
| 302 | 303 | } else { |
| 303 | - rv = fwrite((char *)data_bufr->data, my_length,(size_t)1, ftsession->ft_local_file); | |
| 304 | + rv = fwrite((char *)data_bufr->data, my_length,(size_t)1, ((H3270FT *) h3270.ft)->ft_local_file); | |
| 304 | 305 | ft_length += my_length; |
| 305 | 306 | } |
| 306 | 307 | |
| ... | ... | @@ -310,7 +311,7 @@ dft_data_insert(struct data_buffer *data_bufr) |
| 310 | 311 | } |
| 311 | 312 | |
| 312 | 313 | /* Add up amount transferred. */ |
| 313 | - ft_update_length(ftsession); | |
| 314 | + ft_update_length((H3270FT *) h3270.ft); | |
| 314 | 315 | } |
| 315 | 316 | |
| 316 | 317 | /* Send an acknowledgement frame back. */ |
| ... | ... | @@ -346,7 +347,7 @@ dft_get_request(void) |
| 346 | 347 | |
| 347 | 348 | trace_ds(" Get\n"); |
| 348 | 349 | |
| 349 | - if (!message_flag && ft_state == FT_ABORT_WAIT) { | |
| 350 | + if (!message_flag && lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT) { | |
| 350 | 351 | dft_abort(TR_GET_REQ, _( "Transfer cancelled by user" ) ); |
| 351 | 352 | return; |
| 352 | 353 | } |
| ... | ... | @@ -361,7 +362,7 @@ dft_get_request(void) |
| 361 | 362 | int c; |
| 362 | 363 | |
| 363 | 364 | /* Read one byte and do CR/LF translation. */ |
| 364 | - c = fgetc(ftsession->ft_local_file); | |
| 365 | + c = fgetc(((H3270FT *) h3270.ft)->ft_local_file); | |
| 365 | 366 | if (c == EOF) { |
| 366 | 367 | break; |
| 367 | 368 | } |
| ... | ... | @@ -371,7 +372,7 @@ dft_get_request(void) |
| 371 | 372 | * Not enough room to expand NL to |
| 372 | 373 | * CR/LF. |
| 373 | 374 | */ |
| 374 | - ungetc(c, ftsession->ft_local_file); | |
| 375 | + ungetc(c, ((H3270FT *) h3270.ft)->ft_local_file); | |
| 375 | 376 | break; |
| 376 | 377 | } |
| 377 | 378 | *bufptr++ = '\r'; |
| ... | ... | @@ -384,7 +385,7 @@ dft_get_request(void) |
| 384 | 385 | total_read++; |
| 385 | 386 | } else { |
| 386 | 387 | /* Binary read. */ |
| 387 | - numread = fread(bufptr, 1, numbytes, ftsession->ft_local_file); | |
| 388 | + numread = fread(bufptr, 1, numbytes, ((H3270FT *) h3270.ft)->ft_local_file); | |
| 388 | 389 | if (numread <= 0) { |
| 389 | 390 | break; |
| 390 | 391 | } |
| ... | ... | @@ -402,13 +403,13 @@ dft_get_request(void) |
| 402 | 403 | numbytes -= numread; |
| 403 | 404 | total_read += numread; |
| 404 | 405 | } |
| 405 | - if (feof(ftsession->ft_local_file) || ferror(ftsession->ft_local_file)) { | |
| 406 | + if (feof(((H3270FT *) h3270.ft)->ft_local_file) || ferror(((H3270FT *) h3270.ft)->ft_local_file)) { | |
| 406 | 407 | break; |
| 407 | 408 | } |
| 408 | 409 | } |
| 409 | 410 | |
| 410 | 411 | /* Check for read error. */ |
| 411 | - if (ferror(ftsession->ft_local_file)) | |
| 412 | + if (ferror(((H3270FT *) h3270.ft)->ft_local_file)) | |
| 412 | 413 | { |
| 413 | 414 | dft_abort(TR_GET_REQ, _( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno); |
| 414 | 415 | return; |
| ... | ... | @@ -434,7 +435,7 @@ dft_get_request(void) |
| 434 | 435 | |
| 435 | 436 | ft_length += total_read; |
| 436 | 437 | |
| 437 | - if (feof(ftsession->ft_local_file)) | |
| 438 | + if (feof(((H3270FT *) h3270.ft)->ft_local_file)) | |
| 438 | 439 | { |
| 439 | 440 | dft_eof = True; |
| 440 | 441 | } |
| ... | ... | @@ -464,7 +465,7 @@ dft_get_request(void) |
| 464 | 465 | |
| 465 | 466 | /* Write the data. */ |
| 466 | 467 | net_output(); |
| 467 | - ft_update_length(ftsession); | |
| 468 | + ft_update_length((H3270FT *) h3270.ft); | |
| 468 | 469 | } |
| 469 | 470 | |
| 470 | 471 | /* Process a Close request. */ |
| ... | ... | @@ -512,7 +513,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...) |
| 512 | 513 | net_output(); |
| 513 | 514 | |
| 514 | 515 | /* Update the pop-up and state. */ |
| 515 | - ft_aborting(ftsession); | |
| 516 | + ft_aborting((H3270FT *) h3270.ft); | |
| 516 | 517 | } |
| 517 | 518 | |
| 518 | 519 | /* Returns the number of bytes in s, limited by len, that aren't CRs or ^Zs. */ | ... | ... |
| ... | ... | @@ -26,7 +26,7 @@ LIB3270_INTERNAL Boolean ascii_flag; |
| 26 | 26 | LIB3270_INTERNAL Boolean cr_flag; |
| 27 | 27 | LIB3270_INTERNAL unsigned long ft_length; |
| 28 | 28 | |
| 29 | -LIB3270_INTERNAL H3270FT * ftsession; | |
| 29 | +// LIB3270_INTERNAL H3270FT * ftsession; | |
| 30 | 30 | |
| 31 | 31 | // LIB3270_INTERNAL FILE *ft_local_file; |
| 32 | 32 | // extern char *ft_local_filename; |
| ... | ... | @@ -34,7 +34,8 @@ LIB3270_INTERNAL H3270FT * ftsession; |
| 34 | 34 | LIB3270_INTERNAL Boolean ft_last_cr; |
| 35 | 35 | LIB3270_INTERNAL Boolean remap_flag; |
| 36 | 36 | |
| 37 | -LIB3270_INTERNAL void ft_init(H3270FT *h); | |
| 37 | +LIB3270_INTERNAL void ft_init(H3270 *session); | |
| 38 | + | |
| 38 | 39 | LIB3270_INTERNAL void ft_aborting(H3270FT *h); |
| 39 | 40 | LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg); |
| 40 | 41 | LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut); | ... | ... |
globals.h
init.c
kybd.c
| ... | ... | @@ -1464,7 +1464,7 @@ do_reset(Boolean explicit) |
| 1464 | 1464 | |
| 1465 | 1465 | if (explicit |
| 1466 | 1466 | #if defined(X3270_FT) /*[*/ |
| 1467 | - || ft_state != FT_NONE | |
| 1467 | + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE | |
| 1468 | 1468 | #endif /*]*/ |
| 1469 | 1469 | ) { |
| 1470 | 1470 | Boolean half_reset = False; |
| ... | ... | @@ -1503,7 +1503,7 @@ do_reset(Boolean explicit) |
| 1503 | 1503 | */ |
| 1504 | 1504 | if (explicit |
| 1505 | 1505 | #if defined(X3270_FT) /*[*/ |
| 1506 | - || ft_state != FT_NONE | |
| 1506 | + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE | |
| 1507 | 1507 | #endif /*]*/ |
| 1508 | 1508 | || (!appres.unlock_delay) // && !sms_in_macro()) |
| 1509 | 1509 | || (unlock_delay_time != 0 && (time(NULL) - unlock_delay_time) > 1)) { | ... | ... |