Remove inclusion of sys/socket.h from nntp-thread.c
[claws.git] / src / plugins / managesieve / managesieve.h
blob9aef759c74b7ed1971322bfcd200c69efe99165a
1 /*
2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2015 the Claws Mail team
4 * Copyright (C) 2014-2015 Charles Lehner
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #ifndef MANAGESIEVE_H
22 #define MANAGESIEVE_H
24 #include "prefs_account.h"
25 #include "socket.h"
26 #include "session.h"
28 #define SIEVE_SESSION(obj) ((SieveSession *)obj)
29 #define SIEVE_PORT 4190
31 typedef struct SieveSession SieveSession;
32 typedef struct SieveCommand SieveCommand;
33 typedef struct SieveScript SieveScript;
34 typedef struct SieveResult SieveResult;
36 typedef enum
38 SE_OK = 0,
39 SE_ERROR = 128,
40 SE_UNRECOVERABLE = 129,
41 SE_AUTHFAIL = 130
42 } SieveErrorValue;
44 typedef enum
46 SIEVEAUTH_NONE = 0,
47 SIEVEAUTH_REUSE = 1,
48 SIEVEAUTH_CUSTOM = 2
49 } SieveAuth;
51 typedef enum
53 SIEVEAUTH_AUTO = 0,
54 SIEVEAUTH_PLAIN = 1 << 0,
55 SIEVEAUTH_LOGIN = 1 << 1,
56 SIEVEAUTH_CRAM_MD5 = 1 << 2,
57 } SieveAuthType;
59 typedef enum
61 SIEVE_CAPABILITIES,
62 SIEVE_READY,
63 SIEVE_LISTSCRIPTS,
64 SIEVE_STARTTLS,
65 SIEVE_NOOP,
66 SIEVE_RETRY_AUTH,
67 SIEVE_AUTH,
68 SIEVE_AUTH_PLAIN,
69 SIEVE_AUTH_LOGIN_USER,
70 SIEVE_AUTH_LOGIN_PASS,
71 SIEVE_AUTH_CRAM_MD5,
72 SIEVE_RENAMESCRIPT,
73 SIEVE_SETACTIVE,
74 SIEVE_GETSCRIPT,
75 SIEVE_GETSCRIPT_DATA,
76 SIEVE_PUTSCRIPT,
77 SIEVE_DELETESCRIPT,
78 SIEVE_ERROR,
79 SIEVE_DISCONNECTED,
81 N_SIEVE_PHASE
82 } SieveState;
84 typedef enum
86 SIEVE_CODE_NONE,
87 SIEVE_CODE_WARNINGS,
88 SIEVE_CODE_TRYLATER,
89 SIEVE_CODE_UNKNOWN
90 } SieveResponseCode;
92 typedef enum {
93 SIEVE_TLS_NO,
94 SIEVE_TLS_MAYBE,
95 SIEVE_TLS_YES
96 } SieveTLSType;
98 typedef void (*sieve_session_cb_fn) (SieveSession *session, gpointer data);
99 typedef void (*sieve_session_data_cb_fn) (SieveSession *session,
100 gboolean aborted, gpointer cb_data, gpointer user_data);
101 typedef void (*sieve_session_error_cb_fn) (SieveSession *session,
102 const gchar *msg, gpointer user_data);
103 typedef void (*sieve_session_connected_cb_fn) (SieveSession *session,
104 gboolean connected, gpointer user_data);
106 struct SieveSession
108 Session session;
109 PrefsAccount *account;
110 struct SieveAccountConfig *config;
111 SieveState state;
112 gboolean authenticated;
113 GSList *send_queue;
114 SieveErrorValue error;
115 SieveCommand *current_cmd;
116 guint octets_remaining;
118 gboolean use_auth;
119 SieveAuthType avail_auth_type;
120 SieveAuthType forced_auth_type;
121 SieveAuthType auth_type;
123 gchar *host;
124 gushort port;
125 gchar *user;
126 gchar *pass;
128 #ifdef USE_GNUTLS
129 gboolean tls_init_done;
130 #endif
132 struct {
133 gboolean starttls;
134 } capability;
136 sieve_session_error_cb_fn on_error;
137 sieve_session_connected_cb_fn on_connected;
138 gpointer cb_data;
141 struct SieveCommand {
142 SieveSession *session;
143 SieveState next_state;
144 gchar *msg;
145 sieve_session_data_cb_fn cb;
146 gpointer data;
149 struct SieveScript {
150 gchar *name;
151 gboolean active;
154 struct SieveResult {
155 gboolean has_status;
156 gboolean success;
157 SieveResponseCode code;
158 gchar *description;
159 gboolean has_octets;
160 guint octets;
163 void sieve_sessions_close();
165 void sieve_account_prefs_updated(PrefsAccount *account);
166 SieveSession *sieve_session_get_for_account(PrefsAccount *account);
167 void sieve_sessions_discard_callbacks(gpointer user_data);
168 void sieve_session_handle_status(SieveSession *session,
169 sieve_session_error_cb_fn on_error,
170 sieve_session_connected_cb_fn on_connected,
171 gpointer data);
172 void sieve_session_list_scripts(SieveSession *session,
173 sieve_session_data_cb_fn got_script_name_cb, gpointer data);
174 void sieve_session_set_active_script(SieveSession *session,
175 const gchar *filter_name,
176 sieve_session_data_cb_fn cb, gpointer data);
177 void sieve_session_rename_script(SieveSession *session,
178 const gchar *name_old, const char *name_new,
179 sieve_session_data_cb_fn cb, gpointer data);
180 void sieve_session_get_script(SieveSession *session, const gchar *filter_name,
181 sieve_session_data_cb_fn cb, gpointer data);
182 void sieve_session_put_script(SieveSession *session, const gchar *filter_name,
183 gint len, const gchar *script_contents,
184 sieve_session_data_cb_fn cb, gpointer data);
185 void sieve_session_check_script(SieveSession *session,
186 gint len, const gchar *script_contents,
187 sieve_session_data_cb_fn cb, gpointer data);
188 void sieve_session_delete_script(SieveSession *session,
189 const gchar *filter_name,
190 sieve_session_data_cb_fn cb, gpointer data);
192 #endif /* MANAGESIEVE_H */