comparison lib/gftp.h @ 989:c99b134c6185

[mq]: charset2
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 01 Feb 2010 15:17:58 +0900
parents 63555c9744c2
children
comparison
equal deleted inserted replaced
988:63555c9744c2 989:c99b134c6185
94 94
95 #include <locale.h> 95 #include <locale.h>
96 #ifdef ENABLE_NLS 96 #ifdef ENABLE_NLS
97 #include <libintl.h> 97 #include <libintl.h>
98 #define _(String) gettext (String) 98 #define _(String) gettext (String)
99 #else 99 #else
100 #define _(String) String 100 #define _(String) String
101 #endif 101 #endif
102 #define N_(String) String 102 #define N_(String) String
103 103
104 #ifndef AF_LOCAL 104 #ifndef AF_LOCAL
175 #endif 175 #endif
176 176
177 /* Server types (used by FTP protocol from SYST command) */ 177 /* Server types (used by FTP protocol from SYST command) */
178 #define GFTP_DIRTYPE_UNIX 1 178 #define GFTP_DIRTYPE_UNIX 1
179 #define GFTP_DIRTYPE_EPLF 2 179 #define GFTP_DIRTYPE_EPLF 2
180 #define GFTP_DIRTYPE_CRAY 3 180 #define GFTP_DIRTYPE_CRAY 3
181 #define GFTP_DIRTYPE_NOVELL 4 181 #define GFTP_DIRTYPE_NOVELL 4
182 #define GFTP_DIRTYPE_DOS 5 182 #define GFTP_DIRTYPE_DOS 5
183 #define GFTP_DIRTYPE_VMS 6 183 #define GFTP_DIRTYPE_VMS 6
184 #define GFTP_DIRTYPE_OTHER 7 184 #define GFTP_DIRTYPE_OTHER 7
185 #define GFTP_DIRTYPE_MVS 8 185 #define GFTP_DIRTYPE_MVS 8
186 186
187 /* Error types */ 187 /* Error types */
188 #define GFTP_ERETRYABLE -1 /* Temporary failure. The GUI 188 #define GFTP_ERETRYABLE -1 /* Temporary failure. The GUI
202 #define BOOKMARKS_FILE BASE_CONF_DIR "/bookmarks" 202 #define BOOKMARKS_FILE BASE_CONF_DIR "/bookmarks"
203 #define LOG_FILE BASE_CONF_DIR "/gftp.log" 203 #define LOG_FILE BASE_CONF_DIR "/gftp.log"
204 #define MAX_HIST_LEN 10 204 #define MAX_HIST_LEN 10
205 #define GFTP_URL_USAGE "[[protocol://][user[:pass]@]site[:port][/directory]]" 205 #define GFTP_URL_USAGE "[[protocol://][user[:pass]@]site[:port][/directory]]"
206 206
207 typedef enum gftp_logging_level_tag 207 typedef enum gftp_logging_level_tag
208 { 208 {
209 gftp_logging_send, 209 gftp_logging_send,
210 gftp_logging_recv, 210 gftp_logging_recv,
211 gftp_logging_error, 211 gftp_logging_error,
212 gftp_logging_misc, 212 gftp_logging_misc,
226 #define GFTP_SORT_COL_DATETIME 5 226 #define GFTP_SORT_COL_DATETIME 5
227 #define GFTP_SORT_COL_ATTRIBS 6 227 #define GFTP_SORT_COL_ATTRIBS 6
228 228
229 #define GFTP_IS_SPECIAL_DEVICE(mode) (S_ISBLK (mode) || S_ISCHR (mode)) 229 #define GFTP_IS_SPECIAL_DEVICE(mode) (S_ISBLK (mode) || S_ISCHR (mode))
230 230
231 struct gftp_file_tag 231 struct gftp_file_tag
232 { 232 {
233 /*@null@*/ char *file, /* Our filename */ 233 /*@null@*/ char *file, /* Our filename */
234 *user, /* User that owns it */ 234 *user, /* User that owns it */
235 *group, /* Group that owns it */ 235 *group, /* Group that owns it */
236 *destfile; /* Full pathname to the destination for the 236 *destfile; /* Full pathname to the destination for the
237 file transfer */ 237 file transfer */
238 238
239 int fd; /* Already open fd for this file */ 239 int fd; /* Already open fd for this file */
240 /* FIXME - add fd_open function */ 240 /* FIXME - add fd_open function */
241 241
264 char transfer_action; /* See the GFTP_TRANS_ACTION_* vars above */ 264 char transfer_action; /* See the GFTP_TRANS_ACTION_* vars above */
265 /*@null@*/ void *user_data; 265 /*@null@*/ void *user_data;
266 }; 266 };
267 267
268 268
269 typedef struct gftp_proxy_hosts_tag 269 typedef struct gftp_proxy_hosts_tag
270 { 270 {
271 /* FIXME - add IPV6 stuff here */ 271 /* FIXME - add IPV6 stuff here */
272 272
273 gint32 ipv4_network_address, 273 gint32 ipv4_network_address,
274 ipv4_netmask; 274 ipv4_netmask;
275 char *domain; 275 char *domain;
276 } gftp_proxy_hosts; 276 } gftp_proxy_hosts;
277 277
278 278
279 /* Note, these numbers must match up to the index number in config_file.c 279 /* Note, these numbers must match up to the index number in config_file.c
280 in the declaration of gftp_option_types */ 280 in the declaration of gftp_option_types */
281 typedef enum 281 typedef enum
282 { 282 {
283 gftp_option_type_text = 0, 283 gftp_option_type_text = 0,
284 gftp_option_type_textcombo = 1, 284 gftp_option_type_textcombo = 1,
285 gftp_option_type_textcomboedt = 2, 285 gftp_option_type_textcomboedt = 2,
286 gftp_option_type_hidetext = 3, 286 gftp_option_type_hidetext = 3,
318 { 318 {
319 /*@null@*/ char *key, /* variable name */ 319 /*@null@*/ char *key, /* variable name */
320 *description; /* How this field will show up in the dialog */ 320 *description; /* How this field will show up in the dialog */
321 int otype; /* Type of option this is */ 321 int otype; /* Type of option this is */
322 /*@null@*/ void *value; 322 /*@null@*/ void *value;
323 /*@null@*/ void *listdata; /* For options that have several different 323 /*@null@*/ void *listdata; /* For options that have several different
324 options, this is a list of all the options. 324 options, this is a list of all the options.
325 Each option_type that uses this will use this 325 Each option_type that uses this will use this
326 field differently */ 326 field differently */
327 int flags; /* See GFTP_CVARS_FLAGS_* above */ 327 int flags; /* See GFTP_CVARS_FLAGS_* above */
328 /*@null@*/ char *comment; /* Comment to write out to the config file */ 328 /*@null@*/ char *comment; /* Comment to write out to the config file */
355 } gftp_textcomboedt_data; 355 } gftp_textcomboedt_data;
356 356
357 357
358 typedef struct gftp_request_tag gftp_request; 358 typedef struct gftp_request_tag gftp_request;
359 359
360 typedef void (*gftp_logging_func) ( gftp_logging_level level, 360 typedef void (*gftp_logging_func) ( gftp_logging_level level,
361 /*@null@*/ gftp_request * request, 361 /*@null@*/ gftp_request * request,
362 const char *string, ... ); 362 const char *string, ... );
363 363
364 #define GFTP_ANONYMOUS_USER "anonymous" 364 #define GFTP_ANONYMOUS_USER "anonymous"
365 #define gftp_need_username(request) ((request)->need_username && ((request)->username == NULL || *(request)->username == '\0')) 365 #define gftp_need_username(request) ((request)->need_username && ((request)->username == NULL || *(request)->username == '\0'))
366 #define gftp_need_password(request) ((request)->need_password && (request)->username != NULL && *(request)->username != '\0' && strcasecmp ((request)->username, GFTP_ANONYMOUS_USER) != 0 && ((request)->password == NULL || *(request)->password == '\0')) 366 #define gftp_need_password(request) ((request)->need_password && (request)->username != NULL && *(request)->username != '\0' && strcasecmp ((request)->username, GFTP_ANONYMOUS_USER) != 0 && ((request)->password == NULL || *(request)->password == '\0'))
367 367
368 struct gftp_request_tag 368 struct gftp_request_tag
369 { 369 {
370 int protonum; /* Current number of the protocol this is 370 int protonum; /* Current number of the protocol this is
371 set to */ 371 set to */
372 char *hostname, /* Hostname we will connect to */ 372 char *hostname, /* Hostname we will connect to */
373 *username, /* Username for host*/ 373 *username, /* Username for host*/
374 *password, /* Password for host */ 374 *password, /* Password for host */
375 *account, /* Account for host (FTP only) */ 375 *account, /* Account for host (FTP only) */
404 stopable : 1, 404 stopable : 1,
405 refreshing : 1, 405 refreshing : 1,
406 use_local_encoding : 1; 406 use_local_encoding : 1;
407 407
408 off_t gotbytes; 408 off_t gotbytes;
409 409
410 void *protocol_data; 410 void *protocol_data;
411 411
412 gftp_logging_func logging_function; 412 gftp_logging_func logging_function;
413 void *user_data; 413 void *user_data;
414 414
415 int (*init) ( gftp_request * request ); 415 int (*init) ( gftp_request * request );
416 void (*copy_param_options) ( gftp_request * dest_request, 416 void (*copy_param_options) ( gftp_request * dest_request,
417 gftp_request * src_request ); 417 gftp_request * src_request );
418 ssize_t (*read_function) ( gftp_request * request, 418 ssize_t (*read_function) ( gftp_request * request,
419 void *ptr, 419 void *ptr,
420 size_t size, 420 size_t size,
421 int fd ); 421 int fd );
422 ssize_t (*write_function) ( gftp_request * request, 422 ssize_t (*write_function) ( gftp_request * request,
423 const char *ptr, 423 const char *ptr,
424 size_t size, 424 size_t size,
425 int fd ); 425 int fd );
426 void (*destroy) ( gftp_request * request ); 426 void (*destroy) ( gftp_request * request );
427 int (*connect) ( gftp_request * request ); 427 int (*connect) ( gftp_request * request );
428 int (*post_connect) ( gftp_request * request ); 428 int (*post_connect) ( gftp_request * request );
429 void (*disconnect) ( gftp_request * request ); 429 void (*disconnect) ( gftp_request * request );
430 off_t (*get_file) ( gftp_request * request, 430 off_t (*get_file) ( gftp_request * request,
431 const char *filename, 431 const char *filename,
432 off_t startsize ); 432 off_t startsize );
433 int (*put_file) ( gftp_request * request, 433 int (*put_file) ( gftp_request * request,
434 const char *filename, 434 const char *filename,
435 off_t startsize, 435 off_t startsize,
436 off_t totalsize ); 436 off_t totalsize );
437 off_t (*transfer_file) ( gftp_request * fromreq, 437 off_t (*transfer_file) ( gftp_request * fromreq,
438 const char *fromfile, 438 const char *fromfile,
439 off_t fromsize, 439 off_t fromsize,
440 gftp_request * toreq, 440 gftp_request * toreq,
441 const char *tofile, 441 const char *tofile,
442 off_t tosize ); 442 off_t tosize );
443 ssize_t (*get_next_file_chunk) ( gftp_request * request, 443 ssize_t (*get_next_file_chunk) ( gftp_request * request,
444 char *buf, 444 char *buf,
445 size_t size ); 445 size_t size );
446 ssize_t (*put_next_file_chunk) ( gftp_request * request, 446 ssize_t (*put_next_file_chunk) ( gftp_request * request,
447 char *buf, 447 char *buf,
448 size_t size ); 448 size_t size );
449 int (*end_transfer) ( gftp_request * request ); 449 int (*end_transfer) ( gftp_request * request );
450 int (*abort_transfer) ( gftp_request * request ); 450 int (*abort_transfer) ( gftp_request * request );
451 int (*stat_filename) ( gftp_request * request, 451 int (*stat_filename) ( gftp_request * request,
452 const char *filename, 452 const char *filename,
453 mode_t * mode, 453 mode_t * mode,
454 off_t * filesize ); 454 off_t * filesize );
455 int (*list_files) ( gftp_request * request ); 455 int (*list_files) ( gftp_request * request );
456 int (*get_next_file) ( gftp_request * request, 456 int (*get_next_file) ( gftp_request * request,
457 gftp_file *fle, 457 gftp_file *fle,
458 int fd ); 458 int fd );
459 ssize_t (*get_next_dirlist_line) ( gftp_request * request, 459 ssize_t (*get_next_dirlist_line) ( gftp_request * request,
460 int fd, 460 int fd,
461 char *buf, 461 char *buf,
462 size_t buflen ); 462 size_t buflen );
463 off_t (*get_file_size) ( gftp_request * request, 463 off_t (*get_file_size) ( gftp_request * request,
464 const char *filename ); 464 const char *filename );
465 int (*chdir) ( gftp_request * request, 465 int (*chdir) ( gftp_request * request,
466 const char *directory ); 466 const char *directory );
467 int (*rmdir) ( gftp_request * request, 467 int (*rmdir) ( gftp_request * request,
468 const char *directory ); 468 const char *directory );
469 int (*rmfile) ( gftp_request * request, 469 int (*rmfile) ( gftp_request * request,
470 const char *filename ); 470 const char *filename );
471 int (*mkdir) ( gftp_request * request, 471 int (*mkdir) ( gftp_request * request,
472 const char *directory ); 472 const char *directory );
473 int (*rename) ( gftp_request * request, 473 int (*rename) ( gftp_request * request,
474 const char *oldname, 474 const char *oldname,
475 const char *newname ); 475 const char *newname );
476 int (*chmod) ( gftp_request * request, 476 int (*chmod) ( gftp_request * request,
477 const char *filename, 477 const char *filename,
478 mode_t mode ); 478 mode_t mode );
479 int (*set_file_time) ( gftp_request * request, 479 int (*set_file_time) ( gftp_request * request,
480 const char *filename, 480 const char *filename,
481 time_t datettime ); 481 time_t datettime );
482 int (*site) ( gftp_request * request, 482 int (*site) ( gftp_request * request,
483 int specify_site, 483 int specify_site,
484 const char *filename ); 484 const char *filename );
485 int (*parse_url) ( gftp_request * request, 485 int (*parse_url) ( gftp_request * request,
486 const char *url ); 486 const char *url );
487 int (*set_config_options) ( gftp_request * request ); 487 int (*set_config_options) ( gftp_request * request );
493 GHashTable * local_options_hash; 493 GHashTable * local_options_hash;
494 #ifdef USE_SSL 494 #ifdef USE_SSL
495 SSL * ssl; 495 SSL * ssl;
496 #endif 496 #endif
497 497
498 #if GLIB_MAJOR_VERSION > 1
499 GIConv iconv_to, iconv_from;
500 unsigned int iconv_from_initialized : 1,
501 iconv_to_initialized : 1;
502 char *iconv_charset;
503 #endif
504 char *remote_charset; 498 char *remote_charset;
505 }; 499 };
506 500
507 501
508 typedef struct gftp_transfer_tag 502 typedef struct gftp_transfer_tag
522 516
523 struct timeval starttime, 517 struct timeval starttime,
524 lasttime; 518 lasttime;
525 519
526 double kbs; 520 double kbs;
527 521
528 GList * files, 522 GList * files,
529 * curfle, 523 * curfle,
530 * updfle; 524 * updfle;
531 525
532 long numfiles, 526 long numfiles,
536 530
537 off_t curtrans, /* Current transfered bytes for this file */ 531 off_t curtrans, /* Current transfered bytes for this file */
538 tot_file_trans, /* Total number of bytes in the file being 532 tot_file_trans, /* Total number of bytes in the file being
539 transferred */ 533 transferred */
540 curresumed, /* Resumed bytes for this file */ 534 curresumed, /* Resumed bytes for this file */
541 trans_bytes, /* Amount of data transfered for entire 535 trans_bytes, /* Amount of data transfered for entire
542 transfer */ 536 transfer */
543 total_bytes, /* Grand total bytes for whole transfer */ 537 total_bytes, /* Grand total bytes for whole transfer */
544 resumed_bytes; /* Grand total of resumed bytes for whole 538 resumed_bytes; /* Grand total of resumed bytes for whole
545 transfer */ 539 transfer */
546 540
547 void * fromwdata, 541 void * fromwdata,
548 * towdata; 542 * towdata;
549 543
561 char *msg; 555 char *msg;
562 gftp_logging_level type; 556 gftp_logging_level type;
563 } gftp_log; 557 } gftp_log;
564 558
565 559
566 typedef struct supported_gftp_protocols_tag 560 typedef struct supported_gftp_protocols_tag
567 { 561 {
568 /*@null@*/ char *name; /* Description of protocol */ 562 /*@null@*/ char *name; /* Description of protocol */
569 /*@null@*/ int (*init) (gftp_request * request); /* Init function */ 563 /*@null@*/ int (*init) (gftp_request * request); /* Init function */
570 /*@null@*/ void (*register_options) (void); /* Protocol options */ 564 /*@null@*/ void (*register_options) (void); /* Protocol options */
571 /*@null@*/ char *url_prefix; /* URL Prefix */ 565 /*@null@*/ char *url_prefix; /* URL Prefix */
572 unsigned int default_port; /* Default port */ 566 unsigned int default_port; /* Default port */
573 unsigned int shown : 1, /* Whether this protocol is 567 unsigned int shown : 1, /* Whether this protocol is
574 shown or not to the user in 568 shown or not to the user in
575 the protocol dropdown box */ 569 the protocol dropdown box */
576 use_threads : 1; /* Whether or not operations in 570 use_threads : 1; /* Whether or not operations in
577 this protocol should use 571 this protocol should use
578 threads */ 572 threads */
579 } supported_gftp_protocols; 573 } supported_gftp_protocols;
580 574
581 575
582 typedef struct gftp_bookmarks_tag gftp_bookmarks_var; 576 typedef struct gftp_bookmarks_tag gftp_bookmarks_var;
583 577
584 struct gftp_bookmarks_tag 578 struct gftp_bookmarks_tag
585 { 579 {
586 char *path, /* Path */ 580 char *path, /* Path */
587 *oldpath, /* Old path name */ 581 *oldpath, /* Old path name */
588 *hostname, /* Our actual internet hostname */ 582 *hostname, /* Our actual internet hostname */
589 *protocol, /* Protocol we will connect through */ 583 *protocol, /* Protocol we will connect through */
638 632
639 633
640 /* Global config options. These are defined in options.h */ 634 /* Global config options. These are defined in options.h */
641 /*@null@*/ extern GList * gftp_file_transfers, * gftp_file_transfer_logs, 635 /*@null@*/ extern GList * gftp_file_transfers, * gftp_file_transfer_logs,
642 * gftp_options_list; 636 * gftp_options_list;
643 /*@null@*/ extern GHashTable * gftp_global_options_htable, * gftp_bookmarks_htable, 637 /*@null@*/ extern GHashTable * gftp_global_options_htable, * gftp_bookmarks_htable,
644 * gftp_config_list_htable; 638 * gftp_config_list_htable;
645 /*@null@*/ extern gftp_bookmarks_var * gftp_bookmarks; 639 /*@null@*/ extern gftp_bookmarks_var * gftp_bookmarks;
646 /*@null@*/ extern FILE * gftp_logfd; 640 /*@null@*/ extern FILE * gftp_logfd;
647 extern gftp_config_vars gftp_global_config_vars[]; 641 extern gftp_config_vars gftp_global_config_vars[];
648 extern supported_gftp_protocols gftp_protocols[]; 642 extern supported_gftp_protocols gftp_protocols[];
652 /* This is defined in config_file.c */ 646 /* This is defined in config_file.c */
653 647
654 extern gftp_option_type_var gftp_option_types[]; 648 extern gftp_option_type_var gftp_option_types[];
655 649
656 /* cache.c */ 650 /* cache.c */
657 void gftp_generate_cache_description ( gftp_request * request, 651 void gftp_generate_cache_description ( gftp_request * request,
658 /*@out@*/ char *description, 652 /*@out@*/ char *description,
659 size_t len, 653 size_t len,
660 int ignore_directory ); 654 int ignore_directory );
661 655
662 int gftp_new_cache_entry ( gftp_request * request ); 656 int gftp_new_cache_entry ( gftp_request * request );
663 657
664 int gftp_find_cache_entry ( gftp_request * request ); 658 int gftp_find_cache_entry ( gftp_request * request );
668 void gftp_delete_cache_entry ( gftp_request * request, 662 void gftp_delete_cache_entry ( gftp_request * request,
669 char *descr, 663 char *descr,
670 int ignore_directory ); 664 int ignore_directory );
671 665
672 /* charset-conv.c */ 666 /* charset-conv.c */
673 /*@null@*/ char * gftp_string_to_utf8 ( gftp_request * request, 667 /*@null@*/ char * gftp_string_to_utf8 ( gftp_request * request,
674 const char *str, 668 const char *str,
675 size_t *dest_len ); 669 size_t *dest_len );
676 670
677 /*@null@*/ char * gftp_string_from_utf8 ( gftp_request * request, 671 /*@null@*/ char * gftp_string_from_utf8 ( gftp_request * request,
678 int force_local, 672 int force_local,
679 const char *str, 673 const char *str,
680 size_t *dest_len ); 674 size_t *dest_len );
681 675
682 /*@null@*/ char * gftp_filename_to_utf8 ( gftp_request * request, 676 /*@null@*/ char * gftp_filename_to_utf8 ( gftp_request * request,
683 const char *str, 677 const char *str,
684 size_t *dest_len ); 678 size_t *dest_len );
685 679
686 /*@null@*/ char * gftp_filename_from_utf8 ( gftp_request * request, 680 /*@null@*/ char * gftp_filename_from_utf8 ( gftp_request * request,
687 const char *str, 681 const char *str,
688 size_t *dest_len ); 682 size_t *dest_len );
689 683
690 /*@null@*/ char * gftp_remote_filename_to_utf8 ( gftp_request * request, 684 /*@null@*/ char * gftp_remote_filename_to_utf8 ( gftp_request * request,
691 const char *str, 685 const char *str,
692 size_t *dest_len ); 686 size_t *dest_len );
693 687
694 /*@null@*/ char * gftp_remote_filename_from_utf8 ( gftp_request * request, 688 /*@null@*/ char * gftp_remote_filename_from_utf8 ( gftp_request * request,
695 const char *str, 689 const char *str,
696 size_t *dest_len ); 690 size_t *dest_len );
697 691
698 /* config_file.c */ 692 /* config_file.c */
699 int gftp_config_parse_args ( char *str, 693 int gftp_config_parse_args ( char *str,
700 int numargs, 694 int numargs,
701 int lineno, 695 int lineno,
702 /*@out@*/ char **first, 696 /*@out@*/ char **first,
703 ... ); 697 ... );
704 698
705 void gftp_add_bookmark ( gftp_bookmarks_var * newentry ); 699 void gftp_add_bookmark ( gftp_bookmarks_var * newentry );
706 700
707 void gftp_read_config_file ( char *global_data_path ); 701 void gftp_read_config_file ( char *global_data_path );
712 706
713 GHashTable * build_bookmarks_hash_table ( gftp_bookmarks_var * entry ); 707 GHashTable * build_bookmarks_hash_table ( gftp_bookmarks_var * entry );
714 708
715 void print_bookmarks ( gftp_bookmarks_var * bookmarks ); 709 void print_bookmarks ( gftp_bookmarks_var * bookmarks );
716 710
717 void gftp_lookup_global_option ( const char * key, 711 void gftp_lookup_global_option ( const char * key,
718 /*@out@*/ void *value ); 712 /*@out@*/ void *value );
719 713
720 void gftp_lookup_request_option ( gftp_request * request, 714 void gftp_lookup_request_option ( gftp_request * request,
721 const char * key, 715 const char * key,
722 /*@out@*/ void *value ); 716 /*@out@*/ void *value );
723 717
724 718
725 void gftp_lookup_bookmark_option ( gftp_bookmarks_var * bm, 719 void gftp_lookup_bookmark_option ( gftp_bookmarks_var * bm,
726 const char * key, 720 const char * key,
727 void *value ); 721 void *value );
728 722
729 void gftp_set_global_option ( const char * key, 723 void gftp_set_global_option ( const char * key,
730 const void *value ); 724 const void *value );
731 725
732 void gftp_set_request_option ( gftp_request * request, 726 void gftp_set_request_option ( gftp_request * request,
733 const char * key, 727 const char * key,
734 const void *value ); 728 const void *value );
735 729
736 void gftp_set_bookmark_option ( gftp_bookmarks_var * bm, 730 void gftp_set_bookmark_option ( gftp_bookmarks_var * bm,
737 const char * key, 731 const char * key,
738 const void *value ); 732 const void *value );
739 733
740 void gftp_register_config_vars ( gftp_config_vars *config_vars ); 734 void gftp_register_config_vars ( gftp_config_vars *config_vars );
741 735
742 void gftp_copy_local_options ( gftp_config_vars ** new_options_vars, 736 void gftp_copy_local_options ( gftp_config_vars ** new_options_vars,
743 GHashTable ** new_options_hash, 737 GHashTable ** new_options_hash,
744 int *new_num_local_options_vars, 738 int *new_num_local_options_vars,
745 gftp_config_vars * orig_options, 739 gftp_config_vars * orig_options,
746 int num_local_options_vars ); 740 int num_local_options_vars );
747 741
754 void gftp_free_proxy_hosts ( GList * proxy_hosts ); 748 void gftp_free_proxy_hosts ( GList * proxy_hosts );
755 749
756 GList * gftp_copy_proxy_hosts ( GList * proxy_hosts ); 750 GList * gftp_copy_proxy_hosts ( GList * proxy_hosts );
757 751
758 /* misc.c */ 752 /* misc.c */
759 /*@null@*/ char *insert_commas ( off_t number, 753 /*@null@*/ char *insert_commas ( off_t number,
760 char *dest_str, 754 char *dest_str,
761 size_t dest_len ); 755 size_t dest_len );
762 756
763 char *alltrim ( char *str ); 757 char *alltrim ( char *str );
764 758
765 char *gftp_expand_path ( gftp_request * request, 759 char *gftp_expand_path ( gftp_request * request,
766 const char *src ); 760 const char *src );
767 761
768 void make_nonnull ( char **str ); 762 void make_nonnull ( char **str );
769 763
770 int gftp_match_filespec ( gftp_request * request, 764 int gftp_match_filespec ( gftp_request * request,
771 const char *filename, 765 const char *filename,
772 const char *filespec ); 766 const char *filespec );
773 767
774 int gftp_parse_command_line ( int *argc, 768 int gftp_parse_command_line ( int *argc,
775 char ***argv ); 769 char ***argv );
776 770
788 782
789 void free_file_list ( GList * filelist ); 783 void free_file_list ( GList * filelist );
790 784
791 gftp_file * copy_fdata ( gftp_file * fle ); 785 gftp_file * copy_fdata ( gftp_file * fle );
792 786
793 int compare_request ( gftp_request * request1, 787 int compare_request ( gftp_request * request1,
794 gftp_request * request2, 788 gftp_request * request2,
795 int compare_dirs ); 789 int compare_dirs );
796 790
797 gftp_transfer * gftp_tdata_new ( void ); 791 gftp_transfer * gftp_tdata_new ( void );
798 792
799 void free_tdata ( gftp_transfer * tdata ); 793 void free_tdata ( gftp_transfer * tdata );
800 794
801 gftp_request * gftp_copy_request ( gftp_request * req ); 795 gftp_request * gftp_copy_request ( gftp_request * req );
802 796
803 GList * gftp_sort_filelist ( GList * filelist, 797 GList * gftp_sort_filelist ( GList * filelist,
804 int column, 798 int column,
805 int asds ); 799 int asds );
806 800
807 char * gftp_gen_ls_string ( gftp_request * request, 801 char * gftp_gen_ls_string ( gftp_request * request,
808 gftp_file * fle, 802 gftp_file * fle,
809 char *file_prefixstr, 803 char *file_prefixstr,
810 char *file_suffixstr ); 804 char *file_suffixstr );
811 805
812 char * base64_encode ( char *str ); 806 char * base64_encode ( char *str );
813 807
814 void gftp_free_bookmark ( gftp_bookmarks_var * entry, 808 void gftp_free_bookmark ( gftp_bookmarks_var * entry,
815 int free_node ); 809 int free_node );
816 810
817 void gftp_shutdown ( void ); 811 void gftp_shutdown ( void );
818 812
819 GList * get_next_selection ( GList * selection, 813 GList * get_next_selection ( GList * selection,
820 GList ** list, 814 GList ** list,
821 int *curnum ); 815 int *curnum );
822 816
823 char * gftp_build_path ( gftp_request * request, 817 char * gftp_build_path ( gftp_request * request,
824 const char *first_element, 818 const char *first_element,
825 ... ); 819 ... );
842 /* parse-dir-listing.c */ 836 /* parse-dir-listing.c */
843 time_t parse_time ( char *str, 837 time_t parse_time ( char *str,
844 char **endpos ); 838 char **endpos );
845 839
846 int gftp_parse_ls ( gftp_request * request, 840 int gftp_parse_ls ( gftp_request * request,
847 const char *lsoutput, 841 const char *lsoutput,
848 gftp_file *fle, 842 gftp_file *fle,
849 int fd ); 843 int fd );
850 844
851 /* protocols.c */ 845 /* protocols.c */
852 #define GFTP_FTP_NUM 0 846 #define GFTP_FTP_NUM 0
866 860
867 int rfc959_init ( gftp_request * request ); 861 int rfc959_init ( gftp_request * request );
868 862
869 void rfc959_register_module ( void ); 863 void rfc959_register_module ( void );
870 864
871 int rfc959_get_next_file ( gftp_request * request, 865 int rfc959_get_next_file ( gftp_request * request,
872 gftp_file *fle, 866 gftp_file *fle,
873 int fd ); 867 int fd );
874 868
875 int rfc959_connect ( gftp_request * request ); 869 int rfc959_connect ( gftp_request * request );
876 870
877 int ftps_init ( gftp_request * request ); 871 int ftps_init ( gftp_request * request );
917 911
918 int gftp_connect ( gftp_request * request ); 912 int gftp_connect ( gftp_request * request );
919 913
920 void gftp_disconnect ( gftp_request * request ); 914 void gftp_disconnect ( gftp_request * request );
921 915
922 off_t gftp_get_file ( gftp_request * request, 916 off_t gftp_get_file ( gftp_request * request,
923 const char *filename, 917 const char *filename,
924 off_t startsize ); 918 off_t startsize );
925 919
926 int gftp_put_file ( gftp_request * request, 920 int gftp_put_file ( gftp_request * request,
927 const char *filename, 921 const char *filename,
928 off_t startsize, 922 off_t startsize,
929 off_t totalsize ); 923 off_t totalsize );
930 924
931 off_t gftp_transfer_file ( gftp_request *fromreq, 925 off_t gftp_transfer_file ( gftp_request *fromreq,
932 const char *fromfile, 926 const char *fromfile,
933 off_t fromsize, 927 off_t fromsize,
934 gftp_request *toreq, 928 gftp_request *toreq,
935 const char *tofile, 929 const char *tofile,
936 off_t tosize ); 930 off_t tosize );
937 931
938 ssize_t gftp_get_next_file_chunk ( gftp_request * request, 932 ssize_t gftp_get_next_file_chunk ( gftp_request * request,
939 char *buf, 933 char *buf,
940 size_t size ); 934 size_t size );
941 935
942 ssize_t gftp_put_next_file_chunk ( gftp_request * request, 936 ssize_t gftp_put_next_file_chunk ( gftp_request * request,
943 char *buf, 937 char *buf,
944 size_t size ); 938 size_t size );
945 939
946 int gftp_list_files ( gftp_request * request ); 940 int gftp_list_files ( gftp_request * request );
947 941
948 int gftp_parse_bookmark ( gftp_request * request, 942 int gftp_parse_bookmark ( gftp_request * request,
949 gftp_request * local_request, 943 gftp_request * local_request,
950 const char * bookmark, 944 const char * bookmark,
951 int *refresh_local ); 945 int *refresh_local );
952 946
953 int gftp_parse_url ( gftp_request * request, 947 int gftp_parse_url ( gftp_request * request,
954 const char *url ); 948 const char *url );
955 949
956 int gftp_get_next_file ( gftp_request * request, 950 int gftp_get_next_file ( gftp_request * request,
957 const char *filespec, 951 const char *filespec,
958 gftp_file *fle ); 952 gftp_file *fle );
959 953
960 int gftp_end_transfer ( gftp_request * request ); 954 int gftp_end_transfer ( gftp_request * request );
961 955
964 int gftp_stat_filename ( gftp_request * request, 958 int gftp_stat_filename ( gftp_request * request,
965 const char *filename, 959 const char *filename,
966 mode_t * mode, 960 mode_t * mode,
967 off_t * filesize ); 961 off_t * filesize );
968 962
969 void gftp_set_hostname ( gftp_request * request, 963 void gftp_set_hostname ( gftp_request * request,
970 const char *hostname ); 964 const char *hostname );
971 965
972 void gftp_set_remote_charset (gftp_request * request, 966 void gftp_set_remote_charset (gftp_request * request,
973 const char *remote_charset); 967 const char *remote_charset);
974 968
975 void gftp_set_username ( gftp_request * request, 969 void gftp_set_username ( gftp_request * request,
976 const char *username ); 970 const char *username );
977 971
978 void gftp_set_password ( gftp_request * request, 972 void gftp_set_password ( gftp_request * request,
979 const char *password ); 973 const char *password );
980 974
981 void gftp_set_account ( gftp_request * request, 975 void gftp_set_account ( gftp_request * request,
982 const char *account ); 976 const char *account );
983 977
984 int gftp_set_directory ( gftp_request * request, 978 int gftp_set_directory ( gftp_request * request,
985 const char *directory ); 979 const char *directory );
986 980
987 void gftp_set_port ( gftp_request * request, 981 void gftp_set_port ( gftp_request * request,
988 unsigned int port ); 982 unsigned int port );
989 983
990 int gftp_remove_directory ( gftp_request * request, 984 int gftp_remove_directory ( gftp_request * request,
991 const char *directory ); 985 const char *directory );
992 986
993 int gftp_remove_file ( gftp_request * request, 987 int gftp_remove_file ( gftp_request * request,
994 const char *file ); 988 const char *file );
995 989
996 int gftp_make_directory ( gftp_request * request, 990 int gftp_make_directory ( gftp_request * request,
997 const char *directory ); 991 const char *directory );
998 992
999 int gftp_rename_file ( gftp_request * request, 993 int gftp_rename_file ( gftp_request * request,
1000 const char *oldname, 994 const char *oldname,
1001 const char *newname ); 995 const char *newname );
1002 996
1003 int gftp_chmod ( gftp_request * request, 997 int gftp_chmod ( gftp_request * request,
1004 const char *file, 998 const char *file,
1005 mode_t mode ); 999 mode_t mode );
1006 1000
1007 int gftp_set_file_time ( gftp_request * request, 1001 int gftp_set_file_time ( gftp_request * request,
1008 const char *file, 1002 const char *file,
1009 time_t datetime ); 1003 time_t datetime );
1010 1004
1011 int gftp_site_cmd ( gftp_request * request, 1005 int gftp_site_cmd ( gftp_request * request,
1012 int specify_site, 1006 int specify_site,
1013 const char *command ); 1007 const char *command );
1014 1008
1015 off_t gftp_get_file_size ( gftp_request * request, 1009 off_t gftp_get_file_size ( gftp_request * request,
1016 const char *filename ); 1010 const char *filename );
1017 1011
1018 void gftp_calc_kbs ( gftp_transfer * tdata, 1012 void gftp_calc_kbs ( gftp_transfer * tdata,
1019 ssize_t num_read ); 1013 ssize_t num_read );
1020 1014
1021 int gftp_get_all_subdirs ( gftp_transfer * transfer, 1015 int gftp_get_all_subdirs ( gftp_transfer * transfer,
1022 void (*update_func) 1016 void (*update_func)
1023 ( gftp_transfer * transfer )); 1017 ( gftp_transfer * transfer ));
1024 1018
1025 int gftp_set_config_options ( gftp_request * request ); 1019 int gftp_set_config_options ( gftp_request * request );
1026 1020
1027 void print_file_list ( GList * list ); 1021 void print_file_list ( GList * list );
1028 1022
1029 void gftp_swap_socks ( gftp_request * dest, 1023 void gftp_swap_socks ( gftp_request * dest,
1030 gftp_request * source ); 1024 gftp_request * source );
1031 1025
1032 void gftp_calc_kbs ( gftp_transfer * tdata, 1026 void gftp_calc_kbs ( gftp_transfer * tdata,
1033 ssize_t num_read ); 1027 ssize_t num_read );
1034 1028
1035 int gftp_get_transfer_status ( gftp_transfer * tdata, 1029 int gftp_get_transfer_status ( gftp_transfer * tdata,
1036 ssize_t num_read ); 1030 ssize_t num_read );
1037 1031
1038 int gftp_fd_open ( gftp_request * request, 1032 int gftp_fd_open ( gftp_request * request,
1039 const char *pathname, 1033 const char *pathname,
1040 int flags, 1034 int flags,
1041 mode_t perms ); 1035 mode_t perms );
1042 1036
1043 void gftp_setup_startup_directory ( gftp_request * request, 1037 void gftp_setup_startup_directory ( gftp_request * request,
1044 const char *option_name ); 1038 const char *option_name );
1064 1058
1065 int gftp_ssl_session_setup ( gftp_request * request ); 1059 int gftp_ssl_session_setup ( gftp_request * request );
1066 1060
1067 void gftp_ssl_free ( gftp_request * request ); 1061 void gftp_ssl_free ( gftp_request * request );
1068 1062
1069 ssize_t gftp_ssl_read ( gftp_request * request, 1063 ssize_t gftp_ssl_read ( gftp_request * request,
1070 void *ptr, 1064 void *ptr,
1071 size_t size, 1065 size_t size,
1072 int fd ); 1066 int fd );
1073 1067
1074 ssize_t gftp_ssl_write ( gftp_request * request, 1068 ssize_t gftp_ssl_write ( gftp_request * request,
1075 const char *ptr, 1069 const char *ptr,
1076 size_t size, 1070 size_t size,
1077 int fd ); 1071 int fd );
1078 #endif /* USE_SSL */ 1072 #endif /* USE_SSL */
1079 1073
1080 /* UI dependent functions that must be implemented */ 1074 /* UI dependent functions that must be implemented */
1081 int gftpui_protocol_ask_yes_no ( gftp_request * request, 1075 int gftpui_protocol_ask_yes_no ( gftp_request * request,
1090 void gftpui_protocol_update_timeout ( gftp_request * request ); 1084 void gftpui_protocol_update_timeout ( gftp_request * request );
1091 1085
1092 #endif 1086 #endif
1093 1087
1094 /* socket-connect.c */ 1088 /* socket-connect.c */
1095 int gftp_connect_server ( gftp_request * request, 1089 int gftp_connect_server ( gftp_request * request,
1096 char *service, 1090 char *service,
1097 char *proxy_hostname, 1091 char *proxy_hostname,
1098 unsigned int proxy_port ); 1092 unsigned int proxy_port );
1099 1093
1100 /* socket-connect-getaddrinfo.c */ 1094 /* socket-connect-getaddrinfo.c */
1119 char *service, 1113 char *service,
1120 char *proxy_hostname, 1114 char *proxy_hostname,
1121 unsigned int proxy_port ); 1115 unsigned int proxy_port );
1122 1116
1123 /* sockutils.c */ 1117 /* sockutils.c */
1124 ssize_t gftp_get_line ( gftp_request * request, 1118 ssize_t gftp_get_line ( gftp_request * request,
1125 /*@out@*/ gftp_getline_buffer ** rbuf, 1119 /*@out@*/ gftp_getline_buffer ** rbuf,
1126 /*@out@*/ char * str, 1120 /*@out@*/ char * str,
1127 size_t len, 1121 size_t len,
1128 int fd ); 1122 int fd );
1129 1123
1130 void gftp_free_getline_buffer ( gftp_getline_buffer ** rbuf ); 1124 void gftp_free_getline_buffer ( gftp_getline_buffer ** rbuf );
1131 1125
1132 ssize_t gftp_fd_read ( gftp_request * request, 1126 ssize_t gftp_fd_read ( gftp_request * request,
1133 void *ptr, 1127 void *ptr,
1134 size_t size, 1128 size_t size,
1135 int fd ); 1129 int fd );
1136 1130
1137 ssize_t gftp_fd_write ( gftp_request * request, 1131 ssize_t gftp_fd_write ( gftp_request * request,
1138 const char *ptr, 1132 const char *ptr,
1139 size_t size, 1133 size_t size,
1140 int fd ); 1134 int fd );
1141 1135
1142 ssize_t gftp_writefmt ( gftp_request * request, 1136 ssize_t gftp_writefmt ( gftp_request * request,
1143 int fd, 1137 int fd,
1144 const char *fmt, 1138 const char *fmt,
1145 ... ); 1139 ... );
1146 1140
1147 int gftp_fd_set_sockblocking ( gftp_request * request, 1141 int gftp_fd_set_sockblocking ( gftp_request * request,
1148 int fd, 1142 int fd,
1149 int non_blocking ); 1143 int non_blocking );
1150 1144
1151 struct servent * r_getservbyname ( const char *name, 1145 struct servent * r_getservbyname ( const char *name,
1152 const char *proto, 1146 const char *proto,
1153 struct servent *result_buf, 1147 struct servent *result_buf,