2 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved
4 * Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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.
20 #include "MsgStorageTypes.h"
21 #include "MsgInternalTypes.h"
22 #include "MsgMmsMessage.h"
23 #include "MsgSerialize.h"
25 #include "msg_private.h"
27 msg_struct_s *__msg_message_create_address_struct()
29 msg_struct_s *msg_struct = new msg_struct_s;
30 bzero(msg_struct, sizeof(msg_struct_s));
32 msg_struct->type = MSG_STRUCT_ADDRESS_INFO;
33 msg_struct->data = new MSG_ADDRESS_INFO_S;
34 memset(msg_struct->data, 0x00, sizeof(MSG_ADDRESS_INFO_S));
39 void __msg_message_release_address_struct(gpointer data)
44 msg_struct_s *addr_struct = (msg_struct_s *)data;
45 MSG_ADDRESS_INFO_S *addrInfo = (MSG_ADDRESS_INFO_S *)addr_struct->data;
47 delete (MSG_ADDRESS_INFO_S *)addrInfo;
49 addr_struct->data = NULL;
55 void msg_message_create_struct(msg_struct_s *msg_struct)
57 MSG_MESSAGE_HIDDEN_S *msg = (MSG_MESSAGE_HIDDEN_S *)new MSG_MESSAGE_HIDDEN_S;
58 memset(msg, 0x00, sizeof(MSG_MESSAGE_HIDDEN_S));
60 /* set default value to message*/
63 msg->folderId = MSG_DRAFT_ID;
64 msg->mainType = MSG_SMS_TYPE;
65 msg->subType = MSG_NORMAL_SMS;
66 msg->classType = MSG_CLASS_NONE;
67 msg->storageId = MSG_STORAGE_PHONE;
68 time_t curTime = time(NULL);
69 msg->displayTime = curTime;
70 msg->networkStatus = MSG_NETWORK_NOT_SEND;
71 msg->encodeType = MSG_ENCODE_AUTO;
73 msg->bProtected = false;
75 msg->priority = MSG_MESSAGE_PRIORITY_NORMAL;
76 msg->direction = MSG_DIRECTION_TYPE_MO;
77 msg->bPortValid = false;
82 msg->simIndex = MSG_SIM_SLOT_ID_1;
84 /* Allocate memory for address list of message */
85 msg_struct_list_s *addr_list = (msg_struct_list_s *)new msg_struct_list_s;
87 addr_list->nCount = 0;
88 addr_list->msg_struct_info = (msg_struct_t *)calloc(MAX_TO_ADDRESS_CNT, sizeof(msg_struct_s *));
90 if (addr_list->msg_struct_info != NULL) {
91 msg_struct_s *pTmp = NULL;
93 for (int i = 0; i < MAX_TO_ADDRESS_CNT; i++) {
94 addr_list->msg_struct_info[i] = (msg_struct_t)new msg_struct_s;
95 pTmp = (msg_struct_s *)addr_list->msg_struct_info[i];
96 memset(pTmp, 0x00, sizeof(msg_struct_s));
97 pTmp->type = MSG_STRUCT_ADDRESS_INFO;
98 pTmp->data = new MSG_ADDRESS_INFO_S;
99 memset(pTmp->data, 0x00, sizeof(MSG_ADDRESS_INFO_S));
103 msg->addr_list = addr_list;
105 msg->addressList = NULL;
107 msg_struct->data = (int *)msg;
110 int msg_message_release(msg_struct_s **msg_struct)
112 MSG_MESSAGE_HIDDEN_S *msg = (MSG_MESSAGE_HIDDEN_S *)(*msg_struct)->data;
115 delete [] static_cast<char*>(msg->pData);
120 delete [] static_cast<char*>(msg->pMmsData);
121 msg->pMmsData = NULL;
122 msg->mmsDataSize = 0;
126 if (msg->addr_list != NULL) {
127 for (int i = 0; i < MAX_TO_ADDRESS_CNT; i++) {
128 msg_struct_s * addrInfo = (msg_struct_s *)msg->addr_list->msg_struct_info[i];
129 delete (MSG_ADDRESS_INFO_S *)addrInfo->data;
130 addrInfo->data = NULL;
131 delete (msg_struct_s *)msg->addr_list->msg_struct_info[i];
132 msg->addr_list->msg_struct_info[i] = NULL;
135 g_free(msg->addr_list->msg_struct_info);
137 delete msg->addr_list;
138 msg->addr_list = NULL;
141 /* Free GList *addressList */
142 if (msg->addressList) {
143 g_list_free_full(msg->addressList, __msg_message_release_address_struct);
144 msg->addressList = NULL;
148 (*msg_struct)->data = NULL;
150 delete (msg_struct_s *)*msg_struct;
156 int msg_message_get_int_value(void *data, int field, int *value)
159 return MSG_ERR_NULL_POINTER;
161 int ret = MSG_SUCCESS;
163 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
166 case MSG_MESSAGE_ID_INT:
167 *value = msg_data->msgId;
169 case MSG_MESSAGE_THREAD_ID_INT:
170 *value = msg_data->threadId;
172 case MSG_MESSAGE_FOLDER_ID_INT:
173 *value = msg_data->folderId;
175 case MSG_MESSAGE_TYPE_INT: {
176 if (msg_data->mainType == MSG_SMS_TYPE) {
177 switch (msg_data->subType) {
179 *value = MSG_TYPE_SMS_CB;
182 *value = MSG_TYPE_SMS_JAVACB;
186 *value = MSG_TYPE_SMS_WAPPUSH;
188 case MSG_MWI_VOICE_SMS:
189 case MSG_MWI_FAX_SMS:
190 case MSG_MWI_EMAIL_SMS:
191 case MSG_MWI_OTHER_SMS:
192 *value = MSG_TYPE_SMS_MWI;
195 *value = MSG_TYPE_SMS_SYNCML;
198 *value = MSG_TYPE_SMS_REJECT;
201 *value = MSG_TYPE_SMS_ETWS_PRIMARY;
203 case MSG_CMAS_PRESIDENTIAL:
204 *value = MSG_TYPE_SMS_CMAS_PRESIDENTIAL;
206 case MSG_CMAS_PRESIDENTIAL_OTHER_LANG:
207 *value = MSG_TYPE_SMS_CMAS_PRESIDENTIAL_OTHER_LANG;
209 case MSG_CMAS_EXTREME:
210 *value = MSG_TYPE_SMS_CMAS_EXTREME;
212 case MSG_CMAS_EXTREME_OTHER_LANG:
213 *value = MSG_TYPE_SMS_CMAS_EXTREME_OTHER_LANG;
215 case MSG_CMAS_SEVERE:
216 *value = MSG_TYPE_SMS_CMAS_SEVERE;
218 case MSG_CMAS_SEVERE_OTHER_LANG:
219 *value = MSG_TYPE_SMS_CMAS_SEVERE_OTHER_LANG;
222 *value = MSG_TYPE_SMS_CMAS_AMBER;
224 case MSG_CMAS_AMBER_OTHER_LANG:
225 *value = MSG_TYPE_SMS_CMAS_AMBER_OTHER_LANG;
228 *value = MSG_TYPE_SMS_CMAS_TEST;
230 case MSG_CMAS_TEST_OTHER_LANG:
231 *value = MSG_TYPE_SMS_CMAS_TEST_OTHER_LANG;
233 case MSG_CMAS_EXERCISE:
234 *value = MSG_TYPE_SMS_CMAS_EXERCISE;
236 case MSG_CMAS_EXERCISE_OTHER_LANG:
237 *value = MSG_TYPE_SMS_CMAS_EXERCISE_OTHER_LANG;
239 case MSG_CMAS_OPERATOR_DEFINED:
240 *value = MSG_TYPE_SMS_CMAS_OPERATOR_DEFINED;
242 case MSG_CMAS_OPERATOR_DEFINED_OTHER_LANG:
243 *value = MSG_TYPE_SMS_CMAS_OPERATOR_DEFINED_OTHER_LANG;
245 case MSG_CMAS_PUBLIC_SAFETY:
246 *value = MSG_TYPE_SMS_CMAS_PUBLIC_SAFETY;
248 case MSG_CMAS_PUBLIC_SAFETY_OTHER_LANG:
249 *value = MSG_TYPE_SMS_CMAS_PUBLIC_SAFETY_OTHER_LANG;
251 case MSG_CMAS_STATE_LOCAL_TEST:
252 *value = MSG_TYPE_SMS_CMAS_STATE_LOCAL_TEST;
254 case MSG_CMAS_STATE_LOCAL_TEST_OTHER_LANG:
255 *value = MSG_TYPE_SMS_CMAS_STATE_LOCAL_TEST_OTHER_LANG;
258 *value = MSG_TYPE_SMS;
261 } else if (msg_data->mainType == MSG_MMS_TYPE) {
262 if (msg_data->subType == MSG_NOTIFICATIONIND_MMS)
263 *value = MSG_TYPE_MMS_NOTI;
264 else if (msg_data->subType == MSG_SENDREQ_JAVA_MMS)
265 *value = MSG_TYPE_MMS_JAVA;
267 *value = MSG_TYPE_MMS;
269 *value = MSG_TYPE_INVALID;
274 case MSG_MESSAGE_CLASS_TYPE_INT:
275 *value = msg_data->classType;
277 case MSG_MESSAGE_STORAGE_ID_INT:
278 *value = msg_data->storageId;
280 case MSG_MESSAGE_DISPLAY_TIME_INT:
281 *value = msg_data->displayTime;
283 case MSG_MESSAGE_NETWORK_STATUS_INT:
284 *value = msg_data->networkStatus;
286 case MSG_MESSAGE_ENCODE_TYPE_INT:
287 *value = msg_data->encodeType;
289 case MSG_MESSAGE_PRIORITY_INT:
290 *value = msg_data->priority;
292 case MSG_MESSAGE_DIRECTION_INT:
293 *value = msg_data->direction;
295 case MSG_MESSAGE_DEST_PORT_INT:
296 *value = msg_data->dstPort;
298 case MSG_MESSAGE_SRC_PORT_INT:
299 *value = msg_data->srcPort;
301 case MSG_MESSAGE_ATTACH_COUNT_INT:
302 *value = msg_data->attachCount;
304 case MSG_MESSAGE_DATA_SIZE_INT:
305 *value = msg_data->dataSize;
307 case MSG_MESSAGE_SIM_INDEX_INT:
308 *value = msg_data->simIndex;
311 ret = MSG_ERR_INVALID_PARAMETER;
318 int msg_message_get_bool_value(void *data, int field, bool *value)
321 return MSG_ERR_NULL_POINTER;
323 int ret = MSG_SUCCESS;
325 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
328 case MSG_MESSAGE_READ_BOOL:
329 *value = msg_data->bRead;
331 case MSG_MESSAGE_PROTECTED_BOOL:
332 *value = msg_data->bProtected;
334 case MSG_MESSAGE_BACKUP_BOOL:
335 *value = msg_data->bBackup;
337 case MSG_MESSAGE_PORT_VALID_BOOL:
338 *value = msg_data->bPortValid;
340 case MSG_MESSAGE_REPLACE_BOOL: {
341 if (msg_data->subType >= MSG_REPLACE_TYPE1_SMS && msg_data->subType <= MSG_REPLACE_TYPE7_SMS)
347 case MSG_MESSAGE_DPM_RESTRICTED_BOOL:
348 *value = msg_data->bRestricted;
351 ret = MSG_ERR_INVALID_PARAMETER;
358 int msg_message_get_str_value(void *data, int field, char *value, int size)
361 return MSG_ERR_NULL_POINTER;
363 int ret = MSG_SUCCESS;
365 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
368 case MSG_MESSAGE_REPLY_ADDR_STR:
369 strncpy(value, msg_data->replyAddress, size);
371 case MSG_MESSAGE_SUBJECT_STR:
372 strncpy(value, msg_data->subject, size);
374 case MSG_MESSAGE_SMS_DATA_STR:
375 case MSG_MESSAGE_MMS_TEXT_STR:
376 if (msg_data->pData) {
377 if (msg_data->mainType == MSG_SMS_TYPE) {
379 ((size_t)size >= msg_data->dataSize)? (data_len = msg_data->dataSize) : data_len = size;
380 memset(value, 0, size);
381 memcpy(value, msg_data->pData, data_len);
382 } else if (msg_data->mainType == MSG_MMS_TYPE) {
383 memset(value, 0, size);
384 strncpy(value, (char *)msg_data->pData, size);
390 ret = MSG_ERR_INVALID_PARAMETER;
397 int msg_message_get_struct_hnd(void *data, int field, void **value)
400 return MSG_ERR_NULL_POINTER;
402 int ret = MSG_SUCCESS;
406 ret = MSG_ERR_INVALID_PARAMETER;
413 int msg_message_get_list_hnd(void *data, int field, void **value)
416 return MSG_ERR_NULL_POINTER;
418 int ret = MSG_SUCCESS;
420 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
423 case MSG_MESSAGE_ADDR_LIST_STRUCT:
424 *value = (void *)msg_data->addr_list;
426 case MSG_MESSAGE_ADDR_LIST_HND:
427 *value = (msg_list_handle_t)msg_data->addressList;
430 ret = MSG_ERR_INVALID_PARAMETER;
437 int msg_message_set_int_value(void *data, int field, int value)
440 return MSG_ERR_NULL_POINTER;
442 int ret = MSG_SUCCESS;
444 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
447 case MSG_MESSAGE_ID_INT:
448 msg_data->msgId = value;
450 case MSG_MESSAGE_THREAD_ID_INT:
451 msg_data->threadId = value;
453 case MSG_MESSAGE_FOLDER_ID_INT:
454 msg_data->folderId = value;
456 case MSG_MESSAGE_TYPE_INT: {
457 if (value == MSG_TYPE_SMS) {
458 msg_data->mainType = MSG_SMS_TYPE;
459 msg_data->subType = MSG_NORMAL_SMS;
460 } else if (value == MSG_TYPE_MMS) {
461 msg_data->mainType = MSG_MMS_TYPE;
462 msg_data->subType = MSG_SENDREQ_MMS;
463 } else if (value == MSG_TYPE_MMS_JAVA) {
464 msg_data->mainType = MSG_MMS_TYPE;
465 msg_data->subType = MSG_SENDREQ_JAVA_MMS;
466 } else if (value == MSG_TYPE_SMS_SYNCML) {
467 msg_data->mainType = MSG_SMS_TYPE;
468 msg_data->subType = MSG_SYNCML_CP;
469 } else if (value == MSG_TYPE_SMS_REJECT) {
470 msg_data->mainType = MSG_SMS_TYPE;
471 msg_data->subType = MSG_REJECT_SMS;
472 } else if (value == MSG_TYPE_SMS_ETWS_PRIMARY) {
473 msg_data->mainType = MSG_SMS_TYPE;
474 msg_data->subType = MSG_ETWS_SMS;
476 ret = MSG_ERR_INVALID_PARAMETER;
480 case MSG_MESSAGE_CLASS_TYPE_INT:
481 msg_data->classType = value;
483 case MSG_MESSAGE_STORAGE_ID_INT:
484 msg_data->storageId = value;
486 case MSG_MESSAGE_DISPLAY_TIME_INT:
487 msg_data->displayTime = value;
489 case MSG_MESSAGE_NETWORK_STATUS_INT:
490 msg_data->networkStatus = value;
492 case MSG_MESSAGE_ENCODE_TYPE_INT:
493 msg_data->encodeType = value;
495 case MSG_MESSAGE_PRIORITY_INT:
496 msg_data->priority = value;
498 case MSG_MESSAGE_DIRECTION_INT:
499 msg_data->direction = value;
501 case MSG_MESSAGE_DEST_PORT_INT:
502 msg_data->dstPort = value;
504 case MSG_MESSAGE_SRC_PORT_INT:
505 msg_data->srcPort = value;
507 case MSG_MESSAGE_ATTACH_COUNT_INT:
508 msg_data->attachCount = value;
510 case MSG_MESSAGE_DATA_SIZE_INT:
511 msg_data->dataSize = value;
513 case MSG_MESSAGE_SIM_INDEX_INT:
514 msg_data->simIndex = value;
517 ret = MSG_ERR_INVALID_PARAMETER;
524 int msg_message_set_bool_value(void *data, int field, bool value)
527 return MSG_ERR_NULL_POINTER;
529 int ret = MSG_SUCCESS;
531 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
534 case MSG_MESSAGE_READ_BOOL:
535 msg_data->bRead = value;
537 case MSG_MESSAGE_PROTECTED_BOOL:
538 msg_data->bProtected = value;
540 case MSG_MESSAGE_BACKUP_BOOL:
541 msg_data->bBackup = value;
543 case MSG_MESSAGE_PORT_VALID_BOOL:
544 msg_data->bPortValid = value;
547 ret = MSG_ERR_INVALID_PARAMETER;
554 int msg_message_set_str_value(void *data, int field, const char *value, int size)
557 return MSG_ERR_NULL_POINTER;
559 int ret = MSG_SUCCESS;
561 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)data;
564 case MSG_MESSAGE_REPLY_ADDR_STR:
565 snprintf(msg_data->replyAddress, sizeof(msg_data->replyAddress), "%s", value);
567 case MSG_MESSAGE_SUBJECT_STR:
568 snprintf(msg_data->subject, sizeof(msg_data->subject), "%s", value);
570 case MSG_MESSAGE_SMS_DATA_STR: {
572 delete [] static_cast<char*>(msg_data->pData);
574 msg_data->dataSize = size;
575 msg_data->pData = (void*)new char[msg_data->dataSize+1];
576 memcpy((char *)msg_data->pData, value, msg_data->dataSize);
577 ((char*) msg_data->pData)[msg_data->dataSize] = '\0';
581 ret = MSG_ERR_INVALID_PARAMETER;
588 int msg_message_set_struct_hnd(void *data, int field, void *value)
591 return MSG_ERR_NULL_POINTER;
593 int ret = MSG_SUCCESS;
597 ret = MSG_ERR_INVALID_PARAMETER;
604 void msg_message_copy_message(MSG_MESSAGE_HIDDEN_S *pSrc, MSG_MESSAGE_HIDDEN_S *pDst)
606 pDst->msgId = pSrc->msgId;
607 pDst->threadId = pSrc->msgId;
608 pDst->folderId = pSrc->folderId;
609 pDst->mainType = pSrc->mainType;
610 pDst->subType = pSrc->subType;
611 pDst->classType = pSrc->classType;
612 pDst->storageId = pSrc->storageId;
613 pDst->displayTime = pSrc->displayTime;
614 pDst->networkStatus = pSrc->networkStatus;
615 pDst->encodeType = pSrc->encodeType;
616 pDst->bRead = pSrc->bRead;
617 pDst->bProtected = pSrc->bProtected;
618 pDst->bBackup = pSrc->bBackup;
619 pDst->priority = pSrc->priority;
620 pDst->direction = pSrc->direction;
621 pDst->bPortValid = pSrc->bPortValid;
622 pDst->dataSize = pSrc->dataSize;
623 pDst->mmsDataSize = pSrc->mmsDataSize;
624 pDst->simIndex = pSrc->simIndex;
625 memcpy(pDst->subject, pSrc->subject, sizeof(pDst->subject));
627 if (pSrc->pMmsData && pSrc->mmsDataSize) {
628 pDst->pMmsData = new char[pSrc->mmsDataSize];
629 memcpy(pDst->pMmsData, pSrc->pMmsData, pSrc->mmsDataSize);
632 if (pSrc->dataSize && pSrc->pData) {
633 int data_len = strlen((const char *)pSrc->pData);
634 pDst->pData = new char[data_len + 1];
635 memset(pDst->pData, 0x00, data_len + 1);
636 strncpy((char *)pDst->pData, (const char *)pSrc->pData, data_len);
639 msg_struct_list_s *src_addrlist = pSrc->addr_list;
640 msg_struct_list_s *dst_addrlist = pDst->addr_list;
641 dst_addrlist->nCount = src_addrlist->nCount;
643 for (int i = 0; i < MAX_TO_ADDRESS_CNT; ++i) {
644 msg_struct_s *src_addr = (msg_struct_s *)src_addrlist->msg_struct_info[i];
645 msg_struct_s *dst_addr = (msg_struct_s *)dst_addrlist->msg_struct_info[i];
646 memcpy(dst_addr->data, src_addr->data, sizeof(MSG_ADDRESS_INFO_S));
649 if (strlen(pSrc->thumbPath) > 0) {
650 memset(pDst->thumbPath, 0x00, sizeof(pDst->thumbPath));
651 memcpy(pDst->thumbPath, pSrc->thumbPath, sizeof(pDst->thumbPath));
654 for (unsigned int i = 0; i < g_list_length(pSrc->addressList); i++) {
655 msg_struct_s *addr_struct = __msg_message_create_address_struct();
656 MSG_ADDRESS_INFO_S *addrInfo = (MSG_ADDRESS_INFO_S *)addr_struct->data;
658 msg_struct_s *addr_info = (msg_struct_s *)g_list_nth_data(pSrc->addressList, (guint)i);
659 MSG_ADDRESS_INFO_S *address = (MSG_ADDRESS_INFO_S *)addr_info->data;
661 addrInfo->addressType = address->addressType;
662 addrInfo->recipientType = address->recipientType;
663 addrInfo->contactId = address->contactId;
664 strncpy(addrInfo->addressVal, address->addressVal, MAX_ADDRESS_VAL_LEN);
665 strncpy(addrInfo->displayName, address->displayName, MAX_DISPLAY_NAME_LEN);
666 addrInfo->displayName[MAX_DISPLAY_NAME_LEN] = '\0';
668 pDst->addressList = g_list_append(pDst->addressList, addr_struct);
673 int msg_cb_message_get_int_value(void *data, int field, int *value)
676 return MSG_ERR_NULL_POINTER;
678 int ret = MSG_SUCCESS;
680 MSG_CB_MSG_S *cb_msg = (MSG_CB_MSG_S *)data;
685 case MSG_CB_MSG_TYPE_INT: {
686 switch (cb_msg->type) {
688 *value = MSG_TYPE_SMS_ETWS_PRIMARY;
691 *value = ((cb_msg->messageId & 0xFFF8) == 0x1100) ? MSG_TYPE_SMS_ETWS_SECONDARY : MSG_TYPE_SMS_CB;
693 case MSG_CMAS_PRESIDENTIAL:
694 *value = MSG_TYPE_SMS_CMAS_PRESIDENTIAL;
696 case MSG_CMAS_PRESIDENTIAL_OTHER_LANG:
697 *value = MSG_TYPE_SMS_CMAS_PRESIDENTIAL_OTHER_LANG;
699 case MSG_CMAS_EXTREME:
700 *value = MSG_TYPE_SMS_CMAS_EXTREME;
702 case MSG_CMAS_EXTREME_OTHER_LANG:
703 *value = MSG_TYPE_SMS_CMAS_EXTREME_OTHER_LANG;
705 case MSG_CMAS_SEVERE:
706 *value = MSG_TYPE_SMS_CMAS_SEVERE;
708 case MSG_CMAS_SEVERE_OTHER_LANG:
709 *value = MSG_TYPE_SMS_CMAS_SEVERE_OTHER_LANG;
712 *value = MSG_TYPE_SMS_CMAS_AMBER;
714 case MSG_CMAS_AMBER_OTHER_LANG:
715 *value = MSG_TYPE_SMS_CMAS_AMBER_OTHER_LANG;
718 *value = MSG_TYPE_SMS_CMAS_TEST;
720 case MSG_CMAS_TEST_OTHER_LANG:
721 *value = MSG_TYPE_SMS_CMAS_TEST_OTHER_LANG;
723 case MSG_CMAS_EXERCISE:
724 *value = MSG_TYPE_SMS_CMAS_EXERCISE;
726 case MSG_CMAS_EXERCISE_OTHER_LANG:
727 *value = MSG_TYPE_SMS_CMAS_EXERCISE_OTHER_LANG;
729 case MSG_CMAS_OPERATOR_DEFINED:
730 *value = MSG_TYPE_SMS_CMAS_OPERATOR_DEFINED;
732 case MSG_CMAS_OPERATOR_DEFINED_OTHER_LANG:
733 *value = MSG_TYPE_SMS_CMAS_OPERATOR_DEFINED_OTHER_LANG;
735 case MSG_CMAS_PUBLIC_SAFETY:
736 *value = MSG_TYPE_SMS_CMAS_PUBLIC_SAFETY;
738 case MSG_CMAS_PUBLIC_SAFETY_OTHER_LANG:
739 *value = MSG_TYPE_SMS_CMAS_PUBLIC_SAFETY_OTHER_LANG;
741 case MSG_CMAS_STATE_LOCAL_TEST:
742 *value = MSG_TYPE_SMS_CMAS_STATE_LOCAL_TEST;
744 case MSG_CMAS_STATE_LOCAL_TEST_OTHER_LANG:
745 *value = MSG_TYPE_SMS_CMAS_STATE_LOCAL_TEST_OTHER_LANG;
748 ret = MSG_ERR_UNKNOWN;
752 case MSG_CB_MSG_RECV_TIME_INT:
753 *value = cb_msg->receivedTime;
755 case MSG_CB_MSG_SERIAL_NUM_INT:
756 *value = cb_msg->serialNum;
758 case MSG_CB_MSG_MSG_ID_INT:
759 *value = cb_msg->messageId;
761 case MSG_CB_MSG_DCS_INT:
762 *value = (int)cb_msg->dcs;
764 case MSG_CB_MSG_CB_TEXT_LEN_INT:
765 *value = cb_msg->cbTextLen;
767 case MSG_CB_MSG_ETWS_WARNING_TYPE_INT:
768 *value = cb_msg->etwsWarningType;
770 case MSG_CB_MSG_INTERNAL_MSG_ID_INT:
771 *value = cb_msg->msgId;
774 ret = MSG_ERR_INVALID_PARAMETER;
781 int msg_cb_message_get_str_value(void *data, int field, char *value, int size)
784 return MSG_ERR_NULL_POINTER;
786 int ret = MSG_SUCCESS;
788 MSG_CB_MSG_S *cb_msg = (MSG_CB_MSG_S *)data;
791 case MSG_CB_MSG_CB_TEXT_STR: {
793 copylen = (size > cb_msg->cbTextLen) ? cb_msg->cbTextLen : size - 1;
794 memcpy(value, cb_msg->cbText, copylen);
795 value[copylen] = '\0';
798 case MSG_CB_MSG_LANGUAGE_TYPE_STR: {
800 copylen = ((size_t)size > strlen((const char*)cb_msg->language_type)) ? strlen((const char*)cb_msg->language_type) : size - 1;
801 memcpy(value, cb_msg->language_type, copylen);
802 value[copylen] = '\0';
805 case MSG_CB_MSG_ETWS_WARNING_SECU_INFO_STR: {
806 if ((size_t)size < sizeof(cb_msg->etwsWarningSecurityInfo))
807 ret = MSG_ERR_INVALID_PARAMETER;
809 memcpy (value, cb_msg->etwsWarningSecurityInfo, sizeof(cb_msg->etwsWarningSecurityInfo));
814 ret = MSG_ERR_INVALID_PARAMETER;
823 EXPORT_API int msg_get_mms_struct(msg_struct_t msg_struct_handle, msg_struct_t mms_struct_handle)
825 CHECK_MSG_SUPPORTED(MSG_TELEPHONY_MMS_FEATURE);
826 /* TODO :: check message type is MMS */
827 int ret = MSG_SUCCESS;
829 if (msg_struct_handle == NULL || mms_struct_handle == NULL)
830 return MSG_ERR_INVALID_PARAMETER;
832 msg_struct_s *msg_struct = (msg_struct_s *)msg_struct_handle;
833 msg_struct_s *mms_struct = (msg_struct_s *)mms_struct_handle;
835 MSG_TYPE_CHECK(msg_struct->type, MSG_STRUCT_MESSAGE_INFO);
836 MSG_TYPE_CHECK(mms_struct->type, MSG_STRUCT_MMS);
838 if (msg_struct->data == NULL || mms_struct->data == NULL)
839 return MSG_ERR_INVALID_PARAMETER;
841 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)msg_struct->data;
843 if (msg_data->pMmsData == NULL)
844 return MSG_ERR_INVALID_PARAMETER;
846 MMS_DATA_S *mms_data = NULL;
848 MsgDeserializeMmsData((char*)msg_data->pMmsData, msg_data->mmsDataSize, &mms_data);
851 convert_to_hidden_mmsdata(mms_data, mms_struct);
853 MsgMmsRelease(&mms_data);
855 return MSG_ERR_INVALID_PARAMETER;
861 EXPORT_API int msg_set_mms_struct(msg_struct_t msg_struct_handle, msg_struct_t mms_struct_handle)
863 CHECK_MSG_SUPPORTED(MSG_TELEPHONY_MMS_FEATURE);
864 /* TODO :: check message type is MMS */
865 int ret = MSG_SUCCESS;
867 if (msg_struct_handle == NULL || mms_struct_handle == NULL)
868 return MSG_ERR_INVALID_PARAMETER;
870 msg_struct_s *msg_struct = (msg_struct_s *)msg_struct_handle;
871 msg_struct_s *mms_struct = (msg_struct_s *)mms_struct_handle;
873 MSG_TYPE_CHECK(msg_struct->type, MSG_STRUCT_MESSAGE_INFO);
874 MSG_TYPE_CHECK(mms_struct->type, MSG_STRUCT_MMS);
876 if (msg_struct->data == NULL || mms_struct->data == NULL)
877 return MSG_ERR_INVALID_PARAMETER;
879 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)msg_struct->data;
881 MMS_DATA_S *mms_data = MsgMmsCreate();
882 if (mms_data == NULL)
883 return MSG_ERR_MEMORY_ERROR;
885 convert_from_hidden_mmsdata(mms_struct, mms_data);
887 int mmsDataSize = MsgSerializeMms(mms_data, (char **)&msg_data->pMmsData);
890 msg_data->mmsDataSize = mmsDataSize;
892 /* TODO:: set subtype */
894 MsgMmsRelease(&mms_data);
900 int msg_message_list_append(msg_struct_t msg_struct_handle, int field, msg_struct_t *item)
902 msg_error_t err = MSG_SUCCESS;
903 msg_struct_s *msg_struct = (msg_struct_s *)msg_struct_handle;
904 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)msg_struct->data;
906 msg_struct_s *msg_struct_item = NULL;
908 case MSG_MESSAGE_ADDR_LIST_HND: {
909 msg_struct_item = __msg_message_create_address_struct();
910 msg_data->addressList = g_list_append(msg_data->addressList, msg_struct_item);
911 *item = (msg_struct_t)msg_struct_item;
915 err = MSG_ERR_INVALID_PARAMETER;
923 int msg_message_list_clear(msg_struct_t msg_struct_handle, int field)
925 msg_error_t err = MSG_SUCCESS;
926 msg_struct_s *msg_struct = (msg_struct_s *)msg_struct_handle;
927 MSG_MESSAGE_HIDDEN_S *msg_data = (MSG_MESSAGE_HIDDEN_S *)msg_struct->data;
930 case MSG_MESSAGE_ADDR_LIST_HND: {
931 /* Free GList *addressList */
932 if (msg_data->addressList) {
933 g_list_free_full(msg_data->addressList, __msg_message_release_address_struct);
934 msg_data->addressList = NULL;
939 err = MSG_ERR_INVALID_PARAMETER;
946 int msg_conversation_get_list_hnd(void *data, int field, void **value)
949 return MSG_ERR_NULL_POINTER;
951 int ret = MSG_SUCCESS;
953 MSG_CONVERSATION_VIEW_S *msg_data = (MSG_CONVERSATION_VIEW_S *)data;
956 case MSG_CONV_MSG_MULTIPART_HND:
957 *value = (void *)msg_data->multipart_list;
960 ret = MSG_ERR_INVALID_PARAMETER;