kalowsky Sat Feb 24 20:41:19 2001 EDT
Modified files:
/php4/ext/imap config.m4 php_imap.c php_imap.h
Log:
Updating the IMAP client to include quota support via the imap c-client2000
libraries.
# Y2K support is good...
Removes the SA_QUOTA and SA_QUOTA_ALL defines
# After speaking with Mark Crispin, it is believed these never existed.
Cleans up the imap_status() function to remove notion of quotas in a status message.
# There is no quota setting in a STATUS message from c-client.
Changes the config.m4 to support the client.h include
# This should include all the approriate headers for c-client (as defined by
# c-client maintainers) such as mail.h, and rfc822.h.
Changed the directory search order for the include files as well.
# Place the /usr/local/include last, and searched the
# /usr/local/include/{c-client|imap} directories first
(PHP imap_get_quota) Added
(PHP imap_set_quota) Added
@- IMAP quota support (imap_set_quota, imap_get_quota) enabled/added via
@ c-client2000
PR:
Submitted by:
Reviewed by:
Obtained from:
Index: php4/ext/imap/config.m4
diff -u php4/ext/imap/config.m4:1.22 php4/ext/imap/config.m4:1.23
--- php4/ext/imap/config.m4:1.22 Mon Oct 2 15:16:53 2000
+++ php4/ext/imap/config.m4 Sat Feb 24 20:41:18 2001
@@ -1,4 +1,4 @@
-dnl $Id: config.m4,v 1.22 2000/10/02 22:16:53 rasmus Exp $
+dnl $Id: config.m4,v 1.23 2001/02/25 04:41:18 kalowsky Exp $
AC_DEFUN(IMAP_INC_CHK,[if test -r $i$1/rfc822.h; then IMAP_DIR=$i; IMAP_INC_DIR=$i$1])
@@ -41,9 +41,9 @@
if test "$PHP_IMAP" != "no"; then
for i in /usr/local /usr $PHP_IMAP; do
IMAP_INC_CHK()
- el[]IMAP_INC_CHK(/include)
- el[]IMAP_INC_CHK(/include/imap)
el[]IMAP_INC_CHK(/include/c-client)
+ el[]IMAP_INC_CHK(/include/imap)
+ el[]IMAP_INC_CHK(/include)
el[]IMAP_INC_CHK(/imap)
el[]IMAP_INC_CHK(/c-client)
fi
Index: php4/ext/imap/php_imap.c
diff -u php4/ext/imap/php_imap.c:1.57 php4/ext/imap/php_imap.c:1.58
--- php4/ext/imap/php_imap.c:1.57 Wed Feb 21 12:33:46 2001
+++ php4/ext/imap/php_imap.c Sat Feb 24 20:41:18 2001
@@ -25,7 +25,7 @@
| PHP 4.0 updates: Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_imap.c,v 1.57 2001/02/21 20:33:46 thies Exp $ */
+/* $Id: php_imap.c,v 1.58 2001/02/25 04:41:18 kalowsky Exp $ */
#define IMAP41
@@ -101,6 +101,8 @@
PHP_FE(imap_createmailbox, NULL)
PHP_FE(imap_renamemailbox, NULL)
PHP_FE(imap_deletemailbox, NULL)
+ PHP_FE(imap_get_quota, NULL)
+ PHP_FE(imap_set_quota, NULL)
PHP_FALIAS(imap_listmailbox, imap_list, NULL)
PHP_FALIAS(imap_getmailboxes, imap_list_full, NULL)
PHP_FALIAS(imap_scanmailbox, imap_listscan, NULL)
@@ -355,6 +357,20 @@
sizeof(MESSAGELIST));
}
+/* Mail GET_QUOTA callback
+ * Called via the mail_parameter function in c-client:src/c-client/mail.c
+ * Author DRK
+ */
+void mail_getquota(MAILSTREAM *stream, char *qroot,QUOTALIST *qlist)
+{
+ /* this should only be run through once */
+ for (; qlist; qlist = qlist->next)
+ {
+ IMAPG(quota_usage) = qlist->usage;
+ IMAPG(quota_limit) = qlist->limit;
+ }
+}
+
/* Mail garbage collect MESSAGELIST
* Accepts: pointer to MESSAGELIST pointer
* Author: CJH
@@ -532,16 +548,12 @@
REGISTER_MAIN_LONG_CONSTANT("SA_UIDVALIDITY",SA_UIDVALIDITY , CONST_PERSISTENT
| CONST_CS);
/* UID validity value */
-#ifdef SA_QUOTA
- sa_all |= SA_QUOTA;
- REGISTER_MAIN_LONG_CONSTANT("SA_QUOTA",SA_QUOTA , CONST_PERSISTENT |
CONST_CS);
+ sa_all |= GET_QUOTA;
+ REGISTER_MAIN_LONG_CONSTANT("GET_QUOTA",GET_QUOTA , CONST_PERSISTENT |
+CONST_CS);
/* Disk space taken up by mailbox. */
-#endif
-#ifdef SA_QUOTA_ALL
- sa_all |= SA_QUOTA_ALL;
- REGISTER_MAIN_LONG_CONSTANT("SA_QUOTA_ALL",SA_QUOTA_ALL , CONST_PERSISTENT |
CONST_CS);
+ sa_all |= GET_QUOTAROOT;
+ REGISTER_MAIN_LONG_CONSTANT("GET_QUOTAROOT",GET_QUOTAROOT , CONST_PERSISTENT
+| CONST_CS);
/* Disk space taken up by all mailboxes owned by user. */
-#endif
REGISTER_MAIN_LONG_CONSTANT("SA_ALL", sa_all, CONST_PERSISTENT | CONST_CS);
/* get all status information */
@@ -1000,6 +1012,80 @@
/* }}} */
+/* {{{ proto array imap_get_quota(int stream_id, string qroot)
+ Returns the quota set to the mailbox account qroot */
+PHP_FUNCTION(imap_get_quota)
+{
+ zval **streamind, **qroot;
+
+ int ind, ind_type;
+ pils *imap_le_struct;
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &qroot) ==
+FAILURE) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ convert_to_long_ex(streamind);
+ convert_to_string_ex(qroot);
+
+ 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;
+ }
+
+ /* set the callback for the GET_QUOTA function */
+ mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota);
+
+ if(!imap_getquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot))) {
+ php_error(E_WARNING, "c-client imap_getquota failed");
+ RETURN_FALSE;
+ }
+
+ if (array_init(return_value) == FAILURE) {
+ php_error(E_WARNING, "Unable to allocate array memory");
+ RETURN_FALSE;
+ }
+
+ add_assoc_long(return_value, "usage", IMAPG(quota_usage));
+ add_assoc_long(return_value, "limit", IMAPG(quota_limit));
+}
+/* }}} */
+
+
+/* {{{ proto int imap_set_quota(int stream_id, string qroot, int mailbox_size)
+ Will set the quota for qroot mailbox */
+PHP_FUNCTION(imap_set_quota)
+{
+ zval **streamind, **qroot, **mailbox_size;
+ STRINGLIST limits;
+ int ind, ind_type;
+ pils *imap_le_struct;
+
+ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &qroot,
+&mailbox_size) == FAILURE) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ convert_to_long_ex(streamind);
+ convert_to_string_ex(qroot);
+ convert_to_long_ex(mailbox_size);
+
+ limits.text.data = "STORAGE";
+ limits.text.size = Z_LVAL_PP(mailbox_size);
+ limits.next = NIL;
+
+ 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;
+ }
+ RETURN_LONG(imap_setquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot),
+&limits));
+}
+/* }}} */
+
+
/* {{{ proto int imap_expunge(int stream_id)
Permanently delete all messages marked for deletion */
PHP_FUNCTION(imap_expunge)
@@ -2813,6 +2899,7 @@
if (object_init(return_value) == FAILURE) {
RETURN_FALSE;
}
+
if (mail_status(imap_le_struct->imap_stream, Z_STRVAL_PP(mbx),
Z_LVAL_PP(flags))) {
add_property_long(return_value, "flags", IMAPG(status_flags));
if (IMAPG(status_flags) & SA_MESSAGES) {
@@ -2830,16 +2917,6 @@
if (IMAPG(status_flags) & SA_UIDVALIDITY) {
add_property_long(return_value, "uidvalidity",
IMAPG(status_uidvalidity));
}
-#ifdef SA_QUOTA
- if (IMAPG(status_flags) & SA_QUOTA) {
- add_property_long(return_value, "quota", IMAPG(status_quota));
- }
-#endif
-#ifdef SA_QUOTA
- if (IMAPG(status_flags) & SA_QUOTA_ALL) {
- add_property_long(return_value, "quota_all",
IMAPG(status_quota_all));
- }
-#endif
} else {
RETURN_FALSE;
}
@@ -4075,17 +4152,6 @@
if (IMAPG(status_flags) & SA_UIDVALIDITY) {
IMAPG(status_uidvalidity)=status->uidvalidity;
}
-
-#ifdef SA_QUOTA
- if (IMAPG(status_flags) & SA_QUOTA) {
- IMAPG(status_quota)=status->quota;
- }
-#endif
-#ifdef SA_QUOTA_ALL
- if (IMAPG(status_flags) & SA_QUOTA_ALL) {
- IMAPG(status_quota_all)=status->quota_all;
- }
-#endif
}
void mm_log(char *str, long errflg)
Index: php4/ext/imap/php_imap.h
diff -u php4/ext/imap/php_imap.h:1.5 php4/ext/imap/php_imap.h:1.6
--- php4/ext/imap/php_imap.h:1.5 Tue Oct 17 08:42:05 2000
+++ php4/ext/imap/php_imap.h Sat Feb 24 20:41:18 2001
@@ -6,8 +6,12 @@
#include "build-defs.h"
#endif
-#include "mail.h"
-#include "rfc822.h"
+/*
+ #include "mail.h"
+ #include "rfc822.h"
+*/
+#include "c-client.h"
+#include "imap4r1.h" /* used for the imap_setquota function */
#include "modules.h"
extern zend_module_entry imap_module_entry;
@@ -100,6 +104,8 @@
PHP_FUNCTION(imap_deletemailbox);
PHP_FUNCTION(imap_listmailbox);
PHP_FUNCTION(imap_scanmailbox);
+PHP_FUNCTION(imap_get_quota);
+PHP_FUNCTION(imap_set_quota);
PHP_FUNCTION(imap_subscribe);
PHP_FUNCTION(imap_unsubscribe);
PHP_FUNCTION(imap_append);
@@ -156,12 +162,8 @@
unsigned long status_unseen;
unsigned long status_uidnext;
unsigned long status_uidvalidity;
-#ifdef SA_QUOTA
- unsigned long status_quota;
-#endif
-#ifdef SA_QUOTA_ALL
- unsigned long status_quota_all;
-#endif
+ unsigned long quota_usage;
+ unsigned long quota_limit;
ZEND_END_MODULE_GLOBALS(imap)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]