gftp.h
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:26k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. /*****************************************************************************/
  2. /*  gftp.h - include file for the whole ftp program                          */
  3. /*  Copyright (C) 1998-2002 Brian Masney <masneyb@gftp.org>                  */
  4. /*                                                                           */
  5. /*  This program is free software; you can redistribute it and/or modify     */
  6. /*  it under the terms of the GNU General Public License as published by     */
  7. /*  the Free Software Foundation; either version 2 of the License, or        */
  8. /*  (at your option) any later version.                                      */
  9. /*                                                                           */
  10. /*  This program is distributed in the hope that it will be useful,          */
  11. /*  but WITHOUT ANY WARRANTY; without even the implied warranty of           */
  12. /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            */
  13. /*  GNU General Public License for more details.                             */
  14. /*                                                                           */
  15. /*  You should have received a copy of the GNU General Public License        */
  16. /*  along with this program; if not, write to the Free Software              */
  17. /*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                */
  18. /*****************************************************************************/
  19. /* $Id: gftp.h,v 1.16 2002/12/04 02:35:44 masneyb Exp $ */
  20. #ifndef __GFTP_H
  21. #define __GFTP_H
  22. #ifdef HAVE_CONFIG_H
  23. #include "config.h"
  24. #endif
  25. #include <sys/types.h>
  26. #include <sys/stat.h>
  27. #include <sys/socket.h>
  28. #include <sys/time.h>
  29. #ifndef TIOCGWINSZ
  30. #include <sys/ioctl.h>
  31. #endif
  32. #include <sys/wait.h>
  33. #include <sys/utsname.h>
  34. #include <sys/sysmacros.h>
  35. #include <netinet/in.h>
  36. #include <arpa/inet.h>
  37. #include <glib.h>
  38. #include <limits.h>
  39. #include <netdb.h>
  40. #include <stdio.h>
  41. #include <stdarg.h>
  42. #include <stdlib.h>
  43. #include <errno.h>
  44. #include <fcntl.h>
  45. #include <unistd.h>
  46. #include <ctype.h>
  47. #include <time.h>
  48. #include <utime.h>
  49. #include <signal.h>
  50. #include <termios.h>
  51. #include <pwd.h>
  52. #include <setjmp.h>
  53. #include <dirent.h>
  54. #include <grp.h>
  55. #include <math.h>
  56. #ifdef HAVE_STRING_H
  57. #include <string.h>
  58. #else
  59. #include <strings.h>
  60. #endif
  61. #ifdef ENABLE_NLS
  62. #include <libintl.h>
  63. #include <locale.h>
  64. #define _(String) gettext (String)
  65. #else 
  66. #define _(String) String
  67. #endif
  68. #define N_(String) String
  69. #ifndef AF_LOCAL
  70. #define AF_LOCAL AF_UNIX
  71. #endif
  72. /* We need the major() and minor() macros in the user interface. If they aren't
  73.    defined by the system, we'll just define them here. */
  74. #ifndef major
  75. #warning major macro was not defined by the system. Defining one that is probably wrong for your system
  76. #define major(dev) (((dev) >> 8) & 0xff)
  77. #endif
  78. #ifndef minor
  79. #warning minor macro was not defined by the system. Defining one that is probably wrong for your system
  80. #define minor(dev) ((dev) & 0xff)
  81. #endif
  82. #ifdef HAVE_DMALLOC
  83. #include <dmalloc.h>
  84. #endif
  85. /* Some general settings */
  86. #define BASE_CONF_DIR "~/.gftp"
  87. #define CONFIG_FILE BASE_CONF_DIR "/gftprc"
  88. #define BOOKMARKS_FILE BASE_CONF_DIR "/bookmarks"
  89. #define LOG_FILE BASE_CONF_DIR "/gftp.log"
  90. #define MAX_HIST_LEN 10
  91. typedef enum gftp_transfer_type_tag 
  92. {
  93.   gftp_transfer_passive,
  94.   gftp_transfer_active
  95. } gftp_transfer_type;
  96. typedef enum gftp_logging_level_tag 
  97. {
  98.   gftp_logging_send,
  99.   gftp_logging_recv,
  100.   gftp_logging_error,
  101.   gftp_logging_misc
  102. } gftp_logging_level;
  103. typedef void (*gftp_logging_func) ( gftp_logging_level level, 
  104.   void *ptr, 
  105.   const char *string, ... );
  106. typedef struct gftp_file_tag gftp_file;
  107. #define GFTP_TRANS_ACTION_OVERWRITE 1
  108. #define GFTP_TRANS_ACTION_RESUME 2
  109. #define GFTP_TRANS_ACTION_SKIP 3
  110. #define GFTP_DIRECTION_DOWNLOAD 0
  111. #define GFTP_DIRECTION_UPLOAD 1
  112. #define GFTP_SORT_COL_FILE 1
  113. #define GFTP_SORT_COL_SIZE 2
  114. #define GFTP_SORT_COL_USER 3
  115. #define GFTP_SORT_COL_GROUP 4
  116. #define GFTP_SORT_COL_DATETIME 5
  117. #define GFTP_SORT_COL_ATTRIBS 6
  118. struct gftp_file_tag 
  119. {
  120.   char *file, /* Our filename */
  121.        *user, /* User that owns it */
  122.        *group, /* Group that owns it */
  123.        *attribs, /* Attribs (-rwxr-x-rx) */
  124.        *destfile; /* Full pathname to the destination for the 
  125.                                    file transfer */
  126.   time_t datetime; /* File date and time */
  127.   off_t size, /* Size of the file */
  128.         startsize; /* Size to start the transfer at */
  129.   unsigned int isdir : 1, /* File type */
  130.                isexe : 1,
  131.                islink : 1,
  132.                isblock : 1,
  133.                ischar : 1,
  134.                issocket : 1,
  135.                isfifo : 1,
  136.                ascii : 1,  /* Transfer in ASCII mode */
  137.                selected : 1, /* Is this file selected? */
  138.                was_sel : 1, /* Was this file selected before  */
  139.                shown : 1, /* Is this file shown? */
  140.                done_view : 1, /* View the file when done transfering? */
  141.                done_edit : 1, /* Edit the file when done transfering? */
  142.                done_rm : 1, /* Remove the file when done */
  143.                transfer_done : 1, /* Is current file transfer done? */
  144.                is_fd : 1; /* Is this a file descriptor? */
  145.   char transfer_action; /* See the GFTP_TRANS_ACTION_* vars above */
  146.   void *node; /* Pointer to the node for the gui */
  147.   int fd;
  148. };
  149. typedef struct gftp_proxy_hosts_tag 
  150. {
  151.   gint32 ipv4_network_address,
  152.          ipv4_netmask;
  153.   char *domain;
  154. } gftp_proxy_hosts;
  155. typedef struct gftp_request_tag gftp_request;
  156. struct gftp_request_tag 
  157. {
  158.   int protonum; /* Current number of the protocol this is 
  159.                                    set to */
  160.   char *hostname, /* Hostname we will connect to */
  161.        *username, /* Username for host*/
  162.        *password, /* Password for host */
  163.        *account, /* Account for host (FTP only) */
  164.        *directory, /* Current working directory */
  165.        *proxy_config, /* Proxy configuration */
  166.        *proxy_hostname, /* Proxy hostname */
  167.        *proxy_username, /* Proxy username */
  168.        *proxy_password, /* Proxy password */
  169.        *proxy_account, /* Proxy account (FTP only) */
  170.        *url_prefix, /* URL Prefix (ex: ftp) */
  171.        *protocol_name, /* Protocol description */
  172.        *last_ftp_response, /* Last response from server */
  173.        *last_dir_entry; /* Last dir entry from server */
  174.   size_t last_dir_entry_len; /* Length of last_dir_entry */
  175.   unsigned int port, /* Port of remote site */
  176.                proxy_port; /* Port of the proxy server */
  177.   int sockfd, /* Control connection (read) */
  178.       datafd, /* Data connection */
  179.       cachefd; /* For the directory cache */
  180.   int wakeup_main_thread[2]; /* FD that gets written to by the threads
  181.                                    to wakeup the parent */
  182.         
  183. #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
  184.   struct addrinfo *hostp; /* Remote host we are connected to */
  185. #else
  186.   struct hostent host, *hostp;  /* Remote host we are connected to */
  187. #endif
  188.   int data_type; /* ASCII or BINARY (FTP only) */
  189.   unsigned int use_proxy : 1,           /* Go out of proxy server */
  190.                always_connected : 1,
  191.                need_hostport : 1,
  192.                need_userpass : 1,
  193.                use_cache : 1,           /* Enable or disable the cache */
  194.                use_threads : 1,         /* Whether we need to spawn a thread
  195.                                            for this protocol */
  196.                cached : 1,              /* Is this directory listing cached? */
  197.                cancel : 1, /* If a signal is received, should
  198.    we cancel this operation */
  199.                stopable : 1;
  200.   off_t gotbytes;
  201.  
  202.   void *protocol_data;
  203.    
  204.   gftp_logging_func logging_function;
  205.   void *user_data;
  206.   void (*init) ( gftp_request * request );
  207.   void (*destroy) ( gftp_request * request );
  208.   int (*connect) ( gftp_request * request );
  209.   void (*disconnect)  ( gftp_request * request );
  210.   off_t (*get_file)  ( gftp_request * request, 
  211.   const char *filename, 
  212.   int fd,
  213.   off_t startsize );
  214.   int (*put_file)  ( gftp_request * request, 
  215.   const char *filename, 
  216.   int fd,
  217.   off_t startsize,
  218.   off_t totalsize );
  219.   long (*transfer_file)  ( gftp_request * fromreq, 
  220.   const char *fromfile, 
  221.   off_t fromsize, 
  222.   gftp_request * toreq, 
  223.   const char *tofile, 
  224.   off_t tosize );
  225.   ssize_t (*get_next_file_chunk)  ( gftp_request * request, 
  226.   char *buf, 
  227.   size_t size );
  228.   ssize_t (*put_next_file_chunk)  ( gftp_request * request, 
  229.   char *buf, 
  230.   size_t size );
  231.   int (*end_transfer)  ( gftp_request * request );
  232.   int (*abort_transfer)  ( gftp_request * request );
  233.   int (*list_files)  ( gftp_request * request );
  234.   int (*get_next_file) ( gftp_request * request, 
  235.   gftp_file *fle, 
  236.   int fd );
  237.   int (*set_data_type) ( gftp_request * request, 
  238.   int data_type );
  239.   off_t (*get_file_size)  ( gftp_request * request, 
  240.   const char *filename );
  241.   int (*chdir) ( gftp_request * request, 
  242.   const char *directory );
  243.   int (*rmdir) ( gftp_request * request, 
  244.   const char *directory );
  245.   int (*rmfile) ( gftp_request * request, 
  246.   const char *filename );
  247.   int (*mkdir) ( gftp_request * request, 
  248.   const char *directory );
  249.   int (*rename) ( gftp_request * request, 
  250.   const char *oldname, 
  251.   const char *newname );
  252.   int (*chmod) ( gftp_request * request, 
  253.   const char *filename, 
  254.   int mode );
  255.   int (*set_file_time) ( gftp_request * request, 
  256.   const char *filename, 
  257.   time_t datettime );
  258.   int (*site) ( gftp_request * request, 
  259.   const char *filename );
  260.   int (*parse_url) ( gftp_request * request,
  261.   const char *url );
  262.   void (*set_config_options) ( gftp_request * request );
  263.   void (*swap_socks) ( gftp_request * dest,
  264.   gftp_request * source );
  265.   /* Options */
  266.   gftp_transfer_type transfer_type; /* Passive or non-passive (FTP only) */
  267.   int network_timeout,
  268.       retries,
  269.       sleep_time,
  270.       passive_transfer;
  271.   float maxkbs;
  272.   char *sftpserv_path;
  273. };
  274. typedef struct gftp_transfer_tag gftp_transfer;
  275. struct gftp_transfer_tag
  276. {
  277.   gftp_request * fromreq,
  278.                * toreq;
  279.   unsigned int transfer_direction : 1,
  280.                cancel : 1,
  281.                ready : 1,
  282.                started : 1,
  283.                done : 1,
  284.                show : 1,
  285.                stalled : 1,
  286.                next_file : 1,
  287.                skip_file : 1;
  288.   struct timeval starttime,
  289.                  lasttime;
  290.   double kbs;
  291.   
  292.   GList * files,
  293.         * curfle,
  294.         * updfle;
  295.   long numfiles,
  296.        numdirs,
  297.        current_file_number,
  298.        current_file_retries;
  299.   off_t curtrans, /* Current transfered bytes for this file */
  300.         curresumed, /* Resumed bytes for this file */
  301.         trans_bytes, /* Amount of data transfered for entire 
  302.    transfer */
  303.         total_bytes,  /* Grand total bytes for whole transfer */
  304.         resumed_bytes; /* Grand total of resumed bytes for whole 
  305.                                    transfer */
  306.   void * fromwdata,
  307.        * towdata;
  308.   void *statmutex,
  309.        *structmutex;
  310.   void *node;
  311.   void *clist;
  312. };
  313. typedef struct gftp_log_tag
  314. {
  315.   char *msg;
  316.   gftp_logging_level type;
  317. } gftp_log;
  318. typedef struct supported_gftp_protocols_tag 
  319. {
  320.   char *name; /* Description of protocol */
  321.   void (*init) (gftp_request * request); /* Init function */
  322.   char *url_prefix; /* URL Prefix */
  323.   int shown; /* Whether this protocol is shown or not to the user
  324.                                                    in the protocol dropdown box */
  325. } supported_gftp_protocols;
  326. typedef struct gftp_bookmarks_tag gftp_bookmarks;
  327. struct gftp_bookmarks_tag 
  328. {
  329.   char *path;                  /* Path */
  330.   char *hostname,              /* Our actual internet hostname */
  331.        *protocol,              /* Protocol we will connect through */
  332.        *remote_dir,            /* Initial directory */
  333.        *local_dir,             /* Init local directory */
  334.        *user,                  /* Username to log in as */
  335.        *pass,                  /* Our password */
  336.        *acct;                  /* Account */
  337.   unsigned int port,           /* The port we will connect to */
  338.                isfolder : 1,   /* If this is set, then the children field can
  339.                                   be non-NULL */
  340.                save_password : 1; /* Save this password */
  341.   gftp_bookmarks *children,  /* The children of this node. */
  342.                  *prev,  /* The parent of this node */
  343.                  *next;  /* The next sibling of this node */
  344.   gpointer cnode; 
  345.   /* Site options */
  346.   char *sftpserv_path; /* Path to the sftp server */
  347. };
  348. typedef struct gftp_file_extensions_tag
  349. {
  350.    char *ext,                   /* The file extension to register */
  351.         *filename,              /* The xpm file to display */
  352.         *view_program,          /* The program used to view this file */
  353.         *ascii_binary;          /* Is this a ASCII transfer or a BINARY transfer */
  354.    int stlen;                   /* How long is the file extension. */
  355. } gftp_file_extensions;
  356. typedef struct gftp_color_tag
  357. {
  358.   gushort red,
  359.           green,
  360.           blue;
  361. } gftp_color;
  362. typedef struct gftp_config_vars_tag
  363. {
  364.   char *key, /* variable name */
  365.        *description; /* How this field will show up in the dialog */
  366.   gpointer var; /* Pointer to our variable */
  367.   int type; /* See defines below */
  368.   char *comment;                /* Comment to write out to the config file */
  369.   gpointer widget;
  370.   int ports_shown; /* What ports of gFTP is this option shown in */
  371. } gftp_config_vars;
  372. #define CONFIG_INTTEXT                  1
  373. #define CONFIG_FLOATTEXT                2
  374. #define CONFIG_CHECKBOX                 3       
  375. #define CONFIG_LABEL                    4
  376. #define CONFIG_NOTEBOOK                 5
  377. #define CONFIG_HIDEINT                  6
  378. #define CONFIG_TABLE 7
  379. #define CONFIG_CHARTEXT                 8
  380. #define CONFIG_COMBO 9
  381. #define CONFIG_TEXT 10
  382. #define CONFIG_COLOR 11
  383. #define CONFIG_UINTTEXT                 12
  384. #define CONFIG_CHARPASS 13
  385. #define GFTP_PORT_GTK (1 << 1)
  386. #define GFTP_PORT_TEXT (1 << 2)
  387. #define GFTP_PORT_ALL (GFTP_PORT_GTK | GFTP_PORT_TEXT)
  388. typedef struct gftp_proxy_type_tag
  389. {
  390.   char *key,
  391.        *description;
  392. } gftp_proxy_type;
  393. #define GFTP_CUSTOM_PROXY_NUM        8
  394. typedef struct gftp_getline_buffer_tag
  395. {
  396.   char *buffer,
  397.        *curpos;
  398.   size_t max_bufsize,
  399.          cur_bufsize;
  400. } gftp_getline_buffer;
  401. /* Global config options */
  402. extern supported_gftp_protocols gftp_protocols[];
  403. extern char version[], *emailaddr, *edit_program, *view_program, 
  404.             *firewall_host, *firewall_username, *firewall_password, 
  405.             *firewall_account, *proxy_config, *http_proxy_host, 
  406.             *http_proxy_username, *http_proxy_password, 
  407.             *startup_directory, *ssh_prog_name, *ssh_extra_params, 
  408.             **ssh_extra_params_list, *default_protocol, *ssh1_sftp_path, 
  409.             *ssh2_sftp_path;
  410. extern int num_ssh_extra_params;
  411. extern FILE * logfd;
  412. extern double maxkbs;
  413. extern GList * proxy_hosts, * registered_exts, * viewedit_processes, 
  414.              * file_transfers, * file_transfer_logs;
  415. extern gftp_bookmarks * bookmarks;
  416. extern int do_one_transfer_at_a_time, start_file_transfers, 
  417.            transfer_in_progress, passive_transfer, sort_dirs_first, 
  418.            show_hidden_files, refresh_files, listbox_local_width, 
  419.            listbox_remote_width, listbox_file_height, transfer_height, 
  420.            log_height, retries, sleep_time, network_timeout, use_http11, 
  421.            listbox_dblclick_action, file_trans_column, local_columns[6], 
  422.            remote_columns[6], resolve_symlinks, firewall_port, http_proxy_port,
  423.            overwrite_by_default, append_file_transfers, enable_old_ssh, 
  424.            ssh_need_userpass, ssh_use_askpass, sshv2_use_sftp_subsys, 
  425.            local_sortcol, local_sortasds, remote_sortcol, remote_sortasds;
  426. extern guint max_log_window_size;
  427. extern GHashTable * bookmarks_htable, * config_htable;
  428. extern GList * localhistory, * remotehistory, * host_history, * port_history, 
  429.              * user_history;
  430. extern unsigned int host_len, port_len, user_len, localhistlen, remotehistlen;
  431. extern volatile sig_atomic_t viewedit_process_done;
  432. extern gftp_config_vars config_file_vars[];
  433. extern gftp_proxy_type proxy_type[];
  434. extern gftp_color send_color, recv_color, error_color, misc_color;
  435. /* cache.c */
  436. int gftp_new_cache_entry  ( gftp_request * request );
  437. int gftp_find_cache_entry  ( gftp_request * request );
  438. void gftp_clear_cache_files  ( void );
  439. void gftp_delete_cache_entry  ( gftp_request * request,
  440.   int ignore_directory );
  441. /* config_file.c */
  442. void gftp_read_config_file  ( char **argv,
  443.   int get_xpms );
  444. void gftp_read_bookmarks  ( void );
  445. void add_to_bookmark                    ( gftp_bookmarks *newentry );
  446. void gftp_write_config_file  ( void );
  447. void gftp_write_bookmarks_file  ( void );
  448. GHashTable * build_bookmarks_hash_table ( gftp_bookmarks * entry );
  449. void print_bookmarks  ( gftp_bookmarks * bookmarks );
  450. /* misc.c */
  451. char *insert_commas  ( off_t number, 
  452.   char *dest_str, 
  453.   size_t dest_len );
  454. long file_countlf  ( int filefd, 
  455.   long endpos );
  456. char *alltrim  ( char *str );
  457. char *expand_path  ( const char *src );
  458. void remove_double_slashes  ( char *string );
  459. void make_nonnull  ( char **str );
  460. int copyfile ( char *source,
  461.   char *dest );
  462. char *get_xpm_path  ( char *filename, 
  463.   int quit_on_err );
  464. int gftp_match_filespec  ( char *filename, 
  465.   char *filespec );
  466. int gftp_parse_command_line  ( int *argc,
  467.   char ***argv );
  468. void gftp_usage  ( void );
  469. gint string_hash_compare  ( gconstpointer path1,
  470.   gconstpointer path2 );
  471. guint string_hash_function ( gconstpointer key );
  472. void free_file_list ( GList * filelist );
  473. void free_fdata ( gftp_file * fle );
  474. gftp_file * copy_fdata  ( gftp_file * fle );
  475. int compare_request  ( gftp_request * request1, 
  476.   gftp_request * request2, 
  477.   int compare_dirs );
  478. void free_tdata  ( gftp_transfer * tdata );
  479. gftp_request * copy_request  ( gftp_request * req );
  480. int ptym_open  ( char *pts_name );
  481. int ptys_open  ( int fdm, 
  482.   char *pts_name );
  483. int tty_raw  ( int fd );
  484. char **make_ssh_exec_args  ( gftp_request * request, 
  485.   char *execname,
  486.   int use_sftp_subsys,
  487.   char *portstring );
  488. char * ssh_start_login_sequence  ( gftp_request * request, 
  489.   int fd );
  490. #ifdef G_HAVE_GINT64
  491. gint64 hton64 ( gint64 val );
  492. #endif
  493. GList * gftp_sort_filelist  ( GList * filelist, 
  494.   int column, 
  495.   int asds );
  496. /* protocols.c */
  497. #define GFTP_GET_HOSTNAME(request) (request->hostname)
  498. #define GFTP_GET_USERNAME(request) (request->username)
  499. #define GFTP_GET_PASSWORD(request) (request->password)
  500. #define GFTP_GET_ACCOUNT(request) (request->account)
  501. #define GFTP_GET_DIRECTORY(request) (request->directory)
  502. #define GFTP_GET_PORT(request) (request->port)
  503. #define GFTP_GET_PROXY_CONFIG(request) (request->proxy_config)
  504. #define GFTP_GET_PROXY_HOSTNAME(request) (request->proxy_hostname)
  505. #define GFTP_GET_PROXY_USERNAME(request) (request->proxy_username)
  506. #define GFTP_GET_PROXY_PASSWORD(request) (request->proxy_password)
  507. #define GFTP_GET_PROXY_ACCOUNT(request) (request->proxy_account)
  508. #define GFTP_GET_PROXY_PORT(request) (request->proxy_port)
  509. #define GFTP_GET_URL_PREFIX(request) (request->url_prefix)
  510. #define GFTP_GET_PROTOCOL_NAME(request) (request->protocol_name)
  511. #define GFTP_GET_LAST_RESPONSE(request) (request->last_ftp_response)
  512. #define GFTP_GET_LAST_DIRENT(request) (request->last_dir_entry)
  513. #define GFTP_GET_LAST_DIRENT_LEN(request) (request->last_dir_entry_len)
  514. #define GFTP_GET_CONTROL_FD(request) (request->sockfd)
  515. #define GFTP_GET_DATA_FD(request) (request->datafd)
  516. #define GFTP_GET_DATA_TYPE(request) (request->data_type)
  517. #define GFTP_GET_TRANSFER_TYPE(request) (request->transfer_type)
  518. #define GFTP_SET_TRANSFER_TYPE(request,val)  (request->transfer_type = (val))
  519. #define GFTP_GET_LOGGING(request) (request->logging)
  520. #define GFTP_SET_LOGGING(request, val) (request->logging = (val))
  521. #define GFTP_UNSAFE_SYMLINKS(request) (request->unsafe_symlinks)
  522. #define GFTP_FTP_NUM 0
  523. #define GFTP_HTTP_NUM 1
  524. #define GFTP_LOCAL_NUM 2
  525. #define GFTP_SSHV2_NUM 3
  526. #define GFTP_BOOKMARK_NUM 4
  527. #define GFTP_SSH_NUM 5
  528. #define GFTP_TYPE_BINARY 1
  529. #define GFTP_TYPE_ASCII 2   
  530. #define GFTP_IS_CONNECTED(request) ((request) != NULL && 
  531.                                                  ((request)->sockfd > 0 || 
  532.                                                   (request)->cached || 
  533.                                                   (request)->always_connected))
  534. void rfc959_init  ( gftp_request * request );
  535. int rfc959_get_next_file  ( gftp_request * request, 
  536.   gftp_file *fle, 
  537.   int fd );
  538. void rfc2068_init  ( gftp_request * request );
  539. void local_init  ( gftp_request * request );
  540. void ssh_init  ( gftp_request * request );
  541. void sshv2_init  ( gftp_request * request );
  542. void bookmark_init  ( gftp_request * request );
  543. gftp_request *gftp_request_new  ( void );
  544. void gftp_request_destroy  ( gftp_request * request,
  545.   int free_request );
  546. void gftp_file_destroy  ( gftp_file *file );
  547. int gftp_connect  ( gftp_request * request );
  548. void gftp_disconnect  ( gftp_request * request );
  549. off_t gftp_get_file  ( gftp_request * request, 
  550.   const char *filename, 
  551.   int fd,
  552.   size_t startsize );
  553. int gftp_put_file  ( gftp_request * request, 
  554.   const char *filename, 
  555.   int fd,
  556.   size_t startsize,
  557.   size_t totalsize );
  558. long gftp_transfer_file  ( gftp_request *fromreq, 
  559.   const char *fromfile, 
  560.   int fromfd,
  561.   size_t fromsize, 
  562.   gftp_request *toreq, 
  563.   const char *tofile, 
  564.   int tofd,
  565.   size_t tosize );
  566. ssize_t gftp_get_next_file_chunk  ( gftp_request * request, 
  567.   char *buf, 
  568.   size_t size );
  569. ssize_t gftp_put_next_file_chunk  ( gftp_request * request, 
  570.   char *buf, 
  571.   size_t size );
  572. int gftp_list_files  ( gftp_request * request );
  573. int gftp_parse_url  ( gftp_request * request, 
  574.   const char *url );
  575. int gftp_get_next_file  ( gftp_request * request, 
  576.   char *filespec,
  577.   gftp_file *fle );
  578. int gftp_end_transfer  ( gftp_request * request );
  579. int gftp_abort_transfer  ( gftp_request * request );
  580. int gftp_read_response  ( gftp_request * request );
  581. int gftp_set_data_type  ( gftp_request * request, 
  582.   int data_type );
  583. void gftp_set_hostname  ( gftp_request * request, 
  584.   const char *hostname );
  585. void gftp_set_username  ( gftp_request * request, 
  586.   const char *username );
  587. void gftp_set_password  ( gftp_request * request, 
  588.   const char *password );
  589. void gftp_set_account  ( gftp_request * request, 
  590.   const char *account );
  591. int gftp_set_directory  ( gftp_request * request, 
  592.   const char *directory );
  593. void gftp_set_port  ( gftp_request * request, 
  594.   unsigned int port );
  595. void gftp_set_proxy_hostname  ( gftp_request * request, 
  596.   const char *hostname );
  597. void gftp_set_proxy_username  ( gftp_request * request, 
  598.   const char *username );
  599. void gftp_set_proxy_password  ( gftp_request * request, 
  600.   const char *password );
  601. void gftp_set_proxy_account  ( gftp_request * request, 
  602.   const char *account );
  603. void gftp_set_proxy_port  ( gftp_request * request, 
  604.   unsigned int port );
  605. int gftp_remove_directory  ( gftp_request * request, 
  606.   const char *directory );
  607. int gftp_remove_file  ( gftp_request * request, 
  608.   const char *file );
  609. int gftp_make_directory  ( gftp_request * request, 
  610.   const char *directory );
  611. int gftp_rename_file  ( gftp_request * request, 
  612.   const char *oldname, 
  613.   const char *newname );
  614. int gftp_chmod  ( gftp_request * request, 
  615.   const char *file, 
  616.   int mode );
  617. int gftp_set_file_time  ( gftp_request * request, 
  618.   const char *file, 
  619.   time_t datetime );
  620. char gftp_site_cmd  ( gftp_request * request, 
  621.   const char *command );
  622. void gftp_set_proxy_config  ( gftp_request * request, 
  623.   const char *proxy_config );
  624. off_t gftp_get_file_size  ( gftp_request * request, 
  625.   const char *filename );
  626. int gftp_need_proxy  ( gftp_request * request,
  627.   char *service );
  628. char *gftp_convert_ascii  ( char *buf, 
  629.   ssize_t *len, 
  630.   int direction );
  631. void gftp_calc_kbs  ( gftp_transfer * tdata, 
  632.     ssize_t num_read );
  633. int gftp_parse_ls  ( const char *lsoutput, 
  634.   gftp_file *fle );
  635. int gftp_get_all_subdirs  ( gftp_transfer * transfer, 
  636.   void (*update_func) 
  637. ( gftp_transfer * transfer ));
  638. int gftp_get_file_transfer_mode  ( char *filename,
  639.   int def );
  640. int gftp_connect_server  ( gftp_request * request, 
  641.   char *service );
  642. void gftp_set_sftpserv_path ( gftp_request * request,
  643.   char *path );
  644. #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
  645. int get_port  ( struct addrinfo *addr );
  646. #else
  647. struct hostent *r_gethostbyname  ( const char *name, 
  648.   struct hostent *result_buf, 
  649.   int *h_errnop );
  650. #endif
  651. struct servent *r_getservbyname  ( const char *name, 
  652.   const char *proto,
  653.   struct servent *result_buf, 
  654.   int *h_errnop );
  655. void gftp_set_config_options  ( gftp_request * request );
  656. void print_file_list  ( GList * list );
  657. ssize_t gftp_get_line  ( gftp_request * request, 
  658.   gftp_getline_buffer ** rbuf,
  659.   char * str, 
  660.   size_t len, 
  661.   int fd );
  662. ssize_t gftp_read  ( gftp_request * request, 
  663.   void *ptr, 
  664.   size_t size, 
  665.   int fd );
  666. ssize_t gftp_write  ( gftp_request * request, 
  667.   const char *ptr, 
  668.   size_t size, 
  669.   int fd );
  670. ssize_t gftp_writefmt  ( gftp_request * request, 
  671.   int fd, 
  672.   const char *fmt, 
  673.   ... );
  674. int gftp_set_sockblocking  ( gftp_request * request, 
  675.   int fd, 
  676.   int non_blocking );
  677. void gftp_swap_socks  ( gftp_request * dest, 
  678.   gftp_request * source );
  679. #endif