4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 /******************************************************************************
24 * File : email-internal-types.h
25 * Desc : defines data structures and macros
30 * 2011.04.05 : created
31 *****************************************************************************/
32 #ifndef __EMAIL_INTERNAL_TYPES_H__
33 #define __EMAIL_INTERNAL_TYPES_H__
35 #include "email-types.h"
40 #endif /* __cplusplus */
43 #define INTERNAL_FUNC __attribute__((visibility("default")))
46 /* ----------------------------------------------------------------------------- */
47 /* Feature definitions */
48 #define __FEATURE_USING_ACCOUNT_SVC_FOR_SYNC_STATUS__
49 #define __FEATURE_BACKUP_ACCOUNT__
50 #define __FEATURE_MOVE_TO_OUTBOX_FIRST__
51 /* #define __FEATURE_PARTIAL_BODY_FOR_POP3__ */
52 /* #define __FEATURE_KEEP_CONNECTION__ */
53 /* #define __FEATURE_DRM__ */
54 #define __FEATURE_PARTIAL_BODY_DOWNLOAD__
55 #define __FEATURE_HEADER_OPTIMIZATION__
56 #define __FEATURE_SEND_OPTMIZATION__
57 #define __FEATURE_DOWNLOAD_BODY_ATTACHMENT_OPTIMIZATION__
58 #define __FEATURE_BULK_DELETE_MOVE_UPDATE_REQUEST_OPTI__
59 #define __FEATURE_SYNC_CLIENT_TO_SERVER__
60 #define __FEATURE_AUTO_POLLING__
61 #define __FEATURE_DEBUG_LOG__
62 #define __FEATURE_USE_SHARED_MUTEX_FOR_GENERATING_MAIL_ID__
63 #define __FEATURE_XLIST_SUPPORT__
64 #define __FEATURE_SUPPORT_REPORT_MAIL__
65 #define __FEATURE_SUPPORT_IMAP_ID__
66 #define __FEATURE_SUPPORT_SYNC_STATE_ON_NOTI_BAR__
67 #define __FEATURE_SUPPORT_VALIDATION_SYSTEM__
68 #define __FEATURE_PROGRESS_IN_OUTBOX__
69 #define __FEATURE_OMA_EMN__
70 /* #define __FEATURE_USE_SHARED_MUTEX_FOR_PROTECTED_FUNC_CALL__ */
71 /* #define __FEATURE_IMAP_IDLE__ */
72 #define __FEATURE_DRIVING_MODE__
73 /* #define __FEATURE_DELETE_MAILBOX_RECURSIVELY__ */
74 /* #define __FEATURE_RENAME_MAILBOX_RECURSIVELY__ */
76 /*#define __FEATURE_BODY_SEARCH__*/
78 /* ----------------------------------------------------------------------------- */
81 #define NULL (char *)0
84 #define SESSION_MAX 10
85 #define IMAP_2004_LOG 1
87 #define MAILBOX_COUNT 6
88 #define PARTIAL_DOWNLOAD_SIZE 1024
89 #define PARTIAL_BODY_SIZE_IN_BYTES 15360 /* Partial Body download - 15K */
90 #define NO_LIMITATION 0
91 #define MAX_MAILBOX_TYPE 100
92 #define EMAIL_SYNC_ALL_MAILBOX 1
93 #define EMAIL_ATTACHMENT_MAX_COUNT 512
94 #define DOWNLOAD_MAX_BUFFER_SIZE 8000
95 #define LOCAL_MAX_BUFFER_SIZE 1000000
96 #define IMAP_MAX_COMMAND_LENGTH 1000
97 #define DOWNLOAD_NOTI_INTERVAL_PERCENT 5 /* notify every 5% */
98 #define DOWNLOAD_NOTI_INTERVAL_SIZE 51200 /* notify every 50k */
99 #define MAX_PATH 4096 /* /usr/src/linux-2.4.20-8/include/linux/limits.h */
100 #define DATETIME_LENGTH 16
101 #define MAIL_ID_STRING_LENGTH 10
102 #define MAILBOX_ID_STRING_LENGTH 10
103 #define EMAIL_LIMITATION_FREE_SPACE (5) /* This value is 5MB */
104 #define EMAIL_MAIL_MAX_COUNT 5000
105 #define HTML_EXTENSION_STRING ".htm"
106 #define MAX_PATH_HTML 256
107 #define MAX_ACTIVE_TASK 10
109 #define DIR_SEPERATOR "/"
111 #define USERDATA_PATH "/opt/usr"
112 #define DATA_PATH "/opt/usr/data"
113 #define DB_PATH "/opt/usr/dbspace"
114 #define EMAIL_SERVICE_DB_FILE_PATH "/opt/usr/dbspace/.email-service.db"
116 #define EMAILPATH DATA_PATH"/email"
117 #define MAILHOME DATA_PATH"/email/.email_data"
118 #define MAILTEMP MAILHOME"/tmp"
119 #define DIRECTORY_PERMISSION 0755
121 #define MIME_SUBTYPE_DRM_OBJECT "vnd.oma.drm.message"
122 #define MIME_SUBTYPE_DRM_RIGHTS "vnd.oma.drm.rights+xml"
123 #define MIME_SUBTYPE_DRM_DCF "vnd.oma.drm.dcf"
125 #define SHM_FILE_FOR_DB_LOCK "/.email_shm_db_lock"
127 #define NATIVE_EMAIL_APPLICATION_PKG "com.samsung.email"
128 #define NATIVE_EMAIL_DOMAIN "email"
130 #define IMAP_ID_OS "TIZEN"
131 #define IMAP_ID_OS_VERSION "2.0b"
132 #define IMAP_ID_VENDOR "Samsung Mobile"
133 #define IMAP_ID_DEVICE_NAME "GT-I8800_EUR_XX"
134 #define IMAP_ID_AGUID "1"
135 #define IMAP_ID_ACLID "Samsung"
137 #ifdef __FEATURE_USE_SHARED_MUTEX_FOR_GENERATING_MAIL_ID__
138 #define SHM_FILE_FOR_MAIL_ID_LOCK "/.email_shm_mail_id_lock"
139 #endif /* __FEATURE_USE_SHARED_MUTEX_FOR_GENERATING_MAIL_ID__ */
145 #define NULL_CHAR '\0'
146 #define TAB_STRING "\t"
147 #define CR_STRING "\r"
148 #define LF_STRING "\n"
149 #define CRLF_STRING "\r\n"
151 #define GRAB_TYPE_TEXT 1 /* retrieve text and attachment list */
152 #define GRAB_TYPE_ATTACHMENT 2 /* retrieve attachment */
154 #define SAVE_TYPE_SIZE 1 /* only get content size */
155 #define SAVE_TYPE_BUFFER 2 /* save content to buffer */
156 #define SAVE_TYPE_FILE 3 /* save content to temporary file */
158 #define FINISH_OFF_IF_CANCELED if (!emcore_check_thread_status()) { err = EMAIL_ERROR_CANCELLED; goto FINISH_OFF; }
159 #define CHECK_JOB_CANCELED() {if (!emcore_check_thread_status()) goto JOB_CANCEL; }
161 #define SNPRINTF(buff, size, format, args...) snprintf(buff, size, format, ##args)
162 #define SNPRINTF_OFFSET(base_buf, offset, base_size, format, args...) \
164 int _offset = offset;\
165 snprintf(base_buf + _offset, base_size - _offset - 1, format, ##args);\
168 #define THREAD_CREATE(tv, func, param, err) { EM_DEBUG_LOG("THREAD_CREATE "#tv); err = pthread_create(&tv, NULL, func, param); }
169 #define THREAD_CREATE_JOINABLE(tv, func, err) { pthread_attr_t attr; EM_DEBUG_LOG("THREAD_CREATE_JOINABLE "#tv); \
170 pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);\
171 err = pthread_create(&tv, &attr, func, NULL); pthread_attr_destroy(&attr); }
172 #define THREAD_JOIN(tv) {EM_DEBUG_LOG("THREAD_JOIN "#tv); pthread_join(tv, NULL); }
173 #define THREAD_SELF() pthread_self()
174 #define THREAD_DETACH(tv) pthread_detach(tv)
175 #define INITIALIZE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("INITIALIZE_CRITICAL_SECTION "#cs); pthread_mutex_init(&cs, NULL); }
176 #define ENTER_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("ENTER_CRITICAL_SECTION "#cs); pthread_mutex_lock(&cs); }
177 #define TRY_ENTER_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("TRY_ENTER_CRITICAL_SECTION "#cs); pthread_mutex_trylock(&cs); }
178 #define LEAVE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("LEAVE_CRITICAL_SECTION "#cs); pthread_mutex_unlock(&cs); }
179 #define DELETE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("DELETE_CRITICAL_SECTION "#cs); pthread_mutex_destroy(&cs); }
181 #define INITIALIZE_CONDITION_VARIABLE(cv) {EM_DEBUG_LOG("INITIALIZE_CONDITION_VARIABLE "#cv); pthread_cond_init(&cv, NULL); }
182 #define SLEEP_CONDITION_VARIABLE(cv, cs) {EM_DEBUG_LOG("SLEEP_CONDITION_VARIABLE "#cv); pthread_cond_wait(&cv, &cs); }
183 #define WAKE_CONDITION_VARIABLE(cv) {EM_DEBUG_LOG("WAKE_CONDITION_VARIABLE "#cv); pthread_cond_signal(&cv); }
184 #define DELETE_CONDITION_VARIABLE(cv) {EM_DEBUG_LOG("DELETE_CONDITION_VARIABLE "#cv); pthread_cond_destroy(&cv); }
186 #define INITIALIZE_RECURSIVE_CRITICAL_SECTION(cs) { EM_DEBUG_LOG("INITIALIZE_RECURSIVE_CRITICAL_SECTION "#cs); \
187 if (cs == NULL) {pthread_mutex_lock(&_send_event_available_lock); pthread_mutexattr_t attr; cs = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));\
188 pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);\
189 pthread_mutex_init(cs, &attr);pthread_mutexattr_destroy(&attr); pthread_mutex_unlock(&_send_event_available_lock);}}
190 #define ENTER_RECURSIVE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("ENTER_RECURSIVE_CRITICAL_SECTION "#cs); if(cs) pthread_mutex_lock(cs);}
191 #define TRY_ENTER_RECURSIVE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("TRY_ENTER_RECURSIVE_CRITICAL_SECTION "#cs); if(cs) pthread_mutex_trylock(cs);}
192 #define LEAVE_RECURSIVE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("LEAVE_RECURSIVE_CRITICAL_SECTION "#cs); if(cs) pthread_mutex_unlock(cs);}
193 #define DELETE_RECURSIVE_CRITICAL_SECTION(cs) {EM_DEBUG_LOG("DELETE_RECURSIVE_CRITICAL_SECTION "#cs); if(cs) pthread_mutex_destroy(cs);}
194 typedef pthread_t thread_t;
196 #define SMTP_RESPONSE_OK 250
197 #define SMTP_RESPONSE_READY 354
198 #define SMTP_RESPONSE_CONNECTION_BROKEN 421
199 #define SMTP_RESPONSE_WANT_AUTH 505
200 #define SMTP_RESPONSE_WANT_AUTH2 530
201 #define SMTP_RESPONSE_UNAVAIL 550
203 #define VCONF_KEY_LATEST_MAIL_ID "db/private/email-service/latest_mail_id"
204 #define VCONF_KEY_DEFAULT_ACCOUNT_ID "db/private/email-service/default_account_id"
205 #define VCONF_KEY_NOTI_PRIVATE_ID "db/private/email-service/noti_private_id"
211 #define TYPEPKCS7_SIGN 10
212 #define TYPEPKCS7_MIME 11
214 #define INLINE_ATTACHMENT 1
217 #define EMAIL_ALARM_CLASS_SCHEDULED_SENDING 1
218 #define EMAIL_ALARM_CLASS_NEW_MAIL_ALERT 2
219 #define EMAIL_ALARM_CLASS_AUTO_POLLING 3
221 /* __FEATURE_LOCAL_ACTIVITY__ supported
222 #define BULK_OPERATION_COUNT 50
223 #define ALL_ACTIVITIES 0
226 /* ----------------------------------------------------------------------------- */
230 _SERVICE_THREAD_TYPE_NONE = 0,
231 _SERVICE_THREAD_TYPE_RECEIVING = 1,
232 _SERVICE_THREAD_TYPE_SENDING = 2,
233 #ifdef __FEATURE_PARTIAL_BODY_DOWNLOAD__
234 _SERVICE_THREAD_TYPE_PBD = 3,
235 #endif /* __FEATURE_PARTIAL_BODY_DOWNLOAD__ */
236 } email_service_thread_type;
241 EMAIL_PROTOCOL_NONE = 0,
242 EMAIL_PROTOCOL_POP3 = 1,
243 EMAIL_PROTOCOL_IMAP = 2,
244 EMAIL_PROTOCOL_SMTP = 3,
245 } email_protocol_type_t;
249 ACCOUNT_SVC_SYNC_STATUS_RUNNING = 0,
250 ACCOUNT_SVC_SYNC_STATUS_IDLE = 1,
251 ACCOUNT_SVC_SYNC_STATUS_OFF = 2,
252 } email_account_svc_sync_status;
258 SET_TYPE_INTERSECT = 4 /* Not supported */
261 #ifdef __FEATURE_KEEP_CONNECTION__
264 EMAIL_STREAM_STATUS_DISCONNECTED = 0,
265 EMAIL_STREAM_STATUS_CONNECTED = 1
267 #endif /* __FEATURE_KEEP_CONNECTION__ */
284 /* event information */
287 int account_id; /* in general, account id */
288 email_event_type_t type;
289 email_event_status_type_t status;
290 char *event_param_data_1; /* in general, mailbox name (exception in emcore_send_mail, emcore_send_saved_mail it is email_option_t **/
291 char *event_param_data_2;
292 char *event_param_data_3;
293 int event_param_data_4;
294 int event_param_data_5;
295 int event_param_data_6; /* in general, notification parameter #1 */
296 int event_param_data_7; /* in general, notification parameter #2 */
297 int event_param_data_8;
305 } email_callback_holder_t;
308 typedef struct email_search_key_t email_search_key_t;
309 struct email_search_key_t
313 email_search_key_t *next;
319 email_protocol_type_t protocol;
329 int mailbox_id; /**< Unique id on mailbox table.*/
330 char *mailbox_name; /**< Specifies the path of mailbox.*/
331 email_mailbox_type_e mailbox_type; /**< Specifies the type of mailbox */
332 char *alias; /**< Specifies the display name of mailbox.*/
333 int unread_count; /**< Specifies the Unread Mail count in the mailbox.*/
334 int total_mail_count_on_local; /**< Specifies the total number of mails in the mailbox in the local DB.*/
335 int total_mail_count_on_server; /**< Specifies the total number of mails in the mailbox in the mail server.*/
336 int local; /**< Specifies the local mailbox.*/
337 int synchronous; /**< Specifies the mailbox with synchronized the server.*/
338 int account_id; /**< Specifies the account ID for mailbox.*/
339 int has_archived_mails; /**< Specifies the archived mails.*/
340 int mail_slot_size; /**< Specifies how many mails can be stored in local mailbox.*/
341 int no_select; /**< Specifies the 'no_select' attribute from xlist.*/
342 void *user_data; /**< Specifies the internal data.*/
343 void *mail_stream; /**< Specifies the internal data.*/
344 } email_internal_mailbox_t;
346 #ifdef __FEATURE_KEEP_CONNECTION__
347 typedef struct email_connection_info
350 int sending_server_stream_status;
351 void *sending_server_stream;
352 int receiving_server_stream_status;
353 void *receiving_server_stream;
354 struct email_connection_info *next;
355 } email_connection_info_t;
356 #endif /* __FEATURE_KEEP_CONNECTION__ */
365 } email_mail_contact_info_t;
367 /* global account list */
368 typedef struct email_account_list {
369 email_account_t *account;
370 struct email_account_list *next;
371 } email_account_list_t;
375 email_task_type_t task_type;
377 } email_active_task_t;
380 typedef void (*email_event_callback)(int total, int done, int status, int account_id, int mail_id, int handle, void *user_data, int error);
382 /* ----------------------------------------------------------------------------- */
383 /* Please contact Himanshu [h.gahlaut@samsung.com] for any explanation in code here under __FEATURE_PARTIAL_BODY_DOWNLOAD__ MACRO */
384 #ifdef __FEATURE_PARTIAL_BODY_DOWNLOAD__
387 ACTIVITY_PARTIAL_BODY_DOWNLOAD_IMAP4 = 1,
388 ACTIVITY_PARTIAL_BODY_DOWNLOAD_POP3_WAIT,
389 ACTIVITY_PARTIAL_BODY_DOWNLOAD_POP3_ACTIVE
390 } email_pdb_activity_type_e;
396 unsigned long server_mail_id;
400 email_event_type_t event_type; /* Event Type Null means event is created from local activitys */
401 int activity_type; /* Activity Type Null means event is created from event queue */
403 } email_event_partial_body_thd;
404 #endif /* __FEATURE_PARTIAL_BODY_DOWNLOAD__ */
408 #endif /* __cplusplus */
410 #endif /* __EMAIL_INTERNAL_TYPES_H__ */