Annotation of embedaddon/php/ext/ftp/ftp.h, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 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:
! 20: /* $Id: ftp.h 321634 2012-01-01 13:15:04Z felipe $ */
! 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 */
! 149: int ftp_alloc(ftpbuf_t *ftp, const int size, char **response);
! 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: */
! 172: int ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC);
! 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: */
! 177: int ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC);
! 178:
! 179: /* returns the size of the given file, or -1 on error */
! 180: int ftp_size(ftpbuf_t *ftp, const char *path);
! 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: */
! 197: int ftp_nb_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC);
! 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: */
! 202: int ftp_nb_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC);
! 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>