root/ext/curl/curl_file.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. curlfile_ctor
  2. ZEND_METHOD
  3. PHP_FUNCTION
  4. curlfile_get_property
  5. curlfile_set_property
  6. ZEND_METHOD
  7. ZEND_METHOD
  8. ZEND_METHOD
  9. ZEND_METHOD
  10. ZEND_METHOD
  11. ZEND_METHOD
  12. curlfile_register_class

   1 /*
   2    +----------------------------------------------------------------------+
   3    | PHP Version 7                                                        |
   4    +----------------------------------------------------------------------+
   5    | Copyright (c) 1997-2016 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    | Author: Stanislav Malyshev <stas@php.net>                            |
  16    +----------------------------------------------------------------------+
  17  */
  18 
  19 /* $Id$ */
  20 
  21 #ifdef HAVE_CONFIG_H
  22 # include "config.h"
  23 #endif
  24 
  25 #include "php.h"
  26 #include "Zend/zend_exceptions.h"
  27 #include "php_curl.h"
  28 #if HAVE_CURL
  29 
  30 PHP_CURL_API zend_class_entry *curl_CURLFile_class;
  31 
  32 static void curlfile_ctor(INTERNAL_FUNCTION_PARAMETERS)
  33 {
  34         char *fname = NULL, *mime = NULL, *postname = NULL;
  35         size_t fname_len, mime_len, postname_len;
  36         zval *cf = return_value;
  37 
  38         if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|ss", &fname, &fname_len, &mime, &mime_len, &postname, &postname_len) == FAILURE) {
  39                 return;
  40         }
  41 
  42         if (fname) {
  43                 zend_update_property_string(curl_CURLFile_class, cf, "name", sizeof("name")-1, fname);
  44         }
  45 
  46         if (mime) {
  47                 zend_update_property_string(curl_CURLFile_class, cf, "mime", sizeof("mime")-1, mime);
  48         }
  49 
  50         if (postname) {
  51                 zend_update_property_string(curl_CURLFile_class, cf, "postname", sizeof("postname")-1, postname);
  52         }
  53 }
  54 
  55 /* {{{ proto void CURLFile::__construct(string $name, [string $mimetype [, string $postfilename]])
  56    Create the CURLFile object */
  57 ZEND_METHOD(CURLFile, __construct)
  58 {
  59         return_value = getThis();
  60         curlfile_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
  61 }
  62 /* }}} */
  63 
  64 /* {{{ proto CURLFile curl_file_create(string $name, [string $mimetype [, string $postfilename]])
  65    Create the CURLFile object */
  66 PHP_FUNCTION(curl_file_create)
  67 {
  68     object_init_ex( return_value, curl_CURLFile_class );
  69     curlfile_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
  70 }
  71 /* }}} */
  72 
  73 static void curlfile_get_property(char *name, INTERNAL_FUNCTION_PARAMETERS)
  74 {
  75         zval *res, rv;
  76 
  77         if (zend_parse_parameters_none() == FAILURE) {
  78                 return;
  79         }
  80         res = zend_read_property(curl_CURLFile_class, getThis(), name, strlen(name), 1, &rv);
  81         ZVAL_DEREF(res);
  82         ZVAL_COPY(return_value, res);
  83 }
  84 
  85 static void curlfile_set_property(char *name, INTERNAL_FUNCTION_PARAMETERS)
  86 {
  87         char *arg = NULL;
  88         size_t arg_len;
  89 
  90         if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) {
  91                 return;
  92         }
  93         zend_update_property_string(curl_CURLFile_class, getThis(), name, strlen(name), arg);
  94 }
  95 
  96 /* {{{ proto string CURLFile::getFilename()
  97    Get file name */
  98 ZEND_METHOD(CURLFile, getFilename)
  99 {
 100         curlfile_get_property("name", INTERNAL_FUNCTION_PARAM_PASSTHRU);
 101 }
 102 /* }}} */
 103 
 104 /* {{{ proto string CURLFile::getMimeType()
 105    Get MIME type */
 106 ZEND_METHOD(CURLFile, getMimeType)
 107 {
 108         curlfile_get_property("mime", INTERNAL_FUNCTION_PARAM_PASSTHRU);
 109 }
 110 /* }}} */
 111 
 112 /* {{{ proto string CURLFile::getPostFilename()
 113    Get file name for POST */
 114 ZEND_METHOD(CURLFile, getPostFilename)
 115 {
 116         curlfile_get_property("postname", INTERNAL_FUNCTION_PARAM_PASSTHRU);
 117 }
 118 /* }}} */
 119 
 120 /* {{{ proto void CURLFile::setMimeType(string $mime)
 121    Set MIME type */
 122 ZEND_METHOD(CURLFile, setMimeType)
 123 {
 124         curlfile_set_property("mime", INTERNAL_FUNCTION_PARAM_PASSTHRU);
 125 }
 126 /* }}} */
 127 
 128 /* {{{ proto void CURLFile::setPostFilename(string $name)
 129    Set file name for POST */
 130 ZEND_METHOD(CURLFile, setPostFilename)
 131 {
 132         curlfile_set_property("postname", INTERNAL_FUNCTION_PARAM_PASSTHRU);
 133 }
 134 /* }}} */
 135 
 136 /* {{{ proto void CURLFile::__wakeup()
 137    Unserialization handler */
 138 ZEND_METHOD(CURLFile, __wakeup)
 139 {
 140         zend_update_property_string(curl_CURLFile_class, getThis(), "name", sizeof("name")-1, "");
 141         zend_throw_exception(NULL, "Unserialization of CURLFile instances is not allowed", 0);
 142 }
 143 /* }}} */
 144 
 145 ZEND_BEGIN_ARG_INFO_EX(arginfo_curlfile_create, 0, 0, 1)
 146         ZEND_ARG_INFO(0, filename)
 147         ZEND_ARG_INFO(0, mimetype)
 148         ZEND_ARG_INFO(0, postname)
 149 ZEND_END_ARG_INFO()
 150 
 151 ZEND_BEGIN_ARG_INFO(arginfo_curlfile_name, 0)
 152         ZEND_ARG_INFO(0, name)
 153 ZEND_END_ARG_INFO()
 154 
 155 
 156 static const zend_function_entry curlfile_funcs[] = {
 157         PHP_ME(CURLFile,                        __construct,        arginfo_curlfile_create, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC)
 158         PHP_ME(CURLFile,                        getFilename,        NULL, ZEND_ACC_PUBLIC)
 159         PHP_ME(CURLFile,                        getMimeType,        NULL, ZEND_ACC_PUBLIC)
 160         PHP_ME(CURLFile,                        setMimeType,        arginfo_curlfile_name, ZEND_ACC_PUBLIC)
 161         PHP_ME(CURLFile,                        getPostFilename,    NULL, ZEND_ACC_PUBLIC)
 162         PHP_ME(CURLFile,                        setPostFilename,    arginfo_curlfile_name, ZEND_ACC_PUBLIC)
 163         PHP_ME(CURLFile,            __wakeup,           NULL, ZEND_ACC_PUBLIC)
 164         PHP_FE_END
 165 };
 166 
 167 void curlfile_register_class(void)
 168 {
 169         zend_class_entry ce;
 170         INIT_CLASS_ENTRY( ce, "CURLFile", curlfile_funcs );
 171         curl_CURLFile_class = zend_register_internal_class(&ce);
 172         zend_declare_property_string(curl_CURLFile_class, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC);
 173         zend_declare_property_string(curl_CURLFile_class, "mime", sizeof("mime")-1, "", ZEND_ACC_PUBLIC);
 174         zend_declare_property_string(curl_CURLFile_class, "postname", sizeof("postname")-1, "", ZEND_ACC_PUBLIC);
 175 }
 176 
 177 #endif

/* [<][>][^][v][top][bottom][index][help] */