|
38 | 38 | #include "php_ini.h"
|
39 | 39 | #include "ext/standard/php_string.h"
|
40 | 40 | #include "ext/standard/info.h"
|
| 41 | +#include "ext/standard/file.h" |
41 | 42 |
|
42 | 43 | #ifdef ERROR
|
43 | 44 | #undef ERROR
|
@@ -130,6 +131,7 @@ function_entry imap_functions[] = {
|
130 | 131 | PHP_FE(imap_utf7_encode, NULL)
|
131 | 132 | PHP_FE(imap_mime_header_decode, NULL)
|
132 | 133 | PHP_FE(imap_thread, NULL)
|
| 134 | + PHP_FE(imap_timeout, NULL) |
133 | 135 |
|
134 | 136 | #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
|
135 | 137 | PHP_FE(imap_get_quota, NULL)
|
@@ -337,6 +339,7 @@ void mail_free_messagelist(MESSAGELIST **msglist, MESSAGELIST **tail)
|
337 | 339 | * Called via the mail_parameter function in c-client:src/c-client/mail.c
|
338 | 340 | * Author DRK
|
339 | 341 | */
|
| 342 | + |
340 | 343 | void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist)
|
341 | 344 | {
|
342 | 345 | zval *t_map, *return_value;
|
@@ -450,6 +453,17 @@ PHP_MINIT_FUNCTION(imap)
|
450 | 453 | /* lets allow NIL */
|
451 | 454 | REGISTER_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
|
452 | 455 |
|
| 456 | + /* set default timeout values */ |
| 457 | + mail_parameters(NIL, SET_OPENTIMEOUT, (void *) FG(default_socket_timeout)); |
| 458 | + mail_parameters(NIL, SET_READTIMEOUT, (void *) FG(default_socket_timeout)); |
| 459 | + mail_parameters(NIL, SET_WRITETIMEOUT, (void *) FG(default_socket_timeout)); |
| 460 | + mail_parameters(NIL, SET_CLOSETIMEOUT, (void *) FG(default_socket_timeout)); |
| 461 | + |
| 462 | + /* timeout constants */ |
| 463 | + REGISTER_LONG_CONSTANT("IMAP_OPENTIMEOUT", 1, CONST_PERSISTENT | CONST_CS); |
| 464 | + REGISTER_LONG_CONSTANT("IMAP_READTIMEOUT", 2, CONST_PERSISTENT | CONST_CS); |
| 465 | + REGISTER_LONG_CONSTANT("IMAP_WRITETIMEOUT", 3, CONST_PERSISTENT | CONST_CS); |
| 466 | + REGISTER_LONG_CONSTANT("IMAP_CLOSETIMEOUT", 4, CONST_PERSISTENT | CONST_CS); |
453 | 467 |
|
454 | 468 | /* Open Options */
|
455 | 469 |
|
@@ -717,7 +731,7 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
|
717 | 731 |
|
718 | 732 | IMAPG(imap_user) = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));
|
719 | 733 | IMAPG(imap_password) = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));
|
720 |
| - |
| 734 | + |
721 | 735 | imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags);
|
722 | 736 |
|
723 | 737 | if (imap_stream == NIL) {
|
@@ -4009,6 +4023,61 @@ PHP_FUNCTION (imap_thread)
|
4009 | 4023 | }
|
4010 | 4024 | /* }}} */
|
4011 | 4025 |
|
| 4026 | +PHP_FUNCTION (imap_timeout) |
| 4027 | +{ |
| 4028 | + long ttype, timeout=-1; |
| 4029 | + int timeout_type; |
| 4030 | + |
| 4031 | + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &ttype, &timeout) == FAILURE) { |
| 4032 | + RETURN_FALSE; |
| 4033 | + } |
| 4034 | + |
| 4035 | + if (timeout == -1) { |
| 4036 | + switch (ttype) { |
| 4037 | + case 1: |
| 4038 | + timeout_type = GET_OPENTIMEOUT; |
| 4039 | + break; |
| 4040 | + case 2: |
| 4041 | + timeout_type = GET_READTIMEOUT; |
| 4042 | + break; |
| 4043 | + case 3: |
| 4044 | + timeout_type = GET_WRITETIMEOUT; |
| 4045 | + break; |
| 4046 | + case 4: |
| 4047 | + timeout_type = GET_CLOSETIMEOUT; |
| 4048 | + break; |
| 4049 | + default: |
| 4050 | + RETURN_FALSE; |
| 4051 | + break; |
| 4052 | + } |
| 4053 | + |
| 4054 | + timeout = (long) mail_parameters(NIL, timeout_type, NIL); |
| 4055 | + RETURN_LONG(timeout); |
| 4056 | + } else if (timeout >= 0) { |
| 4057 | + switch (ttype) { |
| 4058 | + case 1: |
| 4059 | + timeout_type = SET_OPENTIMEOUT; |
| 4060 | + break; |
| 4061 | + case 2: |
| 4062 | + timeout_type = SET_READTIMEOUT; |
| 4063 | + break; |
| 4064 | + case 3: |
| 4065 | + timeout_type = SET_WRITETIMEOUT; |
| 4066 | + break; |
| 4067 | + case 4: |
| 4068 | + timeout_type = SET_CLOSETIMEOUT; |
| 4069 | + break; |
| 4070 | + default: |
| 4071 | + RETURN_FALSE; |
| 4072 | + break; |
| 4073 | + } |
| 4074 | + |
| 4075 | + timeout = (long) mail_parameters(NIL, timeout_type, (void *) timeout); |
| 4076 | + RETURN_TRUE; |
| 4077 | + } else { |
| 4078 | + RETURN_FALSE; |
| 4079 | + } |
| 4080 | +} |
4012 | 4081 |
|
4013 | 4082 | /* {{{ Interfaces to C-client
|
4014 | 4083 | */
|
|
0 commit comments