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,18 +223,15 @@ | ||
223 | #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000 | 223 | #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000 |
224 | #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK | 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 | // LOCAL_EXTERN int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft); | 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 | LOCAL_EXTERN int CancelFileTransfer(int force); | 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 | struct filetransfer_callbacks | 236 | struct filetransfer_callbacks |
240 | { | 237 | { |
@@ -264,7 +261,7 @@ | @@ -264,7 +261,7 @@ | ||
264 | 261 | ||
265 | #ifndef LIB3270 | 262 | #ifndef LIB3270 |
266 | 263 | ||
267 | - LOCAL_EXTERN enum ft_state QueryFTstate(void); | 264 | +// LOCAL_EXTERN enum ft_state QueryFTstate(void); |
268 | 265 | ||
269 | #endif | 266 | #endif |
270 | 267 |
ctlr.c
@@ -2284,10 +2284,10 @@ ps_process(void) | @@ -2284,10 +2284,10 @@ ps_process(void) | ||
2284 | 2284 | ||
2285 | #if defined(X3270_FT) /*[*/ | 2285 | #if defined(X3270_FT) /*[*/ |
2286 | /* Process file transfers. */ | 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 | /* magic field */ | 2291 | /* magic field */ |
2292 | h3270.ea_buf[1919].fa && FA_IS_SKIP(h3270.ea_buf[1919].fa)) { | 2292 | h3270.ea_buf[1919].fa && FA_IS_SKIP(h3270.ea_buf[1919].fa)) { |
2293 | ft_cut_data(); | 2293 | ft_cut_data(); |
@@ -74,11 +74,11 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused); | @@ -74,11 +74,11 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused); | ||
74 | #define BN (Boolean *)NULL | 74 | #define BN (Boolean *)NULL |
75 | 75 | ||
76 | // Globals. | 76 | // Globals. |
77 | -H3270FT *ftsession = NULL; | 77 | +static H3270FT *ftsession = NULL; |
78 | 78 | ||
79 | #define CHECK_FT_HANDLE(x) if(!x) x = ftsession; | 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 | // char *ft_local_filename; // Local file to transfer to/from | 82 | // char *ft_local_filename; // Local file to transfer to/from |
83 | Boolean ft_last_cr = False; // CR was last char in local file | 83 | Boolean ft_last_cr = False; // CR was last char in local file |
84 | Boolean ascii_flag = True; // Convert to ascii | 84 | Boolean ascii_flag = True; // Convert to ascii |
@@ -89,29 +89,39 @@ static Boolean ft_is_cut; // File transfer is CUT-style | @@ -89,29 +89,39 @@ static Boolean ft_is_cut; // File transfer is CUT-style | ||
89 | 89 | ||
90 | static struct timeval starting_time; // Starting time | 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 | #define snconcat(x,s,fmt,...) snprintf(x+strlen(x),s-strlen(x),fmt,__VA_ARGS__) | 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 | /*---[ Implement ]-------------------------------------------------------------------------------------------------------*/ | 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 | int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk) | 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,18 +134,19 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | ||
124 | } | 134 | } |
125 | */ | 135 | */ |
126 | 136 | ||
137 | +/* | ||
127 | enum ft_state GetFileTransferState(void) | 138 | enum ft_state GetFileTransferState(void) |
128 | { | 139 | { |
129 | return ft_state; | 140 | return ft_state; |
130 | } | 141 | } |
142 | +*/ | ||
131 | 143 | ||
132 | LIB3270_EXPORT int lib3270_ft_cancel(H3270FT *ft, int force) | 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 | return 0; | 150 | return 0; |
140 | } | 151 | } |
141 | 152 | ||
@@ -143,11 +154,42 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | @@ -143,11 +154,42 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | ||
143 | return EBUSY; | 154 | return EBUSY; |
144 | 155 | ||
145 | // Impatient user or hung host -- just clean up. | 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 | 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) | 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 | H3270FT * ftHandle = NULL; | 195 | H3270FT * ftHandle = NULL; |
@@ -172,6 +214,14 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | @@ -172,6 +214,14 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | ||
172 | errno = EBUSY; | 214 | errno = EBUSY; |
173 | return NULL; | 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 | // Check remote file | 225 | // Check remote file |
176 | if(!*remote) | 226 | if(!*remote) |
177 | { | 227 | { |
@@ -279,7 +329,6 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | @@ -279,7 +329,6 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | ||
279 | (void) lib3270_emulate_input(NULL, buffer, strlen(buffer), False); | 329 | (void) lib3270_emulate_input(NULL, buffer, strlen(buffer), False); |
280 | 330 | ||
281 | // Get this thing started. | 331 | // Get this thing started. |
282 | - set_ft_state(FT_AWAIT_ACK); | ||
283 | 332 | ||
284 | ft_last_cr = False; | 333 | ft_last_cr = False; |
285 | ft_is_cut = False; | 334 | ft_is_cut = False; |
@@ -290,6 +339,15 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | @@ -290,6 +339,15 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m | ||
290 | ftHandle->sz = sizeof(H3270FT); | 339 | ftHandle->sz = sizeof(H3270FT); |
291 | ftHandle->host = session; | 340 | ftHandle->host = session; |
292 | ftHandle->ft_local_file = ft_local_file; | 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 | return ftsession = ftHandle; | 352 | return ftsession = ftHandle; |
295 | } | 353 | } |
@@ -322,16 +380,18 @@ void ft_complete(H3270FT *session, const char *errmsg) | @@ -322,16 +380,18 @@ void ft_complete(H3270FT *session, const char *errmsg) | ||
322 | } | 380 | } |
323 | 381 | ||
324 | // Clean up the state. | 382 | // Clean up the state. |
325 | - set_ft_state(FT_NONE); | 383 | + set_ft_state(session,FT_NONE); |
326 | 384 | ||
327 | ft_update_length(session); | 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 | if(session == ftsession) | 389 | if(session == ftsession) |
333 | ftsession = NULL; | 390 | ftsession = NULL; |
334 | 391 | ||
392 | + if(session->host) | ||
393 | + session->host->ft = NULL; | ||
394 | + | ||
335 | free(session); | 395 | free(session); |
336 | 396 | ||
337 | } | 397 | } |
@@ -355,8 +415,7 @@ void ft_update_length(H3270FT *session) | @@ -355,8 +415,7 @@ void ft_update_length(H3270FT *session) | ||
355 | 415 | ||
356 | Trace("%s",__FUNCTION__); | 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,11 +431,10 @@ void ft_running(H3270FT *h, Boolean is_cut) | ||
372 | 431 | ||
373 | (void) gettimeofday(&starting_time, (struct timezone *)NULL); | 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 | ft_update_length(h); | 439 | ft_update_length(h); |
382 | 440 | ||
@@ -385,29 +443,37 @@ void ft_running(H3270FT *h, Boolean is_cut) | @@ -385,29 +443,37 @@ void ft_running(H3270FT *h, Boolean is_cut) | ||
385 | // Process a protocol-generated abort. | 443 | // Process a protocol-generated abort. |
386 | void ft_aborting(H3270FT *h) | 444 | void ft_aborting(H3270FT *h) |
387 | { | 445 | { |
388 | - Trace("%s",__FUNCTION__); | 446 | +// Trace("%s",__FUNCTION__); |
389 | 447 | ||
390 | CHECK_FT_HANDLE(h); | 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 | /* Process a disconnect abort. */ | 457 | /* Process a disconnect abort. */ |
401 | static void ft_connected(H3270 *session, int ignored, void *dunno) | 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 | /* Process an abort from no longer being in 3270 mode. */ | 464 | /* Process an abort from no longer being in 3270 mode. */ |
408 | static void ft_in3270(H3270 *session, int ignored, void *dunno) | 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,7 +332,7 @@ cut_control_code(void) | ||
332 | cut_xfer_in_progress = False; | 332 | cut_xfer_in_progress = False; |
333 | cut_ack(); | 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 | buf = saved_errmsg; | 337 | buf = saved_errmsg; |
338 | saved_errmsg = CN; | 338 | saved_errmsg = CN; |
@@ -383,8 +383,9 @@ cut_data_request(void) | @@ -383,8 +383,9 @@ cut_data_request(void) | ||
383 | unsigned char attr; | 383 | unsigned char attr; |
384 | 384 | ||
385 | trace_ds("< FT DATA_REQUEST %u\n", from6(seq)); | 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 | return; | 389 | return; |
389 | } | 390 | } |
390 | 391 | ||
@@ -396,7 +397,7 @@ cut_data_request(void) | @@ -396,7 +397,7 @@ cut_data_request(void) | ||
396 | } | 397 | } |
397 | 398 | ||
398 | /* Check for errors. */ | 399 | /* Check for errors. */ |
399 | - if (ferror(ftsession->ft_local_file)) { | 400 | + if (ferror(((H3270FT *) h3270.ft)->ft_local_file)) { |
400 | int j; | 401 | int j; |
401 | 402 | ||
402 | /* Clean out any data we may have written. */ | 403 | /* Clean out any data we may have written. */ |
@@ -409,7 +410,7 @@ cut_data_request(void) | @@ -409,7 +410,7 @@ cut_data_request(void) | ||
409 | } | 410 | } |
410 | 411 | ||
411 | /* Send special data for EOF. */ | 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 | ctlr_add(O_UP_DATA, EOF_DATA1, 0); | 414 | ctlr_add(O_UP_DATA, EOF_DATA1, 0); |
414 | ctlr_add(O_UP_DATA+1, EOF_DATA2, 0); | 415 | ctlr_add(O_UP_DATA+1, EOF_DATA2, 0); |
415 | count = 2; | 416 | count = 2; |
@@ -474,7 +475,8 @@ cut_data(void) | @@ -474,7 +475,8 @@ cut_data(void) | ||
474 | register int i; | 475 | register int i; |
475 | 476 | ||
476 | trace_ds("< FT DATA\n"); | 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 | cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); | 480 | cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); |
479 | return; | 481 | return; |
480 | } | 482 | } |
@@ -499,7 +501,7 @@ cut_data(void) | @@ -499,7 +501,7 @@ cut_data(void) | ||
499 | return; | 501 | return; |
500 | 502 | ||
501 | /* Write it to the file. */ | 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 | cut_abort(SC_ABORT_FILE,_( "Error \"%s\" writing to local file (rc=%d)" ),strerror(errno),errno); | 505 | cut_abort(SC_ABORT_FILE,_( "Error \"%s\" writing to local file (rc=%d)" ),strerror(errno),errno); |
504 | } else { | 506 | } else { |
505 | ft_length += conv_length; | 507 | ft_length += conv_length; |
@@ -567,7 +569,7 @@ xlate_getc(void) | @@ -567,7 +569,7 @@ xlate_getc(void) | ||
567 | } | 569 | } |
568 | 570 | ||
569 | /* Get the next byte from the file. */ | 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 | if (c == EOF) | 573 | if (c == EOF) |
572 | return c; | 574 | return c; |
573 | ft_length++; | 575 | ft_length++; |
ft_dft.c
@@ -106,7 +106,8 @@ ft_dft_data(unsigned char *data, int length unused) | @@ -106,7 +106,8 @@ ft_dft_data(unsigned char *data, int length unused) | ||
106 | unsigned short data_length, data_type; | 106 | unsigned short data_length, data_type; |
107 | unsigned char *cp; | 107 | unsigned char *cp; |
108 | 108 | ||
109 | - if (ft_state == FT_NONE) { | 109 | + if (lib3270_get_ft_state(&h3270) == FT_NONE) |
110 | + { | ||
110 | trace_ds(" (no transfer in progress)\n"); | 111 | trace_ds(" (no transfer in progress)\n"); |
111 | return; | 112 | return; |
112 | } | 113 | } |
@@ -215,7 +216,7 @@ dft_data_insert(struct data_buffer *data_bufr) | @@ -215,7 +216,7 @@ dft_data_insert(struct data_buffer *data_bufr) | ||
215 | int my_length; | 216 | int my_length; |
216 | unsigned char *cp; | 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 | dft_abort(TR_DATA_INSERT, "%s", _("Transfer cancelled by user") ); | 221 | dft_abort(TR_DATA_INSERT, "%s", _("Transfer cancelled by user") ); |
221 | return; | 222 | return; |
@@ -257,7 +258,7 @@ dft_data_insert(struct data_buffer *data_bufr) | @@ -257,7 +258,7 @@ dft_data_insert(struct data_buffer *data_bufr) | ||
257 | if (memcmp(msgp, END_TRANSFER, strlen(END_TRANSFER)) == 0) { | 258 | if (memcmp(msgp, END_TRANSFER, strlen(END_TRANSFER)) == 0) { |
258 | Free(msgp); | 259 | Free(msgp); |
259 | ft_complete(NULL,NULL); | 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 | Free(msgp); | 262 | Free(msgp); |
262 | ft_complete(NULL,abort_string); | 263 | ft_complete(NULL,abort_string); |
263 | Replace(abort_string, CN); | 264 | Replace(abort_string, CN); |
@@ -289,7 +290,7 @@ dft_data_insert(struct data_buffer *data_bufr) | @@ -289,7 +290,7 @@ dft_data_insert(struct data_buffer *data_bufr) | ||
289 | 290 | ||
290 | if (l) | 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 | if (rv == 0) | 294 | if (rv == 0) |
294 | break; | 295 | break; |
295 | ft_length += l; | 296 | ft_length += l; |
@@ -300,7 +301,7 @@ dft_data_insert(struct data_buffer *data_bufr) | @@ -300,7 +301,7 @@ dft_data_insert(struct data_buffer *data_bufr) | ||
300 | len -= l; | 301 | len -= l; |
301 | } | 302 | } |
302 | } else { | 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 | ft_length += my_length; | 305 | ft_length += my_length; |
305 | } | 306 | } |
306 | 307 | ||
@@ -310,7 +311,7 @@ dft_data_insert(struct data_buffer *data_bufr) | @@ -310,7 +311,7 @@ dft_data_insert(struct data_buffer *data_bufr) | ||
310 | } | 311 | } |
311 | 312 | ||
312 | /* Add up amount transferred. */ | 313 | /* Add up amount transferred. */ |
313 | - ft_update_length(ftsession); | 314 | + ft_update_length((H3270FT *) h3270.ft); |
314 | } | 315 | } |
315 | 316 | ||
316 | /* Send an acknowledgement frame back. */ | 317 | /* Send an acknowledgement frame back. */ |
@@ -346,7 +347,7 @@ dft_get_request(void) | @@ -346,7 +347,7 @@ dft_get_request(void) | ||
346 | 347 | ||
347 | trace_ds(" Get\n"); | 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 | dft_abort(TR_GET_REQ, _( "Transfer cancelled by user" ) ); | 351 | dft_abort(TR_GET_REQ, _( "Transfer cancelled by user" ) ); |
351 | return; | 352 | return; |
352 | } | 353 | } |
@@ -361,7 +362,7 @@ dft_get_request(void) | @@ -361,7 +362,7 @@ dft_get_request(void) | ||
361 | int c; | 362 | int c; |
362 | 363 | ||
363 | /* Read one byte and do CR/LF translation. */ | 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 | if (c == EOF) { | 366 | if (c == EOF) { |
366 | break; | 367 | break; |
367 | } | 368 | } |
@@ -371,7 +372,7 @@ dft_get_request(void) | @@ -371,7 +372,7 @@ dft_get_request(void) | ||
371 | * Not enough room to expand NL to | 372 | * Not enough room to expand NL to |
372 | * CR/LF. | 373 | * CR/LF. |
373 | */ | 374 | */ |
374 | - ungetc(c, ftsession->ft_local_file); | 375 | + ungetc(c, ((H3270FT *) h3270.ft)->ft_local_file); |
375 | break; | 376 | break; |
376 | } | 377 | } |
377 | *bufptr++ = '\r'; | 378 | *bufptr++ = '\r'; |
@@ -384,7 +385,7 @@ dft_get_request(void) | @@ -384,7 +385,7 @@ dft_get_request(void) | ||
384 | total_read++; | 385 | total_read++; |
385 | } else { | 386 | } else { |
386 | /* Binary read. */ | 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 | if (numread <= 0) { | 389 | if (numread <= 0) { |
389 | break; | 390 | break; |
390 | } | 391 | } |
@@ -402,13 +403,13 @@ dft_get_request(void) | @@ -402,13 +403,13 @@ dft_get_request(void) | ||
402 | numbytes -= numread; | 403 | numbytes -= numread; |
403 | total_read += numread; | 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 | break; | 407 | break; |
407 | } | 408 | } |
408 | } | 409 | } |
409 | 410 | ||
410 | /* Check for read error. */ | 411 | /* Check for read error. */ |
411 | - if (ferror(ftsession->ft_local_file)) | 412 | + if (ferror(((H3270FT *) h3270.ft)->ft_local_file)) |
412 | { | 413 | { |
413 | dft_abort(TR_GET_REQ, _( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno); | 414 | dft_abort(TR_GET_REQ, _( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno); |
414 | return; | 415 | return; |
@@ -434,7 +435,7 @@ dft_get_request(void) | @@ -434,7 +435,7 @@ dft_get_request(void) | ||
434 | 435 | ||
435 | ft_length += total_read; | 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 | dft_eof = True; | 440 | dft_eof = True; |
440 | } | 441 | } |
@@ -464,7 +465,7 @@ dft_get_request(void) | @@ -464,7 +465,7 @@ dft_get_request(void) | ||
464 | 465 | ||
465 | /* Write the data. */ | 466 | /* Write the data. */ |
466 | net_output(); | 467 | net_output(); |
467 | - ft_update_length(ftsession); | 468 | + ft_update_length((H3270FT *) h3270.ft); |
468 | } | 469 | } |
469 | 470 | ||
470 | /* Process a Close request. */ | 471 | /* Process a Close request. */ |
@@ -512,7 +513,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...) | @@ -512,7 +513,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...) | ||
512 | net_output(); | 513 | net_output(); |
513 | 514 | ||
514 | /* Update the pop-up and state. */ | 515 | /* Update the pop-up and state. */ |
515 | - ft_aborting(ftsession); | 516 | + ft_aborting((H3270FT *) h3270.ft); |
516 | } | 517 | } |
517 | 518 | ||
518 | /* Returns the number of bytes in s, limited by len, that aren't CRs or ^Zs. */ | 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,7 +26,7 @@ LIB3270_INTERNAL Boolean ascii_flag; | ||
26 | LIB3270_INTERNAL Boolean cr_flag; | 26 | LIB3270_INTERNAL Boolean cr_flag; |
27 | LIB3270_INTERNAL unsigned long ft_length; | 27 | LIB3270_INTERNAL unsigned long ft_length; |
28 | 28 | ||
29 | -LIB3270_INTERNAL H3270FT * ftsession; | 29 | +// LIB3270_INTERNAL H3270FT * ftsession; |
30 | 30 | ||
31 | // LIB3270_INTERNAL FILE *ft_local_file; | 31 | // LIB3270_INTERNAL FILE *ft_local_file; |
32 | // extern char *ft_local_filename; | 32 | // extern char *ft_local_filename; |
@@ -34,7 +34,8 @@ LIB3270_INTERNAL H3270FT * ftsession; | @@ -34,7 +34,8 @@ LIB3270_INTERNAL H3270FT * ftsession; | ||
34 | LIB3270_INTERNAL Boolean ft_last_cr; | 34 | LIB3270_INTERNAL Boolean ft_last_cr; |
35 | LIB3270_INTERNAL Boolean remap_flag; | 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 | LIB3270_INTERNAL void ft_aborting(H3270FT *h); | 39 | LIB3270_INTERNAL void ft_aborting(H3270FT *h); |
39 | LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg); | 40 | LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg); |
40 | LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut); | 41 | LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut); |
globals.h
@@ -262,7 +262,7 @@ LIB3270_INTERNAL int *xtra_width; | @@ -262,7 +262,7 @@ LIB3270_INTERNAL int *xtra_width; | ||
262 | */ | 262 | */ |
263 | 263 | ||
264 | /* Connection state */ | 264 | /* Connection state */ |
265 | -LIB3270_INTERNAL enum ft_state ft_state; | 265 | +// LIB3270_INTERNAL enum ft_state ft_state; |
266 | 266 | ||
267 | /* | 267 | /* |
268 | LIB3270_INTERNAL enum cstate cstate; | 268 | LIB3270_INTERNAL enum cstate cstate; |
init.c
@@ -229,7 +229,7 @@ H3270 * lib3270_session_new(const char *model) | @@ -229,7 +229,7 @@ H3270 * lib3270_session_new(const char *model) | ||
229 | ansi_init(); | 229 | ansi_init(); |
230 | 230 | ||
231 | #if defined(X3270_FT) | 231 | #if defined(X3270_FT) |
232 | - ft_init(); | 232 | + ft_init(hSession); |
233 | #endif | 233 | #endif |
234 | 234 | ||
235 | /* | 235 | /* |
kybd.c
@@ -1464,7 +1464,7 @@ do_reset(Boolean explicit) | @@ -1464,7 +1464,7 @@ do_reset(Boolean explicit) | ||
1464 | 1464 | ||
1465 | if (explicit | 1465 | if (explicit |
1466 | #if defined(X3270_FT) /*[*/ | 1466 | #if defined(X3270_FT) /*[*/ |
1467 | - || ft_state != FT_NONE | 1467 | + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE |
1468 | #endif /*]*/ | 1468 | #endif /*]*/ |
1469 | ) { | 1469 | ) { |
1470 | Boolean half_reset = False; | 1470 | Boolean half_reset = False; |
@@ -1503,7 +1503,7 @@ do_reset(Boolean explicit) | @@ -1503,7 +1503,7 @@ do_reset(Boolean explicit) | ||
1503 | */ | 1503 | */ |
1504 | if (explicit | 1504 | if (explicit |
1505 | #if defined(X3270_FT) /*[*/ | 1505 | #if defined(X3270_FT) /*[*/ |
1506 | - || ft_state != FT_NONE | 1506 | + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE |
1507 | #endif /*]*/ | 1507 | #endif /*]*/ |
1508 | || (!appres.unlock_delay) // && !sms_in_macro()) | 1508 | || (!appres.unlock_delay) // && !sms_in_macro()) |
1509 | || (unlock_delay_time != 0 && (time(NULL) - unlock_delay_time) > 1)) { | 1509 | || (unlock_delay_time != 0 && (time(NULL) - unlock_delay_time) > 1)) { |