Commit 24bc3c60bf65343058c0e610da749cb14d76e7e5

Authored by Perry Werneck
1 parent d90797ee

Ajustando métodos de transferência de arquivos para facilitar implementação do n…

…ovo diálogo de transferência de arquivos.
@@ -214,9 +214,6 @@ @@ -214,9 +214,6 @@
214 <Option compilerVar="CC" /> 214 <Option compilerVar="CC" />
215 </Unit> 215 </Unit>
216 <Unit filename="src/lib3270/ctlrc.h" /> 216 <Unit filename="src/lib3270/ctlrc.h" />
217 - <Unit filename="src/lib3270/dispatcher.c">  
218 - <Option compilerVar="CC" />  
219 - </Unit>  
220 <Unit filename="src/lib3270/ft.c"> 217 <Unit filename="src/lib3270/ft.c">
221 <Option compilerVar="CC" /> 218 <Option compilerVar="CC" />
222 </Unit> 219 </Unit>
src/include/lib3270.h
@@ -332,7 +332,8 @@ @@ -332,7 +332,8 @@
332 LIB3270_STATE_USER // Always the last one 332 LIB3270_STATE_USER // Always the last one
333 } LIB3270_STATE; 333 } LIB3270_STATE;
334 334
335 - typedef struct _h3270 H3270; 335 + typedef struct _h3270 H3270;
  336 + typedef struct _h3270ft H3270FT;
336 337
337 /** 338 /**
338 * Get current screen size. 339 * Get current screen size.
src/include/lib3270/filetransfer.h
@@ -87,9 +87,24 @@ @@ -87,9 +87,24 @@
87 87
88 #define LIB3270_XLATE_NBUF 4 88 #define LIB3270_XLATE_NBUF 4
89 89
90 - typedef struct _h3270ft 90 + struct lib3270_ft_callbacks
91 { 91 {
92 - unsigned short sz; ///< @brief Size of FT data structure 92 + void (*complete)(H3270 *hSession, unsigned long length,double kbytes_sec,const char *msg, void *userdata);
  93 + void (*failed)(H3270 *hSession, unsigned long length,double kbytes_sec,const char *msg, void *userdata);
  94 + void (*message)(H3270 *hSession, const char *msg, void *userdata);
  95 + void (*update)(H3270 *hSession, unsigned long current, unsigned long length, double kbytes_sec, void *userdata);
  96 + void (*running)(H3270 *hSession, int is_cut, void *userdata);
  97 + void (*aborting)(H3270 *hSession, void *userdata);
  98 + void (*state_changed)(H3270 *hSession, LIB3270_FT_STATE state, const char *text, void *userdata);
  99 + };
  100 +
  101 + /**
  102 + * @brief File transfer data.
  103 + *
  104 + */
  105 + struct _h3270ft
  106 + {
  107 + struct lib3270_ft_callbacks cbk; ///< @brief Callback table - Always the first one.
93 108
94 int ft_last_cr : 1; ///< @brief CR was last char in local file 109 int ft_last_cr : 1; ///< @brief CR was last char in local file
95 int remap_flag : 1; ///< @brief Remap ASCII<->EBCDIC 110 int remap_flag : 1; ///< @brief Remap ASCII<->EBCDIC
@@ -102,7 +117,7 @@ @@ -102,7 +117,7 @@
102 117
103 118
104 H3270 * host; 119 H3270 * host;
105 - void * widget; ///< @brief File transfer dialog handle 120 + void * user_data; ///< @brief File transfer dialog handle
106 FILE * local_file; ///< @brief File descriptor for local file 121 FILE * local_file; ///< @brief File descriptor for local file
107 unsigned long length; ///< @brief File length 122 unsigned long length; ///< @brief File length
108 123
@@ -115,12 +130,12 @@ @@ -115,12 +130,12 @@
115 int secspace; 130 int secspace;
116 int dft; 131 int dft;
117 132
118 - unsigned long ft_length; /**< Length of transfer */ 133 + unsigned long ft_length; ///< Length of transfer
119 134
120 - struct timeval starting_time; /**< Starting time */ 135 + struct timeval starting_time; ///< Starting time
121 136
122 - const char * local; /**< Local filename */  
123 - const char * remote; /**< Remote filename */ 137 + const char * local; ///< Local filename
  138 + const char * remote; ///< Remote filename
124 139
125 // ft_dft.c 140 // ft_dft.c
126 char * abort_string; 141 char * abort_string;
@@ -133,23 +148,16 @@ @@ -133,23 +148,16 @@
133 int quadrant; 148 int quadrant;
134 unsigned long expanded_length; 149 unsigned long expanded_length;
135 char * saved_errmsg; 150 char * saved_errmsg;
136 - int xlate_buffered; /**< buffer count */  
137 - int xlate_buf_ix; /**< buffer index */  
138 - unsigned char xlate_buf[LIB3270_XLATE_NBUF]; /**< buffer */ 151 + int xlate_buffered; ///< buffer count
  152 + int xlate_buf_ix; ///< buffer index
  153 + unsigned char xlate_buf[LIB3270_XLATE_NBUF]; ///< buffer
139 154
140 // Charset 155 // Charset
141 struct lib3270_charset charset; 156 struct lib3270_charset charset;
142 157
143 - // Callbacks  
144 - void (*complete)(struct _h3270ft *ft,unsigned long length,double kbytes_sec,const char *msg);  
145 - void (*failed)(struct _h3270ft *ft,unsigned long length,double kbytes_sec,const char *msg);  
146 - void (*message)(struct _h3270ft *ft, const char *msg);  
147 - void (*update)(struct _h3270ft *ft, unsigned long current, unsigned long length, double kbytes_sec);  
148 - void (*running)(struct _h3270ft *ft, int is_cut);  
149 - void (*aborting)(struct _h3270ft *ft);  
150 - void (*state_changed)(struct _h3270ft *ft, LIB3270_FT_STATE state); 158 + };
  159 +
151 160
152 - } H3270FT;  
153 161
154 /** 162 /**
155 * Create a new file transfer session. 163 * Create a new file transfer session.
@@ -165,18 +173,22 @@ @@ -165,18 +173,22 @@
165 * @param dft 173 * @param dft
166 * @param msg Pointer to receive message text. 174 * @param msg Pointer to receive message text.
167 * 175 *
168 - * @return Filetransfer handle if ok, NULL if failed 176 + * @return Filetransfer callback table
169 * 177 *
170 */ 178 */
171 - LIB3270_EXPORT H3270FT * lib3270_ft_new(H3270 *hSession, LIB3270_FT_OPTION flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft, const char **msg); 179 + LIB3270_EXPORT H3270FT * lib3270_ft_new(H3270 *hSession, LIB3270_FT_OPTION flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft, const char **msg);
  180 +
  181 + LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession);
  182 + LIB3270_EXPORT int lib3270_ft_destroy(H3270 *hSession);
172 183
173 - LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession);  
174 - LIB3270_EXPORT int lib3270_ft_destroy(H3270 *hSession); 184 + LIB3270_EXPORT int lib3270_ft_cancel(H3270 *hSession, int force);
175 185
176 - LIB3270_EXPORT int lib3270_ft_cancel(H3270 *hSession, int force); 186 + LIB3270_EXPORT void lib3270_ft_set_user_data(H3270 *h, void *ptr);
  187 + LIB3270_EXPORT void * lib3270_ft_get_user_data(H3270 *h);
177 188
  189 + LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session);
178 190
179 - LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session); 191 + LIB3270_EXPORT struct lib3270_ft_callbacks * lib3270_get_ft_callbacks(H3270 *session, unsigned short sz);
180 192
181 193
182 #endif // LIB3270_FILETRANSFER_INCLUDED 194 #endif // LIB3270_FILETRANSFER_INCLUDED
src/include/lib3270/session.h
@@ -68,6 +68,17 @@ @@ -68,6 +68,17 @@
68 68
69 }; 69 };
70 70
  71 + /**
  72 + * Register application Handlers.
  73 + *
  74 + * @param cbk Structure with the application I/O handles to set.
  75 + *
  76 + * @return 0 if ok, error code if not.
  77 + *
  78 + */
  79 + int LIB3270_EXPORT lib3270_set_session_callbacks(const struct lib3270_callbacks *cbk);
  80 +
  81 +
71 LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz); 82 LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz);
72 83
73 #endif // LIB3270_SESSION_H_INCLUDED 84 #endif // LIB3270_SESSION_H_INCLUDED
src/lib3270/ft.c
@@ -101,21 +101,28 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -101,21 +101,28 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
101 }; 101 };
102 102
103 int f; 103 int f;
  104 + const char *message = NULL;
104 105
105 if(session->state == state) 106 if(session->state == state)
106 return; 107 return;
107 - session->state = state;  
108 - session->state_changed(session,state); 108 +
  109 + // State changed, notify
109 110
110 for(f = 0; f < sizeof(msg)/sizeof(msg[0]);f++) 111 for(f = 0; f < sizeof(msg)/sizeof(msg[0]);f++)
111 { 112 {
112 if(msg[f].state == state) 113 if(msg[f].state == state)
113 { 114 {
114 - ft_message(session,msg[f].text); 115 + message = msg[f].text;
115 break; 116 break;
116 } 117 }
117 } 118 }
118 119
  120 + session->state = state;
  121 +
  122 + ft_message(session,message);
  123 + session->cbk.state_changed(session->host,state,message,session->user_data);
  124 +
  125 +
119 } 126 }
120 127
121 void ft_init(H3270 *hSession) 128 void ft_init(H3270 *hSession)
@@ -136,7 +143,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -136,7 +143,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
136 if (ft->state == LIB3270_FT_STATE_RUNNING) 143 if (ft->state == LIB3270_FT_STATE_RUNNING)
137 { 144 {
138 set_ft_state(ft,LIB3270_FT_STATE_ABORT_WAIT); 145 set_ft_state(ft,LIB3270_FT_STATE_ABORT_WAIT);
139 - ft->aborting(ft); 146 + ft->cbk.aborting(hSession,ft->user_data);
140 return 0; 147 return 0;
141 } 148 }
142 149
@@ -149,37 +156,37 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -149,37 +156,37 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
149 return 0; 156 return 0;
150 } 157 }
151 158
152 - static void def_complete(H3270FT *ft,unsigned long length,double kbytes_sec,const char *msg) 159 + static void def_complete(H3270 *hSession, unsigned long length,double kbytes_sec,const char *msg, void *userdata)
153 { 160 {
154 - ft->message(ft,msg); 161 + hSession->ft->cbk.message(hSession,msg,hSession->ft->user_data);
155 } 162 }
156 163
157 - static void def_failed(struct _h3270ft *ft,unsigned long length,double kbytes_sec,const char *msg) 164 + static void def_failed(H3270 *hSession, unsigned long length,double kbytes_sec,const char *msg, void *userdata)
158 { 165 {
159 - ft->complete(ft,ft->ft_length,kbytes_sec,msg ? msg : N_("Transfer failed")); 166 + hSession->ft->cbk.complete(hSession,length,kbytes_sec,msg,userdata);
160 } 167 }
161 168
162 - static void def_message(H3270FT *ft, const char *errmsg) 169 + static void def_message(H3270 *hSession, const char *msg, void *userdata)
163 { 170 {
164 - lib3270_write_log(ft->host,"ft","%s",errmsg); 171 + lib3270_write_log(hSession,"ft","%s",msg);
165 } 172 }
166 173
167 - static void def_update(H3270FT *ft, unsigned long current, unsigned long length, double kbytes_sec) 174 + static void def_update(H3270 *hSession, unsigned long current, unsigned long length, double kbytes_sec, void *userdata)
168 { 175 {
169 176
170 } 177 }
171 178
172 - static void def_running(H3270FT *ft, int is_cut) 179 + static void def_running(H3270 *hSession, int is_cut, void *userdata)
173 { 180 {
174 181
175 } 182 }
176 183
177 - static void def_aborting(H3270FT *ft) 184 + static void def_aborting(H3270 *hSession, void *userdata)
178 { 185 {
179 186
180 } 187 }
181 188
182 - static void def_state_changed(H3270FT *ft, LIB3270_FT_STATE state) 189 + static void def_state_changed(H3270 *hSession, LIB3270_FT_STATE state, const char *text, void *userdata)
183 { 190 {
184 191
185 } 192 }
@@ -281,32 +288,33 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -281,32 +288,33 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
281 // Create & Initialize ft control structure. 288 // Create & Initialize ft control structure.
282 ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3); 289 ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3);
283 290
284 - ftHandle->sz = sizeof(H3270FT);  
285 - ftHandle->host = session;  
286 -  
287 - ftHandle->ft_last_cr = 0;  
288 -  
289 - ftHandle->ascii_flag = (flags & LIB3270_FT_OPTION_ASCII) ? 1 : 0;  
290 - ftHandle->cr_flag = (flags & LIB3270_FT_OPTION_CRLF) ? 1 : 0;  
291 - ftHandle->remap_flag = (flags & LIB3270_FT_OPTION_REMAP) ? 1 : 0;  
292 - ftHandle->unix_text = (flags & LIB3270_FT_OPTION_UNIX) ? 1 : 0;  
293 - ftHandle->ft_is_cut = 0;  
294 - ftHandle->flags = flags;  
295 - ftHandle->local_file = ft_local_file;  
296 - ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK;  
297 - ftHandle->complete = def_complete;  
298 - ftHandle->failed = def_failed;  
299 - ftHandle->message = def_message;  
300 - ftHandle->update = def_update;  
301 - ftHandle->running = def_running;  
302 - ftHandle->aborting = def_aborting;  
303 - ftHandle->state_changed = def_state_changed;  
304 - ftHandle->lrecl = lrecl;  
305 - ftHandle->blksize = blksize;  
306 - ftHandle->primspace = primspace;  
307 - ftHandle->secspace = secspace;  
308 - ftHandle->dft = dft;  
309 - ftHandle->quadrant = -1; 291 + ftHandle->host = session;
  292 +
  293 + ftHandle->ft_last_cr = 0;
  294 +
  295 + ftHandle->ascii_flag = (flags & LIB3270_FT_OPTION_ASCII) ? 1 : 0;
  296 + ftHandle->cr_flag = (flags & LIB3270_FT_OPTION_CRLF) ? 1 : 0;
  297 + ftHandle->remap_flag = (flags & LIB3270_FT_OPTION_REMAP) ? 1 : 0;
  298 + ftHandle->unix_text = (flags & LIB3270_FT_OPTION_UNIX) ? 1 : 0;
  299 + ftHandle->ft_is_cut = 0;
  300 + ftHandle->flags = flags;
  301 + ftHandle->local_file = ft_local_file;
  302 + ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK;
  303 + ftHandle->lrecl = lrecl;
  304 + ftHandle->blksize = blksize;
  305 + ftHandle->primspace = primspace;
  306 + ftHandle->secspace = secspace;
  307 + ftHandle->dft = dft;
  308 + ftHandle->quadrant = -1;
  309 +
  310 + ftHandle->cbk.complete = def_complete;
  311 + ftHandle->cbk.failed = def_failed;
  312 + ftHandle->cbk.message = def_message;
  313 + ftHandle->cbk.update = def_update;
  314 + ftHandle->cbk.running = def_running;
  315 + ftHandle->cbk.aborting = def_aborting;
  316 + ftHandle->cbk.state_changed = def_state_changed;
  317 +
310 318
311 // Setup file transfer charset. 319 // Setup file transfer charset.
312 memcpy(&ftHandle->charset,&session->charset,sizeof(struct lib3270_charset)); 320 memcpy(&ftHandle->charset,&session->charset,sizeof(struct lib3270_charset));
@@ -330,6 +338,33 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -330,6 +338,33 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
330 return ftHandle; 338 return ftHandle;
331 } 339 }
332 340
  341 + LIB3270_EXPORT void lib3270_ft_set_user_data(H3270 *hSession, void *ptr)
  342 + {
  343 + H3270FT * ft;
  344 +
  345 + CHECK_SESSION_HANDLE(hSession);
  346 +
  347 + ft = get_ft_handle(hSession);
  348 + if(!ft)
  349 + return;
  350 +
  351 + ft->user_data = ptr;
  352 +
  353 + }
  354 +
  355 + LIB3270_EXPORT void * lib3270_ft_get_user_data(H3270 *hSession)
  356 + {
  357 + H3270FT * ft;
  358 +
  359 + CHECK_SESSION_HANDLE(hSession);
  360 +
  361 + ft = get_ft_handle(hSession);
  362 + if(!ft)
  363 + return NULL;
  364 +
  365 + return ft->user_data;
  366 + }
  367 +
333 LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession) 368 LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession)
334 { 369 {
335 static const char * rec = "FVU"; 370 static const char * rec = "FVU";
@@ -488,7 +523,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -488,7 +523,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
488 void ft_message(H3270FT *ft, const char *msg) 523 void ft_message(H3270FT *ft, const char *msg)
489 { 524 {
490 lib3270_trace_event(ft->host,"%s\n",msg); 525 lib3270_trace_event(ft->host,"%s\n",msg);
491 - ft->message(ft,msg); 526 + ft->cbk.message(ft->host,msg,ft->user_data);
492 } 527 }
493 528
494 static double finish(H3270FT *ft) 529 static double finish(H3270FT *ft)
@@ -518,12 +553,12 @@ static double finish(H3270FT *ft) @@ -518,12 +553,12 @@ static double finish(H3270FT *ft)
518 553
519 void ft_complete(H3270FT *ft, const char *errmsg) 554 void ft_complete(H3270FT *ft, const char *errmsg)
520 { 555 {
521 - ft->complete(ft,ft->ft_length,finish(ft),errmsg ? errmsg : N_("Transfer complete")); 556 + ft->cbk.complete(ft->host,ft->ft_length,finish(ft),errmsg ? errmsg : N_("Transfer complete"),ft->user_data);
522 } 557 }
523 558
524 void ft_failed(H3270FT *ft, const char *errmsg) 559 void ft_failed(H3270FT *ft, const char *errmsg)
525 { 560 {
526 - ft->failed(ft,ft->ft_length,finish(ft),errmsg ? errmsg : N_("Transfer failed")); 561 + ft->cbk.failed(ft->host,ft->ft_length,finish(ft),errmsg ? errmsg : N_("Transfer failed"),ft->user_data);
527 } 562 }
528 563
529 LIB3270_EXPORT int lib3270_ft_destroy(H3270 *hSession) 564 LIB3270_EXPORT int lib3270_ft_destroy(H3270 *hSession)
@@ -569,7 +604,7 @@ void ft_update_length(H3270FT *session) @@ -569,7 +604,7 @@ void ft_update_length(H3270FT *session)
569 (double)(t1.tv_usec - session->starting_time.tv_usec) / 1.0e6); 604 (double)(t1.tv_usec - session->starting_time.tv_usec) / 1.0e6);
570 } 605 }
571 606
572 - session->update(session,session->ft_length,session->length,kbytes_sec); 607 + session->cbk.update(session->host,session->ft_length,session->length,kbytes_sec,session->user_data);
573 608
574 } 609 }
575 610
@@ -587,20 +622,36 @@ void ft_running(H3270FT *ft, Boolean is_cut) @@ -587,20 +622,36 @@ void ft_running(H3270FT *ft, Boolean is_cut)
587 if (ft->state == FT_AWAIT_ACK) 622 if (ft->state == FT_AWAIT_ACK)
588 set_ft_state(ft,FT_RUNNING); 623 set_ft_state(ft,FT_RUNNING);
589 624
590 - ft->running(ft,is_cut); 625 + ft->cbk.running(ft->host,is_cut,ft->user_data);
591 626
592 ft_update_length(ft); 627 ft_update_length(ft);
593 628
594 } 629 }
595 630
  631 +LIB3270_EXPORT struct lib3270_ft_callbacks * lib3270_get_ft_callbacks(H3270 *session, unsigned short sz)
  632 +{
  633 +
  634 + CHECK_SESSION_HANDLE(session);
  635 +
  636 + if(sz != sizeof(struct lib3270_ft_callbacks))
  637 + return NULL;
  638 +
  639 + if(session->ft)
  640 + return &(session->ft->cbk);
  641 +
  642 + return NULL;
  643 +
  644 +}
  645 +
  646 +
596 // Process a protocol-generated abort. 647 // Process a protocol-generated abort.
597 void ft_aborting(H3270FT *h) 648 void ft_aborting(H3270FT *h)
598 { 649 {
599 if (h->state == FT_RUNNING || h->state == FT_ABORT_WAIT) 650 if (h->state == FT_RUNNING || h->state == FT_ABORT_WAIT)
600 { 651 {
601 set_ft_state(h,FT_ABORT_SENT); 652 set_ft_state(h,FT_ABORT_SENT);
602 - h->message(h,N_("Aborting..."));  
603 - h->aborting(h); 653 + h->cbk.message(h->host,N_("Aborting..."),h->user_data);
  654 + h->cbk.aborting(h->host,h->user_data);
604 } 655 }
605 } 656 }
606 657
src/lib3270/private.h
@@ -373,7 +373,7 @@ struct _h3270 @@ -373,7 +373,7 @@ struct _h3270
373 unsigned short current_port; 373 unsigned short current_port;
374 374
375 // Misc 375 // Misc
376 - void * ft; /**< Active file transfer data */ 376 + H3270FT * ft; /**< Active file transfer data */
377 377
378 // screen info 378 // screen info
379 int ov_rows; 379 int ov_rows;
src/pw3270/filetransfer.c
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 #include <stdlib.h> 34 #include <stdlib.h>
35 #include "globals.h" 35 #include "globals.h"
36 #include "ft/v3270ft.h" 36 #include "ft/v3270ft.h"
37 - 37 +#include <lib3270/filetransfer.h>
38 38
39 /*--[ Constants ]------------------------------------------------------------------------------------*/ 39 /*--[ Constants ]------------------------------------------------------------------------------------*/
40 40
@@ -207,39 +207,28 @@ static void ft_dialog_save(GtkWidget *widget, const gchar *name) @@ -207,39 +207,28 @@ static void ft_dialog_save(GtkWidget *widget, const gchar *name)
207 207
208 } 208 }
209 209
210 -static void ft_complete(H3270FT *ft, unsigned long length,double kbytes_sec, const char *msg)  
211 -{  
212 - v3270_ft_progress_complete(GTK_WIDGET(ft->widget),length,kbytes_sec);  
213 - v3270_ft_progress_set_message(GTK_WIDGET(ft->widget),gettext(msg));  
214 -}  
215 -  
216 -static void ft_message(struct _h3270ft *ft, const char *text)  
217 -{  
218 - v3270_ft_progress_set_message(GTK_WIDGET(ft->widget),gettext(text));  
219 -}  
220 -  
221 -static void ft_update(H3270FT *ft, unsigned long current, unsigned long length, double kbytes_sec) 210 +static void ft_complete(H3270 *hSession, unsigned long length,double kbytes_sec, const char *msg, void *widget)
222 { 211 {
223 - v3270_ft_progress_update(GTK_WIDGET(ft->widget), current, length, kbytes_sec); 212 + v3270_ft_progress_complete(GTK_WIDGET(widget),length,kbytes_sec);
  213 + v3270_ft_progress_set_message(GTK_WIDGET(widget),gettext(msg));
224 } 214 }
225 215
226 -static void ft_running(H3270FT *ft, int is_cut) 216 +static void ft_message(H3270 *hSession, const char *text, void *widget)
227 { 217 {
  218 + v3270_ft_progress_set_message(GTK_WIDGET(widget),gettext(text));
228 } 219 }
229 220
230 -static void ft_aborting(H3270FT *ft)  
231 -{  
232 -}  
233 -  
234 -static void ft_state_changed(H3270FT *ft, LIB3270_FT_STATE state) 221 +static void ft_update(H3270 *hSession, unsigned long current, unsigned long length, double kbytes_sec, void *widget)
235 { 222 {
  223 + v3270_ft_progress_update(GTK_WIDGET(widget), current, length, kbytes_sec);
236 } 224 }
237 225
238 gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft) 226 gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft)
239 { 227 {
240 g_return_val_if_fail(GTK_IS_V3270(widget),0); 228 g_return_val_if_fail(GTK_IS_V3270(widget),0);
241 229
242 - H3270FT * ft = lib3270_ft_new(v3270_get_session(widget),options,local,remote,lrecl,blksize,primspace,secspace,dft,NULL); 230 + H3270 * hSession = v3270_get_session(widget);
  231 + H3270FT * ft = lib3270_ft_new(hSession,options,local,remote,lrecl,blksize,primspace,secspace,dft,NULL);
243 232
244 if(!ft) 233 if(!ft)
245 return -1; 234 return -1;
@@ -254,14 +243,18 @@ gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gch @@ -254,14 +243,18 @@ gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gch
254 // Create FT progress dialog 243 // Create FT progress dialog
255 GtkWidget * progress = v3270_ft_progress_new(); 244 GtkWidget * progress = v3270_ft_progress_new();
256 245
257 - ft->widget = progress;  
258 - ft->complete = ft_complete;  
259 - ft->failed = ft_complete;  
260 - ft->update = ft_update;  
261 - ft->running = ft_running;  
262 - ft->aborting = ft_aborting;  
263 - ft->state_changed = ft_state_changed;  
264 - ft->message = ft_message; 246 + lib3270_ft_set_user_data(hSession,progress);
  247 +
  248 +
  249 + struct lib3270_ft_callbacks *cbk = lib3270_get_ft_callbacks(hSession,sizeof(struct lib3270_ft_callbacks));
  250 +
  251 + cbk->complete = ft_complete;
  252 + cbk->failed = ft_complete;
  253 + cbk->update = ft_update;
  254 +// cbk->running = ft_running;
  255 +// cbk->aborting = ft_aborting;
  256 +// cbk->state_changed = ft_state_changed;
  257 + cbk->message = ft_message;
265 258
266 if(options & LIB3270_FT_OPTION_RECEIVE) { 259 if(options & LIB3270_FT_OPTION_RECEIVE) {
267 260