Annotation of embedaddon/php/ext/ftp/ftp.h, revision 1.1.1.5

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
1.1.1.5 ! misho       5:    | Copyright (c) 1997-2014 The PHP Group                                |
1.1       misho       6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 3.01 of the PHP license,      |
                      8:    | that is bundled with this package in the file LICENSE, and is        |
                      9:    | available through the world-wide-web at the following url:           |
                     10:    | http://www.php.net/license/3_01.txt                                  |
                     11:    | If you did not receive a copy of the PHP license and are unable to   |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@php.net so we can mail you a copy immediately.               |
                     14:    +----------------------------------------------------------------------+
                     15:    | Authors: Andrew Skalski <askalski@chek.com>                          |
                     16:    |          Stefan Esser <sesser@php.net> (resume functions)            |
                     17:    +----------------------------------------------------------------------+
                     18:  */
                     19: 
1.1.1.2   misho      20: /* $Id$ */
1.1       misho      21: 
                     22: #ifndef        FTP_H
                     23: #define        FTP_H
                     24: 
                     25: #include "php_network.h"
                     26: 
                     27: #include <stdio.h>
                     28: #ifdef HAVE_NETINET_IN_H
                     29: #include <netinet/in.h>
                     30: #endif
                     31: 
                     32: #define        FTP_DEFAULT_TIMEOUT     90
                     33: #define FTP_DEFAULT_AUTOSEEK 1
                     34: #define PHP_FTP_FAILED                 0
                     35: #define PHP_FTP_FINISHED               1
                     36: #define PHP_FTP_MOREDATA               2
                     37: 
                     38: /* XXX this should be configurable at runtime XXX */
                     39: #define        FTP_BUFSIZE     4096
                     40: 
                     41: typedef enum ftptype {
                     42:        FTPTYPE_ASCII=1,
                     43:        FTPTYPE_IMAGE
                     44: } ftptype_t;
                     45: 
                     46: typedef struct databuf
                     47: {
                     48:        int             listener;               /* listener socket */
                     49:        php_socket_t            fd;                     /* data connection */
                     50:        ftptype_t       type;                   /* transfer type */
                     51:        char            buf[FTP_BUFSIZE];       /* data buffer */
                     52: #if HAVE_OPENSSL_EXT
                     53:        SSL             *ssl_handle;    /* ssl handle */
                     54:        int             ssl_active;             /* flag if ssl is active or not */
                     55: #endif
                     56: } databuf_t;
                     57: 
                     58: typedef struct ftpbuf
                     59: {
                     60:        php_socket_t            fd;                     /* control connection */
                     61:        php_sockaddr_storage    localaddr;      /* local address */
                     62:        int             resp;                   /* last response code */
                     63:        char            inbuf[FTP_BUFSIZE];     /* last response text */
                     64:        char            *extra;                 /* extra characters */
                     65:        int             extralen;               /* number of extra chars */
                     66:        char            outbuf[FTP_BUFSIZE];    /* command output buffer */
                     67:        char            *pwd;                   /* cached pwd */
                     68:        char            *syst;                  /* cached system type */
                     69:        ftptype_t       type;                   /* current transfer type */
                     70:        int             pasv;                   /* 0=off; 1=pasv; 2=ready */
                     71:        php_sockaddr_storage    pasvaddr;       /* passive mode address */
                     72:        long    timeout_sec;    /* User configureable timeout (seconds) */
                     73:        int                     autoseek;       /* User configureable autoseek flag */
                     74: 
                     75:        int                             nb;             /* "nonblocking" transfer in progress */
                     76:        databuf_t               *data;  /* Data connection for "nonblocking" transfers */
                     77:        php_stream              *stream; /* output stream for "nonblocking" transfers */
                     78:        int                             lastch;         /* last char of previous call */
                     79:        int                             direction;      /* recv = 0 / send = 1 */
                     80:        int                             closestream;/* close or not close stream */
                     81: #if HAVE_OPENSSL_EXT
                     82:        int                             use_ssl; /* enable(1) or disable(0) ssl */
                     83:        int                             use_ssl_for_data; /* en/disable ssl for the dataconnection */
                     84:        int                             old_ssl;        /* old mode = forced data encryption */
                     85:        SSL                             *ssl_handle;      /* handle for control connection */
                     86:        int                             ssl_active;               /* ssl active on control conn */
                     87: #endif
                     88: 
                     89: } ftpbuf_t;
                     90: 
                     91: 
                     92: 
                     93: /* open a FTP connection, returns ftpbuf (NULL on error)
                     94:  * port is the ftp port in network byte order, or 0 for the default
                     95:  */
                     96: ftpbuf_t*      ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC);
                     97: 
                     98: /* quits from the ftp session (it still needs to be closed)
                     99:  * return true on success, false on error
                    100:  */
                    101: int            ftp_quit(ftpbuf_t *ftp);
                    102: 
                    103: /* frees up any cached data held in the ftp buffer */
                    104: void           ftp_gc(ftpbuf_t *ftp);
                    105: 
                    106: /* close the FTP connection and return NULL */
                    107: ftpbuf_t*      ftp_close(ftpbuf_t *ftp);
                    108: 
                    109: /* logs into the FTP server, returns true on success, false on error */
                    110: int            ftp_login(ftpbuf_t *ftp, const char *user, const char *pass TSRMLS_DC);
                    111: 
                    112: /* reinitializes the connection, returns true on success, false on error */
                    113: int            ftp_reinit(ftpbuf_t *ftp);
                    114: 
                    115: /* returns the remote system type (NULL on error) */
                    116: const char*    ftp_syst(ftpbuf_t *ftp);
                    117: 
                    118: /* returns the present working directory (NULL on error) */
                    119: const char*    ftp_pwd(ftpbuf_t *ftp);
                    120: 
                    121: /* exec a command [special features], return true on success, false on error */
                    122: int    ftp_exec(ftpbuf_t *ftp, const char *cmd);
                    123: 
                    124: /* send a raw ftp command, return response as a hashtable, NULL on error */
                    125: void   ftp_raw(ftpbuf_t *ftp, const char *cmd, zval *return_value);
                    126: 
                    127: /* changes directories, return true on success, false on error */
                    128: int            ftp_chdir(ftpbuf_t *ftp, const char *dir);
                    129: 
                    130: /* changes to parent directory, return true on success, false on error */
                    131: int            ftp_cdup(ftpbuf_t *ftp);
                    132: 
                    133: /* creates a directory, return the directory name on success, NULL on error.
                    134:  * the return value must be freed
                    135:  */
                    136: char*          ftp_mkdir(ftpbuf_t *ftp, const char *dir);
                    137: 
                    138: /* removes a directory, return true on success, false on error */
                    139: int            ftp_rmdir(ftpbuf_t *ftp, const char *dir);
                    140: 
                    141: /* Set permissions on a file */
                    142: int            ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const int filename_len);
                    143: 
                    144: /* Allocate space on remote server with ALLO command
                    145:  * Many servers will respond with 202 Allocation not necessary,
                    146:  * however some servers will not accept STOR or APPE until ALLO is confirmed. 
                    147:  * If response is passed, it is estrdup()ed from ftp->inbuf and must be freed
                    148:  * or assigned to a zval returned to the user */
1.1.1.4   misho     149: int            ftp_alloc(ftpbuf_t *ftp, const long size, char **response);
1.1       misho     150: 
                    151: /* returns a NULL-terminated array of filenames in the given path
                    152:  * or NULL on error.  the return array must be freed (but don't
                    153:  * free the array elements)
                    154:  */
                    155: char**         ftp_nlist(ftpbuf_t *ftp, const char *path TSRMLS_DC);
                    156: 
                    157: /* returns a NULL-terminated array of lines returned by the ftp
                    158:  * LIST command for the given path or NULL on error.  the return
                    159:  * array must be freed (but don't
                    160:  * free the array elements)
                    161:  */
                    162: char**         ftp_list(ftpbuf_t *ftp, const char *path, int recursive TSRMLS_DC);
                    163: 
                    164: /* switches passive mode on or off
                    165:  * returns true on success, false on error
                    166:  */
                    167: int            ftp_pasv(ftpbuf_t *ftp, int pasv);
                    168: 
                    169: /* retrieves a file and saves its contents to outfp
                    170:  * returns true on success, false on error
                    171:  */
1.1.1.4   misho     172: int            ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, long resumepos TSRMLS_DC);
1.1       misho     173: 
                    174: /* stores the data from a file, socket, or process as a file on the remote server
                    175:  * returns true on success, false on error
                    176:  */
1.1.1.4   misho     177: int            ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, long startpos TSRMLS_DC);
1.1       misho     178: 
                    179: /* returns the size of the given file, or -1 on error */
1.1.1.4   misho     180: long           ftp_size(ftpbuf_t *ftp, const char *path);
1.1       misho     181: 
                    182: /* returns the last modified time of the given file, or -1 on error */
                    183: time_t         ftp_mdtm(ftpbuf_t *ftp, const char *path);
                    184: 
                    185: /* renames a file on the server */
                    186: int            ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest);
                    187: 
                    188: /* deletes the file from the server */
                    189: int            ftp_delete(ftpbuf_t *ftp, const char *path);
                    190: 
                    191: /* sends a SITE command to the server */
                    192: int            ftp_site(ftpbuf_t *ftp, const char *cmd);
                    193: 
                    194: /* retrieves part of a file and saves its contents to outfp
                    195:  * returns true on success, false on error
                    196:  */
1.1.1.4   misho     197: int            ftp_nb_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, long resumepos TSRMLS_DC);
1.1       misho     198: 
                    199: /* stores the data from a file, socket, or process as a file on the remote server
                    200:  * returns true on success, false on error
                    201:  */
1.1.1.4   misho     202: int            ftp_nb_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, long startpos TSRMLS_DC);
1.1       misho     203: 
                    204: /* continues a previous nb_(f)get command
                    205:  */
                    206: int            ftp_nb_continue_read(ftpbuf_t *ftp TSRMLS_DC);
                    207: 
                    208: /* continues a previous nb_(f)put command
                    209:  */
                    210: int            ftp_nb_continue_write(ftpbuf_t *ftp TSRMLS_DC);
                    211: 
                    212: 
                    213: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>