pollita         Thu Sep 18 13:36:08 2003 EDT

  Modified files:              
    /php-src/ext/ftp    ftp.c ftp.h php_ftp.c php_ftp.h 
  Log:
  Add ftp_alloc() for servers which require client to predeclare filesize to be sent.
  
Index: php-src/ext/ftp/ftp.c
diff -u php-src/ext/ftp/ftp.c:1.91 php-src/ext/ftp/ftp.c:1.92
--- php-src/ext/ftp/ftp.c:1.91  Tue Sep  9 17:12:49 2003
+++ php-src/ext/ftp/ftp.c       Thu Sep 18 13:36:08 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ftp.c,v 1.91 2003/09/09 21:12:49 pollita Exp $ */
+/* $Id: ftp.c,v 1.92 2003/09/18 17:36:08 pollita Exp $ */
 
 #include "php.h"
 
@@ -605,6 +605,38 @@
 }
 /* }}} */
 
+/* {{{ ftp_alloc
+ */
+int
+ftp_alloc(ftpbuf_t *ftp, const int size, char **response)
+{
+       char buffer[64];
+
+       if (ftp == NULL || size <= 0) {
+               return 0;
+       }
+
+       snprintf(buffer, 64, "%d", size);
+
+       if (!ftp_putcmd(ftp, "ALLO", buffer)) {
+               return 0;
+       }
+
+       if (!ftp_getresp(ftp)) {
+               return 0;
+       }
+
+       if (response && ftp->inbuf) {
+               *response = estrdup(ftp->inbuf);
+       }
+
+       if (ftp->resp < 200 || ftp->resp >= 300) {
+               return 0;
+       }
+
+       return 1;       
+}
+/* }}} */
 
 /* {{{ ftp_nlist
  */
Index: php-src/ext/ftp/ftp.h
diff -u php-src/ext/ftp/ftp.h:1.39 php-src/ext/ftp/ftp.h:1.40
--- php-src/ext/ftp/ftp.h:1.39  Fri Jun 27 12:41:41 2003
+++ php-src/ext/ftp/ftp.h       Thu Sep 18 13:36:08 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ftp.h,v 1.39 2003/06/27 16:41:41 sniper Exp $ */
+/* $Id: ftp.h,v 1.40 2003/09/18 17:36:08 pollita Exp $ */
 
 #ifndef        FTP_H
 #define        FTP_H
@@ -140,6 +140,13 @@
 
 /* Set permissions on a file */
 int            ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const 
int filename_len);
+
+/* Allocate space on remote server with ALLO command
+ * Many servers will respond with 202 Allocation not necessary,
+ * however some servers will not accept STOR or APPE until ALLO is confirmed. 
+ * If response is passed, it is estrdup()ed from ftp->inbuf and must be freed
+ * or assigned to a zval returned to the user */
+int            ftp_alloc(ftpbuf_t *ftp, const int size, char **response);
 
 /* returns a NULL-terminated array of filenames in the given path
  * or NULL on error.  the return array must be freed (but don't
Index: php-src/ext/ftp/php_ftp.c
diff -u php-src/ext/ftp/php_ftp.c:1.95 php-src/ext/ftp/php_ftp.c:1.96
--- php-src/ext/ftp/php_ftp.c:1.95      Mon Sep  8 18:40:12 2003
+++ php-src/ext/ftp/php_ftp.c   Thu Sep 18 13:36:08 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ftp.c,v 1.95 2003/09/08 22:40:12 pollita Exp $ */
+/* $Id: php_ftp.c,v 1.96 2003/09/18 17:36:08 pollita Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -50,6 +50,13 @@
 static int     le_ftpbuf;
 #define le_ftpbuf_name "FTP Buffer"
 
+static
+    ZEND_BEGIN_ARG_INFO(third_and_rest_force_ref, 1)
+        ZEND_ARG_PASS_INFO(0)
+        ZEND_ARG_PASS_INFO(0)
+        ZEND_ARG_PASS_INFO(1)
+    ZEND_END_ARG_INFO()
+
 function_entry php_ftp_functions[] = {
        PHP_FE(ftp_connect,                     NULL)
 #ifdef HAVE_OPENSSL_EXT
@@ -64,6 +71,7 @@
        PHP_FE(ftp_mkdir,                       NULL)
        PHP_FE(ftp_rmdir,                       NULL)
        PHP_FE(ftp_chmod,                       NULL)
+       PHP_FE(ftp_alloc,                       third_and_rest_force_ref)
        PHP_FE(ftp_nlist,                       NULL)
        PHP_FE(ftp_rawlist,                     NULL)
        PHP_FE(ftp_systype,                     NULL)
@@ -427,6 +435,35 @@
        }
 
        RETURN_LONG(mode);
+}
+/* }}} */
+
+/* {{{ proto bool ftp_alloc(resource stream, int size[, &response])
+   Attempt to allocate space on the remote FTP server */
+PHP_FUNCTION(ftp_alloc)
+{
+       zval            *z_ftp, *zresponse = NULL;
+       ftpbuf_t        *ftp;
+       int                     size, ret;
+       char            *response = NULL;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &z_ftp, &size, 
&zresponse) == FAILURE) {
+               RETURN_FALSE;
+       }
+
+       ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
+
+       ret = ftp_alloc(ftp, size, zresponse ? &response : NULL);
+       if (response) {
+               zval_dtor(zresponse);
+               ZVAL_STRING(zresponse, response, 0);
+       }
+
+       if (!ret) {
+               RETURN_FALSE;
+       }
+
+       RETURN_TRUE;
 }
 /* }}} */
 
Index: php-src/ext/ftp/php_ftp.h
diff -u php-src/ext/ftp/php_ftp.h:1.26 php-src/ext/ftp/php_ftp.h:1.27
--- php-src/ext/ftp/php_ftp.h:1.26      Fri Jun 27 12:41:41 2003
+++ php-src/ext/ftp/php_ftp.h   Thu Sep 18 13:36:08 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ftp.h,v 1.26 2003/06/27 16:41:41 sniper Exp $ */
+/* $Id: php_ftp.h,v 1.27 2003/09/18 17:36:08 pollita Exp $ */
 
 #ifndef        _INCLUDED_FTP_H
 #define        _INCLUDED_FTP_H
@@ -47,6 +47,7 @@
 PHP_FUNCTION(ftp_mkdir);
 PHP_FUNCTION(ftp_rmdir);
 PHP_FUNCTION(ftp_chmod);
+PHP_FUNCTION(ftp_alloc);
 PHP_FUNCTION(ftp_nlist);
 PHP_FUNCTION(ftp_rawlist);
 PHP_FUNCTION(ftp_systype);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to