2 * Copyright 2012-2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "MsgHandle.h"
22 #include "MsgTextConvert.h"
23 #include "MsgException.h"
25 #include "msg_private.h"
28 #define MSG_TYPE_CHECK(a, b) \
30 if(a != (b & 0xff00)) return MSG_ERR_INVALID_PARAMETER; \
35 EXPORT_API msg_struct_t msg_create_struct(int field)
37 msg_struct_s *msg_struct = new msg_struct_s;
38 memset(msg_struct, 0x00, sizeof(msg_struct_s));
40 msg_struct->type = field;
44 case MSG_STRUCT_MESSAGE_INFO :
45 msg_message_create_struct(msg_struct);
47 case MSG_STRUCT_CONV_INFO:
49 msg_struct->data = (void *)new MSG_CONVERSATION_VIEW_S;
50 memset(msg_struct->data, 0x00, sizeof(MSG_CONVERSATION_VIEW_S));
53 case MSG_STRUCT_FILTER:
55 msg_struct->data = (void *)new MSG_FILTER_S;
56 memset(msg_struct->data, 0x00, sizeof(MSG_FILTER_S));
59 case MSG_STRUCT_THREAD_INFO:
61 msg_struct->data = (void *)new MSG_THREAD_VIEW_S;
62 memset(msg_struct->data, 0x00, sizeof(MSG_THREAD_VIEW_S));
65 case MSG_STRUCT_SENDOPT:
67 MSG_SENDINGOPT_S *pOpt = (MSG_SENDINGOPT_S *)new MSG_SENDINGOPT_S;
68 memset(pOpt, 0x00, sizeof(MSG_SENDINGOPT_S));
69 msg_struct->data = pOpt;
71 msg_struct_s *pSms = new msg_struct_s;
72 msg_struct_s *pMms = new msg_struct_s;
74 pOpt->mmsSendOpt = (msg_struct_t)pMms;
75 pOpt->smsSendOpt = (msg_struct_t)pSms;
77 pMms->type = MSG_STRUCT_MMS_SENDOPT;
78 pMms->data = new MMS_SENDINGOPT_S;
79 memset(pMms->data, 0x00, sizeof(MMS_SENDINGOPT_S));
81 pSms->type = MSG_STRUCT_SMS_SENDOPT;
82 pSms->data = new SMS_SENDINGOPT_S;
83 memset(pSms->data, 0x00, sizeof(SMS_SENDINGOPT_S));
86 case MSG_STRUCT_SYNCML_INFO:
88 MSG_SYNCML_MESSAGE_S *pSyncML= (MSG_SYNCML_MESSAGE_S *)new MSG_SYNCML_MESSAGE_S;
89 memset(pSyncML, 0x00, sizeof(MSG_SYNCML_MESSAGE_S));
90 msg_struct->data = pSyncML;
92 msg_struct_s *pStruct = new msg_struct_s;
93 pSyncML->msg = (msg_struct_t)pStruct;
94 pStruct->type = MSG_STRUCT_MESSAGE_INFO;
95 msg_message_create_struct(pStruct);
99 case MSG_STRUCT_COUNT_INFO:
101 msg_struct->data = new MSG_COUNT_INFO_S;
102 memset(msg_struct->data, 0x00, sizeof(MSG_COUNT_INFO_S));
105 case MSG_STRUCT_THREAD_COUNT_INFO:
107 msg_struct->data = new MSG_THREAD_COUNT_INFO_S;
108 memset(msg_struct->data, 0x00, sizeof(MSG_THREAD_COUNT_INFO_S));
111 case MSG_STRUCT_THREAD_LIST_INDEX:
113 MSG_THREAD_LIST_INDEX_INFO_S * pThread = (MSG_THREAD_LIST_INDEX_INFO_S *)new MSG_THREAD_LIST_INDEX_INFO_S;
114 memset(pThread, 0x00, sizeof(MSG_THREAD_LIST_INDEX_INFO_S));
116 msg_struct->data = (void *)pThread;
118 msg_struct_s *pStruct = new msg_struct_s;
119 pThread->msgAddrInfo = (msg_struct_t)pStruct;
121 pStruct->type = MSG_STRUCT_ADDRESS_INFO;
122 pStruct->data = new MSG_ADDRESS_INFO_S;
123 memset(pStruct->data, 0x00, sizeof(MSG_ADDRESS_INFO_S));
127 case MSG_STRUCT_SORT_RULE:
129 msg_struct->data = new MSG_SORT_RULE_S;
130 memset(msg_struct->data, 0x00, sizeof(MSG_SORT_RULE_S));
133 case MSG_STRUCT_FOLDER_INFO:
135 msg_struct->data = new MSG_FOLDER_INFO_S;
136 memset(msg_struct->data, 0x00, sizeof(MSG_FOLDER_INFO_S));
139 case MSG_STRUCT_SEARCH_CONDITION:
141 msg_struct->data = new MSG_SEARCH_CONDITION_S;
142 memset(msg_struct->data, 0x00, sizeof(MSG_SEARCH_CONDITION_S));
145 case MSG_STRUCT_REPORT_STATUS_INFO:
147 msg_struct->data = new MSG_REPORT_STATUS_INFO_S;
148 memset(msg_struct->data, 0x00, sizeof(MSG_REPORT_STATUS_INFO_S));
151 case MSG_STRUCT_SETTING_SMSC_OPT :
153 msg_struct->data = new MSG_SMSC_LIST_HIDDEN_S;
154 memset(msg_struct->data, 0x00, sizeof(MSG_SMSC_LIST_HIDDEN_S));
156 MSG_SMSC_LIST_HIDDEN_S *pTmp = (MSG_SMSC_LIST_HIDDEN_S *)msg_struct->data;
158 msg_struct_list_s *smsc_list = (msg_struct_list_s *)new msg_struct_list_s;
159 memset(smsc_list, 0x00, sizeof(msg_struct_list_s));
161 pTmp->smsc_list = smsc_list;
163 smsc_list->msg_struct_info = (msg_struct_t *)new char[sizeof(msg_struct_t)*SMSC_LIST_MAX];
165 msg_struct_s *pStructTmp = NULL;
167 for (int i = 0; i < SMSC_LIST_MAX; i++) {
168 pStructTmp = (msg_struct_s *)new msg_struct_s;
169 pStructTmp->type = MSG_STRUCT_SETTING_SMSC_INFO;
170 pStructTmp->data = new MSG_SMSC_DATA_S;
171 memset(pStructTmp->data, 0x00, sizeof(MSG_SMSC_DATA_S));
172 smsc_list->msg_struct_info[i] = (msg_struct_t)pStructTmp;
176 case MSG_STRUCT_SETTING_SMSC_INFO :
178 msg_struct->data = new MSG_SMSC_DATA_S;
179 memset(msg_struct->data, 0x00, sizeof(MSG_SMSC_DATA_S));
182 case MSG_STRUCT_SETTING_CB_OPT :
184 msg_struct->data = new MSG_CBMSG_OPT_HIDDEN_S;
185 memset(msg_struct->data, 0x00, sizeof(MSG_CBMSG_OPT_HIDDEN_S));
187 MSG_CBMSG_OPT_HIDDEN_S *pTmp = (MSG_CBMSG_OPT_HIDDEN_S *)msg_struct->data;
189 pTmp->channelData = (msg_struct_list_s *)new msg_struct_list_s;
190 memset(pTmp->channelData, 0x00, sizeof(msg_struct_list_s));
192 pTmp->channelData->msg_struct_info = (msg_struct_t *)new char[sizeof(msg_struct_t)*CB_CHANNEL_MAX];
194 msg_struct_s *pStructTmp = NULL;
196 for (int i = 0; i < CB_CHANNEL_MAX; i++) {
197 pStructTmp = (msg_struct_s *)new msg_struct_s;
198 pStructTmp->type = MSG_STRUCT_SETTING_CB_CHANNEL_INFO;
199 pStructTmp->data = new MSG_CB_CHANNEL_INFO_S;
201 memset(pStructTmp->data, 0x00, sizeof(MSG_CB_CHANNEL_INFO_S));
202 pTmp->channelData->msg_struct_info[i] = (msg_struct_t)pStructTmp;
207 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
209 msg_struct->data = new MSG_CB_CHANNEL_INFO_S;
210 memset(msg_struct->data, 0x00, sizeof(MSG_CB_CHANNEL_INFO_S));
213 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
215 msg_struct->data = new MSG_SMS_SENDOPT_S;
216 memset(msg_struct->data, 0x00, sizeof(MSG_SMS_SENDOPT_S));
219 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
221 msg_struct->data = new MSG_MMS_SENDOPT_S;
222 memset(msg_struct->data, 0x00, sizeof(MSG_MMS_SENDOPT_S));
225 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
227 msg_struct->data = new MSG_MMS_RECVOPT_S;
228 memset(msg_struct->data, 0x00, sizeof(MSG_MMS_RECVOPT_S));
231 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
233 msg_struct->data = new MSG_PUSHMSG_OPT_S;
234 memset(msg_struct->data, 0x00, sizeof(MSG_PUSHMSG_OPT_S));
237 case MSG_STRUCT_SETTING_VOICE_MSG_OPT :
239 msg_struct->data = new MSG_VOICEMAIL_OPT_S;
240 memset(msg_struct->data, 0x00, sizeof(MSG_VOICEMAIL_OPT_S));
243 case MSG_STRUCT_SETTING_GENERAL_OPT :
245 msg_struct->data = new MSG_GENERAL_OPT_S;
246 memset(msg_struct->data, 0x00, sizeof(MSG_GENERAL_OPT_S));
249 case MSG_STRUCT_SETTING_MSGSIZE_OPT :
251 msg_struct->data = new MSG_MSGSIZE_OPT_S;
252 memset(msg_struct->data, 0x00, sizeof(MSG_MSGSIZE_OPT_S));
255 case MSG_STRUCT_SMS_SENDOPT:
257 msg_struct->data = new SMS_SENDINGOPT_S;
258 memset(msg_struct->data, 0x00, sizeof(SMS_SENDINGOPT_S));
261 case MSG_STRUCT_MMS_SENDOPT:
263 msg_struct->data = new MMS_SENDINGOPT_S;
264 memset(msg_struct->data, 0x00, sizeof(MMS_SENDINGOPT_S));
267 case MSG_STRUCT_REQUEST_INFO:
269 MSG_REQUEST_S *pRequest = (MSG_REQUEST_S *)new MSG_REQUEST_S;
270 memset(pRequest, 0x00, sizeof(MSG_REQUEST_S));
271 msg_struct->data = pRequest;
273 msg_struct_s *pMsg = (msg_struct_s *)new msg_struct_s;
274 msg_struct_s *pOpt = (msg_struct_s *)new msg_struct_s;
276 pRequest->msg = (msg_struct_t)pMsg;
277 pRequest->sendOpt = (msg_struct_t)pOpt;
279 pMsg->type = MSG_STRUCT_MESSAGE_INFO;
280 msg_message_create_struct(pMsg);
282 pOpt->type = MSG_STRUCT_SENDOPT;
283 pOpt->data = new MSG_SENDINGOPT_S;
284 memset(pOpt->data, 0x00, sizeof(MSG_SENDINGOPT_S));
285 msg_struct_s *pSms = new msg_struct_s;
286 msg_struct_s *pMms = new msg_struct_s;
288 MSG_SENDINGOPT_S *sendOpt = (MSG_SENDINGOPT_S *)pOpt->data;
290 sendOpt->mmsSendOpt = (msg_struct_t)pMms;
291 sendOpt->smsSendOpt = (msg_struct_t)pSms;
293 pMms->type = MSG_STRUCT_MMS_SENDOPT;
294 pMms->data = new MMS_SENDINGOPT_S;
295 memset(pMms->data, 0x00, sizeof(MMS_SENDINGOPT_S));
297 pSms->type = MSG_STRUCT_SMS_SENDOPT;
298 pSms->data = new SMS_SENDINGOPT_S;
299 memset(pSms->data, 0x00, sizeof(SMS_SENDINGOPT_S));
303 case MSG_STRUCT_MMS_PAGE:
304 case MSG_STRUCT_MMS_MEDIA:
305 case MSG_STRUCT_MMS_ATTACH:
306 case MSG_STRUCT_MMS_REGION:
307 case MSG_STRUCT_MMS_TRANSITION:
308 case MSG_STRUCT_MMS_META:
309 case MSG_STRUCT_MMS_SMIL_TEXT:
310 case MSG_STRUCT_MMS_SMIL_AVI:
311 msg_struct->data = msg_mms_create_struct_data(field);
313 case MSG_STRUCT_PUSH_CONFIG_INFO:
314 msg_struct->data = new MSG_PUSH_EVENT_INFO_S;
315 memset(msg_struct->data, 0x00, sizeof(MSG_PUSH_EVENT_INFO_S));
319 return (msg_struct_t) msg_struct;
323 EXPORT_API int msg_release_struct(msg_struct_t *msg_struct_handle)
325 msg_error_t err = MSG_SUCCESS;
327 if (msg_struct_handle == NULL || *msg_struct_handle == NULL)
328 return MSG_ERR_NULL_POINTER;
330 msg_struct_s *msg_struct = (msg_struct_s *)*msg_struct_handle;
332 switch(msg_struct->type)
334 case MSG_STRUCT_MESSAGE_INFO :
336 msg_message_release(&msg_struct);
338 *msg_struct_handle = NULL;
341 case MSG_STRUCT_FILTER:
343 delete (MSG_FILTER_S*)(msg_struct->data);
344 msg_struct->data = NULL;
347 *msg_struct_handle = NULL;
350 case MSG_STRUCT_CONV_INFO:
352 MSG_CONVERSATION_VIEW_S *pConv = (MSG_CONVERSATION_VIEW_S*)(msg_struct->data);
355 delete [] pConv->pText;
360 msg_struct->data = NULL;
363 *msg_struct_handle = NULL;
366 case MSG_STRUCT_THREAD_INFO:
368 delete (MSG_THREAD_VIEW_S*)(msg_struct->data);
369 msg_struct->data = NULL;
372 *msg_struct_handle = NULL;
375 case MSG_STRUCT_SENDOPT:
377 MSG_SENDINGOPT_S *pOpt = (MSG_SENDINGOPT_S*)(msg_struct->data);
378 delete (MMS_SENDINGOPT_S *)(((msg_struct_s *)pOpt->mmsSendOpt)->data);
379 ((msg_struct_s *)pOpt->mmsSendOpt)->data = NULL;
380 delete (msg_struct_s *)pOpt->mmsSendOpt;
381 pOpt->mmsSendOpt = NULL;
383 delete (SMS_SENDINGOPT_S *)(((msg_struct_s *)pOpt->smsSendOpt)->data);
384 ((msg_struct_s *)pOpt->smsSendOpt)->data = NULL;
385 delete (msg_struct_s *)pOpt->smsSendOpt;
386 pOpt->smsSendOpt = NULL;
389 msg_struct->data = NULL;
392 *msg_struct_handle = NULL;
396 case MSG_STRUCT_SYNCML_INFO:
398 MSG_SYNCML_MESSAGE_S *pSyncML = (MSG_SYNCML_MESSAGE_S*)(msg_struct->data);
399 msg_struct_s *msg = (msg_struct_s *)pSyncML->msg;
400 msg_message_release(&msg);
403 msg_struct->data = NULL;
406 *msg_struct_handle = NULL;
409 case MSG_STRUCT_COUNT_INFO:
411 delete (MSG_COUNT_INFO_S*)(msg_struct->data);
412 msg_struct->data = NULL;
415 *msg_struct_handle = NULL;
418 case MSG_STRUCT_THREAD_COUNT_INFO:
420 delete (MSG_THREAD_COUNT_INFO_S*)(msg_struct->data);
421 msg_struct->data = NULL;
424 *msg_struct_handle = NULL;
428 case MSG_STRUCT_THREAD_LIST_INDEX:
430 MSG_THREAD_LIST_INDEX_INFO_S *pThread = (MSG_THREAD_LIST_INDEX_INFO_S*)(msg_struct->data);
431 delete (MSG_ADDRESS_INFO_S *)(((msg_struct_s *)pThread->msgAddrInfo)->data);
432 ((msg_struct_s *)pThread->msgAddrInfo)->data = NULL;
433 delete (msg_struct_s *)pThread->msgAddrInfo;
434 pThread->msgAddrInfo = NULL;
436 msg_struct->data = NULL;
439 *msg_struct_handle = NULL;
443 case MSG_STRUCT_SORT_RULE:
445 delete (MSG_SORT_RULE_S*)(msg_struct->data);
446 msg_struct->data = NULL;
449 *msg_struct_handle = NULL;
453 case MSG_STRUCT_FOLDER_INFO:
455 delete (MSG_FOLDER_INFO_S*)(msg_struct->data);
456 msg_struct->data = NULL;
459 *msg_struct_handle = NULL;
463 case MSG_STRUCT_SEARCH_CONDITION:
465 delete (MSG_SEARCH_CONDITION_S*)(msg_struct->data);
466 msg_struct->data = NULL;
469 *msg_struct_handle = NULL;
473 case MSG_STRUCT_REPORT_STATUS_INFO:
475 delete (MSG_REPORT_STATUS_INFO_S*)(msg_struct->data);
476 msg_struct->data = NULL;
479 *msg_struct_handle = NULL;
483 case MSG_STRUCT_SMS_SENDOPT:
485 delete (SMS_SENDINGOPT_S*)(msg_struct->data);
486 msg_struct->data = NULL;
489 *msg_struct_handle = NULL;
493 case MSG_STRUCT_MMS_SENDOPT:
495 delete (MMS_SENDINGOPT_S*)(msg_struct->data);
496 msg_struct->data = NULL;
499 *msg_struct_handle = NULL;
503 case MSG_STRUCT_REQUEST_INFO:
505 MSG_REQUEST_S *pRequest = (MSG_REQUEST_S*)(msg_struct->data);
507 MSG_SENDINGOPT_S *pSendingOpt = (MSG_SENDINGOPT_S *)(((msg_struct_s *)pRequest->sendOpt)->data);
509 msg_struct_s *pMmsOpt = (msg_struct_s *)pSendingOpt->mmsSendOpt;
510 msg_struct_s *pSmsOpt = (msg_struct_s *)pSendingOpt->smsSendOpt;
512 delete (MMS_SENDINGOPT_S *)(pMmsOpt->data);
513 pMmsOpt->data = NULL;
514 delete (msg_struct_s *)pSendingOpt->mmsSendOpt;
515 pSendingOpt->mmsSendOpt = NULL;
516 delete (MMS_SENDINGOPT_S *)(pSmsOpt->data);
517 pSmsOpt->data = NULL;
518 delete (msg_struct_s *)pSendingOpt->smsSendOpt;
519 pSendingOpt->smsSendOpt = NULL;
521 delete (MSG_SENDINGOPT_S *)pSendingOpt;
522 ((msg_struct_s *)pRequest->sendOpt)->data = NULL;
523 delete (msg_struct_s *)pRequest->sendOpt;
524 pRequest->sendOpt = NULL;
526 msg_struct_s *msg = (msg_struct_s *)pRequest->msg;
527 msg_message_release(&msg);
530 msg_struct->data = NULL;
533 *msg_struct_handle = NULL;
537 case MSG_STRUCT_MMS_PAGE:
538 case MSG_STRUCT_MMS_MEDIA:
539 case MSG_STRUCT_MMS_ATTACH:
540 case MSG_STRUCT_MMS_REGION:
541 case MSG_STRUCT_MMS_TRANSITION:
542 case MSG_STRUCT_MMS_META:
543 case MSG_STRUCT_MMS_SMIL_TEXT:
544 case MSG_STRUCT_MMS_SMIL_AVI:
546 msg_mms_release_struct(&msg_struct);
547 *msg_struct_handle = NULL;
550 case MSG_STRUCT_SETTING_SMSC_OPT :
552 msg_struct_list_s *smsc_list = NULL;
553 msg_struct_s *smsc_info = NULL;
554 MSG_SMSC_LIST_HIDDEN_S *pTmp = NULL;
556 pTmp = (MSG_SMSC_LIST_HIDDEN_S *)msg_struct->data;
557 smsc_list = (msg_struct_list_s *)pTmp->smsc_list;
559 for (int i = 0; i < SMSC_LIST_MAX; i++) {
560 smsc_info = (msg_struct_s *)smsc_list->msg_struct_info[i];
561 delete [] (MSG_SMSC_DATA_S*)(smsc_info->data);
565 delete [] smsc_list->msg_struct_info;
567 delete [] (MSG_SMSC_LIST_HIDDEN_S*)pTmp;
568 msg_struct->data = NULL;
571 *msg_struct_handle = NULL;
574 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
576 delete (MSG_CB_CHANNEL_INFO_S*)(msg_struct->data);
577 msg_struct->data = NULL;
580 *msg_struct_handle = NULL;
583 case MSG_STRUCT_SETTING_CB_OPT :
585 msg_struct_list_s *cb_list = NULL;
586 msg_struct_s *cb_info = NULL;
587 MSG_CBMSG_OPT_HIDDEN_S *pTmp = NULL;
589 pTmp = (MSG_CBMSG_OPT_HIDDEN_S *)msg_struct->data;
590 cb_list = (msg_struct_list_s *)pTmp->channelData;
592 for (int i = 0; i < CB_CHANNEL_MAX; i++) {
593 cb_info = (msg_struct_s *)cb_list->msg_struct_info[i];
594 delete [] (MSG_CB_CHANNEL_INFO_S*)(cb_info->data);
598 delete [] cb_list->msg_struct_info;
600 delete [] (MSG_CBMSG_OPT_HIDDEN_S*)pTmp;
601 msg_struct->data = NULL;
604 *msg_struct_handle = NULL;
607 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
609 delete (MSG_SMS_SENDOPT_S*)(msg_struct->data);
610 msg_struct->data = NULL;
613 *msg_struct_handle = NULL;
616 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
618 delete (MSG_MMS_SENDOPT_S*)(msg_struct->data);
619 msg_struct->data = NULL;
622 *msg_struct_handle = NULL;
625 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
627 delete (MSG_MMS_RECVOPT_S*)(msg_struct->data);
628 msg_struct->data = NULL;
631 *msg_struct_handle = NULL;
634 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
636 delete (MSG_PUSHMSG_OPT_S*)(msg_struct->data);
637 msg_struct->data = NULL;
640 *msg_struct_handle = NULL;
643 case MSG_STRUCT_SETTING_VOICE_MSG_OPT :
645 delete (MSG_VOICEMAIL_OPT_S*)(msg_struct->data);
646 msg_struct->data = NULL;
649 *msg_struct_handle = NULL;
652 case MSG_STRUCT_SETTING_GENERAL_OPT :
654 delete (MSG_GENERAL_OPT_S*)(msg_struct->data);
655 msg_struct->data = NULL;
658 *msg_struct_handle = NULL;
661 case MSG_STRUCT_SETTING_MSGSIZE_OPT :
663 delete (MSG_MSGSIZE_OPT_S*)(msg_struct->data);
664 msg_struct->data = NULL;
667 *msg_struct_handle = NULL;
670 case MSG_STRUCT_ADDRESS_INFO :
672 delete (MSG_ADDRESS_INFO_S*)(msg_struct->data);
673 msg_struct->data = NULL;
676 *msg_struct_handle = NULL;
679 case MSG_STRUCT_PUSH_CONFIG_INFO:
681 delete (MSG_PUSH_EVENT_INFO_S*)(msg_struct->data);
682 msg_struct->data = NULL;
685 *msg_struct_handle = NULL;
689 err = MSG_ERR_INVALID_PARAMETER;
696 int msg_release_list_struct(msg_struct_list_s *msg_struct_list)
698 msg_error_t err = MSG_SUCCESS;
700 if (msg_struct_list == NULL)
701 return MSG_ERR_NULL_POINTER;
703 if (msg_struct_list->msg_struct_info == NULL) {
704 if (msg_struct_list->nCount > 0)
705 msg_struct_list->nCount = 0;
709 if(msg_struct_list->nCount > 0) {
710 int structType = ((msg_struct_s *)msg_struct_list->msg_struct_info[0])->type;
711 int listCnt = msg_struct_list->nCount;
715 case MSG_STRUCT_ADDRESS_INFO :
717 listCnt = MAX_TO_ADDRESS_CNT;
724 for(int i = 0; i < listCnt; i++) {
725 msg_release_struct(&(msg_struct_list->msg_struct_info[i]));
729 //free peer info list
730 delete [] msg_struct_list->msg_struct_info;
731 msg_struct_list->msg_struct_info = NULL;
736 EXPORT_API int msg_get_int_value(msg_struct_t msg_struct_handle, int field, int *value)
739 msg_error_t err = MSG_SUCCESS;
741 if (msg_struct_handle == NULL)
742 return MSG_ERR_NULL_POINTER;
744 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
745 MSG_TYPE_CHECK(msg_struct->type, field);
747 if (msg_struct->data == NULL)
748 return MSG_ERR_NULL_POINTER;
750 switch (msg_struct->type)
752 case MSG_STRUCT_MESSAGE_INFO :
753 err = msg_message_get_int_value(msg_struct->data, field, value);
755 case MSG_STRUCT_FILTER:
756 *value = msg_get_filter_info_int(msg_struct->data, field);
758 case MSG_STRUCT_SYNCML_INFO :
759 *value = msg_syncml_info_get_int(msg_struct->data, field);
761 case MSG_STRUCT_COUNT_INFO :
762 *value = msg_count_info_get_int(msg_struct->data, field);
764 case MSG_STRUCT_THREAD_COUNT_INFO :
765 *value = msg_thread_count_get_int(msg_struct->data, field);
767 case MSG_STRUCT_THREAD_LIST_INDEX :
768 *value = msg_thread_index_get_int(msg_struct->data, field);
770 case MSG_STRUCT_SORT_RULE :
771 *value = msg_sortrule_get_int(msg_struct->data, field);
773 case MSG_STRUCT_FOLDER_INFO :
774 *value = msg_folder_info_get_int(msg_struct->data, field);
776 case MSG_STRUCT_THREAD_INFO :
777 *value = msg_thread_info_get_int(msg_struct->data, field);
779 case MSG_STRUCT_CONV_INFO :
780 *value = msg_conv_info_get_int(msg_struct->data, field);
782 case MSG_STRUCT_SEARCH_CONDITION :
783 *value = msg_search_condition_get_int(msg_struct->data, field);
785 case MSG_STRUCT_REPORT_STATUS_INFO :
786 *value = msg_report_status_get_int(msg_struct->data, field);
788 case MSG_STRUCT_ADDRESS_INFO :
789 *value = msg_address_info_get_int(msg_struct->data, field);
791 case MSG_STRUCT_MMS_SENDOPT :
792 *value = msg_mms_sendopt_get_int(msg_struct->data, field);
794 case MSG_STRUCT_REJECT_MSG_INFO :
795 *value = msg_reject_message_get_int(msg_struct->data, field);
797 case MSG_STRUCT_REQUEST_INFO :
798 *value = msg_request_get_int(msg_struct->data, field);
800 case MSG_STRUCT_SENT_STATUS_INFO :
801 *value = msg_sent_status_get_int((MSG_SENT_STATUS_S *)msg_struct->data, field);
803 case MSG_STRUCT_CB_MSG :
804 err = msg_cb_message_get_int_value (msg_struct->data, field, value);
807 case MSG_STRUCT_MMS_PAGE:
808 case MSG_STRUCT_MMS_MEDIA:
809 case MSG_STRUCT_MMS_ATTACH:
810 case MSG_STRUCT_MMS_REGION:
811 case MSG_STRUCT_MMS_TRANSITION:
812 case MSG_STRUCT_MMS_META:
813 case MSG_STRUCT_MMS_SMIL_TEXT:
814 case MSG_STRUCT_MMS_SMIL_AVI:
815 err = msg_mms_get_int_value(msg_struct, field, value);
817 case MSG_STRUCT_SETTING_SMSC_OPT :
818 case MSG_STRUCT_SETTING_SMSC_INFO :
819 case MSG_STRUCT_SETTING_CB_OPT :
820 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
821 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
822 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
823 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
824 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
825 case MSG_STRUCT_SETTING_GENERAL_OPT :
826 case MSG_STRUCT_SETTING_MSGSIZE_OPT :
827 err = msg_setting_get_int_value(msg_struct, field, value);
830 err = MSG_ERR_INVALID_PARAMETER;
837 EXPORT_API int msg_get_str_value(msg_struct_t msg_struct_handle, int field, char *src, int size)
839 msg_error_t err = MSG_SUCCESS;
841 if (msg_struct_handle == NULL)
842 return MSG_ERR_NULL_POINTER;
844 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
846 if (msg_struct->data == NULL)
847 return MSG_ERR_NULL_POINTER;
849 char *ret_str = NULL;
851 switch (msg_struct->type)
853 case MSG_STRUCT_MESSAGE_INFO :
854 err = msg_message_get_str_value(msg_struct->data, field, src, size);
856 case MSG_STRUCT_FILTER:
857 ret_str = msg_get_filter_info_str(msg_struct->data, field);
859 err = MSG_ERR_UNKNOWN;
861 strncpy(src, ret_str, size);
863 case MSG_STRUCT_FOLDER_INFO :
864 ret_str = msg_folder_info_get_str(msg_struct->data, field);
866 err = MSG_ERR_UNKNOWN;
868 strncpy(src, ret_str, size);
870 case MSG_STRUCT_THREAD_INFO :
871 ret_str = msg_thread_info_get_str(msg_struct->data, field);
873 err = MSG_ERR_UNKNOWN;
875 strncpy(src, ret_str, size);
877 case MSG_STRUCT_CONV_INFO :
878 ret_str = msg_conv_info_get_str(msg_struct->data, field);
880 err = MSG_ERR_UNKNOWN;
882 strncpy(src, ret_str, size);
884 case MSG_STRUCT_SEARCH_CONDITION :
885 ret_str = msg_search_condition_get_str(msg_struct->data, field, size);
887 err = MSG_ERR_UNKNOWN;
889 strncpy(src, ret_str, size);
892 case MSG_STRUCT_ADDRESS_INFO :
893 ret_str = msg_address_info_get_str(msg_struct->data, field, size);
895 err = MSG_ERR_UNKNOWN;
897 strncpy(src, ret_str, size);
900 case MSG_STRUCT_REJECT_MSG_INFO :
901 ret_str = msg_reject_message_get_str(msg_struct->data, field, size);
903 err = MSG_ERR_UNKNOWN;
905 strncpy(src, ret_str, size);
908 case MSG_STRUCT_MMS_PAGE:
909 case MSG_STRUCT_MMS_MEDIA:
910 case MSG_STRUCT_MMS_ATTACH:
911 case MSG_STRUCT_MMS_REGION:
912 case MSG_STRUCT_MMS_TRANSITION:
913 case MSG_STRUCT_MMS_META:
914 case MSG_STRUCT_MMS_SMIL_TEXT:
915 case MSG_STRUCT_MMS_SMIL_AVI:
916 err = msg_mms_get_str_value(msg_struct, field, src, size);
918 case MSG_STRUCT_SETTING_SMSC_INFO :
919 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
920 case MSG_STRUCT_SETTING_VOICE_MSG_OPT :
921 err = msg_setting_get_str_value(msg_struct, field, src, size);
923 case MSG_STRUCT_PUSH_CONFIG_INFO :
924 ret_str = msg_push_config_get_str(msg_struct->data, field, size);
926 err = MSG_ERR_UNKNOWN;
928 strncpy(src, ret_str, size);
930 case MSG_STRUCT_REPORT_STATUS_INFO:
931 ret_str = msg_report_status_get_str(msg_struct->data, field);
933 err = MSG_ERR_UNKNOWN;
935 strncpy(src, ret_str, size);
937 case MSG_STRUCT_CB_MSG :
938 err = msg_cb_message_get_str_value(msg_struct->data, field, src, size);
941 err = MSG_ERR_INVALID_PARAMETER;
948 EXPORT_API int msg_get_bool_value(msg_struct_t msg_struct_handle, int field, bool *value)
950 msg_error_t err = MSG_SUCCESS;
952 if (msg_struct_handle == NULL)
953 return MSG_ERR_NULL_POINTER;
955 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
957 if (msg_struct->data == NULL)
958 return MSG_ERR_NULL_POINTER;
960 switch (msg_struct->type)
962 case MSG_STRUCT_FILTER :
963 *value = msg_get_filter_info_bool(msg_struct->data, field);
965 case MSG_STRUCT_MESSAGE_INFO :
966 err = msg_message_get_bool_value(msg_struct->data, field, value);
968 case MSG_STRUCT_THREAD_INFO :
969 *value = msg_thread_info_get_bool(msg_struct->data, field);
971 case MSG_STRUCT_CONV_INFO:
972 *value = msg_conv_get_bool(msg_struct->data, field);
974 case MSG_STRUCT_SENDOPT:
975 *value = msg_sendopt_get_bool(msg_struct->data, field);
977 case MSG_STRUCT_SORT_RULE:
978 *value = msg_sortrule_get_bool(msg_struct->data, field);
980 case MSG_STRUCT_MMS_SENDOPT:
981 *value = msg_mms_sendopt_get_bool(msg_struct->data, field);
983 case MSG_STRUCT_SMS_SENDOPT:
984 *value = msg_sms_sendopt_get_bool(msg_struct->data, field);
987 case MSG_STRUCT_MMS_PAGE:
988 case MSG_STRUCT_MMS_MEDIA:
989 case MSG_STRUCT_MMS_ATTACH:
990 case MSG_STRUCT_MMS_REGION:
991 case MSG_STRUCT_MMS_TRANSITION:
992 case MSG_STRUCT_MMS_META:
993 case MSG_STRUCT_MMS_SMIL_TEXT:
994 case MSG_STRUCT_MMS_SMIL_AVI:
995 err = msg_mms_get_bool_value(msg_struct, field, value);
997 case MSG_STRUCT_SETTING_CB_OPT :
998 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
999 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
1000 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
1001 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
1002 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
1003 case MSG_STRUCT_SETTING_GENERAL_OPT :
1004 err = msg_setting_get_bool_value(msg_struct, field, value);
1007 err = MSG_ERR_INVALID_PARAMETER;
1014 EXPORT_API int msg_get_struct_handle(msg_struct_t msg_struct_handle, int field, msg_struct_t *value)
1016 msg_error_t err = MSG_SUCCESS;
1018 if (msg_struct_handle == NULL)
1019 return MSG_ERR_NULL_POINTER;
1021 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1023 if (msg_struct->data == NULL)
1024 return MSG_ERR_NULL_POINTER;
1026 switch (msg_struct->type)
1028 case MSG_STRUCT_MESSAGE_INFO :
1029 err = msg_message_get_struct_hnd(msg_struct->data, field, (void **)value);
1031 case MSG_STRUCT_SENDOPT:
1032 err = msg_sendopt_get_struct_handle(msg_struct, field, (void **)value);
1034 case MSG_STRUCT_SYNCML_INFO:
1035 err = msg_syncml_get_struct_handle(msg_struct, field, (void **)value);
1037 case MSG_STRUCT_THREAD_LIST_INDEX:
1038 err = msg_thread_index_get_struct_handle(msg_struct, field, (void **)value);
1040 case MSG_STRUCT_MMS_MEDIA:
1041 err = msg_mms_get_struct_handle(msg_struct, field, (msg_struct_s**)value);
1043 case MSG_STRUCT_REQUEST_INFO:
1044 err = msg_request_get_struct_handle(msg_struct, field, (void **)value);
1047 err = MSG_ERR_INVALID_PARAMETER;
1054 EXPORT_API int msg_get_list_handle(msg_struct_t msg_struct_handle, int field, void **value)
1056 msg_error_t err = MSG_SUCCESS;
1058 if (msg_struct_handle == NULL)
1059 return MSG_ERR_NULL_POINTER;
1061 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1063 if (msg_struct->data == NULL)
1064 return MSG_ERR_NULL_POINTER;
1066 switch (msg_struct->type)
1068 case MSG_STRUCT_MESSAGE_INFO :
1069 err = msg_message_get_list_hnd(msg_struct->data, field, value);
1071 case MSG_STRUCT_MMS:
1072 case MSG_STRUCT_MMS_PAGE:
1073 err = msg_mms_get_list_handle(msg_struct, field, (msg_list_handle_t *)value);
1075 case MSG_STRUCT_SETTING_CB_OPT :
1076 case MSG_STRUCT_SETTING_SMSC_OPT :
1077 err = msg_setting_get_list_handle(msg_struct, field, value);
1080 err = MSG_ERR_INVALID_PARAMETER;
1087 EXPORT_API int msg_set_int_value(msg_struct_t msg_struct_handle, int field, int value)
1089 msg_error_t err = MSG_SUCCESS;
1091 if (msg_struct_handle == NULL)
1092 return MSG_ERR_NULL_POINTER;
1094 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1096 if (msg_struct->data == NULL)
1097 return MSG_ERR_NULL_POINTER;
1099 switch (msg_struct->type)
1101 case MSG_STRUCT_MESSAGE_INFO :
1102 err = msg_message_set_int_value(msg_struct->data, field, value);
1104 case MSG_STRUCT_FILTER :
1105 err = msg_set_filter_info_int(msg_struct->data, field, value);
1107 case MSG_STRUCT_SYNCML_INFO :
1108 err = msg_syncml_info_set_int(msg_struct->data, field, value);
1110 case MSG_STRUCT_COUNT_INFO :
1111 err = msg_count_info_set_int(msg_struct->data, field, value);
1113 case MSG_STRUCT_THREAD_COUNT_INFO :
1114 err = msg_thread_count_set_int(msg_struct->data, field, value);
1116 case MSG_STRUCT_THREAD_LIST_INDEX :
1117 err = msg_thread_index_set_int(msg_struct->data, field, value);
1119 case MSG_STRUCT_SORT_RULE :
1120 err = msg_sortrule_set_int(msg_struct->data, field, value);
1122 case MSG_STRUCT_FOLDER_INFO :
1123 err = msg_folder_info_set_int(msg_struct->data, field, value);
1125 case MSG_STRUCT_SEARCH_CONDITION :
1126 err = msg_search_condition_set_int(msg_struct->data, field, value);
1128 case MSG_STRUCT_REPORT_STATUS_INFO :
1129 err = msg_report_status_set_int(msg_struct->data, field, value);
1131 case MSG_STRUCT_ADDRESS_INFO :
1132 err = msg_address_info_set_int(msg_struct->data, field, value);
1134 case MSG_STRUCT_MMS_SENDOPT :
1135 err = msg_mms_sendopt_set_int(msg_struct->data, field, value);
1137 case MSG_STRUCT_REJECT_MSG_INFO :
1138 err = msg_reject_message_set_int(msg_struct->data, field, value);
1140 case MSG_STRUCT_REQUEST_INFO :
1141 err = msg_request_set_int(msg_struct->data, field, value);
1143 case MSG_STRUCT_MMS:
1144 case MSG_STRUCT_MMS_PAGE:
1145 case MSG_STRUCT_MMS_MEDIA:
1146 case MSG_STRUCT_MMS_ATTACH:
1147 case MSG_STRUCT_MMS_REGION:
1148 case MSG_STRUCT_MMS_TRANSITION:
1149 case MSG_STRUCT_MMS_META:
1150 case MSG_STRUCT_MMS_SMIL_TEXT:
1151 case MSG_STRUCT_MMS_SMIL_AVI:
1152 err = msg_mms_set_int_value(msg_struct, field, value);
1154 case MSG_STRUCT_SETTING_SMSC_OPT :
1155 case MSG_STRUCT_SETTING_SMSC_INFO :
1156 case MSG_STRUCT_SETTING_CB_OPT :
1157 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
1158 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
1159 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
1160 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
1161 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
1162 case MSG_STRUCT_SETTING_GENERAL_OPT :
1163 case MSG_STRUCT_SETTING_MSGSIZE_OPT :
1164 err = msg_setting_set_int_value(msg_struct, field, value);
1167 err = MSG_ERR_INVALID_PARAMETER;
1174 EXPORT_API int msg_set_str_value(msg_struct_t msg_struct_handle, int field, char *value, int size)
1176 msg_error_t err = MSG_SUCCESS;
1178 if (msg_struct_handle == NULL)
1179 return MSG_ERR_NULL_POINTER;
1181 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1183 if (msg_struct->data == NULL)
1184 return MSG_ERR_NULL_POINTER;
1186 switch (msg_struct->type)
1188 case MSG_STRUCT_MESSAGE_INFO :
1189 err = msg_message_set_str_value(msg_struct->data, field, value, size);
1191 case MSG_STRUCT_FILTER :
1192 err = msg_set_filter_info_str(msg_struct->data, field, value, size);
1194 case MSG_STRUCT_FOLDER_INFO :
1195 err = msg_folder_info_set_str(msg_struct->data, field, value, size);
1197 case MSG_STRUCT_SEARCH_CONDITION :
1198 err = msg_search_condition_set_str(msg_struct->data, field, value, size);
1200 case MSG_STRUCT_ADDRESS_INFO :
1201 err = msg_address_info_set_str(msg_struct->data, field, value, size);
1203 case MSG_STRUCT_REJECT_MSG_INFO :
1204 err = msg_reject_message_set_str(msg_struct->data, field, value, size);
1206 case MSG_STRUCT_MMS:
1207 case MSG_STRUCT_MMS_PAGE:
1208 case MSG_STRUCT_MMS_MEDIA:
1209 case MSG_STRUCT_MMS_ATTACH:
1210 case MSG_STRUCT_MMS_REGION:
1211 case MSG_STRUCT_MMS_TRANSITION:
1212 case MSG_STRUCT_MMS_META:
1213 case MSG_STRUCT_MMS_SMIL_TEXT:
1214 case MSG_STRUCT_MMS_SMIL_AVI:
1215 err = msg_mms_set_str_value(msg_struct, field, value, size);
1217 case MSG_STRUCT_SETTING_SMSC_INFO :
1218 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
1219 case MSG_STRUCT_SETTING_VOICE_MSG_OPT :
1220 err = msg_setting_set_str_value(msg_struct, field, value, size);
1222 case MSG_STRUCT_PUSH_CONFIG_INFO:
1223 err = msg_push_config_set_str(msg_struct->data, field, value, size);
1226 err = MSG_ERR_INVALID_PARAMETER;
1233 EXPORT_API int msg_set_bool_value(msg_struct_t msg_struct_handle, int field, bool value)
1235 msg_error_t err = MSG_SUCCESS;
1237 if (msg_struct_handle == NULL)
1238 return MSG_ERR_NULL_POINTER;
1240 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1242 if (msg_struct->data == NULL)
1243 return MSG_ERR_NULL_POINTER;
1245 switch (msg_struct->type)
1247 case MSG_STRUCT_FILTER :
1248 err = msg_set_filter_info_bool(msg_struct->data, field, value);
1250 case MSG_STRUCT_MESSAGE_INFO :
1251 err = msg_message_set_bool_value(msg_struct->data, field, value);
1253 case MSG_STRUCT_SENDOPT:
1254 err = msg_sendopt_set_bool(msg_struct->data, field, value);
1256 case MSG_STRUCT_SORT_RULE:
1257 err = msg_sortrule_set_bool(msg_struct->data, field, value);
1259 case MSG_STRUCT_MMS_SENDOPT:
1260 err = msg_mms_sendopt_set_bool(msg_struct->data, field, value);
1262 case MSG_STRUCT_SMS_SENDOPT:
1263 err = msg_sms_sendopt_set_bool(msg_struct->data, field, value);
1265 case MSG_STRUCT_MMS:
1266 case MSG_STRUCT_MMS_PAGE:
1267 case MSG_STRUCT_MMS_MEDIA:
1268 case MSG_STRUCT_MMS_ATTACH:
1269 case MSG_STRUCT_MMS_REGION:
1270 case MSG_STRUCT_MMS_TRANSITION:
1271 case MSG_STRUCT_MMS_META:
1272 case MSG_STRUCT_MMS_SMIL_TEXT:
1273 case MSG_STRUCT_MMS_SMIL_AVI:
1274 err = msg_mms_set_bool_value(msg_struct, field, value);
1276 case MSG_STRUCT_SETTING_CB_OPT :
1277 case MSG_STRUCT_SETTING_CB_CHANNEL_INFO :
1278 case MSG_STRUCT_SETTING_SMS_SEND_OPT :
1279 case MSG_STRUCT_SETTING_MMS_SEND_OPT :
1280 case MSG_STRUCT_SETTING_MMS_RECV_OPT :
1281 case MSG_STRUCT_SETTING_PUSH_MSG_OPT :
1282 case MSG_STRUCT_SETTING_GENERAL_OPT :
1283 err = msg_setting_set_bool_value(msg_struct, field, value);
1285 case MSG_STRUCT_PUSH_CONFIG_INFO:
1286 err = msg_push_config_set_bool(msg_struct->data, field, value);
1289 err = MSG_ERR_INVALID_PARAMETER;
1296 EXPORT_API int msg_set_struct_handle(msg_struct_t msg_struct_handle, int field, msg_struct_t value)
1298 msg_error_t err = MSG_SUCCESS;
1300 if (msg_struct_handle == NULL)
1301 return MSG_ERR_NULL_POINTER;
1303 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1305 if (msg_struct->data == NULL)
1306 return MSG_ERR_NULL_POINTER;
1308 switch (msg_struct->type)
1310 case MSG_STRUCT_MESSAGE_INFO :
1311 err = msg_message_set_struct_hnd(msg_struct->data, field, (void *)value);
1313 case MSG_STRUCT_SENDOPT:
1314 err = msg_sendopt_set_struct_handle(msg_struct, field, (msg_struct_s *)value);
1316 case MSG_STRUCT_SYNCML_INFO:
1317 err = msg_syncml_set_struct_handle(msg_struct, field, (msg_struct_s *)value);
1319 case MSG_STRUCT_THREAD_LIST_INDEX:
1320 err = msg_thread_index_set_struct_handle(msg_struct, field, (msg_struct_s *)value);
1322 case MSG_STRUCT_MMS_MEDIA:
1323 err = msg_mms_set_struct_handle(msg_struct, field, (msg_struct_s *)value);
1325 case MSG_STRUCT_REQUEST_INFO:
1326 err = msg_request_set_struct_handle(msg_struct, field, (msg_struct_s *)value);
1329 err = MSG_ERR_INVALID_PARAMETER;
1336 EXPORT_API int msg_set_list_handle(msg_struct_t msg_struct_handle, int field, void *value)
1338 msg_error_t err = MSG_SUCCESS;
1340 if (msg_struct_handle == NULL)
1341 return MSG_ERR_NULL_POINTER;
1343 msg_struct_s *msg_struct = (msg_struct_s *) msg_struct_handle;
1345 if (msg_struct->data == NULL)
1346 return MSG_ERR_NULL_POINTER;
1348 switch (msg_struct->type)
1351 err = MSG_ERR_INVALID_PARAMETER;
1357 EXPORT_API msg_struct_t msg_list_nth_data(msg_list_handle_t list_handle, int index)
1359 return (msg_struct_t)g_list_nth_data((GList *)list_handle,(guint)index);
1362 EXPORT_API int msg_list_length(msg_list_handle_t list_handle)
1364 return (int)g_list_length((GList *)list_handle);
1367 EXPORT_API int msg_util_calculate_text_length(const char* msg_text, msg_encode_type_t msg_encode_type_to, unsigned int *text_size, unsigned int *segment_size, msg_encode_type_t *msg_encode_type_in)
1369 msg_error_t err = MSG_SUCCESS;
1371 if (msg_text == NULL || text_size == NULL || segment_size == NULL) {
1372 err = MSG_ERR_INVALID_PARAMETER;
1376 msg_encode_type_t encodeType = MSG_ENCODE_AUTO;
1377 MSG_LANGUAGE_ID_T langId = MSG_LANG_ID_RESERVED;
1380 int bufSize = (160*MAX_SEGMENT_NUM) + 1;
1383 bool bAbnormal = false;
1385 textSize = strlen(msg_text);
1387 unsigned char decodeData[bufSize];
1388 memset(decodeData, 0x00, sizeof(decodeData));
1390 MsgTextConvert textCvt;
1395 switch (msg_encode_type_to)
1397 case MSG_ENCODE_GSM7BIT :
1398 decodeLen = textCvt.convertUTF8ToGSM7bit(decodeData, bufSize, (const unsigned char*)msg_text, textSize, &langId, &bAbnormal);
1400 case MSG_ENCODE_UCS2 :
1401 decodeLen = textCvt.convertUTF8ToUCS2(decodeData, bufSize, (const unsigned char*)msg_text, textSize);
1403 case MSG_ENCODE_AUTO :
1404 decodeLen = textCvt.convertUTF8ToAuto(decodeData, bufSize, (const unsigned char*)msg_text, textSize, &encodeType);
1407 err = MSG_ERR_INVALID_PARAMETER;
1412 // calculate segment size.
1417 // int headerSize = 0;
1420 // if (langId != MSG_LANG_ID_RESERVED) {
1421 // MSG_DEBUG("National Language Exists");
1422 // headerSize += lang;
1425 if (msg_encode_type_to == MSG_ENCODE_GSM7BIT || encodeType == MSG_ENCODE_GSM7BIT) {
1426 MSG_DEBUG("MSG_ENCODE_GSM7BIT");
1428 // if (((decodeLen+headerSize)/160) > 1)
1429 // segSize = ((140*8) - ((headerLen + concat + headerSize)*8)) / 7;
1431 segSize = ((140*8) - ((headerLen + concat)*8)) / 7;
1436 *msg_encode_type_in = MSG_ENCODE_GSM7BIT_ABNORMAL;
1438 *msg_encode_type_in = MSG_ENCODE_GSM7BIT;
1440 } else if (msg_encode_type_to == MSG_ENCODE_UCS2 || encodeType == MSG_ENCODE_UCS2) {
1441 MSG_DEBUG("MSG_ENCODE_UCS2");
1443 // if (((decodeLen+headerSize)/140) > 1)
1444 // segSize = 140 - (headerLen + concat + headerSize);
1446 segSize = 140 - (headerLen + concat);
1450 *msg_encode_type_in = MSG_ENCODE_UCS2;
1453 MSG_DEBUG("Unsupported encode type.");
1454 err = MSG_ERR_INVALID_PARAMETER;
1458 *text_size = decodeLen;
1459 *segment_size = segSize;