1/* libesmtp.vapi
2 *
3 * Copyright (C) 2010  Adrien Bustany
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
18 *
19 * As a special exception, if you use inline functions from this file, this
20 * file does not by itself cause the resulting executable to be covered by
21 * the GNU Lesser General Public License.
22 *
23 * Author:
24 * 	Adrien Bustany <abustany@gnome.org>
25 */
26
27[CCode (cheader_filename="libesmtp.h")]
28namespace Smtp {
29	[SimpleType]
30	[CCode (cname="smtp_session_t", free_function="smtp_destroy_session", has_type_id = false)]
31	public struct Session {
32		[CCode (cname="smtp_create_session")]
33		public Session ();
34
35		[CCode (cname="smtp_add_message")]
36		public Smtp.Message add_message ();
37		[CCode (cname="smtp_enumerate_messages")]
38		public int enumerate_message (EnumerateMessageCb cb);
39		[CCode (cname="smtp_set_server")]
40		public int set_server (string hostport);
41		[CCode (cname="smtp_set_hostname")]
42		public int set_hostname (string hostname);
43		[CCode (cname="smtp_set_eventcb")]
44		public int set_eventcb (EventCb cb);
45		[CCode (cname="smtp_set_monitorcb", instance_pos="1.5")]
46		public int set_monitorcb (MonitorCb cb, int headers);
47		[CCode (cname="smtp_start_session")]
48		public int start_session ();
49		[CCode (cname="smtp_set_application_data")]
50		public void* set_application_data (void *data);
51		[CCode (cname="smtp_get_application_data")]
52		public void* get_application_data ();
53		[CCode (cname="smtp_option_require_all_recipients")]
54		public int option_require_all_recipients (int state);
55		[CCode (cname="smtp_auth_set_context")]
56		public int auth_set_context (Smtp.AuthContext context);
57		[CCode (cname="smtp_set_timeout")]
58		public long set_timeout (int which, long value);
59		/* Will be enabled if there are SSL bindings
60		[CCode (cname="smtp_starttls_set_ctx")]
61		public int starttls_set_ctx (SSL.Ctx ctx); */
62		[CCode (cname="smtp_etrn_add_node")]
63		public EtrnNode etrn_add_node (int option, string node);
64		[CCode (cname="smtp_etrn_enumerate_nodes")]
65		public int etrn_enumerate_nodes (EtrnEnumerateNodeCb cb);
66	}
67
68	[SimpleType]
69	[CCode (cname="smtp_message_t", free_function="g_free", has_type_id = false)]
70	public struct Message {
71		[CCode (cname="smtp_set_reverse_path")]
72		public int set_reverse_path (string mailbox);
73		[CCode (cname="smtp_add_recipient")]
74		public Smtp.Recipient add_recipient (string mailbox);
75		[CCode (cname="smtp_enumerate_recipients")]
76		public int enumerate_recipients (EnumerateRecipientCb cb);
77		[CCode (cname="smtp_set_header", sentinel="")]
78		public int set_header (string header, ...);
79		[CCode (cname="smtp_set_header_option")]
80		public int set_header_option (string header, Smtp.HeaderOption option, ...);
81		[CCode (cname="smtp_set_resent_headers")]
82		public int set_resent_headers (int onoff);
83		[CCode (cname="smtp_set_messagecb")]
84		public int set_messagecb (MessageCb cb);
85		[CCode (cname="smtp_message_transfer_status")]
86		public Smtp.Status transfer_status ();
87		[CCode (cname="smtp_reverse_path_status")]
88		public Smtp.Status reverse_path_status ();
89		[CCode (cname="smtp_message_reset_status")]
90		public static int reset_status (Smtp.Recipient recipient);
91		[CCode (cname="smtp_dsn_set_ret")]
92		public int dsn_set_ret (Smtp.RetFlags flags);
93		[CCode (cname="smtp_dsn_set_envid")]
94		public int dsn_set_envid (string envid);
95		[CCode (cname="smtp_dsn_set_notify")]
96		public int dsn_set_notify (NotifyFlags flags);
97		[CCode (cname="smtp_dsn_set_orcpt")]
98		public int dsn_set_orcpt (string address_type, string address);
99		[CCode (cname="smtp_size_set_estimate")]
100		public int smtp_size_set_estimate (ulong size);
101		[CCode (cname="smtp_8bitmime_set_body")]
102		public int @8bitmime_set_body (E8BitMimeBody body);
103		[CCode (cname="smtp_deliverby_set_mode")]
104		public int deliverby_set_mode (long time, ByMode mode, int trace);
105		[CCode (cname="smtp_starttls_enable")]
106		public int starttls_enable (StartTlsOption how);
107	}
108
109	[SimpleType]
110	[CCode (cname="smtp_session_t", free_function="g_free", has_type_id = false)]
111	public struct Recipient {
112		[CCode (cname="smtp_recipient_check_complete")]
113		public int check_complete ();
114		[CCode (cname="smtp_recipient_reset_status")]
115		public int reset_status ();
116		[CCode (cname="smtp_recipient_set_application_data")]
117		public void set_application_data (void *data);
118		[CCode (cname="smtp_recipient_get_application_data")]
119		public void get_application_data ();
120	}
121
122	[CCode (cname="smtp_status_t", has_type_id = false)]
123	public struct Status {
124		int code;
125		string text;
126		int enh_struct;
127		int enh_subject;
128		int enh_detail;
129	}
130
131	[SimpleType]
132	[CCode (cname="smtp_etrn_node_t", has_type_id = false)]
133	public struct EtrnNode {
134		[CCode (cname="smtp_etrn_node_status")]
135		public Smtp.Status node_status ();
136		[CCode (cname="smtp_etrn_set_application_data")]
137		public void* set_application_data (void *data);
138		[CCode (cname="smtp_etrn_get_application_data")]
139		public void* get_application_data ();
140	}
141
142	[SimpleType]
143	[CCode (cname="auth_context_t", cheader_filename="auth-client.h", free_function="auth_destroy_context", has_type_id = false)]
144	public struct AuthContext {
145		[CCode (cname="auth_set_mechanism_flags")]
146		public int set_mechanism_flags (uint @set, uint clear);
147		[CCode (cname="auth_set_mechanism_ssf")]
148		public int set_mechanism_ssf (int min_ssf);
149		[CCode (cname="auth_set_interact_cb")]
150		public int set_interact_cb (AuthInteract interact);
151		[CCode (cname="auth_client_enabled")]
152		public int client_enabled ();
153		[CCode (cname="auth_set_mechanism")]
154		public int set_mechanism (string name);
155		[CCode (cname="auth_mechanism_name")]
156		public string mechanism_name ();
157		[CCode (cname="auth_response")]
158		public string response (string challenge, int len);
159		[CCode (cname="auth_get_ssf")]
160		public int get_ssf ();
161		[CCode (cname="auth_set_external_id")]
162		public int set_external_id (string identity);
163	}
164
165	[CCode (cname="auth_client_request_t", cheader_filename="auth-client.h", has_type_id = false)]
166	public struct AuthClientRequest {
167		string name;
168		uint flags;
169		string prompt;
170		uint size;
171	}
172
173	// the "what" parameter must be 0
174	// if buf_len is not enough, SMTP_ERR_INVAL error will be set. 32 is generally enough
175	[CCode (cname="smtp_version")]
176	public static int version (string buf, string buf_len, int what);
177
178	[CCode (cname="smtp_errno")]
179	public static int errno ();
180
181	[CCode (cname="smtp_strerror")]
182	public static string strerror (int error, string buf, string buflen);
183
184	[CCode (cname="auth_client_init", cheader_filename="auth-client.h")]
185	public static void auth_client_init ();
186
187	[CCode (cname="auth_client_exit", cheader_filename="auth-client.h")]
188	public static void auth_client_exit ();
189
190	[CCode (cname="auth_encode", cheader_filename="auth-client.h")]
191	public static void auth_encode (out string dstbuf, out int dstlen, string srcbuf, int srclen, void *arg);
192
193	[CCode (cname="auth_decode", cheader_filename="auth-client.h")]
194	public static void auth_decode (out string dstbuf, out int dstlen, string srcbuf, int srclen, void *arg);
195
196	[CCode (cname="auth_create_context", cheader_filename="auth-client.h")]
197	public static AuthContext auth_create_context ();
198
199	[CCode (cname="smtp_enumerate_messagecb_t")]
200	public delegate void EnumerateMessageCb (Smtp.Message message);
201
202	[CCode (cname="smtp_enumerate_recipientcb_t")]
203	public delegate void EnumerateRecipientCb (Smtp.Recipient recipient, string mailbox);
204
205	[CCode (cname="smtp_messagecb_t")]
206	public delegate unowned string MessageCb (out string buf, out int len);
207
208	[CCode (cname="smtp_eventcb_t", instance_pos="2.5")]
209	public delegate void EventCb (Smtp.Session session, int event_no, ...);
210
211	[CCode (cname="smtp_monitorcb_t")]
212	public delegate void MonitorCb (string buf, int buflen, int writing);
213
214	[CCode (cname="smtp_starttls_passwordcb_t")]
215	public delegate int StartTlsPasswordCb (string buf, int buflen, int rwflag);
216
217	[CCode (cname="smtp_etrn_enumerate_nodecb_t")]
218	public delegate void EtrnEnumerateNodeCb (Smtp.EtrnNode node, int option, string domain);
219
220	[CCode (cname="auth_interact_t", cheader_filename="auth-client.h")]
221	public delegate int AuthInteract (AuthClientRequest request, out string result, int fields);
222
223	[CCode (cname="auth_response_t", cheader_filename="auth-client.h")]
224	public delegate string AuthResponse (void *ctx, string challenge, int len, AuthInteract interact);
225
226	[CCode (cname="auth_recode_t", cheader_filename="auth-client.h", has_target=false)]
227	public delegate int AuthRecode (void *ctx, out string dstbuf, out int dstlen, string srcbuf, int srclen);
228
229	[CCode (cname="header_option", cprefix="Hdr_", has_type_id = false)]
230	public enum HeaderOption {
231		OVERRIDE,
232		PROHIBIT
233	}
234
235	[CCode (cname="ret_flags", cprefix="Ret_", has_type_id = false)]
236	public enum RetFlags {
237		NOTSET,
238		FULL,
239		HDRS
240	}
241
242	[CCode (cname="notify_flags", cprefix="Notify_", has_type_id = false)]
243	public enum NotifyFlags {
244		NOTSET,
245		NEVER,
246		SUCCESS,
247		FAILURE,
248		DELAY
249	}
250
251	[CCode (cname="e8bitmime_body", cprefix="E8bitmime_", has_type_id = false)]
252	public enum E8BitMimeBody {
253		NOTSET,
254		@7BIT,
255		@8BITMIME,
256		BINARYMIME
257	}
258
259	[CCode (cname="by_mode", cprefix="By_", has_type_id = false)]
260	public enum ByMode {
261		NOTSET,
262		NOTIFY,
263		RETURN
264	}
265
266	[CCode (cname="starttls_option", cprefix="Starttls_", has_type_id = false)]
267	public enum StartTlsOption {
268		DISABLED,
269		ENABLED,
270		REQUIRED
271	}
272
273	[CCode (cname="SMTP_EV_CONNECT")]
274	public const uint EV_CONNECT;
275	[CCode (cname="SMTP_EV_MAILSTATUS")]
276	public const uint EV_MAILSTATUS;
277	[CCode (cname="SMTP_EV_RCPTSTATUS")]
278	public const uint EV_RCPTSTATUS;
279	[CCode (cname="SMTP_EV_MESSAGEDATA")]
280	public const uint EV_MESSAGEDATA;
281	[CCode (cname="SMTP_EV_MESSAGESENT")]
282	public const uint EV_MESSAGESENT;
283	[CCode (cname="SMTP_EV_DISCONNECT")]
284	public const uint EV_DISCONNECT;
285	[CCode (cname="SMTP_EV_ETRNSTATUS")]
286	public const uint EV_ETRNSTATUS;
287	[CCode (cname="SMTP_EV_EXTNA_DSN")]
288	public const uint EV_EXTNA_DSN;
289	[CCode (cname="SMTP_EV_EXTNA_8BITMIME")]
290	public const uint EV_EXTNA_8BITMIME;
291	[CCode (cname="SMTP_EV_EXTNA_STARTTLS")]
292	public const uint EV_EXTNA_STARTTLS;
293	[CCode (cname="SMTP_EV_EXTNA_ETRN")]
294	public const uint EV_EXTNA_ETRN;
295	[CCode (cname="SMTP_EV_EXTNA_CHUNKING")]
296	public const uint EV_EXTNA_CHUNKING;
297	[CCode (cname="SMTP_EV_EXTNA_BINARYMIME")]
298	public const uint EV_EXTNA_BINARYMIME;
299	[CCode (cname="SMTP_EV_DELIVERBY_EXPIRED")]
300	public const uint EV_DELIVERBY_EXPIRED;
301	[CCode (cname="SMTP_EV_WEAK_CIPHER")]
302	public const uint EV_WEAK_CIPHER;
303	[CCode (cname="SMTP_EV_STARTTLS_OK")]
304	public const uint EV_STARTTLS_OK;
305	[CCode (cname="SMTP_EV_INVALID_PEER_CERTIFICATE")]
306	public const uint EV_INVALID_PEER_CERTIFICATE;
307	[CCode (cname="SMTP_EV_NO_PEER_CERTIFICATE")]
308	public const uint EV_NO_PEER_CERTIFICATE;
309	[CCode (cname="SMTP_EV_WRONG_PEER_CERTIFICATE")]
310	public const uint EV_WRONG_PEER_CERTIFICATE;
311	[CCode (cname="SMTP_EV_NO_CLIENT_CERTIFICATE")]
312	public const uint EV_NO_CLIENT_CERTIFICATE;
313	[CCode (cname="SMTP_EV_UNUSABLE_CLIENT_CERTIFICATE")]
314	public const uint EV_UNUSABLE_CLIENT_CERTIFICATE;
315	[CCode (cname="SMTP_EV_UNUSABLE_CA_LIST")]
316	public const uint EV_UNUSABLE_CA_LIST;
317
318	[CCode (cname="Timeout_OVERRIDE_RFC2822_MINIMUM")]
319	public const long TIMEOUT_OVERRIDE_RFC2822_MINIMUM;
320
321	[CCode (cname="SMTP_ERR_NOTHING_TO_DO")]
322	public const uint ERR_NOTHING_TO_DO;
323	[CCode (cname="SMTP_ERR_DROPPED_CONNECTION")]
324	public const uint ERR_DROPPED_CONNECTION;
325	[CCode (cname="SMTP_ERR_INVALID_RESPONSE_SYNTAX")]
326	public const uint ERR_INVALID_RESPONSE_SYNTAX;
327	[CCode (cname="SMTP_ERR_STATUS_MISMATCH")]
328	public const uint ERR_STATUS_MISMATCH;
329	[CCode (cname="SMTP_ERR_INVALID_RESPONSE_STATUS")]
330	public const uint ERR_INVALID_RESPONSE_STATUS;
331	[CCode (cname="SMTP_ERR_INVAL")]
332	public const uint ERR_INVAL;
333	[CCode (cname="SMTP_ERR_EXTENSION_NOT_AVAILABLE")]
334	public const uint ERR_EXTENSION_NOT_AVAILABLE;
335	[CCode (cname="SMTP_ERR_HOST_NOT_FOUND")]
336	public const uint ERR_HOST_NOT_FOUND;
337	[CCode (cname="SMTP_ERR_NO_ADDRESS")]
338	public const uint ERR_NO_ADDRESS;
339	[CCode (cname="SMTP_ERR_NO_RECOVERY")]
340	public const uint ERR_NO_RECOVERY;
341	[CCode (cname="SMTP_ERR_TRY_AGAIN")]
342	public const uint ERR_TRY_AGAIN;
343	[CCode (cname="SMTP_ERR_EAI_AGAIN")]
344	public const uint ERR_EAI_AGAIN;
345	[CCode (cname="SMTP_ERR_EAI_FAIL")]
346	public const uint ERR_EAI_FAIL;
347	[CCode (cname="SMTP_ERR_EAI_MEMORY")]
348	public const uint ERR_EAI_MEMORY;
349	[CCode (cname="SMTP_ERR_EAI_ADDRFAMILY")]
350	public const uint ERR_EAI_ADDRFAMILY;
351	[CCode (cname="SMTP_ERR_EAI_NODATA")]
352	public const uint ERR_EAI_NODATA;
353	[CCode (cname="SMTP_ERR_EAI_FAMILY")]
354	public const uint ERR_EAI_FAMILY;
355	[CCode (cname="SMTP_ERR_EAI_BADFLAGS")]
356	public const uint ERR_EAI_BADFLAGS;
357	[CCode (cname="SMTP_ERR_EAI_NONAME")]
358	public const uint ERR_EAI_NONAME;
359	[CCode (cname="SMTP_ERR_EAI_SERVICE")]
360	public const uint ERR_EAI_SERVICE;
361	[CCode (cname="SMTP_ERR_EAI_SOCKTYPE")]
362	public const uint ERR_EAI_SOCKTYPE;
363	[CCode (cname="SMTP_ERR_UNTERMINATED_RESPONSE")]
364	public const uint ERR_UNTERMINATED_RESPONSE;
365	[CCode (cname="SMTP_ERR_CLIENT_ERROR")]
366	public const uint ERR_CLIENT_ERROR;
367	[CCode (cname="SMTP_CB_READING")]
368	public const uint CB_READING;
369	[CCode (cname="SMTP_CB_WRITING")]
370	public const uint CB_WRITING;
371	[CCode (cname="SMTP_CB_HEADERS")]
372	public const uint CB_HEADERS;
373
374	[CCode (cname="AUTH_USER", cheader_filename="auth-client.h")]
375	public static uint AUTH_USER;
376	[CCode (cname="AUTH_REALM", cheader_filename="auth-client.h")]
377	public static uint AUTH_REALM;
378	[CCode (cname="AUTH_PASS", cheader_filename="auth-client.h")]
379	public static uint AUTH_PASS;
380
381	[CCode (cname="AUTH_PLUGIN_ANONYMOUS", cheader_filename="auth-client.h")]
382	public static uint AUTH_PLUGIN_ANONYMOUS;
383	[CCode (cname="AUTH_PLUGIN_PLAIN", cheader_filename="auth-client.h")]
384	public static uint AUTH_PLUGIN_PLAIN;
385	[CCode (cname="AUTH_PLUGIN_EXTERNAL", cheader_filename="auth-client.h")]
386	public static uint AUTH_PLUGIN_EXTERNAL;
387}
388