3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
5 * This file is part of msg-service.
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 * Sangkoo Kim <sangkoo.kim@samsung.com>
9 * Seunghwan Lee <sh.cat.lee@samsung.com>
10 * SoonMin Jung <sm0415.jung@samsung.com>
11 * Jae-Young Lee <jy4710.lee@samsung.com>
12 * KeeBum Kim <keebum.kim@samsung.com>
14 * PROPRIETARY/CONFIDENTIAL
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
32 #include "MsgMmsTypes.h"
33 #include "MsgMmsMessage.h"
35 #include "MsgUtilFile.h"
36 #include "MsgHandle.h"
37 #include "MsgException.h"
38 #include "MapiMessage.h"
39 #include "MsgInternalTypes.h"
40 #include "MsgDrmWrapper.h"
43 static MSG_ERROR_T msg_mms_release_message(MMS_MESSAGE_DATA_S* msg_data);
45 /*==================================================================================================
46 FUNCTION IMPLEMENTATION
47 ==================================================================================================*/
48 EXPORT_API msg_message_t msg_new_message(void)
50 MSG_MESSAGE_S *msg = new MSG_MESSAGE_S;
52 memset(msg, 0x00, sizeof(MSG_MESSAGE_S));
54 /* set default value to message*/
56 msg->folderId = MSG_DRAFT_ID;
58 msg->msgType.mainType= MSG_SMS_TYPE;
59 msg->msgType.subType = MSG_NORMAL_SMS;
60 msg->msgType.classType = MSG_CLASS_NONE;
61 msg->storageId = MSG_STORAGE_PHONE;
63 time_t curTime = time(NULL);
64 msg->displayTime = curTime;
65 msg->networkStatus = MSG_NETWORK_NOT_SEND;
66 msg->encodeType = MSG_ENCODE_AUTO;
68 msg->bProtected = false;
70 msg->priority = MSG_MESSAGE_PRIORITY_NORMAL;
71 msg->direction = MSG_DIRECTION_TYPE_MO;
72 msg->msgPort.valid = false;
76 msg->scheduledTime = 0;
78 return (msg_message_t) msg;
82 EXPORT_API int msg_release_message(msg_message_t *opq_msg)
86 MSG_FATAL("msg is NULL");
87 return MSG_ERR_NULL_POINTER;
90 MSG_MESSAGE_S* msg = NULL;
92 msg = (MSG_MESSAGE_S*)(*opq_msg);
96 MSG_DEBUG("main type : %d, data size : %d", msg->msgType.mainType, msg->dataSize);
100 delete [] static_cast<char*>(msg->pData);
106 delete [] static_cast<char*>(msg->pMmsData);
107 msg->pMmsData = NULL;
110 delete (MSG_MESSAGE_S*)(*opq_msg);
118 EXPORT_API int msg_set_message_id(msg_message_t opq_msg, int msg_id)
122 MSG_FATAL("msg is NULL");
123 return MSG_ERR_NULL_POINTER;
126 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
132 EXPORT_API int msg_get_message_id(msg_message_t opq_msg)
136 MSG_FATAL("msg is NULL");
137 return MSG_ERR_NULL_POINTER;
139 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
145 EXPORT_API int msg_set_message_type(msg_message_t opq_msg, MSG_MESSAGE_TYPE_T msg_type)
149 MSG_FATAL("msg or text is NULL");
150 return MSG_ERR_NULL_POINTER;
153 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*)opq_msg;
155 if (msg_type == MSG_TYPE_SMS)
157 msg->msgType.mainType = MSG_SMS_TYPE;
158 msg->msgType.subType = MSG_NORMAL_SMS;
160 else if (msg_type == MSG_TYPE_MMS)
162 msg->msgType.mainType = MSG_MMS_TYPE;
163 msg->msgType.subType = MSG_SENDREQ_MMS;
165 else if (msg_type == MSG_TYPE_MMS_JAVA)
167 msg->msgType.mainType = MSG_MMS_TYPE;
168 msg->msgType.subType = MSG_SENDREQ_JAVA_MMS;
170 else if (msg_type == MSG_TYPE_SMS_SYNCML)
172 msg->msgType.mainType = MSG_SMS_TYPE;
173 msg->msgType.subType = MSG_SYNCML_CP;
175 else if (msg_type == MSG_TYPE_SMS_REJECT)
177 msg->msgType.mainType = MSG_SMS_TYPE;
178 msg->msgType.subType = MSG_REJECT_SMS;
182 MSG_FATAL("invalid msg_type [%d]", msg_type);
183 return MSG_ERR_INVALID_PARAMETER;
190 EXPORT_API int msg_get_message_type(msg_message_t opq_msg)
194 MSG_FATAL("msg or msg_type is NULL");
195 return MSG_ERR_NULL_POINTER;
198 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*)opq_msg;
200 if (msg->msgType.mainType == MSG_SMS_TYPE)
202 if (msg->msgType.subType == MSG_CB_SMS)
203 return MSG_TYPE_SMS_CB;
204 else if (msg->msgType.subType == MSG_JAVACB_SMS)
205 return MSG_TYPE_SMS_JAVACB;
206 else if (msg->msgType.subType == MSG_WAP_SI_SMS || msg->msgType.subType == MSG_WAP_SL_SMS)
207 return MSG_TYPE_SMS_WAPPUSH;
208 else if (msg->msgType.subType == MSG_MWI_VOICE_SMS || msg->msgType.subType == MSG_MWI_FAX_SMS
209 || msg->msgType.subType == MSG_MWI_EMAIL_SMS || msg->msgType.subType == MSG_MWI_OTHER_SMS)
210 return MSG_TYPE_SMS_MWI;
211 else if (msg->msgType.subType == MSG_SYNCML_CP)
212 return MSG_TYPE_SMS_SYNCML;
213 else if (msg->msgType.subType == MSG_REJECT_SMS)
214 return MSG_TYPE_SMS_REJECT;
218 else if (msg->msgType.mainType == MSG_MMS_TYPE)
220 if (msg->msgType.subType == MSG_NOTIFICATIONIND_MMS)
221 return MSG_TYPE_MMS_NOTI;
222 else if (msg->msgType.subType == MSG_SENDREQ_JAVA_MMS)
223 return MSG_TYPE_MMS_JAVA;
228 return MSG_TYPE_INVALID;
232 EXPORT_API bool msg_is_sms(msg_message_t opq_msg)
236 MSG_FATAL("msg or msg_type is NULL");
240 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
241 return (msg->msgType.mainType == MSG_SMS_TYPE);
245 EXPORT_API bool msg_is_mms(msg_message_t opq_msg)
249 MSG_FATAL("msg or msg_type is NULL");
253 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
254 return (msg->msgType.mainType == MSG_MMS_TYPE);
258 EXPORT_API int msg_set_storage_id(msg_message_t opq_msg, MSG_STORAGE_ID_T storage_id)
262 MSG_FATAL("msg or storage is NULL");
263 return MSG_ERR_NULL_POINTER;
266 if (storage_id != MSG_STORAGE_PHONE && storage_id != MSG_STORAGE_SIM)
268 MSG_FATAL("unsupported storage [%d]", storage_id);
269 return MSG_ERR_INVALID_PARAMETER;
272 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
274 msg->storageId = storage_id;
280 EXPORT_API int msg_get_storage_id(msg_message_t opq_msg)
284 MSG_FATAL("msg is NULL");
285 return MSG_ERR_NULL_POINTER;
288 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
290 return msg->storageId;
294 EXPORT_API bool msg_is_in_sim(msg_message_t opq_msg)
298 MSG_FATAL("msg or folder is NULL");
302 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
304 return (msg->storageId == MSG_STORAGE_SIM);
308 EXPORT_API int msg_set_folder_id(msg_message_t opq_msg, MSG_FOLDER_ID_T folder_id)
312 MSG_FATAL("msg or is NULL");
313 return MSG_ERR_NULL_POINTER;
316 if (folder_id < MSG_INBOX_ID || folder_id > MSG_MAX_FOLDER_ID)
318 MSG_FATAL("wrong folder ID [%d]", folder_id);
319 return MSG_ERR_INVALID_PARAMETER;
322 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
324 msg->folderId = folder_id;
330 EXPORT_API int msg_get_folder_id(msg_message_t opq_msg)
334 MSG_FATAL("msg is NULL");
335 return MSG_ERR_NULL_POINTER;
338 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
340 return msg->folderId;
344 EXPORT_API int msg_reset_address(msg_message_t opq_msg)
348 MSG_FATAL("msg is NULL");
349 return MSG_ERR_NULL_POINTER;
352 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
354 msg->nAddressCnt = 0;
356 for (int i=0 ; i < MAX_TO_ADDRESS_CNT ; i++)
358 msg->addressList[i].threadId = 0;
359 msg->addressList[i].addressType = MSG_ADDRESS_TYPE_UNKNOWN;
360 msg->addressList[i].recipientType = MSG_RECIPIENTS_TYPE_UNKNOWN;
361 msg->addressList[i].contactId = 0;
362 msg->addressList[i].addressVal[0] = '\0';
363 msg->addressList[i].displayName[0] = '\0';
370 EXPORT_API int msg_add_address(msg_message_t opq_msg, const char* phone_num_list, MSG_RECIPIENT_TYPE_T to_type )
372 if( !opq_msg || !phone_num_list)
374 MSG_FATAL("msg or text or type is NULL");
375 return MSG_ERR_NULL_POINTER;
378 if (to_type < MSG_RECIPIENTS_TYPE_TO || to_type > MSG_RECIPIENTS_TYPE_BCC)
380 MSG_FATAL("unsupported recipient type [%d]", to_type);
381 return MSG_ERR_INVALID_PARAMETER;
384 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
387 if(msg->msgType.mainType == MSG_SMS_TYPE)
389 char trimmed_num[strlen(phone_num_list)+1];
390 bzero(trimmed_num, strlen(phone_num_list)+1);
392 MSG_ERROR_T retVal = msg_verify_number(phone_num_list, trimmed_num);
394 if ( retVal != MSG_SUCCESS )
397 int i = msg->nAddressCnt;
398 for( char* cur_num = strtok(trimmed_num,", "); cur_num && (i < MAX_TO_ADDRESS_CNT);
399 cur_num = strtok(NULL,", "), i++)
401 if (strlen(cur_num) > MAX_ADDRESS_VAL_LEN)
403 MSG_DEBUG("Phone number is too long [%s], and sending is skipped", cur_num);
407 /* fill the destination number in msgReq */
409 msg->addressList[i].addressType = MSG_ADDRESS_TYPE_PLMN; // telephone number
410 msg->addressList[i].recipientType = to_type; // recipient type
411 snprintf(msg->addressList[i].addressVal, MAX_ADDRESS_VAL_LEN, "%s", cur_num);
412 MSG_DEBUG("SMS AddressVal = [%s]", msg->addressList[i].addressVal);
418 char phone_num_list_tmp[strlen(phone_num_list)+1];
419 bzero(phone_num_list_tmp, strlen(phone_num_list)+1);
421 strncpy(phone_num_list_tmp, phone_num_list, strlen(phone_num_list));
423 MSG_ERROR_T retVal = msg_verify_email(phone_num_list_tmp);
425 if ( retVal != MSG_SUCCESS )
428 int i = msg->nAddressCnt;
429 for( char* cur_num = strtok(phone_num_list_tmp,", "); cur_num && (i < MAX_TO_ADDRESS_CNT);
430 cur_num = strtok(NULL,", "), i++)
432 if (strlen(cur_num) > MAX_ADDRESS_VAL_LEN)
434 MSG_DEBUG("Phone number is too long [%s], and sending is skipped", cur_num);
438 char trimmed_num[strlen(cur_num)+1];
439 bzero(trimmed_num, strlen(cur_num)+1);
441 retVal = msg_verify_number(cur_num, trimmed_num);
443 if(retVal == MSG_SUCCESS)
445 /* fill the destination number in msgReq */
447 msg->addressList[i].addressType = MSG_ADDRESS_TYPE_PLMN; // telephone number
448 msg->addressList[i].recipientType = to_type; // recipient type
449 snprintf(msg->addressList[i].addressVal, MAX_ADDRESS_VAL_LEN, "%s", trimmed_num);
450 MSG_DEBUG("MMS Number AddressVal = [%s]", msg->addressList[i].addressVal);
454 /* fill the destination number in msgReq */
456 msg->addressList[i].addressType = MSG_ADDRESS_TYPE_EMAIL; // telephone number
457 msg->addressList[i].recipientType = to_type; // recipient type
458 snprintf(msg->addressList[i].addressVal, MAX_ADDRESS_VAL_LEN, "%s", cur_num);
459 MSG_DEBUG("MMS Email AddressVal = [%s]", msg->addressList[i].addressVal);
468 EXPORT_API int msg_get_address_count(msg_message_t opq_msg)
472 MSG_FATAL("msg or count is NULL");
473 return MSG_ERR_NULL_POINTER;
475 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
476 return msg->nAddressCnt;
480 EXPORT_API int msg_get_ith_thread_id(msg_message_t opq_msg, int ith)
484 MSG_FATAL("msg or text or type is NULL");
485 return MSG_ERR_NULL_POINTER;
488 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
490 if( ith < msg->nAddressCnt )
492 return msg->addressList[ith].threadId;
496 MSG_FATAL("Requested address count %d exceeds max %d in msg", ith, msg->nAddressCnt);
497 return MSG_ERR_UNKNOWN;
502 EXPORT_API const char* msg_get_ith_address(msg_message_t opq_msg, int ith)
506 MSG_FATAL("msg or addr is NULL");
510 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
512 if( ith < msg->nAddressCnt )
514 return msg->addressList[ith].addressVal;
518 MSG_FATAL("Requested address count %d exceeds max %d in msg", ith, msg->nAddressCnt);
524 EXPORT_API int msg_get_ith_recipient_type(msg_message_t opq_msg, int ith)
528 MSG_FATAL("msg or text or type is NULL");
529 return MSG_ERR_NULL_POINTER;
532 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
534 if( ith < msg->nAddressCnt )
536 return msg->addressList[ith].recipientType;
540 MSG_FATAL("Requested address count %d exceeds max %d in msg", ith, msg->nAddressCnt);
541 return MSG_ERR_UNKNOWN;
546 EXPORT_API const char* msg_get_ith_name(msg_message_t opq_msg, int ith)
550 MSG_FATAL("msg or addr is NULL");
554 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
556 if( ith < msg->nAddressCnt )
558 return msg->addressList[ith].displayName;
562 MSG_FATAL("Requested address count %d exceeds max %d in msg", ith, msg->nAddressCnt);
568 EXPORT_API int msg_get_ith_contact_id(msg_message_t opq_msg, int ith)
572 MSG_FATAL("msg or addr is NULL");
573 return MSG_ERR_NULL_POINTER;
576 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
578 if( ith < msg->nAddressCnt )
580 return msg->addressList[ith].contactId;
584 MSG_FATAL("Requested address count %d exceeds max %d in msg", ith, msg->nAddressCnt);
585 return MSG_ERR_UNKNOWN;
590 EXPORT_API int msg_set_reply_address(msg_message_t opq_msg, const char* phone_num)
592 if( !opq_msg || !phone_num)
594 MSG_FATAL("msg or text or type is NULL");
595 return MSG_ERR_NULL_POINTER;
598 if (strlen(phone_num) > MAX_PHONE_NUMBER_LEN)
600 MSG_DEBUG("Phone number is too long [%s]", phone_num);
601 return MSG_ERR_INVALID_PARAMETER;
604 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
606 char trimmed_num[strlen(phone_num)+1];
607 bzero(trimmed_num, strlen(phone_num)+1);
609 MSG_ERROR_T retVal = msg_verify_number(phone_num, trimmed_num);
611 if (retVal != MSG_SUCCESS)
614 snprintf(msg->replyAddress, MAX_PHONE_NUMBER_LEN, "%s", phone_num);
616 MSG_DEBUG("Reply Address Number : [%s]", msg->replyAddress);
622 EXPORT_API int msg_sms_set_message_body(msg_message_t opq_msg, const char* mdata, int size)
624 if (!opq_msg || !mdata) {
625 MSG_FATAL("msg or text is NULL");
626 return MSG_ERR_NULL_POINTER;
630 MSG_FATAL("msg size is invalid");
631 return MSG_ERR_INVALID_PARAMETER;
634 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
636 if(msg->msgType.mainType == MSG_MMS_TYPE) {
637 /** Temporary added codes for Binary MMS. */
639 delete [] static_cast<char*>(msg->pMmsData);
641 msg->dataSize = size;
643 msg->pMmsData = (void*)new char[msg->dataSize+1];
645 memset(msg->pMmsData, 0x00, msg->dataSize+1);
647 memcpy((char *)msg->pMmsData, mdata, msg->dataSize);
650 } else if (msg->msgType.mainType == MSG_SMS_TYPE) {
652 delete [] static_cast<char*>(msg->pData);
654 msg->dataSize = size;
656 msg->pData = (void*)new char[msg->dataSize+1];
658 memcpy((char *)msg->pData, mdata, msg->dataSize);
660 ((char*) msg->pData)[msg->dataSize] = '\0';
663 return MSG_ERR_INVALID_MSG_TYPE;
671 EXPORT_API const char* msg_sms_get_message_body(msg_message_t opq_msg)
674 MSG_FATAL("msg is NULL");
678 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
681 if (msg->msgType.mainType == MSG_SMS_TYPE) {
683 return (char*) msg->pData;
685 } else if (msg->msgType.mainType == MSG_MMS_TYPE) {
687 return (char*) msg->pMmsData;
690 MSG_FATAL("msg type is invalid.");
697 EXPORT_API const char* msg_mms_get_text_contents(msg_message_t opq_msg)
701 MSG_FATAL("msg is NULL");
705 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
707 if(msg->msgType.mainType != MSG_MMS_TYPE)
709 MSG_FATAL("msg is not mms type.");
713 return (char*) msg->pData;
717 EXPORT_API int msg_get_message_body_size(msg_message_t opq_msg )
721 MSG_FATAL("msg is NULL");
722 return MSG_ERR_NULL_POINTER;
725 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
726 return msg->dataSize;
730 EXPORT_API int msg_set_subject(msg_message_t opq_msg, const char* subject )
732 if( !opq_msg || !subject )
734 MSG_FATAL("msg or subject is NULL");
735 return MSG_ERR_NULL_POINTER;
738 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
740 snprintf(msg->subject, MAX_SUBJECT_LEN+1,"%s", subject);
746 EXPORT_API const char* msg_get_subject(msg_message_t opq_msg)
750 MSG_FATAL("msg is NULL");
754 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
760 EXPORT_API int msg_set_time(msg_message_t opq_msg, time_t msg_time)
764 MSG_FATAL("msg is NULL");
765 return MSG_ERR_NULL_POINTER;
768 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
770 msg->displayTime = msg_time;
775 EXPORT_API time_t* msg_get_time(msg_message_t opq_msg)
779 MSG_FATAL("msg is NULL");
783 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
785 return &(msg->displayTime);
788 EXPORT_API int msg_set_network_status(msg_message_t opq_msg, MSG_NETWORK_STATUS_T status)
792 MSG_FATAL("msg is NULL");
793 return MSG_ERR_NULL_POINTER;
796 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
797 msg->networkStatus = status;
802 EXPORT_API int msg_get_network_status(msg_message_t opq_msg)
806 MSG_FATAL("msg or status is NULL");
807 return MSG_ERR_NULL_POINTER;
810 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
811 return msg->networkStatus;
815 EXPORT_API int msg_set_encode_type(msg_message_t opq_msg, MSG_ENCODE_TYPE_T encoding_type)
819 MSG_FATAL("msg or encoding_type is NULL");
820 return MSG_ERR_NULL_POINTER;
823 if( encoding_type != MSG_ENCODE_GSM7BIT &&
824 encoding_type != MSG_ENCODE_8BIT &&
825 encoding_type != MSG_ENCODE_UCS2 &&
826 encoding_type != MSG_ENCODE_AUTO )
828 MSG_FATAL("Encoding_type has invalid value [%d]", encoding_type);
829 return MSG_ERR_INVALID_PARAMETER;
832 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
833 msg->encodeType = encoding_type;
838 EXPORT_API int msg_get_encode_type(msg_message_t opq_msg)
842 MSG_FATAL("msg is NULL");
843 return MSG_ERR_NULL_POINTER;
846 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
847 return msg->encodeType;
851 EXPORT_API int msg_set_read_status(msg_message_t opq_msg, bool read_flag)
855 MSG_FATAL("msg is NULL");
856 return MSG_ERR_NULL_POINTER;
859 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
860 msg->bRead = read_flag;
865 EXPORT_API bool msg_is_read(msg_message_t opq_msg)
869 MSG_FATAL("msg is NULL");
873 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
879 EXPORT_API int msg_set_protect_status(msg_message_t opq_msg, bool protect_flag)
883 MSG_FATAL("msg is NULL");
884 return MSG_ERR_NULL_POINTER;
887 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
888 msg->bProtected = protect_flag;
893 EXPORT_API bool msg_is_protected(msg_message_t opq_msg)
897 MSG_FATAL("msg or protected is NULL");
901 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
902 return msg->bProtected;
906 EXPORT_API int msg_set_backup_status(msg_message_t opq_msg, bool backup_flag)
910 MSG_FATAL("msg is NULL");
911 return MSG_ERR_NULL_POINTER;
914 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
915 msg->bBackup = backup_flag;
920 EXPORT_API bool msg_is_backup(msg_message_t opq_msg)
924 MSG_FATAL("msg or protected is NULL");
928 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
933 EXPORT_API int msg_set_priority_info(msg_message_t opq_msg, MSG_PRIORITY_TYPE_T priority)
937 MSG_FATAL("msg is NULL");
938 return MSG_ERR_NULL_POINTER;
941 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
942 msg->priority = priority;
947 EXPORT_API int msg_get_priority_info(msg_message_t opq_msg)
951 MSG_FATAL("msg is NULL");
952 return MSG_ERR_NULL_POINTER;
955 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
956 return msg->priority;
960 EXPORT_API int msg_set_direction_info(msg_message_t opq_msg, MSG_DIRECTION_TYPE_T direction)
964 MSG_FATAL("msg is NULL");
965 return MSG_ERR_NULL_POINTER;
968 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
969 msg->direction= direction;
974 EXPORT_API int msg_get_direction_info(msg_message_t opq_msg)
978 MSG_FATAL("msg is NULL");
979 return MSG_ERR_NULL_POINTER;
982 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
983 return msg->direction;
987 EXPORT_API int msg_set_port(msg_message_t opq_msg, unsigned short dst_port, unsigned short src_port)
991 MSG_FATAL("msg is NULL");
992 return MSG_ERR_NULL_POINTER;
995 if( !dst_port && !src_port )
998 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
999 msg->msgPort.valid = true;
1000 msg->msgPort.dstPort = dst_port;
1001 msg->msgPort.srcPort = src_port;
1007 EXPORT_API int msg_get_dest_port(msg_message_t opq_msg)
1011 MSG_FATAL("msg or dst_port or src_port is NULL");
1012 return MSG_ERR_NULL_POINTER;
1015 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
1016 if( msg->msgPort.valid )
1017 return msg->msgPort.dstPort;
1023 EXPORT_API int msg_get_src_port(msg_message_t opq_msg)
1027 MSG_FATAL("msg or dst_port or src_port is NULL");
1028 return MSG_ERR_NULL_POINTER;
1031 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
1032 if( msg->msgPort.valid )
1033 return msg->msgPort.srcPort;
1039 EXPORT_API int msg_set_scheduled_time(msg_message_t opq_msg, time_t time_to_send)
1043 MSG_FATAL("msg is NULL");
1044 return MSG_ERR_NULL_POINTER;
1050 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
1051 msg->scheduledTime = time_to_send;
1057 EXPORT_API time_t* msg_get_scheduled_time(msg_message_t opq_msg)
1061 MSG_FATAL("msg is NULL");
1065 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
1066 return &(msg->scheduledTime);
1070 EXPORT_API int msg_get_attachment_count(msg_message_t opq_msg)
1074 MSG_FATAL("msg is NULL");
1075 return MSG_ERR_NULL_POINTER;
1078 MSG_MESSAGE_S* msg = (MSG_MESSAGE_S*) opq_msg;
1080 return msg->attachCount;
1083 EXPORT_API const char* msg_get_thumbnail_path(msg_message_t opq_msg)
1087 MSG_FATAL("msg is NULL");
1091 MSG_MESSAGE_S* pMsg = (MSG_MESSAGE_S*)opq_msg;
1093 return pMsg->thumbPath;
1097 static MSG_ERROR_T msg_mms_release_message(MMS_MESSAGE_DATA_S* msg_data)
1099 _MsgMmsReleasePageList(msg_data);
1100 _MsgMmsReleaseRegionList(msg_data);
1101 _MsgMmsReleaseAttachList(msg_data);
1102 _MsgMmsReleaseTransitionList(msg_data);
1103 _MsgMmsReleaseMetaList(msg_data);
1108 EXPORT_API int msg_mms_set_message_body(msg_message_t opq_msg, const MMS_MESSAGE_DATA_S *msg_data)
1110 if (!opq_msg || !msg_data) {
1111 MSG_FATAL("msg or msg_data is NULL");
1112 return MSG_ERR_NULL_POINTER;
1115 MSG_MESSAGE_S* msg = (MSG_MESSAGE_S*) opq_msg;
1117 if (msg->msgType.mainType != MSG_MMS_TYPE) {
1118 MSG_FATAL("msg is not mms type.");
1119 return MSG_ERR_INVALID_MSG_TYPE;
1122 if (msg->pMmsData) {
1123 if (msg->dataSize > 0)
1124 delete[] ((char*) msg->pMmsData);
1129 msg->pMmsData = _MsgMmsSerializeMessageData(msg_data, &(msg->dataSize));
1131 MSG_DEBUG("msg->dataSize : [%d]", msg->dataSize);
1133 if (msg->dataSize <= 0) {
1134 MSG_FATAL("msg size is invalid");
1135 return MSG_ERR_INVALID_PARAMETER;
1142 EXPORT_API int msg_mms_get_message_body(msg_message_t opq_msg, MMS_MESSAGE_DATA_S *body )
1144 if (!opq_msg || !body) {
1145 MSG_FATAL("msg or body is NULL");
1146 return MSG_ERR_NULL_POINTER;
1149 MSG_MESSAGE_S *msg = (MSG_MESSAGE_S*) opq_msg;
1151 if (msg->msgType.mainType != MSG_MMS_TYPE) {
1152 MSG_FATAL("msg is not mms type.");
1153 return MSG_ERR_INVALID_MSG_TYPE;
1156 if (msg->pMmsData == NULL) {
1157 MSG_FATAL("msg->pMmsData is NULL");
1158 return MSG_ERR_NULL_POINTER;
1161 _MsgMmsDeserializeMessageData(body, (char*)msg->pMmsData);
1167 EXPORT_API MMS_PAGE_S* msg_mms_add_page(MMS_MESSAGE_DATA_S *msg_data, const int duration)
1169 if(msg_data == NULL)
1172 MMS_PAGE_S* page = (MMS_PAGE_S*)calloc(sizeof(MMS_PAGE_S), 1);
1173 page->nDur = duration;
1175 _MsgMmsAddPage(msg_data, page);
1181 EXPORT_API MMS_SMIL_REGION* msg_mms_add_region(MMS_MESSAGE_DATA_S *msg_data, const char* szID, const int x, const int y, const int width, const int height, const int bgcolor)
1183 if(msg_data == NULL || szID == NULL)
1186 MMS_SMIL_REGION* region = (MMS_SMIL_REGION *)calloc( sizeof(MMS_SMIL_REGION), 1 );
1188 strncpy(region->szID, szID, MAX_SMIL_REGION_ID-1);
1189 region->bgColor = bgcolor;
1190 region->nLeft.value = x;
1191 region->nLeft.bUnitPercent = true;
1192 region->nTop.value = y;
1193 region->nTop.bUnitPercent = true;
1194 region->width.value = width;
1195 region->width.bUnitPercent = true;
1196 region->height.value = height;
1197 region->height.bUnitPercent = true;
1198 region->fit = MMSUI_IMAGE_REGION_FIT_MEET;
1200 _MsgMmsAddRegion(msg_data, region);
1206 EXPORT_API MMS_MEDIA_S* msg_mms_add_media(MMS_PAGE_S *page, const MmsSmilMediaType mediatype, const char* regionid, char* filepath)
1208 if(page == NULL || filepath == NULL)
1211 if (MsgDrmIsDrmFile(filepath)) {
1212 MSG_DRM_TYPE drm_type = MSG_DRM_NONE;
1214 if (MsgDrmGetDrmType(filepath, &drm_type)) {
1215 if (drm_type == MSG_DRM_FORWARD_LOCK || drm_type == MSG_DRM_COMBINED_DELIVERY) {
1216 MSG_FATAL("file is a FL content");
1222 MMS_MEDIA_S* media = (MMS_MEDIA_S *)calloc(sizeof(MMS_MEDIA_S), 1);
1223 char *filename = NULL;
1225 media->mediatype = mediatype;
1228 strncpy(media->regionId, regionid, MAX_SMIL_REGION_ID-1);
1230 strncpy(media->szFilePath, filepath, MSG_FILEPATH_LEN_MAX-1);
1232 filename = strrchr(filepath, '/');
1233 strncpy(media->szFileName, filename + 1, MSG_FILENAME_LEN_MAX-1);
1234 strncpy(media->szContentID, filename + 1, MSG_MSG_ID_LEN);
1236 _MsgMmsAddMedia(page, media);
1242 EXPORT_API MMS_ATTACH_S* msg_mms_add_attachment(MMS_MESSAGE_DATA_S *msg_data, char *filepath)
1244 if(msg_data == NULL || filepath == NULL)
1247 if (MsgDrmIsDrmFile(filepath)) {
1248 MSG_DRM_TYPE drm_type = MSG_DRM_NONE;
1250 if (MsgDrmGetDrmType(filepath, &drm_type)) {
1251 if (drm_type == MSG_DRM_FORWARD_LOCK || drm_type == MSG_DRM_COMBINED_DELIVERY) {
1252 MSG_FATAL("file is a FL content");
1258 MMS_ATTACH_S* attach = (MMS_ATTACH_S*)calloc(sizeof(MMS_ATTACH_S), 1);
1259 char *filename = NULL;
1261 attach->mediatype = MIME_UNKNOWN;
1262 attach->fileSize = -1;
1263 strncpy(attach->szFilePath, filepath, MSG_FILEPATH_LEN_MAX-1);
1264 filename = strrchr(filepath, '/');
1265 strncpy(attach->szFileName, filename + 1, MSG_FILENAME_LEN_MAX-1);
1267 _MsgMmsAddAttachment(msg_data, attach);
1273 EXPORT_API int msg_mms_add_transition(MMS_MESSAGE_DATA_S *msg_data, MMS_SMIL_TRANSITION *transition)
1275 if(msg_data == NULL || transition == NULL)
1276 return MSG_ERR_NULL_POINTER;
1278 MMS_SMIL_TRANSITION *pTransition = (MMS_SMIL_TRANSITION *)calloc(sizeof(MMS_SMIL_TRANSITION), 1);
1280 if (transition->szID[0] != '0')
1281 strncpy(pTransition->szID, transition->szID, MAX_SMIL_TRANSITION_ID);
1283 pTransition->nType = transition->nType;
1284 pTransition->nSubType = transition->nSubType;
1285 pTransition->nDur = transition->nDur;
1287 _MsgMmsAddTransition(msg_data, pTransition);
1293 EXPORT_API int msg_mms_add_meta(MMS_MESSAGE_DATA_S *msg_data, MMS_SMIL_META *meta)
1295 if(msg_data == NULL || meta == NULL)
1296 return MSG_ERR_NULL_POINTER;
1298 MMS_SMIL_META *pMeta = (MMS_SMIL_META *)calloc(sizeof(MMS_SMIL_META), 1);
1300 if (meta->szID[0] != '0')
1301 strncpy(pMeta->szID, meta->szID, MAX_SMIL_TRANSITION_ID);
1303 if (meta->szName[0] != '0')
1304 strncpy(pMeta->szName, meta->szName, MAX_SMIL_META_NAME);
1306 if (meta->szContent[0] != '0')
1307 strncpy(pMeta->szContent, meta->szContent, MAX_SMIL_META_NAME);
1309 _MsgMmsAddMeta(msg_data, pMeta);
1315 EXPORT_API MMS_PAGE_S *msg_mms_get_page(MMS_MESSAGE_DATA_S *msg_data, int page_idx)
1317 if (msg_data == NULL)
1323 return _MsgMmsGetPage(msg_data, page_idx);
1327 EXPORT_API MMS_SMIL_REGION* msg_mms_get_smil_region(MMS_MESSAGE_DATA_S *msg_data, int region_idx)
1329 if (msg_data == NULL)
1335 return _MsgMmsGetSmilRegion(msg_data, region_idx);
1339 EXPORT_API MMS_MEDIA_S* msg_mms_get_media(MMS_PAGE_S *page, int media_idx)
1341 if (page == NULL || media_idx < 0)
1344 return _MsgMmsGetMedia(page, media_idx);
1348 EXPORT_API MMS_ATTACH_S* msg_mms_get_attachment(MMS_MESSAGE_DATA_S *msg_data, int attach_idx)
1350 if (msg_data == NULL)
1353 if ( attach_idx <0 )
1356 return _MsgMmsGetAttachment(msg_data, attach_idx);
1360 EXPORT_API MMS_SMIL_TRANSITION* msg_mms_get_transition(MMS_MESSAGE_DATA_S *msg_data, int transition_idx)
1362 if (msg_data == NULL)
1365 if (transition_idx < 0)
1368 return _MsgMmsGetTransition(msg_data, transition_idx);
1372 EXPORT_API MMS_SMIL_META* msg_mms_get_meta(MMS_MESSAGE_DATA_S *msg_data, int meta_idx)
1374 if (msg_data == NULL)
1380 return _MsgMmsGetMeta(msg_data, meta_idx);
1384 EXPORT_API int msg_mms_release_page_list(MMS_MESSAGE_DATA_S *msg_data)
1386 if (msg_data == NULL)
1387 return MSG_ERR_NULL_POINTER;
1389 MSG_ERROR_T err = MSG_SUCCESS;
1391 err = _MsgMmsReleasePageList(msg_data);
1397 EXPORT_API int msg_mms_release_region_list(MMS_MESSAGE_DATA_S *msg_data)
1399 if (msg_data == NULL)
1400 return MSG_ERR_NULL_POINTER;
1402 MSG_ERROR_T err = MSG_SUCCESS;
1404 err = _MsgMmsReleaseRegionList(msg_data);
1410 EXPORT_API int msg_mms_release_attachment_list(MMS_MESSAGE_DATA_S *msg_data)
1412 if (msg_data == NULL)
1413 return MSG_ERR_NULL_POINTER;
1415 MSG_ERROR_T err = MSG_SUCCESS;
1417 err = _MsgMmsReleaseAttachList(msg_data);
1423 EXPORT_API int msg_mms_release_transition_list(MMS_MESSAGE_DATA_S *msg_data)
1425 if (msg_data == NULL)
1426 return MSG_ERR_NULL_POINTER;
1428 MSG_ERROR_T err = MSG_SUCCESS;
1430 err = _MsgMmsReleaseTransitionList(msg_data);
1436 EXPORT_API int msg_mms_release_meta_list(MMS_MESSAGE_DATA_S *msg_data)
1438 if (msg_data == NULL)
1439 return MSG_ERR_NULL_POINTER;
1441 MSG_ERROR_T err = MSG_SUCCESS;
1443 err = _MsgMmsReleaseMetaList(msg_data);
1449 EXPORT_API MMS_MESSAGE_DATA_S* msg_mms_create_message(void)
1451 MMS_MESSAGE_DATA_S *mmsmsg = (MMS_MESSAGE_DATA_S *)calloc(sizeof(MMS_MESSAGE_DATA_S), 1);
1457 EXPORT_API MMS_SMIL_ROOTLAYOUT* msg_mms_set_rootlayout(MMS_MESSAGE_DATA_S* msg, const int width, const int height, const int bgcolor)
1462 msg->rootlayout.width.value = width;
1463 msg->rootlayout.width.bUnitPercent = true;
1464 msg->rootlayout.height.value = height;
1465 msg->rootlayout.height.bUnitPercent = true;
1466 msg->rootlayout.bgColor = bgcolor;
1468 return (MMS_SMIL_ROOTLAYOUT *)&(msg->rootlayout);
1472 EXPORT_API int msg_mms_destroy_message(MMS_MESSAGE_DATA_S* msg)
1475 return MSG_ERR_NULL_POINTER;
1477 msg_mms_release_message(msg);