xref: /PHP-7.4/ext/imap/php_imap.h (revision f1b306fe)
1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 7                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 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    | Authors: Rex Logan           <veebert@dimensional.com>               |
16    |          Mark Musone         <musone@afterfive.com>                  |
17    |          Brian Wang          <brian@vividnet.com>                    |
18    |          Kaj-Michael Lang    <milang@tal.org>                        |
19    |          Antoni Pamies Olive <toni@readysoft.net>                    |
20    |          Rasmus Lerdorf      <rasmus@php.net>                        |
21    |          Chuck Hagenbuch     <chuck@horde.org>                       |
22    |          Andrew Skalski      <askalski@chekinc.com>                  |
23    |          Hartmut Holzgraefe  <hholzgra@php.net>                      |
24    |          Jani Taskinen       <sniper@iki.fi>                         |
25    |          Daniel R. Kalowsky  <kalowsky@php.net>                      |
26    | PHP 4.0 updates:  Zeev Suraski <zeev@php.net>                        |
27    +----------------------------------------------------------------------+
28  */
29 
30 #ifndef PHP_IMAP_H
31 #define PHP_IMAP_H
32 
33 #if HAVE_IMAP
34 
35 #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
36 
37  /* For now these appear on Windows, remove this check if it appears outside */
38 # ifdef PHP_WIN32
39  /* Undefine these LOG defines to avoid warnings */
40 #  undef LOG_EMERG
41 #  undef LOG_CRIT
42 #  undef LOG_ERR
43 #  undef LOG_WARNING
44 #  undef LOG_NOTICE
45 #  undef LOG_DEBUG
46 
47  /* c-client also redefines its own ftruncate */
48 #  undef ftruncate
49 # endif
50 
51  /* these are used for quota support */
52 # include "c-client.h"	/* includes mail.h and rfc822.h */
53 # include "imap4r1.h"	/* location of c-client quota functions */
54 #else
55 # include "mail.h"
56 # include "rfc822.h"
57 #endif
58 
59 extern zend_module_entry imap_module_entry;
60 #define imap_module_ptr &imap_module_entry
61 
62 #include "php_version.h"
63 #define PHP_IMAP_VERSION PHP_VERSION
64 
65 /* Data types */
66 
67 #ifdef IMAP41
68 #define LSIZE text.size
69 #define LTEXT text.data
70 #define DTYPE int
71 #define CONTENT_PART nested.part
72 #define CONTENT_MSG_BODY nested.msg->body
73 #define IMAPVER "Imap 4R1"
74 #else
75 #define LSIZE size
76 #define LTEXT text
77 #define DTYPE char
78 #define CONTENT_PART contents.part
79 #define CONTENT_MSG_BODY contents.msg.body
80 #define IMAPVER "Imap 4"
81 #endif
82 
83 
84 /* Determines how mm_list() and mm_lsub() are to return their results. */
85 typedef enum {
86 	FLIST_ARRAY,
87 	FLIST_OBJECT
88 } folderlist_style_t;
89 
90 typedef struct php_imap_le_struct {
91 	MAILSTREAM *imap_stream;
92 	long flags;
93 } pils;
94 
95 typedef struct php_imap_mailbox_struct {
96 	SIZEDTEXT text;
97 	DTYPE delimiter;
98 	long attributes;
99 	struct php_imap_mailbox_struct *next;
100 } FOBJECTLIST;
101 
102 typedef struct php_imap_error_struct {
103 	SIZEDTEXT text;
104 	long errflg;
105 	struct php_imap_error_struct *next;
106 } ERRORLIST;
107 
108 typedef struct _php_imap_message_struct {
109 	unsigned long msgid;
110 	struct _php_imap_message_struct *next;
111 } MESSAGELIST;
112 
113 
114 /* Functions */
115 
116 PHP_MINIT_FUNCTION(imap);
117 PHP_RINIT_FUNCTION(imap);
118 PHP_RSHUTDOWN_FUNCTION(imap);
119 PHP_MINFO_FUNCTION(imap);
120 
121 PHP_FUNCTION(imap_open);
122 PHP_FUNCTION(imap_popen);
123 PHP_FUNCTION(imap_reopen);
124 PHP_FUNCTION(imap_num_msg);
125 PHP_FUNCTION(imap_num_recent);
126 PHP_FUNCTION(imap_headers);
127 PHP_FUNCTION(imap_headerinfo);
128 PHP_FUNCTION(imap_rfc822_parse_headers);
129 PHP_FUNCTION(imap_body);
130 PHP_FUNCTION(imap_fetchstructure);
131 PHP_FUNCTION(imap_fetchbody);
132 PHP_FUNCTION(imap_fetchmime);
133 PHP_FUNCTION(imap_savebody);
134 PHP_FUNCTION(imap_gc);
135 PHP_FUNCTION(imap_expunge);
136 PHP_FUNCTION(imap_delete);
137 PHP_FUNCTION(imap_undelete);
138 PHP_FUNCTION(imap_check);
139 PHP_FUNCTION(imap_close);
140 PHP_FUNCTION(imap_mail_copy);
141 PHP_FUNCTION(imap_mail_move);
142 PHP_FUNCTION(imap_createmailbox);
143 PHP_FUNCTION(imap_renamemailbox);
144 PHP_FUNCTION(imap_deletemailbox);
145 PHP_FUNCTION(imap_listmailbox);
146 PHP_FUNCTION(imap_scanmailbox);
147 PHP_FUNCTION(imap_subscribe);
148 PHP_FUNCTION(imap_unsubscribe);
149 PHP_FUNCTION(imap_append);
150 PHP_FUNCTION(imap_ping);
151 PHP_FUNCTION(imap_base64);
152 PHP_FUNCTION(imap_qprint);
153 PHP_FUNCTION(imap_8bit);
154 PHP_FUNCTION(imap_binary);
155 PHP_FUNCTION(imap_mailboxmsginfo);
156 PHP_FUNCTION(imap_rfc822_write_address);
157 PHP_FUNCTION(imap_rfc822_parse_adrlist);
158 PHP_FUNCTION(imap_setflag_full);
159 PHP_FUNCTION(imap_clearflag_full);
160 PHP_FUNCTION(imap_sort);
161 PHP_FUNCTION(imap_fetchheader);
162 PHP_FUNCTION(imap_fetchtext);
163 PHP_FUNCTION(imap_uid);
164 PHP_FUNCTION(imap_msgno);
165 PHP_FUNCTION(imap_list);
166 PHP_FUNCTION(imap_list_full);
167 PHP_FUNCTION(imap_listscan);
168 PHP_FUNCTION(imap_lsub);
169 PHP_FUNCTION(imap_lsub_full);
170 PHP_FUNCTION(imap_create);
171 PHP_FUNCTION(imap_rename);
172 PHP_FUNCTION(imap_status);
173 PHP_FUNCTION(imap_bodystruct);
174 PHP_FUNCTION(imap_fetch_overview);
175 PHP_FUNCTION(imap_mail_compose);
176 PHP_FUNCTION(imap_alerts);
177 PHP_FUNCTION(imap_errors);
178 PHP_FUNCTION(imap_last_error);
179 PHP_FUNCTION(imap_mail);
180 PHP_FUNCTION(imap_search);
181 PHP_FUNCTION(imap_utf8);
182 PHP_FUNCTION(imap_utf7_decode);
183 PHP_FUNCTION(imap_utf7_encode);
184 #ifdef HAVE_IMAP_MUTF7
185 PHP_FUNCTION(imap_utf8_to_mutf7);
186 PHP_FUNCTION(imap_mutf7_to_utf8);
187 #endif
188 PHP_FUNCTION(imap_mime_header_decode);
189 PHP_FUNCTION(imap_thread);
190 PHP_FUNCTION(imap_timeout);
191 
192 #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
193 PHP_FUNCTION(imap_get_quota);
194 PHP_FUNCTION(imap_get_quotaroot);
195 PHP_FUNCTION(imap_set_quota);
196 PHP_FUNCTION(imap_setacl);
197 PHP_FUNCTION(imap_getacl);
198 #endif
199 
200 
201 ZEND_BEGIN_MODULE_GLOBALS(imap)
202 	char *imap_user;
203 	char *imap_password;
204 
205 	STRINGLIST *imap_alertstack;
206 	ERRORLIST *imap_errorstack;
207 
208 	STRINGLIST *imap_folders;
209 	STRINGLIST *imap_folders_tail;
210 	STRINGLIST *imap_sfolders;
211 	STRINGLIST *imap_sfolders_tail;
212 	MESSAGELIST *imap_messages;
213 	MESSAGELIST *imap_messages_tail;
214 	FOBJECTLIST *imap_folder_objects;
215 	FOBJECTLIST *imap_folder_objects_tail;
216 	FOBJECTLIST *imap_sfolder_objects;
217 	FOBJECTLIST *imap_sfolder_objects_tail;
218 
219 	folderlist_style_t folderlist_style;
220 	long status_flags;
221 	unsigned long status_messages;
222 	unsigned long status_recent;
223 	unsigned long status_unseen;
224 	unsigned long status_uidnext;
225 	unsigned long status_uidvalidity;
226 #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
227 	zval **quota_return;
228 	zval *imap_acl_list;
229 #endif
230 	/* php_stream for php_mail_gets() */
231 	php_stream *gets_stream;
232 	zend_bool enable_rsh;
233 ZEND_END_MODULE_GLOBALS(imap)
234 
235 #if defined(ZTS) && defined(COMPILE_DL_IMAP)
236 ZEND_TSRMLS_CACHE_EXTERN()
237 #endif
238 
239 ZEND_EXTERN_MODULE_GLOBALS(imap)
240 #define IMAPG(v) ZEND_MODULE_GLOBALS_ACCESSOR(imap, v)
241 
242 #else
243 
244 #define imap_module_ptr NULL
245 
246 #endif
247 
248 #define phpext_imap_ptr imap_module_ptr
249 
250 #endif /* PHP_IMAP_H */
251