4 * Copyright (c) 2000 - 2011 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.
25 #include "email-convert.h"
26 #include "email-core-mail.h"
27 #include "email-debug-log.h"
28 #include "email-core-utils.h"
29 #include "email-utilities.h"
30 #include "email-storage.h"
39 #define fATTACHMENT 0x40
42 INTERNAL_FUNC int em_convert_mail_flag_to_int(emf_mail_flag_t flag, int *i_flag, int *err_code)
44 EM_DEBUG_FUNC_BEGIN("i_flag[%p], err_code[%p]", i_flag, err_code);
48 *err_code = EMF_ERROR_INVALID_PARAM;
54 (flag.seen ? fSEEN : 0) |
55 (flag.deleted ? fDELETED : 0) |
56 (flag.flagged ? fFLAGGED : 0) |
57 (flag.answered ? fANSWERED : 0) |
58 (flag.recent ? fOLD : 0) |
59 (flag.draft ? fDRAFT : 0) |
60 (flag.has_attachment ? fATTACHMENT : 0) |
61 (flag.forwarded ? fFORWARD : 0) ;
67 INTERNAL_FUNC int em_convert_mail_int_to_flag(int i_flag, emf_mail_flag_t* flag, int* err_code)
69 EM_DEBUG_FUNC_BEGIN("i_flag[0x%02x], flag[%p], err_code[%p]", i_flag, flag, err_code);
72 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
74 *err_code = EMF_ERROR_INVALID_PARAM;
78 flag->seen = (i_flag & fSEEN ? 1 : 0);
79 flag->deleted = (i_flag & fDELETED ? 1 : 0);
80 flag->flagged = (i_flag & fFLAGGED ? 1 : 0);
81 flag->answered = (i_flag & fANSWERED ? 1 : 0);
82 flag->recent = (i_flag & fOLD ? 1 : 0);
83 flag->draft = (i_flag & fDRAFT ? 1 : 0);
84 flag->has_attachment = (i_flag & fATTACHMENT ? 1 : 0);
85 flag->forwarded = (i_flag & fFORWARD ? 1 : 0);
87 EM_DEBUG_FUNC_END("FLAGS : seen[%d], deleted[%d], flagged[%d], answered[%d], recent[%d], draft[%d], has_attachment[%d], forwarded[%d]",
88 flag->seen, flag->deleted, flag->flagged, flag->answered, flag->recent, flag->draft, flag->has_attachment, flag->forwarded);
93 INTERNAL_FUNC int em_convert_mail_tbl_to_mail_status(emstorage_mail_tbl_t *mail_tbl_data, int *result_mail_status, int* err_code)
95 EM_DEBUG_FUNC_BEGIN("mail_tbl_data[%p], result_mail_status [%p], err_code[%p]", mail_tbl_data, result_mail_status, err_code);
96 int ret = false, error_code = EMF_ERROR_NONE;
97 int has_attachment = 0;
99 if(!mail_tbl_data || !result_mail_status) {
100 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
101 error_code = EMF_ERROR_INVALID_PARAM;
105 has_attachment = (mail_tbl_data->attachment_count > mail_tbl_data->inline_content_count) ? 1 : 0;
107 *result_mail_status = (mail_tbl_data->flags_seen_field ? fSEEN : 0) |
108 (mail_tbl_data->flags_deleted_field ? fDELETED : 0) |
109 (mail_tbl_data->flags_flagged_field ? fFLAGGED : 0) |
110 (mail_tbl_data->flags_answered_field ? fANSWERED : 0) |
111 (mail_tbl_data->flags_recent_field ? fOLD : 0) |
112 (mail_tbl_data->flags_draft_field ? fDRAFT : 0) |
113 (has_attachment ? fATTACHMENT : 0) |
114 (mail_tbl_data->flags_forwarded_field ? fFORWARD : 0);
118 if (err_code != NULL)
119 *err_code = error_code;
121 EM_DEBUG_FUNC_END("ret [%d]", ret);
125 INTERNAL_FUNC int em_convert_mail_status_to_mail_tbl(int mail_status, emstorage_mail_tbl_t *result_mail_tbl_data, int* err_code)
127 EM_DEBUG_FUNC_BEGIN("mail_status[%d], result_mail_tbl_data [%p], err_code[%p]", mail_status, result_mail_tbl_data, err_code);
128 int ret = false, error_code = EMF_ERROR_NONE;
130 if(!result_mail_tbl_data) {
131 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
132 error_code = EMF_ERROR_INVALID_PARAM;
136 result_mail_tbl_data->flags_seen_field = (mail_status & fSEEN ? 1 : 0);
137 result_mail_tbl_data->flags_deleted_field = (mail_status & fDELETED ? 1 : 0);
138 result_mail_tbl_data->flags_flagged_field = (mail_status & fFLAGGED ? 1 : 0);
139 result_mail_tbl_data->flags_answered_field = (mail_status & fANSWERED ? 1 : 0);
140 result_mail_tbl_data->flags_recent_field = (mail_status & fOLD ? 1 : 0);
141 result_mail_tbl_data->flags_draft_field = (mail_status & fDRAFT ? 1 : 0);
142 result_mail_tbl_data->flags_forwarded_field = (mail_status & fFORWARD ? 1 : 0);
146 if (err_code != NULL)
147 *err_code = error_code;
149 EM_DEBUG_FUNC_END("ret [%d]", ret);
153 INTERNAL_FUNC int em_convert_mail_tbl_to_mail_flag(emstorage_mail_tbl_t *mail_tbl_data, emf_mail_flag_t *result_flag, int* err_code)
155 EM_DEBUG_FUNC_BEGIN("mail_tbl_data[%p], result_flag [%p], err_code[%p]", mail_tbl_data, result_flag, err_code);
156 int ret = false, error_code = EMF_ERROR_NONE;
158 if(!mail_tbl_data || !result_flag) {
159 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
160 error_code = EMF_ERROR_INVALID_PARAM;
164 result_flag->seen = mail_tbl_data->flags_seen_field;
165 result_flag->deleted = mail_tbl_data->flags_deleted_field;
166 result_flag->flagged = mail_tbl_data->flags_flagged_field;
167 result_flag->answered = mail_tbl_data->flags_answered_field;
168 result_flag->recent = mail_tbl_data->flags_recent_field;
169 result_flag->draft = mail_tbl_data->flags_draft_field;
170 result_flag->has_attachment = (mail_tbl_data->attachment_count > mail_tbl_data->inline_content_count) ? 1 : 0;
171 result_flag->forwarded = mail_tbl_data->flags_forwarded_field;
175 if (err_code != NULL)
176 *err_code = error_code;
178 EM_DEBUG_FUNC_END("ret [%d]", ret);
182 INTERNAL_FUNC int em_convert_mail_flag_to_mail_tbl(emf_mail_flag_t *flag, emstorage_mail_tbl_t *result_mail_tbl_data, int* err_code)
184 EM_DEBUG_FUNC_BEGIN("flag[%p], result_mail_tbl_data [%p], err_code[%p]", flag, result_mail_tbl_data, err_code);
185 int ret = false, error_code = EMF_ERROR_NONE;
187 if(!flag || !result_mail_tbl_data) {
188 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
189 error_code = EMF_ERROR_INVALID_PARAM;
193 result_mail_tbl_data->flags_seen_field = flag->seen;
194 result_mail_tbl_data->flags_deleted_field = flag->deleted;
195 result_mail_tbl_data->flags_flagged_field = flag->flagged;
196 result_mail_tbl_data->flags_answered_field = flag->answered;
197 result_mail_tbl_data->flags_recent_field = flag->recent;
198 result_mail_tbl_data->flags_draft_field = flag->draft;
199 result_mail_tbl_data->flags_forwarded_field = flag->forwarded;
203 if (err_code != NULL)
204 *err_code = error_code;
206 EM_DEBUG_FUNC_END("ret [%d]", ret);
211 INTERNAL_FUNC int em_convert_account_to_account_tbl(emf_account_t *account, emstorage_account_tbl_t *account_tbl)
213 EM_DEBUG_FUNC_BEGIN("account[%p], account_tbl[%p]", account, account_tbl);
216 account_tbl->account_bind_type = account->account_bind_type;
217 account_tbl->account_name = EM_SAFE_STRDUP(account->account_name);
218 account_tbl->receiving_server_type = account->receiving_server_type;
219 account_tbl->receiving_server_addr = EM_SAFE_STRDUP(account->receiving_server_addr);
220 account_tbl->email_addr = EM_SAFE_STRDUP(account->email_addr);
221 account_tbl->user_name = EM_SAFE_STRDUP(account->user_name);
222 account_tbl->password = EM_SAFE_STRDUP(account->password);
223 account_tbl->retrieval_mode = account->retrieval_mode;
224 account_tbl->port_num = account->port_num;
225 account_tbl->use_security = account->use_security;
226 account_tbl->sending_server_type = account->sending_server_type;
227 account_tbl->sending_server_addr = EM_SAFE_STRDUP(account->sending_server_addr);
228 account_tbl->sending_port_num = account->sending_port_num;
229 account_tbl->sending_auth = account->sending_auth;
230 account_tbl->sending_security = account->sending_security;
231 account_tbl->sending_user = EM_SAFE_STRDUP(account->sending_user);
232 account_tbl->sending_password = EM_SAFE_STRDUP(account->sending_password);
233 account_tbl->display_name = EM_SAFE_STRDUP(account->display_name);
234 account_tbl->reply_to_addr = EM_SAFE_STRDUP(account->reply_to_addr);
235 account_tbl->return_addr = EM_SAFE_STRDUP(account->return_addr);
236 account_tbl->account_id = account->account_id;
237 account_tbl->keep_on_server = account->keep_on_server;
238 account_tbl->flag1 = account->flag1;
239 account_tbl->flag2 = account->flag2;
240 account_tbl->pop_before_smtp = account->pop_before_smtp;
241 account_tbl->apop = account->apop;
242 account_tbl->logo_icon_path = EM_SAFE_STRDUP(account->logo_icon_path);
243 account_tbl->preset_account = account->preset_account;
244 account_tbl->options.priority = account->options.priority;
245 account_tbl->options.keep_local_copy = account->options.keep_local_copy;
246 account_tbl->options.req_delivery_receipt = account->options.req_delivery_receipt;
247 account_tbl->options.req_read_receipt = account->options.req_read_receipt;
248 account_tbl->options.download_limit = account->options.download_limit;
249 account_tbl->options.block_address = account->options.block_address;
250 account_tbl->options.block_subject = account->options.block_subject;
251 account_tbl->options.display_name_from = EM_SAFE_STRDUP(account->options.display_name_from);
252 account_tbl->options.reply_with_body = account->options.reply_with_body;
253 account_tbl->options.forward_with_files = account->options.forward_with_files;
254 account_tbl->options.add_myname_card = account->options.add_myname_card;
255 account_tbl->options.add_signature = account->options.add_signature;
256 account_tbl->options.signature = EM_SAFE_STRDUP(account->options.signature);
257 account_tbl->options.add_my_address_to_bcc = account->options.add_my_address_to_bcc;
258 account_tbl->target_storage = account->target_storage;
259 account_tbl->check_interval = account->check_interval;
260 account_tbl->my_account_id = account->my_account_id;
261 account_tbl->index_color = account->index_color;
267 INTERNAL_FUNC int em_convert_account_tbl_to_account(emstorage_account_tbl_t *account_tbl, emf_account_t *account)
269 EM_DEBUG_FUNC_BEGIN("account_tbl[%p], account[%p]", account_tbl, account);
272 account->account_bind_type = account_tbl->account_bind_type;
273 account->account_name = EM_SAFE_STRDUP(account_tbl->account_name);
274 account->receiving_server_type = account_tbl->receiving_server_type;
275 account->receiving_server_addr = EM_SAFE_STRDUP(account_tbl->receiving_server_addr);
276 account->email_addr = EM_SAFE_STRDUP(account_tbl->email_addr);
277 account->user_name = EM_SAFE_STRDUP(account_tbl->user_name);
278 account->password = EM_SAFE_STRDUP(account_tbl->password);
279 account->retrieval_mode = account_tbl->retrieval_mode;
280 account->port_num = account_tbl->port_num;
281 account->use_security = account_tbl->use_security;
282 account->sending_server_type = account_tbl->sending_server_type;
283 account->sending_server_addr = EM_SAFE_STRDUP(account_tbl->sending_server_addr);
284 account->sending_port_num = account_tbl->sending_port_num;
285 account->sending_auth = account_tbl->sending_auth;
286 account->sending_security = account_tbl->sending_security;
287 account->sending_user = EM_SAFE_STRDUP(account_tbl->sending_user);
288 account->sending_password = EM_SAFE_STRDUP(account_tbl->sending_password);
289 account->display_name = EM_SAFE_STRDUP(account_tbl->display_name);
290 account->reply_to_addr = EM_SAFE_STRDUP(account_tbl->reply_to_addr);
291 account->return_addr = EM_SAFE_STRDUP(account_tbl->return_addr);
292 account->account_id = account_tbl->account_id;
293 account->keep_on_server = account_tbl->keep_on_server;
294 account->flag1 = account_tbl->flag1;
295 account->flag2 = account_tbl->flag2;
296 account->pop_before_smtp = account_tbl->pop_before_smtp;
297 account->apop = account_tbl->apop;
298 account->logo_icon_path = EM_SAFE_STRDUP(account_tbl->logo_icon_path);
299 account->preset_account = account_tbl->preset_account;
300 account->options.priority = account_tbl->options.priority;
301 account->options.keep_local_copy = account_tbl->options.keep_local_copy;
302 account->options.req_delivery_receipt = account_tbl->options.req_delivery_receipt;
303 account->options.req_read_receipt = account_tbl->options.req_read_receipt;
304 account->options.download_limit = account_tbl->options.download_limit;
305 account->options.block_address = account_tbl->options.block_address;
306 account->options.block_subject = account_tbl->options.block_subject;
307 account->options.display_name_from = EM_SAFE_STRDUP(account_tbl->options.display_name_from);
308 account->options.reply_with_body = account_tbl->options.reply_with_body;
309 account->options.forward_with_files = account_tbl->options.forward_with_files;
310 account->options.add_myname_card = account_tbl->options.add_myname_card;
311 account->options.add_signature = account_tbl->options.add_signature;
312 account->options.signature = EM_SAFE_STRDUP(account_tbl->options.signature);
313 account->options.add_my_address_to_bcc = account_tbl->options.add_my_address_to_bcc;
314 account->target_storage = account_tbl->target_storage;
315 account->check_interval = account_tbl->check_interval;
316 account->my_account_id = account_tbl->my_account_id;
317 account->index_color = account_tbl->index_color;
323 INTERNAL_FUNC int em_convert_mail_tbl_to_mail_data(emstorage_mail_tbl_t *mail_table_data, int item_count, emf_mail_data_t **mail_data, int *error)
325 EM_DEBUG_FUNC_BEGIN("mail_table_data[%p], item_count [%d], mail_data[%p]", mail_table_data, item_count, mail_data);
326 int i, ret = false, err_code = EMF_ERROR_NONE;
327 emf_mail_data_t *temp_mail_data = NULL;
329 if (!mail_table_data || !mail_data || !item_count) {
330 EM_DEBUG_EXCEPTION("Invalid parameter");
331 err_code = EMF_ERROR_INVALID_PARAM;
335 temp_mail_data = em_malloc(sizeof(emf_mail_data_t) * item_count);
337 if(!temp_mail_data) {
338 EM_DEBUG_EXCEPTION("em_malloc failed");
339 err_code = EMF_ERROR_OUT_OF_MEMORY;
343 for(i = 0; i < item_count; i++) {
344 temp_mail_data[i].mail_id = mail_table_data[i].mail_id;
345 temp_mail_data[i].account_id = mail_table_data[i].account_id;
346 temp_mail_data[i].mailbox_name = EM_SAFE_STRDUP(mail_table_data[i].mailbox_name);
347 temp_mail_data[i].mailbox_type = mail_table_data[i].mailbox_type;
348 temp_mail_data[i].subject = EM_SAFE_STRDUP(mail_table_data[i].subject);
349 temp_mail_data[i].date_time = mail_table_data[i].date_time;
350 temp_mail_data[i].server_mail_status = mail_table_data[i].server_mail_status;
351 temp_mail_data[i].server_mailbox_name = EM_SAFE_STRDUP(mail_table_data[i].server_mailbox_name);
352 temp_mail_data[i].server_mail_id = EM_SAFE_STRDUP(mail_table_data[i].server_mail_id);
353 temp_mail_data[i].message_id = EM_SAFE_STRDUP(mail_table_data[i].message_id);
354 temp_mail_data[i].full_address_from = EM_SAFE_STRDUP(mail_table_data[i].full_address_from);
355 temp_mail_data[i].full_address_reply = EM_SAFE_STRDUP(mail_table_data[i].full_address_reply);
356 temp_mail_data[i].full_address_to = EM_SAFE_STRDUP(mail_table_data[i].full_address_to);
357 temp_mail_data[i].full_address_cc = EM_SAFE_STRDUP(mail_table_data[i].full_address_cc);
358 temp_mail_data[i].full_address_bcc = EM_SAFE_STRDUP(mail_table_data[i].full_address_bcc);
359 temp_mail_data[i].full_address_return = EM_SAFE_STRDUP(mail_table_data[i].full_address_return);
360 temp_mail_data[i].email_address_sender = EM_SAFE_STRDUP(mail_table_data[i].email_address_sender);
361 temp_mail_data[i].email_address_recipient = EM_SAFE_STRDUP(mail_table_data[i].email_address_recipient);
362 temp_mail_data[i].alias_sender = EM_SAFE_STRDUP(mail_table_data[i].alias_sender);
363 temp_mail_data[i].alias_recipient = EM_SAFE_STRDUP(mail_table_data[i].alias_recipient);
364 temp_mail_data[i].body_download_status = mail_table_data[i].body_download_status;
365 temp_mail_data[i].file_path_plain = EM_SAFE_STRDUP(mail_table_data[i].file_path_plain);
366 temp_mail_data[i].file_path_html = EM_SAFE_STRDUP(mail_table_data[i].file_path_html);
367 temp_mail_data[i].mail_size = mail_table_data[i].mail_size;
368 temp_mail_data[i].flags_seen_field = mail_table_data[i].flags_seen_field;
369 temp_mail_data[i].flags_deleted_field = mail_table_data[i].flags_deleted_field;
370 temp_mail_data[i].flags_flagged_field = mail_table_data[i].flags_flagged_field;
371 temp_mail_data[i].flags_answered_field = mail_table_data[i].flags_answered_field;
372 temp_mail_data[i].flags_recent_field = mail_table_data[i].flags_recent_field;
373 temp_mail_data[i].flags_draft_field = mail_table_data[i].flags_draft_field;
374 temp_mail_data[i].flags_forwarded_field = mail_table_data[i].flags_forwarded_field;
375 temp_mail_data[i].DRM_status = mail_table_data[i].DRM_status;
376 temp_mail_data[i].priority = mail_table_data[i].priority;
377 temp_mail_data[i].save_status = mail_table_data[i].save_status;
378 temp_mail_data[i].lock_status = mail_table_data[i].lock_status;
379 temp_mail_data[i].report_status = mail_table_data[i].report_status;
380 temp_mail_data[i].attachment_count = mail_table_data[i].attachment_count;
381 temp_mail_data[i].inline_content_count = mail_table_data[i].inline_content_count;
382 temp_mail_data[i].thread_id = mail_table_data[i].thread_id;
383 temp_mail_data[i].thread_item_count = mail_table_data[i].thread_item_count;
384 temp_mail_data[i].preview_text = EM_SAFE_STRDUP(mail_table_data[i].preview_text);
385 temp_mail_data[i].meeting_request_status = mail_table_data[i].meeting_request_status;
388 *mail_data = temp_mail_data;
400 INTERNAL_FUNC int em_convert_mail_data_to_mail_tbl(emf_mail_data_t *mail_data, int item_count, emstorage_mail_tbl_t **mail_table_data, int *error)
402 EM_DEBUG_FUNC_BEGIN("mail_data[%p], item_count [%d], mail_table_data[%p]", mail_data, item_count, mail_table_data);
403 int i, ret = false, err_code = EMF_ERROR_NONE;
404 emstorage_mail_tbl_t *temp_mail_tbl = NULL;
406 if (!mail_data || !mail_table_data || !item_count) {
407 EM_DEBUG_EXCEPTION("Invalid parameter");
408 err_code = EMF_ERROR_INVALID_PARAM;
412 temp_mail_tbl = em_malloc(sizeof(emstorage_mail_tbl_t) * item_count);
415 EM_DEBUG_EXCEPTION("em_malloc failed");
416 err_code = EMF_ERROR_OUT_OF_MEMORY;
420 for(i = 0; i < item_count; i++) {
421 temp_mail_tbl[i].mail_id = mail_data[i].mail_id;
422 temp_mail_tbl[i].account_id = mail_data[i].account_id;
423 temp_mail_tbl[i].mailbox_name = EM_SAFE_STRDUP(mail_data[i].mailbox_name);
424 temp_mail_tbl[i].mailbox_type = mail_data[i].mailbox_type;
425 temp_mail_tbl[i].date_time = mail_data[i].date_time;
426 temp_mail_tbl[i].subject = EM_SAFE_STRDUP(mail_data[i].subject);
427 temp_mail_tbl[i].server_mail_status = mail_data[i].server_mail_status;
428 temp_mail_tbl[i].server_mailbox_name = EM_SAFE_STRDUP(mail_data[i].server_mailbox_name);
429 temp_mail_tbl[i].server_mail_id = EM_SAFE_STRDUP(mail_data[i].server_mail_id);
430 temp_mail_tbl[i].message_id = EM_SAFE_STRDUP(mail_data[i].message_id);
431 temp_mail_tbl[i].full_address_from = EM_SAFE_STRDUP(mail_data[i].full_address_from);
432 temp_mail_tbl[i].full_address_reply = EM_SAFE_STRDUP(mail_data[i].full_address_reply);
433 temp_mail_tbl[i].full_address_to = EM_SAFE_STRDUP(mail_data[i].full_address_to);
434 temp_mail_tbl[i].full_address_cc = EM_SAFE_STRDUP(mail_data[i].full_address_cc);
435 temp_mail_tbl[i].full_address_bcc = EM_SAFE_STRDUP(mail_data[i].full_address_bcc);
436 temp_mail_tbl[i].full_address_return = EM_SAFE_STRDUP(mail_data[i].full_address_return);
437 temp_mail_tbl[i].email_address_sender = EM_SAFE_STRDUP(mail_data[i].email_address_sender);
438 temp_mail_tbl[i].email_address_recipient = EM_SAFE_STRDUP(mail_data[i].email_address_recipient);
439 temp_mail_tbl[i].alias_sender = EM_SAFE_STRDUP(mail_data[i].alias_sender);
440 temp_mail_tbl[i].alias_recipient = EM_SAFE_STRDUP(mail_data[i].alias_recipient);
441 temp_mail_tbl[i].body_download_status = mail_data[i].body_download_status;
442 temp_mail_tbl[i].file_path_plain = EM_SAFE_STRDUP(mail_data[i].file_path_plain);
443 temp_mail_tbl[i].file_path_html = EM_SAFE_STRDUP(mail_data[i].file_path_html);
444 temp_mail_tbl[i].mail_size = mail_data[i].mail_size;
445 temp_mail_tbl[i].flags_seen_field = mail_data[i].flags_seen_field;
446 temp_mail_tbl[i].flags_deleted_field = mail_data[i].flags_deleted_field;
447 temp_mail_tbl[i].flags_flagged_field = mail_data[i].flags_flagged_field;
448 temp_mail_tbl[i].flags_answered_field = mail_data[i].flags_answered_field;
449 temp_mail_tbl[i].flags_recent_field = mail_data[i].flags_recent_field;
450 temp_mail_tbl[i].flags_draft_field = mail_data[i].flags_draft_field;
451 temp_mail_tbl[i].flags_forwarded_field = mail_data[i].flags_forwarded_field;
452 temp_mail_tbl[i].DRM_status = mail_data[i].DRM_status;
453 temp_mail_tbl[i].priority = mail_data[i].priority;
454 temp_mail_tbl[i].save_status = mail_data[i].save_status;
455 temp_mail_tbl[i].lock_status = mail_data[i].lock_status;
456 temp_mail_tbl[i].report_status = mail_data[i].report_status;
457 temp_mail_tbl[i].attachment_count = mail_data[i].attachment_count;
458 temp_mail_tbl[i].inline_content_count = mail_data[i].inline_content_count;
459 temp_mail_tbl[i].thread_id = mail_data[i].thread_id;
460 temp_mail_tbl[i].thread_item_count = mail_data[i].thread_item_count;
461 temp_mail_tbl[i].preview_text = EM_SAFE_STRDUP(mail_data[i].preview_text);
462 temp_mail_tbl[i].meeting_request_status = mail_data[i].meeting_request_status;
465 *mail_table_data = temp_mail_tbl;
480 INTERNAL_FUNC int em_convert_string_to_time_t(char *input_datetime_string, time_t *output_time)
482 EM_DEBUG_FUNC_BEGIN("input_datetime_string[%s], output_time[%p]", input_datetime_string, output_time);
484 char buf[16] = { 0, };
485 struct tm temp_time_info = { 0 };
487 if (!input_datetime_string || !output_time) {
488 EM_DEBUG_EXCEPTION("input_datetime_string[%p], output_time[%p]", input_datetime_string, output_time);
489 return EMF_ERROR_INVALID_PARAM;
492 memset(buf, 0x00, sizeof(buf));
493 SNPRINTF(buf, sizeof(buf), "%.4s", input_datetime_string);
494 temp_time_info.tm_year = atoi(buf) - 1970;
496 memset(buf, 0x00, sizeof(buf));
497 SNPRINTF(buf, sizeof(buf), "%.2s", input_datetime_string + 4);
498 temp_time_info.tm_mon = atoi(buf) - 1;
500 memset(buf, 0x00, sizeof(buf));
501 SNPRINTF(buf, sizeof(buf), "%.2s", input_datetime_string + 6);
502 temp_time_info.tm_mday = atoi(buf);
504 memset(buf, 0x00, sizeof(buf));
505 SNPRINTF(buf, sizeof(buf), "%.2s", input_datetime_string + 8);
506 temp_time_info.tm_hour = atoi(buf);
508 memset(buf, 0x00, sizeof(buf));
509 SNPRINTF(buf, sizeof(buf), "%.2s", input_datetime_string + 10);
510 temp_time_info.tm_min = atoi(buf);
512 memset(buf, 0x00, sizeof(buf));
513 SNPRINTF(buf, sizeof(buf), "%.2s", input_datetime_string + 12);
514 temp_time_info.tm_sec = atoi(buf);
516 *output_time = timegm(&temp_time_info);
518 EM_DEBUG_LOG("*output_time [%d", *output_time);
520 EM_DEBUG_FUNC_END("err %d", EMF_ERROR_NONE);
521 return EMF_ERROR_NONE;
524 INTERNAL_FUNC int em_convert_time_t_to_string(time_t *input_time, char **output_datetime_string)
526 EM_DEBUG_FUNC_BEGIN("input_time[%p], output_datetime_string[%p]", input_time, output_datetime_string);
527 char temp_buffer[20] = { 0, };
528 struct tm *temp_time_info;
530 if (!input_time || !output_datetime_string) {
531 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
532 return EMF_ERROR_INVALID_PARAM;
535 temp_time_info = localtime(input_time);
537 if(!temp_time_info) {
538 EM_DEBUG_EXCEPTION("localtime failed.");
539 return EMF_ERROR_SYSTEM_FAILURE;
541 SNPRINTF(temp_buffer, sizeof(temp_buffer), "%04d%02d%02d%02d%02d%02d",
542 temp_time_info->tm_year + 1970, temp_time_info->tm_mon, temp_time_info->tm_mday, temp_time_info->tm_hour, temp_time_info->tm_min, temp_time_info->tm_sec);
544 *output_datetime_string = EM_SAFE_STRDUP(temp_buffer);
546 EM_DEBUG_FUNC_END("err %d", EMF_ERROR_NONE);
547 return EMF_ERROR_NONE;
550 static char* append_sized_data_to_stream(char *input_stream, int *input_output_stream_length, char *input_sized_data, int input_data_size)
552 EM_DEBUG_FUNC_BEGIN("input_stream [%p], input_output_stream_length [%p], input_sized_data [%p], input_data_size [%d]", input_stream, input_output_stream_length, input_sized_data, input_data_size);
553 char *new_stream = NULL;
554 int source_stream_length = 0;
556 if( !input_output_stream_length || input_data_size == 0 || input_sized_data == NULL||
557 (input_stream != NULL && *input_output_stream_length == 0) || (input_stream == NULL && *input_output_stream_length != 0) ) {
558 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
562 source_stream_length = *input_output_stream_length;
564 new_stream = (char*)em_malloc((source_stream_length) * sizeof(char) + input_data_size);
567 EM_DEBUG_EXCEPTION("EMF_ERROR_OUT_OF_MEMORY");
571 if(input_stream != NULL)
572 memcpy(new_stream, input_stream, source_stream_length * sizeof(char));
574 memcpy(new_stream + source_stream_length, input_sized_data, input_data_size);
576 *input_output_stream_length = source_stream_length + input_data_size;
578 EM_SAFE_FREE(input_stream);
579 EM_DEBUG_FUNC_END("*input_output_stream_length [%d]", *input_output_stream_length);
583 static char* append_string_to_stream(char *input_stream, int *input_output_stream_length, char *input_source_string)
585 EM_DEBUG_FUNC_BEGIN("input_stream [%p], input_output_stream_length [%p] input_source_string[%p]", input_stream, input_output_stream_length, input_source_string);
586 char *new_stream = NULL;
588 int source_stream_length = 0;
590 if( !input_output_stream_length || (input_stream != NULL && *input_output_stream_length == 0) || (input_stream == NULL && *input_output_stream_length != 0)) {
591 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
595 source_stream_length = *input_output_stream_length;
597 if(input_source_string != NULL)
598 data_length = EM_SAFE_STRLEN(input_source_string);
600 new_stream = (char*)em_malloc((source_stream_length + data_length) * sizeof(char) + sizeof(int));
603 EM_DEBUG_EXCEPTION("EMF_ERROR_OUT_OF_MEMORY");
607 if(input_stream != NULL)
608 memcpy(new_stream, input_stream, source_stream_length * sizeof(char));
610 memcpy(new_stream + source_stream_length, (char*)&data_length, sizeof(int));
612 if(input_source_string)
613 memcpy(new_stream + source_stream_length + sizeof(int), input_source_string, data_length);
615 *input_output_stream_length = source_stream_length + sizeof(int) + data_length;
617 EM_SAFE_FREE(input_stream);
618 EM_DEBUG_FUNC_END("*input_output_stream_length [%d]", *input_output_stream_length);
622 static int fetch_sized_data_from_stream(char *input_stream, int *input_output_stream_offset, int input_data_size, char *output_data)
624 EM_DEBUG_FUNC_BEGIN("input_stream [%p], input_output_stream_offset [%p] input_data_size [%d], output_data[%p]", input_stream, input_output_stream_offset, input_data_size, output_data);
625 int stream_offset = 0;
627 if( !input_stream || !input_output_stream_offset || !input_data_size || !output_data) {
628 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
629 return EMF_ERROR_INVALID_PARAM;
632 stream_offset = *input_output_stream_offset;
634 memcpy(output_data, input_stream + stream_offset, input_data_size);
635 stream_offset += input_data_size;
637 *input_output_stream_offset = stream_offset;
639 EM_DEBUG_FUNC_END("stream_offset [%d]", stream_offset);
640 return EMF_ERROR_NONE;
643 static int fetch_string_from_stream(char *input_stream, int *input_output_stream_offset, char **output_string)
645 EM_DEBUG_FUNC_BEGIN("input_stream [%p], input_output_stream_offset [%p] output_string[%p]", input_stream, input_output_stream_offset, output_string);
646 int string_length = 0;
647 int stream_offset = 0;
648 char *result_string = NULL;
650 if( !input_stream || !input_output_stream_offset || !output_string) {
651 EM_DEBUG_EXCEPTION("EMF_ERROR_INVALID_PARAM");
652 return EMF_ERROR_INVALID_PARAM;
655 stream_offset = *input_output_stream_offset;
657 EM_DEBUG_LOG("stream_offset [%d]", stream_offset);
660 memcpy(&string_length, input_stream + stream_offset, sizeof(int));
661 stream_offset += sizeof(int);
664 EM_DEBUG_LOG("string_length [%d]", string_length);
667 if(string_length != 0) {
668 result_string = (char*)em_malloc(string_length + 1);
670 memcpy(result_string, input_stream + stream_offset, string_length);
671 stream_offset += string_length;
676 EM_DEBUG_LOG("result_string [%s]", result_string);
679 *output_string = result_string;
680 *input_output_stream_offset = stream_offset;
682 EM_DEBUG_FUNC_END("stream_offset [%d]", stream_offset);
683 return EMF_ERROR_NONE;
686 INTERNAL_FUNC char* em_convert_account_to_byte_stream(emf_account_t* input_account, int *output_stream_size)
688 EM_DEBUG_FUNC_BEGIN("input_account [%p], output_stream_size [%p]", input_account, output_stream_size);
689 char *result_stream = NULL;
692 EM_IF_NULL_RETURN_VALUE(input_account, NULL);
694 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->account_bind_type), sizeof(int));
695 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->account_name);
696 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->receiving_server_type), sizeof(int));
697 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->receiving_server_addr);
698 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->email_addr);
699 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->user_name);
700 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->password);
701 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->retrieval_mode), sizeof(int));
702 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->port_num), sizeof(int));
703 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->use_security), sizeof(int));
704 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->sending_server_type), sizeof(int));
705 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->sending_server_addr);
706 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->sending_port_num), sizeof(int));
707 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->sending_auth), sizeof(int));
708 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->sending_security), sizeof(int));
709 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->sending_user);
710 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->sending_password);
711 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->display_name);
712 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->reply_to_addr);
713 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->return_addr);
714 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->account_id), sizeof(int));
715 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->keep_on_server), sizeof(int));
716 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->flag1), sizeof(int));
717 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->flag2), sizeof(int));
718 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->pop_before_smtp), sizeof(int));
719 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->apop), sizeof(int));
720 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->logo_icon_path);
721 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->preset_account), sizeof(int));
722 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.priority), sizeof(int));
723 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.keep_local_copy), sizeof(int));
724 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.req_delivery_receipt), sizeof(int));
725 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.req_read_receipt), sizeof(int));
726 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.download_limit), sizeof(int));
727 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.block_address), sizeof(int));
728 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.block_subject), sizeof(int));
729 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->options.display_name_from);
730 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.reply_with_body), sizeof(int));
731 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.forward_with_files), sizeof(int));
732 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.add_myname_card), sizeof(int));
733 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.add_signature), sizeof(int));
734 result_stream = append_string_to_stream(result_stream, &stream_size, input_account->options.signature);
735 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->options.add_my_address_to_bcc), sizeof(int));
736 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->target_storage), sizeof(int));
737 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->check_interval), sizeof(int));
738 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->my_account_id), sizeof(int));
739 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_account->index_color), sizeof(int));
741 *output_stream_size = stream_size;
743 EM_DEBUG_FUNC_END("stream_size [%d]", stream_size);
744 return result_stream;
748 INTERNAL_FUNC void em_convert_byte_stream_to_account(char *input_stream, emf_account_t *output_account)
750 EM_DEBUG_FUNC_BEGIN();
751 int stream_offset = 0;
753 EM_NULL_CHECK_FOR_VOID(input_stream);
754 EM_NULL_CHECK_FOR_VOID(output_account);
756 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->account_bind_type);
757 fetch_string_from_stream(input_stream, &stream_offset, &output_account->account_name);
758 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->receiving_server_type);
759 fetch_string_from_stream(input_stream, &stream_offset, &output_account->receiving_server_addr);
760 fetch_string_from_stream(input_stream, &stream_offset, &output_account->email_addr);
761 fetch_string_from_stream(input_stream, &stream_offset, &output_account->user_name);
762 fetch_string_from_stream(input_stream, &stream_offset, &output_account->password);
763 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->retrieval_mode);
764 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->port_num);
765 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->use_security);
766 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->sending_server_type);
767 fetch_string_from_stream(input_stream, &stream_offset, &output_account->sending_server_addr);
768 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->sending_port_num);
769 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->sending_auth);
770 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->sending_security);
771 fetch_string_from_stream(input_stream, &stream_offset, &output_account->sending_user);
772 fetch_string_from_stream(input_stream, &stream_offset, &output_account->sending_password);
773 fetch_string_from_stream(input_stream, &stream_offset, &output_account->display_name);
774 fetch_string_from_stream(input_stream, &stream_offset, &output_account->reply_to_addr);
775 fetch_string_from_stream(input_stream, &stream_offset, &output_account->return_addr);
776 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->account_id);
777 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->keep_on_server);
778 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->flag1);
779 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->flag2);
780 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->pop_before_smtp);
781 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->apop);
782 fetch_string_from_stream(input_stream, &stream_offset, &output_account->logo_icon_path);
783 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->preset_account);
784 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.priority);
785 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.keep_local_copy);
786 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.req_delivery_receipt);
787 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.req_read_receipt);
788 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.download_limit);
789 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.block_address);
790 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.block_subject);
791 fetch_string_from_stream(input_stream, &stream_offset, &output_account->options.display_name_from);
792 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.reply_with_body);
793 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.forward_with_files);
794 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.add_myname_card);
795 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.add_signature);
796 fetch_string_from_stream(input_stream, &stream_offset, &output_account->options.signature);
797 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->options.add_my_address_to_bcc);
798 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->target_storage);
799 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->check_interval);
800 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->my_account_id);
801 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&output_account->index_color);
806 INTERNAL_FUNC char* em_convert_attachment_info_to_byte_stream(emf_attachment_info_t *input_attachment_info, int *output_stream_size)
808 EM_DEBUG_FUNC_BEGIN();
810 char *result_stream = NULL;
813 EM_IF_NULL_RETURN_VALUE(input_attachment_info, NULL);
814 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
816 while(input_attachment_info) {
817 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_info->inline_content, sizeof(int));
818 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_info->attachment_id, sizeof(int));
819 result_stream = append_string_to_stream(result_stream, &stream_size, input_attachment_info->name);
820 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_info->size, sizeof(int));
821 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_info->downloaded, sizeof(int));
822 result_stream = append_string_to_stream(result_stream, &stream_size, input_attachment_info->savename);
823 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_info->drm, sizeof(int));
825 input_attachment_info = input_attachment_info->next;
828 *output_stream_size = stream_size;
831 return result_stream;
834 INTERNAL_FUNC void em_convert_byte_stream_to_attachment_info(char *input_stream, int attachment_count, emf_attachment_info_t **output_attachment_info)
836 EM_DEBUG_FUNC_BEGIN();
839 int stream_offset = 0;
840 emf_attachment_info_t *temp_attachment_info = NULL;
841 emf_attachment_info_t *current_attachment_info = NULL;
843 EM_NULL_CHECK_FOR_VOID(input_stream);
845 for(i = 0; i < attachment_count; i++) {
846 temp_attachment_info = (emf_attachment_info_t*)malloc(sizeof(emf_attachment_info_t));
849 *output_attachment_info = current_attachment_info = temp_attachment_info;
851 current_attachment_info->next = temp_attachment_info;
852 current_attachment_info = temp_attachment_info;
855 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&temp_attachment_info->inline_content);
856 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&temp_attachment_info->attachment_id);
857 fetch_string_from_stream(input_stream, &stream_offset, &temp_attachment_info->name);
858 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&temp_attachment_info->size);
859 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&temp_attachment_info->downloaded);
860 fetch_string_from_stream(input_stream, &stream_offset, &temp_attachment_info->savename);
861 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&temp_attachment_info->drm);
863 temp_attachment_info->next = NULL;
869 INTERNAL_FUNC char* em_convert_mail_data_to_byte_stream(emf_mail_data_t *input_mail_data, int input_mail_data_count, int *output_stream_size)
871 EM_DEBUG_FUNC_BEGIN("input_mail_data [%p], input_mail_data_count[%d], output_stream_size[%p]", input_mail_data, input_mail_data_count, output_stream_size);
873 char *result_stream = NULL;
877 EM_IF_NULL_RETURN_VALUE(input_mail_data, NULL);
878 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
880 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_mail_data_count, sizeof(int));
882 for(i = 0; i < input_mail_data_count; i++) {
883 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].mail_id), sizeof(int));
884 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].account_id), sizeof(int));
885 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].mailbox_name);
886 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].mailbox_type), sizeof(int));
887 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].subject);
888 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].date_time), sizeof(int));
889 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].server_mail_status), sizeof(int));
890 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].server_mailbox_name);
891 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].server_mail_id);
892 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].message_id);
893 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_from);
894 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_reply);
895 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_to);
896 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_cc);
897 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_bcc);
898 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].full_address_return);
899 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].email_address_sender);
900 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].email_address_recipient);
901 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].alias_sender);
902 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].alias_recipient);
903 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].body_download_status), sizeof(int));
904 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].file_path_plain);
905 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].file_path_html);
906 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].mail_size), sizeof(int));
907 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_seen_field), sizeof(char));
908 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_deleted_field), sizeof(char));
909 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_flagged_field), sizeof(char));
910 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_answered_field), sizeof(char));
911 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_recent_field), sizeof(char));
912 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_draft_field), sizeof(char));
913 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].flags_forwarded_field), sizeof(char));
914 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].DRM_status), sizeof(int));
915 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].priority), sizeof(int));
916 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].save_status), sizeof(int));
917 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].lock_status), sizeof(int));
918 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].report_status), sizeof(int));
919 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].attachment_count), sizeof(int));
920 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].inline_content_count), sizeof(int));
921 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].thread_id), sizeof(int));
922 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].thread_item_count), sizeof(int));
923 result_stream = append_string_to_stream(result_stream, &stream_size, input_mail_data[i].preview_text);
924 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mail_data[i].meeting_request_status), sizeof(int));
927 *output_stream_size = stream_size;
929 EM_DEBUG_FUNC_END("stream_size [%d]", stream_size);
930 return result_stream;
933 INTERNAL_FUNC void em_convert_byte_stream_to_mail_data(char *input_stream, emf_mail_data_t **output_mail_data, int *output_mail_data_count)
935 EM_DEBUG_FUNC_BEGIN("input_stream [%p], output_mail_data[%p], output_mail_data_count[%p]", input_stream, output_mail_data, output_mail_data_count);
937 int stream_offset = 0;
940 EM_NULL_CHECK_FOR_VOID(input_stream);
941 EM_NULL_CHECK_FOR_VOID(output_mail_data);
942 EM_NULL_CHECK_FOR_VOID(output_mail_data_count);
944 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)output_mail_data_count);
946 EM_DEBUG_LOG("*output_mail_data_count [%d]", *output_mail_data_count);
948 if(output_mail_data_count <= 0) {
949 EM_DEBUG_EXCEPTION("no mail data.");
953 *output_mail_data = (emf_mail_data_t*)em_malloc(sizeof(emf_mail_data_t) * (*output_mail_data_count));
955 if(!*output_mail_data) {
956 EM_DEBUG_EXCEPTION("em_malloc failed");
960 for(i = 0; i < *output_mail_data_count; i++) {
961 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].mail_id);
962 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].account_id);
963 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].mailbox_name);
964 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].mailbox_type);
965 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].subject);
966 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].date_time);
967 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].server_mail_status);
968 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].server_mailbox_name);
969 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].server_mail_id);
970 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].message_id);
971 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_from);
972 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_reply);
973 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_to);
974 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_cc);
975 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_bcc);
976 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].full_address_return);
977 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].email_address_sender);
978 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].email_address_recipient);
979 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].alias_sender);
980 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].alias_recipient);
981 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].body_download_status);
982 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].file_path_plain);
983 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].file_path_html);
984 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].mail_size);
985 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_seen_field);
986 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_deleted_field);
987 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_flagged_field);
988 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_answered_field);
989 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_recent_field);
990 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_draft_field);
991 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(char), (char*)&(*output_mail_data)[i].flags_forwarded_field);
992 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].DRM_status);
993 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].priority);
994 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].save_status);
995 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].lock_status);
996 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].report_status);
997 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].attachment_count);
998 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].inline_content_count);
999 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].thread_id);
1000 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].thread_item_count);
1001 fetch_string_from_stream(input_stream, &stream_offset, &(*output_mail_data)[i].preview_text);
1002 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(*output_mail_data)[i].meeting_request_status);
1005 EM_DEBUG_FUNC_END();
1008 INTERNAL_FUNC char* em_convert_attachment_data_to_byte_stream(emf_attachment_data_t *input_attachment_data, int input_attachment_count, int* output_stream_size)
1010 EM_DEBUG_FUNC_BEGIN("input_attachment_data [%p], input_attachment_count [%d], output_stream_size [%p]", input_attachment_data, input_attachment_count, output_stream_size);
1012 char *result_stream = NULL;
1013 int stream_size = 0;
1016 if(input_attachment_count > 0)
1017 EM_IF_NULL_RETURN_VALUE(input_attachment_data, NULL);
1018 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
1020 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_count, sizeof(int));
1022 for(i = 0; i < input_attachment_count; i++) {
1023 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].attachment_id, sizeof(int));
1024 result_stream = append_string_to_stream(result_stream, &stream_size, input_attachment_data[i].attachment_name);
1025 result_stream = append_string_to_stream(result_stream, &stream_size, input_attachment_data[i].attachment_path);
1026 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].attachment_size, sizeof(int));
1027 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].mail_id, sizeof(int));
1028 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].account_id, sizeof(int));
1029 result_stream = append_string_to_stream(result_stream, &stream_size, input_attachment_data[i].mailbox_name);
1030 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].save_status, sizeof(int));
1031 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].drm_status, sizeof(int));
1032 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_attachment_data[i].inline_content_status,sizeof(int));
1035 *output_stream_size = stream_size;
1037 EM_DEBUG_FUNC_END("stream_size [%d]", stream_size);
1038 return result_stream;
1041 INTERNAL_FUNC void em_convert_byte_stream_to_attachment_data(char *input_stream, emf_attachment_data_t **output_attachment_data, int *output_attachment_count)
1043 EM_DEBUG_FUNC_BEGIN("input_stream [%p], output_attachment_data[%p]", input_stream, output_attachment_data);
1045 int stream_offset = 0;
1048 EM_NULL_CHECK_FOR_VOID(input_stream);
1049 EM_NULL_CHECK_FOR_VOID(output_attachment_data);
1050 EM_NULL_CHECK_FOR_VOID(output_attachment_count);
1052 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)output_attachment_count);
1054 EM_DEBUG_LOG("*output_attachment_count [%d]", *output_attachment_count);
1056 if(output_attachment_count <= 0) {
1057 EM_DEBUG_EXCEPTION("no attachment data.");
1061 *output_attachment_data = (emf_attachment_data_t*)em_malloc(sizeof(emf_attachment_data_t) * (*output_attachment_count));
1063 if(!*output_attachment_data) {
1064 EM_DEBUG_EXCEPTION("em_malloc failed");
1068 for(i = 0; i < *output_attachment_count; i++) {
1069 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].attachment_id));
1070 fetch_string_from_stream(input_stream, &stream_offset, &(*output_attachment_data)[i].attachment_name);
1071 fetch_string_from_stream(input_stream, &stream_offset, &(*output_attachment_data)[i].attachment_path);
1072 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].attachment_size));
1073 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].mail_id));
1074 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].account_id));
1075 fetch_string_from_stream(input_stream, &stream_offset, &(*output_attachment_data)[i].mailbox_name);
1076 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].save_status));
1077 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].drm_status));
1078 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&((*output_attachment_data)[i].inline_content_status));
1081 EM_DEBUG_FUNC_END();
1086 INTERNAL_FUNC char* em_convert_mailbox_to_byte_stream(emf_mailbox_t *input_mailbox_data, int *output_stream_size)
1088 EM_DEBUG_FUNC_BEGIN("input_mailbox_data [%p], output_stream_size [%p]", input_mailbox_data, output_stream_size);
1090 char *result_stream = NULL;
1091 int stream_size = 0;
1093 EM_IF_NULL_RETURN_VALUE(input_mailbox_data, NULL);
1094 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
1096 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->mailbox_id), sizeof(int));
1097 result_stream = append_string_to_stream(result_stream, &stream_size, input_mailbox_data->name);
1098 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->mailbox_type), sizeof(int));
1099 result_stream = append_string_to_stream(result_stream, &stream_size, input_mailbox_data->alias);
1100 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->unread_count), sizeof(int));
1101 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->total_mail_count_on_local), sizeof(int));
1102 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->total_mail_count_on_server), sizeof(int));
1103 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->hold_connection), sizeof(int));
1104 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->local), sizeof(int));
1105 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->synchronous), sizeof(int));
1106 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->account_id), sizeof(int));
1107 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->user_data), sizeof(int));
1108 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->mail_stream), sizeof(int));
1109 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->has_archived_mails), sizeof(int));
1110 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_mailbox_data->mail_slot_size), sizeof(int));
1111 result_stream = append_string_to_stream(result_stream, &stream_size, input_mailbox_data->account_name);
1113 *output_stream_size = stream_size;
1115 EM_DEBUG_FUNC_END();
1117 return result_stream;
1121 INTERNAL_FUNC void em_convert_byte_stream_to_mailbox(char *input_stream, emf_mailbox_t *output_mailbox_data)
1123 EM_DEBUG_FUNC_BEGIN("input_stream [%p], output_mailbox_data [%p]", input_stream, output_mailbox_data);
1124 int stream_offset = 0;
1126 EM_NULL_CHECK_FOR_VOID(input_stream);
1127 EM_NULL_CHECK_FOR_VOID(output_mailbox_data);
1129 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->mailbox_id));
1130 fetch_string_from_stream(input_stream, &stream_offset, &output_mailbox_data->name);
1131 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->mailbox_type));
1132 fetch_string_from_stream(input_stream, &stream_offset, &output_mailbox_data->alias);
1133 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->unread_count));
1134 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->total_mail_count_on_local));
1135 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->total_mail_count_on_server));
1136 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->hold_connection));
1137 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->local));
1138 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->synchronous));
1139 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->account_id));
1140 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->user_data));
1141 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->mail_stream));
1142 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->has_archived_mails));
1143 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_mailbox_data->mail_slot_size));
1144 fetch_string_from_stream(input_stream, &stream_offset, &output_mailbox_data->account_name);
1145 EM_DEBUG_FUNC_END();
1149 INTERNAL_FUNC char* em_convert_option_to_byte_stream(emf_option_t* input_option, int* output_stream_size)
1151 EM_DEBUG_FUNC_BEGIN();
1152 char *result_stream = NULL;
1153 int stream_size = 0;
1155 EM_IF_NULL_RETURN_VALUE(input_option, NULL);
1157 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->priority), sizeof(int));
1158 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->keep_local_copy), sizeof(int));
1159 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->req_delivery_receipt), sizeof(int));
1160 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->req_read_receipt), sizeof(int));
1161 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->download_limit), sizeof(int));
1162 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->block_address), sizeof(int));
1163 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->block_subject), sizeof(int));
1164 result_stream = append_string_to_stream(result_stream, &stream_size, input_option->display_name_from);
1165 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->reply_with_body), sizeof(int));
1166 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->forward_with_files), sizeof(int));
1167 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->add_myname_card), sizeof(int));
1168 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->add_signature), sizeof(int));
1169 result_stream = append_string_to_stream(result_stream, &stream_size, input_option->signature);
1170 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_option->add_my_address_to_bcc), sizeof(int));
1171 *output_stream_size = stream_size;
1173 EM_DEBUG_FUNC_END();
1174 return result_stream;
1178 INTERNAL_FUNC void em_convert_byte_stream_to_option(char *input_stream, emf_option_t *output_option)
1180 EM_DEBUG_FUNC_BEGIN();
1181 int stream_offset = 0;
1183 EM_NULL_CHECK_FOR_VOID(input_stream);
1185 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->priority));
1186 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->keep_local_copy));
1187 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->req_delivery_receipt));
1188 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->req_read_receipt));
1189 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->download_limit));
1190 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->block_address));
1191 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->block_subject));
1192 fetch_string_from_stream(input_stream, &stream_offset, &output_option->display_name_from);
1193 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->reply_with_body));
1194 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->forward_with_files));
1195 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->add_myname_card));
1196 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->add_signature));
1197 fetch_string_from_stream(input_stream, &stream_offset, &output_option->signature);
1198 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_option->add_my_address_to_bcc));
1200 EM_DEBUG_FUNC_END();
1203 INTERNAL_FUNC char* em_convert_rule_to_byte_stream(emf_rule_t *input_rule, int *output_stream_size)
1205 EM_DEBUG_FUNC_BEGIN();
1206 char *result_stream = NULL;
1207 int stream_size = 0;
1209 EM_IF_NULL_RETURN_VALUE(input_rule, NULL);
1210 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
1212 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->account_id), sizeof(int));
1213 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->filter_id), sizeof(int));
1214 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->type), sizeof(int));
1215 result_stream = append_string_to_stream(result_stream, &stream_size, input_rule->value);
1216 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->faction), sizeof(int));
1217 result_stream = append_string_to_stream(result_stream, &stream_size, input_rule->mailbox);
1218 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->flag1), sizeof(int));
1219 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_rule->flag2), sizeof(int));
1221 *output_stream_size = stream_size;
1223 EM_DEBUG_FUNC_END();
1224 return result_stream;
1227 INTERNAL_FUNC void em_convert_byte_stream_to_rule(char *input_stream, emf_rule_t *output_rule)
1229 EM_DEBUG_FUNC_BEGIN();
1230 int stream_offset = 0;
1232 EM_NULL_CHECK_FOR_VOID(input_stream);
1233 EM_NULL_CHECK_FOR_VOID(output_rule);
1235 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->account_id));
1236 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->filter_id));
1237 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->type));
1238 fetch_string_from_stream(input_stream, &stream_offset, &output_rule->value);
1239 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->faction));
1240 fetch_string_from_stream(input_stream, &stream_offset, &output_rule->mailbox);
1241 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->flag1));
1242 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_rule->flag2));
1244 EM_DEBUG_FUNC_END();
1247 INTERNAL_FUNC char* em_convert_extra_flags_to_byte_stream(emf_extra_flag_t input_extra_flag, int *output_stream_size)
1249 EM_DEBUG_FUNC_BEGIN();
1250 char *result_stream = NULL;
1251 int stream_size = 0;
1252 int extra_flag_field = 0;
1254 EM_IF_NULL_RETURN_VALUE(output_stream_size, NULL);
1256 extra_flag_field = input_extra_flag.priority;
1257 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1258 extra_flag_field = input_extra_flag.status;
1259 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1260 extra_flag_field = input_extra_flag.noti;
1261 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1262 extra_flag_field = input_extra_flag.lock;
1263 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1264 extra_flag_field = input_extra_flag.report;
1265 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1266 extra_flag_field = input_extra_flag.drm;
1267 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1268 extra_flag_field = input_extra_flag.text_download_yn;
1269 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&extra_flag_field, sizeof(int));
1271 *output_stream_size = stream_size;
1273 EM_DEBUG_FUNC_END();
1275 return result_stream;
1278 INTERNAL_FUNC void em_convert_byte_stream_to_extra_flags(char *input_stream, emf_extra_flag_t *output_extra_flag)
1280 EM_DEBUG_FUNC_BEGIN();
1282 int stream_offset = 0;
1283 int extra_flag_field = 0;
1285 EM_NULL_CHECK_FOR_VOID(input_stream);
1286 EM_NULL_CHECK_FOR_VOID(output_extra_flag);
1288 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1289 output_extra_flag->priority = extra_flag_field;
1290 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1291 output_extra_flag->status = extra_flag_field;
1292 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1293 output_extra_flag->noti = extra_flag_field;
1294 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1295 output_extra_flag->lock = extra_flag_field;
1296 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1297 output_extra_flag->report = extra_flag_field;
1298 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1299 output_extra_flag->drm = extra_flag_field;
1300 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&extra_flag_field);
1301 output_extra_flag->text_download_yn = extra_flag_field;
1303 EM_DEBUG_FUNC_END();
1306 INTERNAL_FUNC char* em_convert_meeting_req_to_byte_stream(emf_meeting_request_t *input_meeting_req, int *output_stream_size)
1308 EM_DEBUG_FUNC_BEGIN();
1310 char *result_stream = NULL;
1311 int stream_size = 0;
1313 EM_IF_NULL_RETURN_VALUE(input_meeting_req, NULL);
1315 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->mail_id), sizeof(int));
1316 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->meeting_response), sizeof(int));
1317 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->start_time), sizeof(struct tm));
1318 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->end_time), sizeof(struct tm));
1319 result_stream = append_string_to_stream (result_stream, &stream_size, input_meeting_req->location);
1320 result_stream = append_string_to_stream (result_stream, &stream_size, input_meeting_req->global_object_id);
1321 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->time_zone.offset_from_GMT), sizeof(int));
1322 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_meeting_req->time_zone.standard_name, 32);
1323 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->time_zone.standard_time_start_date), sizeof(struct tm));
1324 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->time_zone.standard_bias), sizeof(int));
1325 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&input_meeting_req->time_zone.daylight_name, 32);
1326 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->time_zone.daylight_time_start_date), sizeof(struct tm));
1327 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_meeting_req->time_zone.daylight_bias), sizeof(int));
1329 *output_stream_size = stream_size;
1331 EM_DEBUG_FUNC_END();
1332 return result_stream;
1336 INTERNAL_FUNC void em_convert_byte_stream_to_meeting_req(char *input_stream, emf_meeting_request_t *output_meeting_req)
1338 EM_DEBUG_FUNC_BEGIN();
1339 int stream_offset = 0;
1341 EM_NULL_CHECK_FOR_VOID(input_stream);
1342 EM_NULL_CHECK_FOR_VOID(output_meeting_req);
1344 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_meeting_req->mail_id));
1345 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_meeting_req->meeting_response));
1346 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(struct tm), (char*)&(output_meeting_req->start_time));
1347 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(struct tm), (char*)&(output_meeting_req->end_time));
1348 fetch_string_from_stream (input_stream, &stream_offset, &output_meeting_req->location);
1349 fetch_string_from_stream (input_stream, &stream_offset, &output_meeting_req->global_object_id);
1350 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_meeting_req->time_zone.offset_from_GMT));
1351 fetch_sized_data_from_stream(input_stream, &stream_offset, 32, output_meeting_req->time_zone.standard_name);
1352 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(struct tm), (char*)&(output_meeting_req->time_zone.standard_time_start_date));
1353 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_meeting_req->time_zone.standard_bias));
1354 fetch_sized_data_from_stream(input_stream, &stream_offset, 32, output_meeting_req->time_zone.daylight_name);
1355 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(struct tm), (char*)&(output_meeting_req->time_zone.daylight_time_start_date));
1356 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(output_meeting_req->time_zone.daylight_bias));
1358 EM_DEBUG_FUNC_END();
1361 INTERNAL_FUNC char* em_convert_search_filter_to_byte_stream(email_search_filter_t *input_search_filter_list, int input_search_filter_count, int *output_stream_size)
1363 EM_DEBUG_FUNC_BEGIN("input_search_filter_list [%p] input_search_filter_count [%d]", input_search_filter_list, input_search_filter_count);
1365 char *result_stream = NULL;
1366 int stream_size = 0;
1369 EM_IF_NULL_RETURN_VALUE(input_search_filter_list, NULL);
1371 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_search_filter_count), sizeof(int));
1373 for( i = 0; i < input_search_filter_count; i++) {
1374 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_search_filter_list->search_filter_type), sizeof(int));
1375 switch(input_search_filter_list->search_filter_type) {
1376 case EMAIL_SEARCH_FILTER_TYPE_MESSAGE_NO :
1377 case EMAIL_SEARCH_FILTER_TYPE_UID :
1378 case EMAIL_SEARCH_FILTER_TYPE_SIZE_LARSER :
1379 case EMAIL_SEARCH_FILTER_TYPE_SIZE_SMALLER :
1380 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_ANSWERED :
1381 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_DELETED :
1382 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_DRAFT :
1383 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_FLAGED :
1384 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_RECENT :
1385 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_SEEN :
1386 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_search_filter_list->search_filter_key_value.integer_type_key_value), sizeof(int));
1389 case EMAIL_SEARCH_FILTER_TYPE_BCC :
1390 case EMAIL_SEARCH_FILTER_TYPE_CC :
1391 case EMAIL_SEARCH_FILTER_TYPE_FROM :
1392 case EMAIL_SEARCH_FILTER_TYPE_KEYWORD :
1393 case EMAIL_SEARCH_FILTER_TYPE_SUBJECT :
1394 case EMAIL_SEARCH_FILTER_TYPE_TO :
1395 case EMAIL_SEARCH_FILTER_TYPE_MESSAGE_ID :
1396 result_stream = append_string_to_stream(result_stream, &stream_size, input_search_filter_list->search_filter_key_value.string_type_key_value);
1399 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_BEFORE :
1400 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_ON :
1401 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_SINCE :
1402 result_stream = append_sized_data_to_stream(result_stream, &stream_size, (char*)&(input_search_filter_list->search_filter_key_value.time_type_key_value), sizeof(struct tm));
1405 EM_DEBUG_EXCEPTION("Invalid filter type [%d]", input_search_filter_list->search_filter_type);
1410 *output_stream_size = stream_size;
1412 EM_DEBUG_FUNC_END();
1413 return result_stream;
1416 INTERNAL_FUNC void em_convert_byte_stream_to_search_filter(char *input_stream, email_search_filter_t **output_search_filter_list, int *output_search_filter_count)
1418 EM_DEBUG_FUNC_BEGIN("input_stream [%p] output_search_filter_list [%p] output_search_filter_count [%p]", input_stream, output_search_filter_list, output_search_filter_count);
1420 int stream_offset = 0;
1422 int local_search_filter_count = 0;
1423 email_search_filter_t *local_search_filter = NULL;
1425 EM_NULL_CHECK_FOR_VOID(input_stream);
1426 EM_NULL_CHECK_FOR_VOID(output_search_filter_list);
1427 EM_NULL_CHECK_FOR_VOID(output_search_filter_count);
1429 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(local_search_filter_count));
1431 if(local_search_filter_count == 0) {
1432 EM_DEBUG_EXCEPTION("local_search_filter_count is 0.");
1436 local_search_filter = em_malloc(sizeof(email_search_filter_t) * local_search_filter_count);
1438 if(local_search_filter == NULL) {
1439 EM_DEBUG_EXCEPTION("em_malloc for local_search_filter failed");
1443 *output_search_filter_count = local_search_filter_count;
1445 for( i = 0; i < local_search_filter_count; i++) {
1446 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(local_search_filter[i].search_filter_type));
1447 switch(local_search_filter[i].search_filter_type) {
1448 case EMAIL_SEARCH_FILTER_TYPE_MESSAGE_NO :
1449 case EMAIL_SEARCH_FILTER_TYPE_UID :
1450 case EMAIL_SEARCH_FILTER_TYPE_SIZE_LARSER :
1451 case EMAIL_SEARCH_FILTER_TYPE_SIZE_SMALLER :
1452 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_ANSWERED :
1453 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_DELETED :
1454 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_DRAFT :
1455 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_FLAGED :
1456 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_RECENT :
1457 case EMAIL_SEARCH_FILTER_TYPE_FLAGS_SEEN :
1458 fetch_sized_data_from_stream(input_stream, &stream_offset, sizeof(int), (char*)&(local_search_filter[i].search_filter_key_value.integer_type_key_value));
1461 case EMAIL_SEARCH_FILTER_TYPE_BCC :
1462 case EMAIL_SEARCH_FILTER_TYPE_CC :
1463 case EMAIL_SEARCH_FILTER_TYPE_FROM :
1464 case EMAIL_SEARCH_FILTER_TYPE_KEYWORD :
1465 case EMAIL_SEARCH_FILTER_TYPE_SUBJECT :
1466 case EMAIL_SEARCH_FILTER_TYPE_TO :
1467 case EMAIL_SEARCH_FILTER_TYPE_MESSAGE_ID :
1468 fetch_string_from_stream(input_stream, &stream_offset, &(local_search_filter[i].search_filter_key_value.string_type_key_value));
1471 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_BEFORE :
1472 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_ON :
1473 case EMAIL_SEARCH_FILTER_TYPE_SENT_DATE_SINCE :
1474 fetch_sized_data_from_stream(input_stream, &stream_offset, 32, (char*)&(local_search_filter[i].search_filter_key_value.time_type_key_value));
1477 EM_DEBUG_EXCEPTION("Invalid filter type [%d]", local_search_filter[i].search_filter_type);
1482 *output_search_filter_list = local_search_filter;
1486 EM_DEBUG_FUNC_END();