summaryrefslogtreecommitdiffabout
path: root/libetpan/include/libetpan/mailengine.h
blob: acb6a165296358c2fecf346514c9ef8f976c19a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/*
 * libEtPan! -- a mail library
 *
 * Copyright (C) 2001, 2005 - DINH Viet Hoa
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the libEtPan! project nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * $Id$
 */

#ifndef MAILENGINE_H

#define MAILENGINE_H

#include <libetpan/mailmessage.h>
#include <libetpan/mailfolder.h>
#include <libetpan/mailprivacy_types.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
  to run things in thread, you must protect the storage again concurrency.
*/


/*
  storage data
*/

struct mailengine *
libetpan_engine_new(struct mailprivacy * privacy);

void libetpan_engine_free(struct mailengine * engine);


struct mailprivacy *
libetpan_engine_get_privacy(struct mailengine * engine);


/*
  message ref and unref
*/

/*
  these function can only take messages returned by get_msg_list()
  as arguments.
  
  these functions cannot fail.
*/

int libetpan_message_ref(struct mailengine * engine,
    mailmessage * msg);

int libetpan_message_unref(struct mailengine * engine,
    mailmessage * msg);


/*
  when you want to access the MIME structure of the message
  with msg->mime, you have to call libetpan_message_mime_ref()
  and libetpan_message_mime_unref() when you have finished.
  
  if libetpan_mime_ref() returns a value <= 0, it means this failed.
  the value is -MAIL_ERROR_XXX
*/

int libetpan_message_mime_ref(struct mailengine * engine,
    mailmessage * msg);

int libetpan_message_mime_unref(struct mailengine * engine,
    mailmessage * msg);

/*
  message list
*/

/*
  libetpan_folder_get_msg_list()
  
  This function returns two list.
  - List of lost message (the messages that were previously returned
    but that does no more exist) (p_lost_msg_list)
  - List of valid messages (p_new_msg_list).

  These two list can only be freed by libetpan_folder_free_msg_list()
*/

int libetpan_folder_get_msg_list(struct mailengine * engine,
    struct mailfolder * folder,
    struct mailmessage_list ** p_new_msg_list,
    struct mailmessage_list ** p_lost_msg_list);

int libetpan_folder_fetch_env_list(struct mailengine * engine,
    struct mailfolder * folder,
    struct mailmessage_list * msg_list);

void libetpan_folder_free_msg_list(struct mailengine * engine,
    struct mailfolder * folder,
    struct mailmessage_list * env_list);


/*
  connect and disconnect storage
*/

int libetpan_storage_add(struct mailengine * engine,
    struct mailstorage * storage);

void libetpan_storage_remove(struct mailengine * engine,
    struct mailstorage * storage);

int libetpan_storage_connect(struct mailengine * engine,
    struct mailstorage * storage);

void libetpan_storage_disconnect(struct mailengine * engine,
    struct mailstorage * storage);

int libetpan_storage_used(struct mailengine * engine,
    struct mailstorage * storage);


/*
  libetpan_folder_connect()
  libetpan_folder_disconnect()
  
  You can disconnect the folder only when you have freed all the message
  you were given.
*/

int libetpan_folder_connect(struct mailengine * engine,
    struct mailfolder * folder);

void libetpan_folder_disconnect(struct mailengine * engine,
    struct mailfolder * folder);


struct mailfolder *
libetpan_message_get_folder(struct mailengine * engine,
    mailmessage * msg);

struct mailstorage *
libetpan_message_get_storage(struct mailengine * engine,
    mailmessage * msg);


/*
  register a message
*/

int libetpan_message_register(struct mailengine * engine,
    struct mailfolder * folder,
    mailmessage * msg);


void libetpan_engine_debug(struct mailengine * engine, FILE * f);

extern void * engine_app;

#ifdef __cplusplus
}
#endif

#endif