summaryrefslogtreecommitdiff
path: root/ext/imap/php_imap.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-08-07 16:18:05 +0000
committerfoobar <sniper@php.net>2001-08-07 16:18:05 +0000
commite17f384ee78ef75de3cb8adce7ef211815fa41b8 (patch)
tree4a343e8d502f2cdd9f48d6909a374ef83470db2d /ext/imap/php_imap.c
parent27fcd0509a6a06eb64cbce3eb3a9a59f0b3bfd54 (diff)
downloadphp-git-e17f384ee78ef75de3cb8adce7ef211815fa41b8.tar.gz
Beutifying. Also made a check for IMAP-2001.
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r--ext/imap/php_imap.c745
1 files changed, 389 insertions, 356 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index 51cbbc5190..5006ad3ab0 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -45,12 +45,11 @@
#endif
#include "php_imap.h"
-ZEND_DECLARE_MODULE_GLOBALS(imap)
-
#include <time.h>
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
+
#ifdef PHP_WIN32
#include "winsock.h"
MAILSTREAM DEFAULTPROTO;
@@ -63,7 +62,6 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en);
static void _php_imap_add_body(zval *arg, BODY *body);
static void _php_imap_parse_address(ADDRESS *addresslist, char *fulladdress, zval *paddress);
-
/* These function declarations are missing from the IMAP header files... */
void rfc822_date(char *date);
char *cpystr(const char *str);
@@ -72,112 +70,116 @@ long utf8_mime2text(SIZEDTEXT *src, SIZEDTEXT *dst);
unsigned long find_rightmost_bit(unsigned long *valptr);
void fs_give(void **block);
void *fs_get(size_t size);
-int imap_mail(char *to, char *subject, char *message, char *headers, char *cc, char *bcc, char *rpath);
-void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#ifdef OP_RELOGIN
-/* AJS: close persistent connection */
-void mail_userlogout_it(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-void mail_nuke_chain(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#endif
-
/* {{{ imap_functions[]
*/
function_entry imap_functions[] = {
- PHP_FE(imap_open, NULL)
- PHP_FE(imap_popen, NULL)
- PHP_FE(imap_reopen, NULL)
- PHP_FE(imap_num_msg, NULL)
- PHP_FE(imap_num_recent, NULL)
- PHP_FE(imap_headers, NULL)
- PHP_FALIAS(imap_header, imap_headerinfo, NULL)
- PHP_FE(imap_headerinfo, NULL)
- PHP_FE(imap_rfc822_parse_headers, NULL)
- PHP_FE(imap_body, NULL)
- PHP_FE(imap_fetchstructure, NULL)
- PHP_FE(imap_fetchbody, NULL)
- PHP_FE(imap_expunge, NULL)
- PHP_FE(imap_delete, NULL)
- PHP_FE(imap_undelete, NULL)
- PHP_FE(imap_check, NULL)
- PHP_FE(imap_close, NULL)
- PHP_FE(imap_mail_copy, NULL)
- PHP_FE(imap_mail_move, NULL)
- PHP_FE(imap_createmailbox, NULL)
- PHP_FE(imap_renamemailbox, NULL)
- PHP_FE(imap_deletemailbox, NULL)
-#ifdef HAVE_IMAP2000
- PHP_FE(imap_get_quota, NULL)
- PHP_FE(imap_set_quota, NULL)
+ PHP_FE(imap_open, NULL)
+ PHP_FE(imap_popen, NULL)
+ PHP_FE(imap_reopen, NULL)
+ PHP_FE(imap_close, NULL)
+ PHP_FE(imap_num_msg, NULL)
+ PHP_FE(imap_num_recent, NULL)
+ PHP_FE(imap_headers, NULL)
+ PHP_FE(imap_headerinfo, NULL)
+ PHP_FE(imap_rfc822_parse_headers, NULL)
+ PHP_FE(imap_rfc822_write_address, NULL)
+ PHP_FE(imap_rfc822_parse_adrlist, NULL)
+ PHP_FE(imap_body, NULL)
+ PHP_FE(imap_bodystruct, NULL)
+ PHP_FE(imap_fetchbody, NULL)
+ PHP_FE(imap_fetchheader, NULL)
+ PHP_FE(imap_fetchstructure, NULL)
+ PHP_FE(imap_expunge, NULL)
+ PHP_FE(imap_delete, NULL)
+ PHP_FE(imap_undelete, NULL)
+ PHP_FE(imap_check, NULL)
+ PHP_FE(imap_mail_copy, NULL)
+ PHP_FE(imap_mail_move, NULL)
+ PHP_FE(imap_mail_compose, NULL)
+ PHP_FE(imap_createmailbox, NULL)
+ PHP_FE(imap_renamemailbox, NULL)
+ PHP_FE(imap_deletemailbox, NULL)
+ PHP_FE(imap_subscribe, NULL)
+ PHP_FE(imap_unsubscribe, NULL)
+ PHP_FE(imap_append, NULL)
+ PHP_FE(imap_ping, NULL)
+ PHP_FE(imap_base64, NULL)
+ PHP_FE(imap_qprint, NULL)
+ PHP_FE(imap_8bit, NULL)
+ PHP_FE(imap_binary, NULL)
+ PHP_FE(imap_utf8, NULL)
+ PHP_FE(imap_status, NULL)
+ PHP_FE(imap_mailboxmsginfo, NULL)
+ PHP_FE(imap_setflag_full, NULL)
+ PHP_FE(imap_clearflag_full, NULL)
+ PHP_FE(imap_sort, NULL)
+ PHP_FE(imap_uid, NULL)
+ PHP_FE(imap_msgno, NULL)
+ PHP_FE(imap_list, NULL)
+ PHP_FE(imap_lsub, NULL)
+ PHP_FE(imap_fetch_overview, NULL)
+ PHP_FE(imap_alerts, NULL)
+ PHP_FE(imap_errors, NULL)
+ PHP_FE(imap_last_error, NULL)
+ PHP_FE(imap_search, NULL)
+ PHP_FE(imap_utf7_decode, NULL)
+ PHP_FE(imap_utf7_encode, NULL)
+ PHP_FE(imap_mime_header_decode, NULL)
+ PHP_FE(imap_thread, NULL)
+
+#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
+ PHP_FE(imap_get_quota, NULL)
+ PHP_FE(imap_set_quota, NULL)
#endif
- PHP_FALIAS(imap_listmailbox, imap_list, NULL)
- PHP_FALIAS(imap_getmailboxes, imap_list_full, NULL)
- PHP_FALIAS(imap_scanmailbox, imap_listscan, NULL)
- PHP_FALIAS(imap_listsubscribed, imap_lsub, NULL)
- PHP_FALIAS(imap_getsubscribed, imap_lsub_full, NULL)
- PHP_FE(imap_subscribe, NULL)
- PHP_FE(imap_unsubscribe, NULL)
- PHP_FE(imap_append, NULL)
- PHP_FE(imap_ping, NULL)
- PHP_FE(imap_base64, NULL)
- PHP_FE(imap_qprint, NULL)
- PHP_FE(imap_8bit, NULL)
- PHP_FE(imap_binary, NULL)
- PHP_FE(imap_mailboxmsginfo, NULL)
- PHP_FE(imap_rfc822_write_address, NULL)
- PHP_FE(imap_rfc822_parse_adrlist, NULL)
- PHP_FE(imap_setflag_full, NULL)
- PHP_FE(imap_clearflag_full, NULL)
- PHP_FE(imap_sort, NULL)
- PHP_FE(imap_fetchheader, NULL)
- PHP_FALIAS(imap_fetchtext, imap_body, NULL)
- PHP_FE(imap_uid, NULL)
- PHP_FE(imap_msgno, NULL)
- PHP_FE(imap_list, NULL)
- PHP_FALIAS(imap_scan, imap_listscan, NULL)
- PHP_FE(imap_lsub, NULL)
- PHP_FALIAS(imap_create, imap_createmailbox, NULL)
- PHP_FALIAS(imap_rename, imap_renamemailbox, NULL)
- PHP_FE(imap_status, NULL)
- PHP_FE(imap_bodystruct, NULL)
- PHP_FE(imap_fetch_overview, NULL)
- PHP_FE(imap_mail_compose, NULL)
- PHP_FE(imap_alerts, NULL)
- PHP_FE(imap_errors, NULL)
- PHP_FE(imap_last_error, NULL)
+
#ifndef PHP_WIN32
- PHP_FE(imap_mail, NULL)
+ PHP_FE(imap_mail, NULL)
#else
- PHP_FALIAS(imap_mail, warn_not_available, NULL)
+ PHP_FALIAS(imap_mail, warn_not_available, NULL)
#endif
- PHP_FE(imap_search, NULL)
- PHP_FE(imap_utf7_decode, NULL)
- PHP_FE(imap_utf7_encode, NULL)
- PHP_FE(imap_utf8, NULL)
- PHP_FE(imap_mime_header_decode, NULL)
- PHP_FE(imap_thread, NULL)
+
+ PHP_FALIAS(imap_header, imap_headerinfo, NULL)
+ PHP_FALIAS(imap_listmailbox, imap_list, NULL)
+ PHP_FALIAS(imap_getmailboxes, imap_list_full, NULL)
+ PHP_FALIAS(imap_scanmailbox, imap_listscan, NULL)
+ PHP_FALIAS(imap_listsubscribed, imap_lsub, NULL)
+ PHP_FALIAS(imap_getsubscribed, imap_lsub_full, NULL)
+ PHP_FALIAS(imap_fetchtext, imap_body, NULL)
+ PHP_FALIAS(imap_scan, imap_listscan, NULL)
+ PHP_FALIAS(imap_create, imap_createmailbox, NULL)
+ PHP_FALIAS(imap_rename, imap_renamemailbox, NULL)
{NULL, NULL, NULL}
};
/* }}} */
+/* {{{ imap_module_entry
+ */
+zend_module_entry imap_module_entry = {
+ "imap",
+ imap_functions,
+ PHP_MINIT(imap),
+ NULL, PHP_RINIT(imap),
+ PHP_RSHUTDOWN(imap),
+ PHP_MINFO(imap),
+ STANDARD_MODULE_PROPERTIES
+};
+/* }}} */
+
#ifdef OP_RELOGIN
#define IS_STREAM(ind_type) ((ind_type)==le_imap || (ind_type)==le_pimap)
#else
#define IS_STREAM(ind_type) ((ind_type)==le_imap)
#endif
-
-zend_module_entry imap_module_entry = {
- "imap", imap_functions, PHP_MINIT(imap), NULL, PHP_RINIT(imap), PHP_RSHUTDOWN(imap), PHP_MINFO(imap), STANDARD_MODULE_PROPERTIES
-};
-
+ZEND_DECLARE_MODULE_GLOBALS(imap)
#ifdef COMPILE_DL_IMAP
ZEND_GET_MODULE(imap)
#endif
-
+/* True globals, no need for thread safety */
static int le_imap;
#ifdef OP_RELOGIN
/* AJS: persistent connection type, chain pointer type */
@@ -185,8 +187,9 @@ static int le_pimap;
static int le_pimapchain;
#endif
-
-void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+/* {{{ mail_close_it
+ */
+static void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
pils *imap_le_struct = (pils *)rsrc->ptr;
@@ -203,10 +206,14 @@ void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
efree(imap_le_struct);
}
+/* }}} */
+
#ifdef OP_RELOGIN
+/* {{{ mail_userlogout_it
+ */
/* AJS: stream close functions for persistent connections */
-void mail_userlogout_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void mail_userlogout_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
pils *imap_le_struct = (pils *)rsrc->ptr;
@@ -217,8 +224,11 @@ void mail_userlogout_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
imap_le_struct->busy = 0;
mail_close_full(imap_le_struct->imap_stream, imap_le_struct->flags | CL_HALF);
}
+/* }}} */
-void mail_nuke_chain(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+/* {{{ mail_nuke_chain
+ */
+static void mail_nuke_chain(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
pils **headp = (pils **)rsrc->ptr;
pils *node, *next;
@@ -231,8 +241,12 @@ void mail_nuke_chain(zend_rsrc_list_entry *rsrc TSRMLS_DC)
free(headp);
}
+/* }}} */
#endif
+
+/* {{{ add_assoc_object
+ */
static int add_assoc_object(zval *arg, char *key, zval *tmp)
{
HashTable *symtable;
@@ -244,19 +258,39 @@ static int add_assoc_object(zval *arg, char *key, zval *tmp)
}
return zend_hash_update(symtable, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
}
+/* }}} */
-/* Mail instantiate FOBJECTLIST
+/* {{{ add_next_index_object
+ */
+static inline int add_next_index_object(zval *arg, zval *tmp)
+{
+ HashTable *symtable;
+
+ if (arg->type == IS_OBJECT) {
+ symtable = arg->value.obj.properties;
+ } else {
+ symtable = arg->value.ht;
+ }
+
+ return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL);
+}
+/* }}} */
+
+/* {{{ mail_newfolderobjectlist
+ *
+ * Mail instantiate FOBJECTLIST
* Returns: new FOBJECTLIST list
* Author: CJH
*/
FOBJECTLIST *mail_newfolderobjectlist(void)
{
- return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)),0,
- sizeof(FOBJECTLIST));
+ return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)), 0, sizeof(FOBJECTLIST));
}
+/* }}} */
-
-/* Mail garbage collect FOBJECTLIST
+/* {{{ mail_free_foblist
+ *
+ * Mail garbage collect FOBJECTLIST
* Accepts: pointer to FOBJECTLIST pointer
* Author: CJH
*/
@@ -270,9 +304,11 @@ void mail_free_foblist(FOBJECTLIST **foblist)
fs_give ((void **) foblist); /* return string to free storage */
}
}
+/* }}} */
-
-/* Mail instantiate ERRORLIST
+/* {{{ mail_newerrorlist
+ *
+ * Mail instantiate ERRORLIST
* Returns: new ERRORLIST list
* Author: CJH
*/
@@ -280,8 +316,11 @@ ERRORLIST *mail_newerrorlist(void)
{
return (ERRORLIST *) memset(fs_get(sizeof(ERRORLIST)), 0, sizeof(ERRORLIST));
}
+/* }}} */
-/* Mail garbage collect FOBJECTLIST
+/* {{{ mail_free_errorlist
+ *
+ * Mail garbage collect FOBJECTLIST
* Accepts: pointer to FOBJECTLIST pointer
* Author: CJH
*/
@@ -295,60 +334,11 @@ void mail_free_errorlist(ERRORLIST **errlist)
fs_give((void **) errlist); /* return string to free storage */
}
}
+/* }}} */
-
-/* Author: CJH */
-PHP_RINIT_FUNCTION(imap)
-{
- IMAPG(imap_errorstack) = NIL;
- IMAPG(imap_alertstack) = NIL;
- return SUCCESS;
-}
-
-/* Author: CJH */
-PHP_RSHUTDOWN_FUNCTION(imap)
-{
- ERRORLIST *ecur = NIL;
- STRINGLIST *acur = NIL;
-
- if (IMAPG(imap_errorstack) != NIL) {
- /* output any remaining errors at their original error level */
- ecur = IMAPG(imap_errorstack);
- while (ecur != NIL) {
- php_error(E_NOTICE, "%s (errflg=%d)", ecur->LTEXT, ecur->errflg);
- ecur = ecur->next;
- }
- mail_free_errorlist(&IMAPG(imap_errorstack));
- }
-
- if (IMAPG(imap_alertstack) != NIL) {
- /* output any remaining alerts at E_NOTICE level */
- acur = IMAPG(imap_alertstack);
- while (acur != NIL) {
- php_error(E_NOTICE, acur->LTEXT);
- acur = acur->next;
- }
- mail_free_stringlist(&IMAPG(imap_alertstack));
- }
- return SUCCESS;
-}
-
-
-static inline int add_next_index_object(zval *arg, zval *tmp)
-{
- HashTable *symtable;
-
- if (arg->type == IS_OBJECT) {
- symtable = arg->value.obj.properties;
- } else {
- symtable = arg->value.ht;
- }
-
- return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-/* Mail instantiate MESSAGELIST
+/* {{{ mail_newmessagelist
+ *
+ * Mail instantiate MESSAGELIST
* Returns: new MESSAGELIST list
* Author: CJH
*/
@@ -357,9 +347,27 @@ MESSAGELIST *mail_newmessagelist(void)
return (MESSAGELIST *) memset(fs_get(sizeof(MESSAGELIST)),0,
sizeof(MESSAGELIST));
}
+/* }}} */
+
+/* {{{ mail_free_messagelist
+ *
+ * Mail garbage collect MESSAGELIST
+ * Accepts: pointer to MESSAGELIST pointer
+ * Author: CJH
+ */
+void mail_free_messagelist(MESSAGELIST **msglist)
+{
+ if (*msglist) { /* only free if exists */
+ mail_free_messagelist (&(*msglist)->next);
+ fs_give ((void **) msglist); /* return string to free storage */
+ }
+}
+/* }}} */
-#ifdef HAVE_IMAP2000
-/* Mail GET_QUOTA callback
+#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
+/* {{{ mail_getquota
+ *
+ * Mail GET_QUOTA callback
* Called via the mail_parameter function in c-client:src/c-client/mail.c
* Author DRK
*/
@@ -374,43 +382,11 @@ void mail_getquota(MAILSTREAM *stream, char *qroot,QUOTALIST *qlist)
IMAPG(quota_limit) = qlist->limit;
}
}
+/* }}} */
#endif
-/* Mail garbage collect MESSAGELIST
- * Accepts: pointer to MESSAGELIST pointer
- * Author: CJH
+/* {{{ php_imap_init_globals
*/
-void mail_free_messagelist(MESSAGELIST **msglist)
-{
- if (*msglist) { /* only free if exists */
- mail_free_messagelist (&(*msglist)->next);
- fs_give ((void **) msglist); /* return string to free storage */
- }
-}
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(imap)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "IMAP Support", "enabled" );
-#if HAVE_IMAP2000
- php_info_print_table_row(2, "IMAP c-Client Version", "2000");
-#elif defined(IMAP41)
- php_info_print_table_row(2, "IMAP c-Client Version", "4.1");
-#else
- php_info_print_table_row(2, "IMAP c-Client Version", "4.0");
-#endif
-#if HAVE_IMAP_SSL
- php_info_print_table_row(2, "SSL Support", "enabled");
-#endif
-#if HAVE_IMAP_KRB
- php_info_print_table_row(2, "Kerberos Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
static void php_imap_init_globals(zend_imap_globals *imap_globals)
{
imap_globals->imap_user=NIL;
@@ -424,6 +400,7 @@ static void php_imap_init_globals(zend_imap_globals *imap_globals)
imap_globals->imap_sfolder_objects=NIL;
imap_globals->folderlist_style = FLIST_ARRAY;
}
+/* }}} */
/* {{{ PHP_MINIT_FUNCTION
*/
@@ -455,7 +432,6 @@ PHP_MINIT_FUNCTION(imap)
mail_link(&dummydriver); /* link in the dummy driver */
/* lets allow NIL */
-
REGISTER_MAIN_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
@@ -623,9 +599,75 @@ PHP_MINIT_FUNCTION(imap)
}
/* }}} */
+/* {{{ PHP_RINIT_FUNCTION
+ */
+PHP_RINIT_FUNCTION(imap)
+{
+ IMAPG(imap_errorstack) = NIL;
+ IMAPG(imap_alertstack) = NIL;
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_RSHUTDOWN_FUNCTION
+ */
+PHP_RSHUTDOWN_FUNCTION(imap)
+{
+ ERRORLIST *ecur = NIL;
+ STRINGLIST *acur = NIL;
+
+ if (IMAPG(imap_errorstack) != NIL) {
+ /* output any remaining errors at their original error level */
+ ecur = IMAPG(imap_errorstack);
+ while (ecur != NIL) {
+ php_error(E_NOTICE, "%s (errflg=%d)", ecur->LTEXT, ecur->errflg);
+ ecur = ecur->next;
+ }
+ mail_free_errorlist(&IMAPG(imap_errorstack));
+ }
+
+ if (IMAPG(imap_alertstack) != NIL) {
+ /* output any remaining alerts at E_NOTICE level */
+ acur = IMAPG(imap_alertstack);
+ while (acur != NIL) {
+ php_error(E_NOTICE, acur->LTEXT);
+ acur = acur->next;
+ }
+ mail_free_stringlist(&IMAPG(imap_alertstack));
+ }
+ return SUCCESS;
+}
+/* }}} */
+
+
+/* {{{ PHP_MINFO_FUNCTION
+ */
+PHP_MINFO_FUNCTION(imap)
+{
+ php_info_print_table_start();
+ php_info_print_table_header(2, "IMAP Support", "enabled" );
+#if HAVE_IMAP2001
+ php_info_print_table_row(2, "IMAP c-Client Version", "2001");
+#elif HAVE_IMAP2000
+ php_info_print_table_row(2, "IMAP c-Client Version", "2000");
+#elif defined(IMAP41)
+ php_info_print_table_row(2, "IMAP c-Client Version", "4.1");
+#else
+ php_info_print_table_row(2, "IMAP c-Client Version", "4.0");
+#endif
+#if HAVE_IMAP_SSL
+ php_info_print_table_row(2, "SSL Support", "enabled");
+#endif
+#if HAVE_IMAP_KRB
+ php_info_print_table_row(2, "Kerberos Support", "enabled");
+#endif
+ php_info_print_table_end();
+}
+/* }}} */
+
/* {{{ imap_do_open
*/
-void imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
+static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
{
zval **mailbox, **user, **passwd, **options;
MAILSTREAM *imap_stream;
@@ -831,7 +873,7 @@ void imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
Open an IMAP stream to a mailbox */
PHP_FUNCTION(imap_open)
{
- imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+ php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */
@@ -840,7 +882,7 @@ PHP_FUNCTION(imap_open)
PHP_FUNCTION(imap_popen)
{
#ifdef OP_RELOGIN
- imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+ php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
RETURN_TRUE;
#else
php_error(E_WARNING, "Persistent IMAP connections are not yet supported.\n");
@@ -864,8 +906,8 @@ PHP_FUNCTION(imap_reopen)
int myargc=ZEND_NUM_ARGS();
if (myargc<2 || myargc>3 || zend_get_parameters_ex(myargc, &streamind, &mailbox, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
+ ZEND_WRONG_PARAM_COUNT();
+ }
convert_to_long_ex(streamind);
ind = Z_LVAL_PP(streamind);
@@ -1005,7 +1047,7 @@ PHP_FUNCTION(imap_num_recent)
}
/* }}} */
-#ifdef HAVE_IMAP2000
+#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
/* {{{ proto array imap_get_quota(int stream_id, string qroot)
Returns the quota set to the mailbox account qroot */
PHP_FUNCTION(imap_get_quota)
@@ -1122,13 +1164,15 @@ PHP_FUNCTION(imap_close)
if (myargcount < 1 || myargcount > 2 || zend_get_parameters_ex(myargcount, &streamind, &options) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+
convert_to_long_ex(streamind);
ind = Z_LVAL_PP(streamind);
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
- }
+ }
+
if (myargcount==2) {
convert_to_long_ex(options);
flags = Z_LVAL_PP(options);
@@ -1421,8 +1465,7 @@ PHP_FUNCTION(imap_list)
/* set flag for normal, old mailbox list */
IMAPG(folderlist_style) = FLIST_ARRAY;
- if (ZEND_NUM_ARGS()!=3
- || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
@@ -1443,11 +1486,11 @@ PHP_FUNCTION(imap_list)
RETURN_FALSE;
}
array_init(return_value);
- cur=IMAPG(imap_folders);
- while (cur != NIL) {
+ cur=IMAPG(imap_folders);
+ while (cur != NIL) {
add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
+ cur=cur->next;
+ }
mail_free_stringlist (&IMAPG(imap_folders));
}
@@ -1579,7 +1622,8 @@ PHP_FUNCTION(imap_check)
if (mail_ping (imap_le_struct->imap_stream) == NIL) {
RETURN_FALSE;
- }
+ }
+
if (imap_le_struct->imap_stream && imap_le_struct->imap_stream->mailbox) {
rfc822_date(date);
object_init(return_value);
@@ -1711,7 +1755,7 @@ PHP_FUNCTION(imap_headerinfo)
RETURN_FALSE;
}
- mystring = mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, &length, NIL);
+ mystring = mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, &length, NIL);
if (myargc == 5) {
rfc822_parse_msg(&en, NULL, mystring, length, NULL, Z_STRVAL_PP(defaulthost), NIL);
} else {
@@ -1719,11 +1763,11 @@ PHP_FUNCTION(imap_headerinfo)
}
/* call a function to parse all the text, so that we can use the
- same function to parse text from other sources */
+ same function to parse text from other sources */
_php_make_header_object(return_value, en);
/* now run through properties that are only going to be returned
- from a server, not text headers */
+ from a server, not text headers */
add_property_string(return_value, "Recent", cache->recent ? (cache->seen ? "R": "N") : " ", 1);
add_property_string(return_value, "Unseen", (cache->recent | cache->seen) ? " " : "U", 1);
add_property_string(return_value, "Flagged", cache->flagged ? "F" : " ", 1);
@@ -1780,7 +1824,7 @@ PHP_FUNCTION(imap_rfc822_parse_headers)
}
/* call a function to parse all the text, so that we can use the
- same function no matter where the headers are from */
+ same function no matter where the headers are from */
_php_make_header_object(return_value, en);
mail_free_envelope(&en);
}
@@ -2192,6 +2236,7 @@ PHP_FUNCTION(imap_rfc822_write_address)
ADDRESS *addr;
char string[MAILTMPLEN];
int argc;
+
argc=ZEND_NUM_ARGS();
if (argc != 3 || zend_get_parameters_ex(argc, &mailbox, &host, &personal) == FAILURE) {
@@ -2336,15 +2381,12 @@ PHP_FUNCTION(imap_utf7_decode)
if (state == ST_NORMAL) {
/* process printable character */
if (SPECIAL(*inp)) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Invalid modified UTF-7 character: "
- "`%c'", *inp);
+ php_error(E_WARNING, "imap_utf7_decode: Invalid modified UTF-7 character: `%c'", *inp);
RETURN_FALSE;
} else if (*inp != '&') {
outlen++;
} else if (inp + 1 == endp) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Unexpected end of string");
+ php_error(E_WARNING, "imap_utf7_decode: Unexpected end of string");
RETURN_FALSE;
} else if (inp[1] != '-') {
state = ST_DECODE0;
@@ -2355,16 +2397,12 @@ PHP_FUNCTION(imap_utf7_decode)
} else if (*inp == '-') {
/* return to NORMAL mode */
if (state == ST_DECODE1) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Stray modified base64 character: "
- "`%c'", *--inp);
+ php_error(E_WARNING, "imap_utf7_decode: Stray modified base64 character: `%c'", *--inp);
RETURN_FALSE;
}
state = ST_NORMAL;
} else if (!B64CHAR(*inp)) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Invalid modified base64 character: "
- "`%c'", *inp);
+ php_error(E_WARNING, "imap_utf7_decode: Invalid modified base64 character: `%c'", *inp);
RETURN_FALSE;
} else {
switch (state) {
@@ -2385,15 +2423,13 @@ PHP_FUNCTION(imap_utf7_decode)
/* enforce end state */
if (state != ST_NORMAL) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Unexpected end of string");
+ php_error(E_WARNING, "imap_utf7_decode: Unexpected end of string");
RETURN_FALSE;
}
/* allocate output buffer */
if ((out = emalloc(outlen + 1)) == NULL) {
- php_error(E_WARNING, "imap_utf7_decode: "
- "Unable to allocate result string");
+ php_error(E_WARNING, "imap_utf7_decode: Unable to allocate result string");
RETURN_FALSE;
}
@@ -2445,9 +2481,7 @@ PHP_FUNCTION(imap_utf7_decode)
#if PHP_DEBUG
/* warn if we computed outlen incorrectly */
if (outp - out != outlen) {
- php_error(E_WARNING,
- "imap_utf7_decode: outp - out [%d] != outlen [%d]",
- outp - out, outlen);
+ php_error(E_WARNING, "imap_utf7_decode: outp - out [%d] != outlen [%d]", outp - out, outlen);
}
#endif
@@ -2514,8 +2548,7 @@ PHP_FUNCTION(imap_utf7_encode)
/* allocate output buffer */
if ((out = emalloc(outlen + 1)) == NULL) {
- php_error(E_WARNING, "imap_utf7_encode: "
- "Unable to allocate result string");
+ php_error(E_WARNING, "imap_utf7_encode: Unable to allocate result string");
RETURN_FALSE;
}
@@ -2567,9 +2600,7 @@ PHP_FUNCTION(imap_utf7_encode)
#if PHP_DEBUG
/* warn if we computed outlen incorrectly */
if (outp - out != outlen) {
- php_error(E_WARNING,
- "imap_utf7_encode: outp - out [%d] != outlen [%d]",
- outp - out, outlen);
+ php_error(E_WARNING, "imap_utf7_encode: outp - out [%d] != outlen [%d]", outp - out, outlen);
}
#endif
@@ -2591,7 +2622,7 @@ PHP_FUNCTION(imap_setflag_full)
pils *imap_le_struct;
int myargc=ZEND_NUM_ARGS();
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) ==FAILURE) {
+ if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
convert_to_long_ex(streamind);
@@ -2654,7 +2685,7 @@ PHP_FUNCTION(imap_sort)
pils *imap_le_struct;
int myargc = ZEND_NUM_ARGS();
- if (myargc < 3 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &pgm, &rev, &flags, &criteria) ==FAILURE) {
+ if (myargc < 3 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &pgm, &rev, &flags, &criteria) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
convert_to_long_ex(streamind);
@@ -2735,12 +2766,13 @@ PHP_FUNCTION(imap_fetchheader)
} else {
msgindex = Z_LVAL_PP(msgno);
}
+
if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
php_error(E_WARNING, "Bad message number");
RETURN_FALSE;
}
- RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
+ RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
}
/* }}} */
@@ -2760,15 +2792,13 @@ PHP_FUNCTION(imap_uid)
convert_to_long_ex(msgno);
ind = Z_LVAL_PP(streamind);
-
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
-
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
}
-
- msgindex = Z_LVAL_PP(msgno);
+
+ msgindex = Z_LVAL_PP(msgno);
if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
php_error(E_WARNING, "Bad message number");
RETURN_FALSE;
@@ -2794,9 +2824,7 @@ PHP_FUNCTION(imap_msgno)
convert_to_long_ex(msgno);
ind = Z_LVAL_PP(streamind);
-
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
-
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
@@ -2822,10 +2850,9 @@ PHP_FUNCTION(imap_status)
convert_to_long_ex(streamind);
convert_to_string_ex(mbx);
convert_to_long_ex(flags);
+
ind = Z_LVAL_PP(streamind);
-
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
-
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
@@ -2877,10 +2904,9 @@ PHP_FUNCTION(imap_bodystruct)
convert_to_long_ex(streamind);
convert_to_long_ex(msg);
convert_to_string_ex(section);
+
ind = Z_LVAL_PP(streamind);
-
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
-
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
@@ -3013,11 +3039,11 @@ PHP_FUNCTION(imap_fetch_overview)
ind = Z_LVAL_PP(streamind);
imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
-
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE;
}
+
array_init(return_value);
status = (flags & FT_UID)
@@ -3492,6 +3518,7 @@ PHP_FUNCTION(imap_mail)
if (argc < 3 || argc > 7 || zend_get_parameters_array(ht, argc, argv) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+
/* To: */
convert_to_string(argv[0]);
if (argv[0]->value.str.val) {
@@ -3561,7 +3588,7 @@ PHP_FUNCTION(imap_search)
int ind, ind_type, args;
pils *imap_le_struct;
long flags;
- char *search_criteria;
+ char *search_criteria;
MESSAGELIST *cur;
args = ZEND_NUM_ARGS();
@@ -3571,7 +3598,7 @@ PHP_FUNCTION(imap_search)
convert_to_long_ex(streamind);
convert_to_string_ex(criteria);
- search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
+ search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
if (args == 2) {
flags = SE_FREE;
@@ -3634,7 +3661,7 @@ PHP_FUNCTION(imap_alerts)
/* }}} */
/* {{{ proto array imap_errors(void)
- Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called. */
+ Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called. */
/* Author: CJH */
PHP_FUNCTION(imap_errors)
{
@@ -3790,7 +3817,7 @@ PHP_FUNCTION(imap_mime_header_decode)
/* Support Functions */
/* {{{ _php_imap_parse_address
*/
-void _php_imap_parse_address (ADDRESS *addresslist, char *fulladdress, zval *paddress)
+static void _php_imap_parse_address (ADDRESS *addresslist, char *fulladdress, zval *paddress)
{
ADDRESS *addresstmp, *addresstmp2;
char tempaddress[MAILTMPLEN];
@@ -3832,23 +3859,23 @@ void _php_imap_parse_address (ADDRESS *addresslist, char *fulladdress, zval *pad
/* {{{ _php_make_header_object
*/
-void _php_make_header_object(zval *myzvalue, ENVELOPE *en)
+static void _php_make_header_object(zval *myzvalue, ENVELOPE *en)
{
zval *paddress;
char fulladdress[MAILTMPLEN];
object_init(myzvalue);
- if (en->remail) add_property_string(myzvalue, "remail", en->remail, 1);
- if (en->date) add_property_string(myzvalue, "date", en->date, 1);
- if (en->date) add_property_string(myzvalue, "Date", en->date, 1);
- if (en->subject) add_property_string(myzvalue, "subject", en->subject, 1);
- if (en->subject) add_property_string(myzvalue, "Subject", en->subject, 1);
- if (en->in_reply_to) add_property_string(myzvalue, "in_reply_to", en->in_reply_to, 1);
- if (en->message_id) add_property_string(myzvalue, "message_id", en->message_id, 1);
- if (en->newsgroups) add_property_string(myzvalue, "newsgroups", en->newsgroups, 1);
- if (en->followup_to) add_property_string(myzvalue, "followup_to", en->followup_to, 1);
- if (en->references) add_property_string(myzvalue, "references", en->references, 1);
+ if (en->remail) add_property_string(myzvalue, "remail", en->remail, 1);
+ if (en->date) add_property_string(myzvalue, "date", en->date, 1);
+ if (en->date) add_property_string(myzvalue, "Date", en->date, 1);
+ if (en->subject) add_property_string(myzvalue, "subject", en->subject, 1);
+ if (en->subject) add_property_string(myzvalue, "Subject", en->subject, 1);
+ if (en->in_reply_to) add_property_string(myzvalue, "in_reply_to", en->in_reply_to, 1);
+ if (en->message_id) add_property_string(myzvalue, "message_id", en->message_id, 1);
+ if (en->newsgroups) add_property_string(myzvalue, "newsgroups", en->newsgroups, 1);
+ if (en->followup_to) add_property_string(myzvalue, "followup_to", en->followup_to, 1);
+ if (en->references) add_property_string(myzvalue, "references", en->references, 1);
if (en->to) {
MAKE_STD_ZVAL(paddress);
@@ -4027,7 +4054,111 @@ void _php_imap_add_body(zval *arg, BODY *body)
}
/* }}} */
-/* Interfaces to C-client */
+
+/* imap_thread, stealing this from header cclient -rjs3 */
+/* {{{ build_thread_tree_helper
+ */
+static void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes, char *buf)
+{
+ unsigned long thisNode = *numNodes;
+
+ /* define "#.num" */
+ snprintf(buf,25,"%ld.num", thisNode);
+
+ add_assoc_long(tree,buf,cur->num);
+
+ snprintf(buf,25,"%ld.next", thisNode);
+ if(cur->next) {
+ (*numNodes)++;
+ add_assoc_long(tree,buf,*numNodes);
+ build_thread_tree_helper(cur->next, tree, numNodes, buf);
+ } else { /* "null pointer" */
+ add_assoc_long(tree,buf,0);
+ }
+
+ snprintf(buf,25,"%ld.branch", thisNode);
+ if(cur->branch) {
+ (*numNodes)++;
+ add_assoc_long(tree,buf,*numNodes);
+ build_thread_tree_helper(cur->branch, tree, numNodes, buf);
+ } else { /* "null pointer" */
+ add_assoc_long(tree,buf,0);
+ }
+}
+/* }}} */
+
+/* {{{ build_thread_tree
+ */
+static int build_thread_tree(THREADNODE *top, zval **tree)
+{
+ long numNodes = 0;
+ char buf[25];
+
+ if(array_init(*tree) != SUCCESS) return FAILURE;
+
+ build_thread_tree_helper(top, *tree, &numNodes, buf);
+
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ proto int imap_thread(int stream_id)
+ Return threaded by REFERENCES tree */
+PHP_FUNCTION (imap_thread)
+{
+ pval *streamind, *search_flags;
+ int ind, ind_type, args;
+ pils *imap_le_struct;
+ long flags;
+ char criteria[] = "ALL";
+ THREADNODE *top;
+
+ if(!return_value_used) {
+ php_error(E_WARNING, "imap_thread does not make use of return value");
+ RETURN_FALSE;
+ }
+
+ args = ARG_COUNT(ht);
+ if ( args < 1 || args > 2 || getParameters(ht, args, &streamind, &search_flags) == FAILURE) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ convert_to_long(streamind);
+
+ if (args == 1) {
+ flags = SE_FREE;
+ } else {
+ convert_to_long(search_flags);
+ flags = search_flags->value.lval;
+ }
+
+ ind = streamind->value.lval;
+ imap_le_struct = (pils *)zend_list_find(ind, &ind_type);
+ if (!imap_le_struct || !IS_STREAM(ind_type)) {
+ php_error(E_WARNING, "Unable to find stream pointer");
+ RETURN_FALSE;
+ }
+
+ top = mail_thread(imap_le_struct->imap_stream, "REFERENCES", NIL, mail_criteria(criteria), flags);
+
+ if(top == NIL) {
+ php_error(E_WARNING, "imap_thread returned an empty tree");
+ RETURN_FALSE;
+ }
+
+ /* Populate our return value data structure here. */
+ if(build_thread_tree(top, &return_value) == FAILURE){
+ mail_free_threadnode(&top);
+ RETURN_FALSE;
+ }
+
+ mail_free_threadnode(&top);
+}
+/* }}} */
+
+
+/* {{{ Interfaces to C-client
+ */
void mm_searched(MAILSTREAM *stream,unsigned long number)
{
MESSAGELIST *cur = NIL;
@@ -4263,104 +4394,6 @@ long mm_diskerror(MAILSTREAM *stream, long errcode, long serious)
void mm_fatal(char *str)
{
}
-
-/* Added imap_thread functionality */
-/* stealing this from header cclient -rjs3 */
-THREADNODE *imap_thread (MAILSTREAM *stream,char *type,char *charset,
- SEARCHPGM *spg,long flags);
-
-void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes, char *buf) {
- unsigned long thisNode = *numNodes;
-
- /* define "#.num" */
- snprintf(buf,25,"%ld.num", thisNode);
-
- add_assoc_long(tree,buf,cur->num);
-
- snprintf(buf,25,"%ld.next", thisNode);
- if(cur->next) {
- (*numNodes)++;
- add_assoc_long(tree,buf,*numNodes);
- build_thread_tree_helper(cur->next, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree,buf,0);
- }
-
- snprintf(buf,25,"%ld.branch", thisNode);
- if(cur->branch) {
- (*numNodes)++;
- add_assoc_long(tree,buf,*numNodes);
- build_thread_tree_helper(cur->branch, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree,buf,0);
- }
-}
-
-int build_thread_tree(THREADNODE *top, zval **tree) {
- long numNodes = 0;
- char buf[25];
-
- if(array_init(*tree) != SUCCESS) return FAILURE;
-
- build_thread_tree_helper(top, *tree, &numNodes, buf);
-
- return SUCCESS;
-}
-
-/* {{{ proto int imap_thread(int stream_id)
- Return threaded by REFERENCES tree */
-PHP_FUNCTION (imap_thread)
-{
- pval *streamind, *search_flags;
- int ind, ind_type, args;
- pils *imap_le_struct;
- long flags;
- char criteria[] = "ALL";
- THREADNODE *top;
-
- if(!return_value_used) {
- php_error(E_WARNING, "imap_thread does not make use of return value");
- RETURN_FALSE;
- }
-
- args = ARG_COUNT(ht);
- if ( args < 1 || args > 2
- || getParameters(ht, args, &streamind, &search_flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
-
- if (args == 1) {
- flags = SE_FREE;
- } else {
- convert_to_long(search_flags);
- flags = search_flags->value.lval;
- }
-
- ind = streamind->value.lval;
- imap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!imap_le_struct || !IS_STREAM(ind_type)) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- top = mail_thread(imap_le_struct->imap_stream,
- "REFERENCES", NIL, mail_criteria(criteria), flags);
-
- if(top == NIL) {
- php_error(E_WARNING, "imap_thread returned an empty tree");
- RETURN_FALSE;
- }
-
- /* Populate our return value data structure here. */
- if(build_thread_tree(top, &return_value) == FAILURE){
- mail_free_threadnode(&top);
- RETURN_FALSE;
- }
-
- mail_free_threadnode(&top);
-}
/* }}} */
/*