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.
21 #include <MsgHandle.h>
22 #include <MsgException.h>
24 #include "MsgMmsTypes.h"
25 #include "MsgMmsMessage.h"
27 #include "MsgUtilFile.h"
30 #include "msg_private.h"
37 GList *transitionlist;
39 MMS_SMIL_ROOTLAYOUT rootlayout;
40 MMS_APPID_INFO_S msgAppId;
41 MMS_HEADER_DATA_S header;
42 MMS_MULTIPART_DATA_S smil;
43 GList *multipartlist; /* MMS_MULTIPART_DATA_S */
47 MmsSmilMediaType mediatype; /**< Indicates the SMIL media type. see enum MmsSmilMediaType */
49 char szSrc[MSG_FILEPATH_LEN_MAX + 1];/**< Indicates the media source name */
50 char szFileName[MSG_FILENAME_LEN_MAX + 1]; /**< Indicates the file name */
51 char szFilePath[MSG_FILEPATH_LEN_MAX + 1]; /**< Indicates the file path */
52 char szContentID[MSG_MSG_ID_LEN + 1]; /**< Indicates the content id */
53 char regionId[MAX_SMIL_REGION_ID + 1]; /**< Indicates the region id */
54 char szAlt[MAX_SMIL_ALT_LEN + 1]; /**< Indicates the alternative text to be displayed in failure case */
55 MsgDrmType drmType; /**< Indicates the drm type. see enum MsgDrmType */
56 char szDrm2FullPath[MSG_FILEPATH_LEN_MAX + 1]; /**< Indicates the fullpath of the DRM */
59 char szContentType[MSG_MSG_ID_LEN + 1];
60 char szContentLocation[MSG_MSG_ID_LEN + 1];
63 static void __msg_mms_data_struct_init(MMS_DATA_HIDDEN_S *pMmsDataHidden);
64 static void __msg_mms_release_mms(msg_struct_s *mms_struct);
65 static void __msg_mms_release_page(msg_struct_s *page_struct);
66 static void __msg_mms_release_media(msg_struct_s *media_struct);
67 static void __msg_mms_release_region(msg_struct_s *region_struct);
68 static void __msg_mms_release_attach(msg_struct_s *attach_struct);
69 static void __msg_mms_release_transition(msg_struct_s *transition_struct);
70 static void __msg_mms_release_meta(msg_struct_s *meta_struct);
71 static void __msg_mms_release_multipart(msg_struct_s *multipart_struct);
73 /*==================================================================================================
74 FUNCTION IMPLEMENTATION
75 ==================================================================================================*/
76 static void __removeLessGreaterMark(const char *szSrcID, char *szDest, int destSize)
78 char szBuf[MSG_MSG_ID_LEN + 1] = {0, };
79 int cLen = strlen(szSrcID);
84 if (cLen > 1 && szSrcID[0] == '<' && szSrcID[cLen - 1] == '>') {
85 strncpy(szBuf, &szSrcID[1], cLen - 2);
86 szBuf[cLen - 2] = '\0';
87 } else if (cLen > 1 && szSrcID[0] == '"' && szSrcID[cLen-1] == '"') {
88 strncpy(szBuf, &szSrcID[1], cLen - 2);
89 szBuf[cLen - 2] = '\0';
91 strncpy(szBuf, szSrcID, cLen);
95 snprintf(szDest, destSize, "%s", szBuf);
98 static inline void *get_msg_struct_data(msg_struct_s *msg_struct)
100 if (msg_struct == NULL)
103 return msg_struct->data;
106 msg_struct_s *msg_mms_create_struct(int type)
108 msg_struct_s *msg_struct = new msg_struct_s;
109 bzero(msg_struct, sizeof(msg_struct_s));
111 msg_struct->type = type;
112 msg_struct->data = msg_mms_create_struct_data(type);
117 void *msg_mms_create_struct_data(int field)
123 data = (void *)new MMS_DATA_HIDDEN_S;
124 bzero(data, sizeof(MMS_DATA_HIDDEN_S));
125 __msg_mms_data_struct_init((MMS_DATA_HIDDEN_S *)data);
127 case MSG_STRUCT_MMS_PAGE:
128 data = (void *)new MMS_PAGE_S;
129 bzero(data, sizeof(MMS_PAGE_S));
131 case MSG_STRUCT_MMS_MEDIA: {
132 MMS_MEDIA_HIDDEN_S *media = new MMS_MEDIA_HIDDEN_S;
133 bzero(media, sizeof(MMS_MEDIA_HIDDEN_S));
135 media->pText = msg_mms_create_struct(MSG_STRUCT_MMS_SMIL_TEXT);
136 media->pAVI = msg_mms_create_struct(MSG_STRUCT_MMS_SMIL_AVI);
137 data = (void *)media;
140 case MSG_STRUCT_MMS_ATTACH:
141 data = (void *)new MMS_ATTACH_S;
142 bzero(data, sizeof(MMS_ATTACH_S));
144 case MSG_STRUCT_MMS_REGION:
145 data = (void *)new MMS_SMIL_REGION;
146 bzero(data, sizeof(MMS_SMIL_REGION));
147 ((MMS_SMIL_REGION *)data)->fit = MMSUI_IMAGE_REGION_FIT_MEET;
149 case MSG_STRUCT_MMS_TRANSITION:
150 data = (void *)new MMS_SMIL_TRANSITION;
151 bzero(data, sizeof(MMS_SMIL_TRANSITION));
153 case MSG_STRUCT_MMS_META:
154 data = (void *)new MMS_SMIL_META;
155 bzero(data, sizeof(MMS_SMIL_META));
157 case MSG_STRUCT_MMS_SMIL_TEXT:
158 data = (void *)new MmsSmilText;
159 bzero(data, sizeof(MmsSmilText));
161 case MSG_STRUCT_MMS_SMIL_AVI:
162 data = (void *)new MmsSmilAVI;
163 bzero(data, sizeof(MmsSmilAVI));
165 case MSG_STRUCT_MULTIPART_INFO:
166 data = new MMS_MULTIPART_DATA_S;
167 bzero(data, sizeof(MMS_MULTIPART_DATA_S));
168 MsgMmsInitMultipart((MMS_MULTIPART_DATA_S *)data);
175 void msg_mms_list_item_free_func(gpointer data)
177 msg_struct_s *msg_struct = (msg_struct_s *)data;
179 switch (msg_struct->type) {
180 case MSG_STRUCT_MMS_MEDIA:
181 __msg_mms_release_media(msg_struct);
183 case MSG_STRUCT_MMS_PAGE:
184 __msg_mms_release_page(msg_struct);
186 case MSG_STRUCT_MMS_ATTACH:
187 __msg_mms_release_attach(msg_struct);
189 case MSG_STRUCT_MMS_REGION:
190 __msg_mms_release_region(msg_struct);
192 case MSG_STRUCT_MMS_TRANSITION:
193 __msg_mms_release_transition(msg_struct);
195 case MSG_STRUCT_MMS_META:
196 __msg_mms_release_meta(msg_struct);
198 case MSG_STRUCT_MULTIPART_INFO:
199 __msg_mms_release_multipart(msg_struct);
206 void __msg_mms_release_page(msg_struct_s *page_struct)
209 MMS_PAGE_S *page = (MMS_PAGE_S *)page_struct->data;
212 if (page->medialist) {
213 g_list_free_full(page->medialist, msg_mms_list_item_free_func);
216 delete (MMS_PAGE_S *)page;
217 page_struct->data = NULL;
224 void __msg_mms_release_media(msg_struct_s *media_struct)
227 MMS_MEDIA_HIDDEN_S *media = (MMS_MEDIA_HIDDEN_S *)media_struct->data;
231 msg_mms_release_struct(&media->pText);
234 msg_mms_release_struct(&media->pAVI);
236 delete (MMS_MEDIA_HIDDEN_S *)media;
238 media_struct->data = NULL;
245 void __msg_mms_release_attach(msg_struct_s *attach_struct)
248 MMS_ATTACH_S *attach = (MMS_ATTACH_S *)attach_struct->data;
251 delete (MMS_ATTACH_S *)attach;
253 attach_struct->data = NULL;
255 delete attach_struct;
259 void __msg_mms_release_region(msg_struct_s *region_struct)
262 MMS_SMIL_REGION *region = (MMS_SMIL_REGION *)region_struct->data;
265 delete (MMS_SMIL_REGION *)region;
267 region_struct->data = NULL;
269 delete region_struct;
273 void __msg_mms_release_transition(msg_struct_s *transition_struct)
275 if (transition_struct) {
276 MMS_SMIL_TRANSITION *transition = (MMS_SMIL_TRANSITION *)transition_struct->data;
279 delete (MMS_SMIL_TRANSITION *)transition;
281 transition_struct->data = NULL;
283 delete transition_struct;
287 void __msg_mms_release_meta(msg_struct_s *meta_struct)
290 MMS_SMIL_META *meta = (MMS_SMIL_META *)meta_struct->data;
293 delete (MMS_SMIL_META *)meta;
295 meta_struct->data = NULL;
301 void __msg_mms_release_multipart(msg_struct_s *multipart_struct)
303 if (multipart_struct) {
304 MMS_MULTIPART_DATA_S *multipart = (MMS_MULTIPART_DATA_S *)multipart_struct->data;
307 g_free(multipart->pMultipartData); multipart->pMultipartData = NULL;
308 delete (MMS_MULTIPART_DATA_S *)multipart;
311 multipart_struct->data = NULL;
313 delete multipart_struct;
317 void __msg_mms_release_mms(msg_struct_s *mms_struct)
319 MMS_DATA_HIDDEN_S *mms = (MMS_DATA_HIDDEN_S *)mms_struct->data;
322 g_list_free_full(mms->pagelist, msg_mms_list_item_free_func);
323 mms->pagelist = NULL;
326 if (mms->regionlist) {
327 g_list_free_full(mms->regionlist, msg_mms_list_item_free_func);
328 mms->regionlist = NULL;
331 if (mms->attachlist) {
332 g_list_free_full(mms->attachlist, msg_mms_list_item_free_func);
333 mms->attachlist = NULL;
336 if (mms->transitionlist) {
337 g_list_free_full(mms->transitionlist, msg_mms_list_item_free_func);
338 mms->transitionlist = NULL;
342 g_list_free_full(mms->metalist, msg_mms_list_item_free_func);
343 mms->metalist = NULL;
346 if (mms->multipartlist) {
347 g_list_free_full(mms->multipartlist, msg_mms_list_item_free_func);
348 mms->multipartlist = NULL;
351 if (mms->smil.pMultipartData) {
352 g_free(mms->smil.pMultipartData);
353 mms->smil.pMultipartData = NULL;
356 delete (MMS_DATA_HIDDEN_S *)mms;
358 mms_struct->data = NULL;
363 int msg_mms_release_struct(msg_struct_s **msg_struct_data)
365 msg_struct_s *msg_struct = (msg_struct_s *)*msg_struct_data;
366 int type = msg_struct->type;
370 __msg_mms_release_mms(*msg_struct_data);
371 *msg_struct_data = NULL;
373 case MSG_STRUCT_MMS_PAGE:
374 __msg_mms_release_page(*msg_struct_data);
375 *msg_struct_data = NULL;
377 case MSG_STRUCT_MMS_MEDIA:
378 __msg_mms_release_media(*msg_struct_data);
379 *msg_struct_data = NULL;
381 case MSG_STRUCT_MMS_ATTACH:
382 __msg_mms_release_attach(*msg_struct_data);
383 *msg_struct_data = NULL;
385 case MSG_STRUCT_MMS_REGION:
386 __msg_mms_release_attach(*msg_struct_data);
387 *msg_struct_data = NULL;
389 case MSG_STRUCT_MMS_TRANSITION:
390 __msg_mms_release_transition(*msg_struct_data);
391 *msg_struct_data = NULL;
393 case MSG_STRUCT_MMS_META:
394 __msg_mms_release_meta(*msg_struct_data);
395 *msg_struct_data = NULL;
397 case MSG_STRUCT_MMS_SMIL_TEXT:
398 if (msg_struct->data) {
399 delete (MmsSmilText*)msg_struct->data;
400 msg_struct->data = NULL;
403 *msg_struct_data = NULL;
405 case MSG_STRUCT_MMS_SMIL_AVI:
406 if (msg_struct->data) {
407 delete (MmsSmilAVI*)msg_struct->data;
408 msg_struct->data = NULL;
411 *msg_struct_data = NULL;
413 case MSG_STRUCT_MULTIPART_INFO: {
414 if (msg_struct->data) {
415 delete (MMS_MULTIPART_DATA_S *)(msg_struct->data);
416 msg_struct->data = NULL;
419 *msg_struct_data = NULL;
427 int msg_mms_get_int_value(msg_struct_s *msg_struct, int field, int *value)
429 msg_error_t err = MSG_SUCCESS;
431 switch (msg_struct->type) {
432 case MSG_STRUCT_MMS: {
433 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
434 if (field == MSG_MMS_ROOTLAYOUT_WIDTH_INT) {
435 *value = mms_data->rootlayout.width.value;
436 } else if (field == MSG_MMS_ROOTLAYOUT_HEIGHT_INT) {
437 *value = mms_data->rootlayout.height.value;
438 } else if (field == MSG_MMS_ROOTLAYOUT_BGCOLOR_INT) {
439 *value = mms_data->rootlayout.bgColor;
440 } else if (field == MSG_MMS_HEADER_DATE_INT) {
441 *value = mms_data->header.date;
442 } else if (field == MSG_MMS_HEADER_DELIVERY_REPORT_INT) {
443 *value = mms_data->header.bDeliveryReport;
444 } else if (field == MSG_MMS_HEADER_DELIVERY_TIME_INT) {
445 *value = mms_data->header.delivery.time;
446 } else if (field == MSG_MMS_HEADER_EXPIRY_TIME_INT) {
447 *value = mms_data->header.expiry.time;
448 } else if (field == MSG_MMS_HEADER_MESSAGE_CLASS_INT) {
449 *value = mms_data->header.messageClass;
450 } else if (field == MSG_MMS_HEADER_MESSAGE_TYPE_INT) {
451 *value = mms_data->header.messageType;
452 } else if (field == MSG_MMS_HEADER_VERSION_INT) {
453 *value = mms_data->header.mmsVersion;
454 } else if (field == MSG_MMS_HEADER_SIZE_INT) {
455 *value = mms_data->header.messageSize;
456 } else if (field == MSG_MMS_HEADER_PRIORITY_INT) {
457 *value = mms_data->header.mmsPriority;
458 } else if (field == MSG_MMS_HEADER_READ_REPORT_INT) {
459 *value = mms_data->header.bReadReport;
460 } else if (field == MSG_MMS_HEADER_HIDE_ADDRESS_INT) {
461 *value = mms_data->header.bHideAddress;
462 } else if (field == MSG_MMS_HEADER_MMS_STATUS_INT) {
463 *value = mms_data->header.mmsStatus;
464 } else if (field == MSG_MMS_HEADER_CONTENT_CLASS_INT) {
465 *value = mms_data->header.contentClass;
467 err = MSG_ERR_INVALID_PARAMETER;
471 case MSG_STRUCT_MMS_PAGE: {
472 MMS_PAGE_S *mms_page_data = (MMS_PAGE_S *)msg_struct->data;
473 if (field == MSG_MMS_PAGE_PAGE_DURATION_INT)
474 *value = mms_page_data->nDur;
475 else if (field == MSG_MMS_PAGE_BEGIN_TIME_INT)
476 *value = mms_page_data->nBegin;
477 else if (field == MSG_MMS_PAGE_END_TIME_INT)
478 *value = mms_page_data->nEnd;
479 else if (field == MSG_MMS_PAGE_MIN_INT)
480 *value = mms_page_data->nMin;
481 else if (field == MSG_MMS_PAGE_MAX_INT)
482 *value = mms_page_data->nMax;
483 else if (field == MSG_MMS_PAGE_REPEAT_INT)
484 *value = mms_page_data->nRepeat;
486 err = MSG_ERR_INVALID_PARAMETER;
489 case MSG_STRUCT_MMS_MEDIA: {
490 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
491 if (field == MSG_MMS_MEDIA_TYPE_INT)
492 *value = mms_media_data->mediatype;
493 else if (field == MSG_MMS_MEDIA_DRM_TYPE_INT)
494 *value = mms_media_data->drmType;
496 err = MSG_ERR_INVALID_PARAMETER;
499 case MSG_STRUCT_MMS_ATTACH: {
500 MMS_ATTACH_S *mms_attach_data = (MMS_ATTACH_S *)msg_struct->data;
501 if (field == MSG_MMS_ATTACH_MIME_TYPE_INT)
502 *value = mms_attach_data->mediatype;
503 else if (field == MSG_MMS_ATTACH_FILESIZE_INT)
504 *value = mms_attach_data->fileSize;
505 else if (field == MSG_MMS_ATTACH_DRM_TYPE_INT)
506 *value = mms_attach_data->drmType;
508 err = MSG_ERR_INVALID_PARAMETER;
511 case MSG_STRUCT_MMS_REGION: {
512 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
513 if (field == MSG_MMS_REGION_LENGTH_LEFT_INT)
514 *value = mms_region_data->nLeft.value;
515 else if (field == MSG_MMS_REGION_LENGTH_TOP_INT)
516 *value = mms_region_data->nTop.value;
517 else if (field == MSG_MMS_REGION_LENGTH_WIDTH_INT)
518 *value = mms_region_data->width.value;
519 else if (field == MSG_MMS_REGION_LENGTH_HEIGHT_INT)
520 *value = mms_region_data->height.value;
521 else if (field == MSG_MMS_REGION_BGCOLOR_INT)
522 *value = mms_region_data->bgColor;
523 else if (field == MSG_MMS_REGION_FIT_TYPE_INT)
524 *value = mms_region_data->fit;
526 err = MSG_ERR_INVALID_PARAMETER;
529 case MSG_STRUCT_MMS_TRANSITION: {
530 MMS_SMIL_TRANSITION *mms_transition_data = (MMS_SMIL_TRANSITION *)msg_struct->data;
531 if (field == MSG_MMS_TRANSITION_TYPE_INT)
532 *value = mms_transition_data->nType;
533 else if (field == MSG_MMS_TRANSITION_SUBTYPE_INT)
534 *value = mms_transition_data->nSubType;
535 else if (field == MSG_MMS_TRANSITION_DURATION_INT)
536 *value = mms_transition_data->nDur;
538 err = MSG_ERR_INVALID_PARAMETER;
541 case MSG_STRUCT_MMS_SMIL_TEXT: {
542 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
543 if (field == MSG_MMS_SMIL_TEXT_REPEAT_INT)
544 *value = mms_smil_text_data->nRepeat;
545 else if (field == MSG_MMS_SMIL_TEXT_BEGIN_INT)
546 *value = mms_smil_text_data->nBegin;
547 else if (field == MSG_MMS_SMIL_TEXT_END_INT)
548 *value = mms_smil_text_data->nEnd;
549 else if (field == MSG_MMS_SMIL_TEXT_DURTIME_INT)
550 *value = mms_smil_text_data->nDurTime;
551 else if (field == MSG_MMS_SMIL_TEXT_BGCOLOR_INT)
552 *value = mms_smil_text_data->nBgColor;
553 else if (field == MSG_MMS_SMIL_TEXT_DIRECTION_TYPE_INT)
554 *value = mms_smil_text_data->nDirection;
555 else if (field == MSG_MMS_SMIL_TEXT_SIZE_INT)
556 *value = mms_smil_text_data->nSize;
557 else if (field == MSG_MMS_SMIL_TEXT_COLOR_INT)
558 *value = mms_smil_text_data->nColor;
560 err = MSG_ERR_INVALID_PARAMETER;
563 case MSG_STRUCT_MMS_SMIL_AVI: {
564 MmsSmilAVI *mms_smil_avi_data = (MmsSmilAVI *)msg_struct->data;
565 if (field == MSG_MMS_SMIL_AVI_REPEAT_INT)
566 *value = mms_smil_avi_data->nRepeat;
567 else if (field == MSG_MMS_SMIL_AVI_BEGIN_INT)
568 *value = mms_smil_avi_data->nBegin;
569 else if (field == MSG_MMS_SMIL_AVI_END_INT)
570 *value = mms_smil_avi_data->nEnd;
571 else if (field == MSG_MMS_SMIL_AVI_DURTIME_INT)
572 *value = mms_smil_avi_data->nDurTime;
573 else if (field == MSG_MMS_SMIL_AVI_BGCOLOR_INT)
574 *value = mms_smil_avi_data->nBgColor;
576 err = MSG_ERR_INVALID_PARAMETER;
579 case MSG_STRUCT_MULTIPART_INFO:
580 err = msg_multipart_get_int_value(msg_struct->data, field, value);
584 err = MSG_ERR_INVALID_PARAMETER;
590 int msg_mms_get_str_value(msg_struct_s *msg_struct, int field, char *value, int size)
592 msg_error_t err = MSG_SUCCESS;
594 switch (msg_struct->type) {
595 case MSG_STRUCT_MMS: {
596 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
597 if (field == MSG_MMS_HEADER_CONTENT_LOCATION_STR) { /* mms header */
598 strncpy(value, mms_data->header.contentLocation, size);
599 } else if (field == MSG_MMS_HEADER_CONTENT_TYPE_STR) {
600 strncpy(value, mms_data->header.szContentType, size);
601 } else if (field == MSG_MMS_HEADER_FROM_STR) {
602 strncpy(value, mms_data->header.szFrom, size);
603 } else if (field == MSG_MMS_HEADER_MESSAGE_ID_STR) {
604 strncpy(value, mms_data->header.messageID, size);
605 } else if (field == MSG_MMS_HEADER_TR_ID_STR) {
606 strncpy(value, mms_data->header.trID, size);
608 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_TYPE_STR) { /* smil */
609 strncpy(value, mms_data->smil.szContentType, size);
610 } else if (field == MSG_MMS_SMIL_MULTIPART_NAME_STR) {
611 strncpy(value, mms_data->smil.szFileName, size);
612 } else if (field == MSG_MMS_SMIL_MULTIPART_FILEPATH_STR) {
613 strncpy(value, mms_data->smil.szFilePath, size);
614 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_ID_STR) {
615 strncpy(value, mms_data->smil.szContentID, size);
616 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_LOCATION_STR) {
617 strncpy(value, mms_data->smil.szContentLocation, size);
619 err = MSG_ERR_INVALID_PARAMETER;
623 case MSG_STRUCT_MMS_MEDIA: {
624 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
625 if (field == MSG_MMS_MEDIA_SRC_STR) {
626 strncpy(value, mms_media_data->szSrc, size);
627 } else if (field == MSG_MMS_MEDIA_FILENAME_STR) {
628 strncpy(value, mms_media_data->szFileName, size);
629 } else if (field == MSG_MMS_MEDIA_FILEPATH_STR) {
630 strncpy(value, mms_media_data->szFilePath, size);
631 } else if (field == MSG_MMS_MEDIA_CONTENT_ID_STR) {
632 if (strlen(mms_media_data->szContentID) > 0)
633 snprintf(value, size, "<%s>", mms_media_data->szContentID);
634 } else if (field == MSG_MMS_MEDIA_REGION_ID_STR) {
635 strncpy(value, mms_media_data->regionId, size);
636 } else if (field == MSG_MMS_MEDIA_ALTERNATIVE_STR) {
637 strncpy(value, mms_media_data->szAlt, size);
638 } else if (field == MSG_MMS_MEDIA_DRM_FULLPATH_STR) {
639 strncpy(value, mms_media_data->szDrm2FullPath, size);
640 } else if (field == MSG_MMS_MEDIA_CONTENT_LOCATION_STR) {
641 strncpy(value, mms_media_data->szContentLocation, size);
642 } else if (field == MSG_MMS_MEDIA_CONTENT_TYPE_STR) {
643 strncpy(value, mms_media_data->szContentType, size);
645 err = MSG_ERR_INVALID_PARAMETER;
649 case MSG_STRUCT_MMS_ATTACH: {
650 MMS_ATTACH_S *mms_attach_data = (MMS_ATTACH_S *)msg_struct->data;
651 if (field == MSG_MMS_ATTACH_FILENAME_STR)
652 strncpy(value, mms_attach_data->szFileName, size);
653 else if (field == MSG_MMS_ATTACH_FILEPATH_STR)
654 strncpy(value, mms_attach_data->szFilePath, size);
655 else if (field == MSG_MMS_ATTACH_DRM_FULLPATH_STR)
656 strncpy(value, mms_attach_data->szDrm2FullPath, size);
657 else if (field == MSG_MMS_ATTACH_CONTENT_TYPE_STR)
658 strncpy(value, mms_attach_data->szContentType, size);
660 err = MSG_ERR_INVALID_PARAMETER;
663 case MSG_STRUCT_MMS_REGION: {
664 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
665 if (field == MSG_MMS_REGION_ID_STR)
666 strncpy(value, mms_region_data->szID, size);
668 err = MSG_ERR_INVALID_PARAMETER;
671 case MSG_STRUCT_MMS_TRANSITION: {
672 MMS_SMIL_TRANSITION *mms_transition_data = (MMS_SMIL_TRANSITION *)msg_struct->data;
673 if (field == MSG_MMS_TRANSITION_ID_STR)
674 strncpy(value, mms_transition_data->szID, size);
676 err = MSG_ERR_INVALID_PARAMETER;
679 case MSG_STRUCT_MMS_META: {
680 MMS_SMIL_META *mms_meta_data = (MMS_SMIL_META *)msg_struct->data;
681 if (field == MSG_MMS_META_ID_STR)
682 strncpy(value, mms_meta_data->szID, size);
683 else if (field == MSG_MMS_META_NAME_STR)
684 strncpy(value, mms_meta_data->szName, size);
685 else if (field == MSG_MMS_META_CONTENT_STR)
686 strncpy(value, mms_meta_data->szContent, size);
688 err = MSG_ERR_INVALID_PARAMETER;
691 case MSG_STRUCT_MMS_SMIL_TEXT: {
692 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
693 if (field == MSG_MMS_SMIL_TEXT_TRANSITION_IN_ID_STR)
694 strncpy(value, mms_smil_text_data->szTransInId, size);
695 else if (field == MSG_MMS_SMIL_TEXT_TRANSITION_OUT_ID_STR)
696 strncpy(value, mms_smil_text_data->szTransOutId, size);
698 err = MSG_ERR_INVALID_PARAMETER;
701 case MSG_STRUCT_MMS_SMIL_AVI: {
702 MmsSmilAVI *mms_smil_avi_data = (MmsSmilAVI *)msg_struct->data;
703 if (field == MSG_MMS_SMIL_AVI_TRANSITION_IN_ID_STR)
704 strncpy(value, mms_smil_avi_data->szTransInId, size);
705 else if (field == MSG_MMS_SMIL_AVI_TRANSITION_OUT_ID_STR)
706 strncpy(value, mms_smil_avi_data->szTransOutId, size);
708 err = MSG_ERR_INVALID_PARAMETER;
711 case MSG_STRUCT_MULTIPART_INFO:
712 err = msg_multipart_get_str_value(msg_struct->data, field, value, size);
716 err = MSG_ERR_INVALID_PARAMETER;
722 int msg_mms_get_bool_value(msg_struct_s *msg_struct, int field, bool *value)
724 msg_error_t err = MSG_SUCCESS;
726 switch (msg_struct->type) {
727 case MSG_STRUCT_MMS: {
728 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
729 if (field == MSG_MMS_ROOTLAYOUT_WIDTH_PERCENT_BOOL)
730 *value = mms_data->rootlayout.width.bUnitPercent;
731 else if (field == MSG_MMS_ROOTLAYOUT_HEIGHT_PERCENT_BOOL)
732 *value = mms_data->rootlayout.height.bUnitPercent;
733 else if (field == MSG_MMS_ROOTLAYOUT_BGCOLOR_BOOL)
734 *value = mms_data->rootlayout.bBgColor;
736 err = MSG_ERR_INVALID_PARAMETER;
739 case MSG_STRUCT_MMS_REGION: {
740 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
741 if (field == MSG_MMS_REGION_LENGTH_LEFT_PERCENT_BOOL)
742 *value = mms_region_data->nLeft.bUnitPercent;
743 else if (field == MSG_MMS_REGION_LENGTH_TOP_PERCENT_BOOL)
744 *value = mms_region_data->nTop.bUnitPercent;
745 else if (field == MSG_MMS_REGION_LENGTH_WIDTH_PERCENT_BOOL)
746 *value = mms_region_data->width.bUnitPercent;
747 else if (field == MSG_MMS_REGION_LENGTH_HEIGHT_PERCENT_BOOL)
748 *value = mms_region_data->height.bUnitPercent;
749 else if (field == MSG_MMS_REGION_BGCOLOR_BOOL)
750 *value = mms_region_data->bBgColor;
752 err = MSG_ERR_INVALID_PARAMETER;
755 case MSG_STRUCT_MMS_SMIL_TEXT: {
756 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
757 if (field == MSG_MMS_SMIL_TEXT_BOLD_BOOL)
758 *value = mms_smil_text_data->bBold;
759 else if (field == MSG_MMS_SMIL_TEXT_UNDERLINE_BOOL)
760 *value = mms_smil_text_data->bUnderLine;
761 else if (field == MSG_MMS_SMIL_TEXT_ITALIC_BOOL)
762 *value = mms_smil_text_data->bItalic;
763 else if (field == MSG_MMS_SMIL_TEXT_REVERSE_BOOL)
764 *value = mms_smil_text_data->bReverse;
766 err = MSG_ERR_INVALID_PARAMETER;
770 err = MSG_ERR_INVALID_PARAMETER;
776 int msg_mms_get_struct_handle(msg_struct_s *msg_struct, int field, msg_struct_s **value)
778 msg_error_t err = MSG_SUCCESS;
780 switch (msg_struct->type) {
781 case MSG_STRUCT_MMS_MEDIA: {
782 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
783 if (field == MSG_MMS_MEDIA_SMIL_TEXT_HND)
784 *value = mms_media_data->pText;
785 else if (field == MSG_MMS_MEDIA_SMIL_AVI_HND)
786 *value = mms_media_data->pAVI;
788 err = MSG_ERR_INVALID_PARAMETER;
792 err = MSG_ERR_INVALID_PARAMETER;
798 int msg_mms_get_list_handle(msg_struct_s *msg_struct, int field, msg_list_handle_t *value)
800 msg_error_t err = MSG_SUCCESS;
802 switch (msg_struct->type) {
803 case MSG_STRUCT_MMS: {
804 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
805 if (field == MSG_MMS_PAGE_LIST_HND)
806 *value = (msg_list_handle_t)mms_data->pagelist;
807 else if (field == MSG_MMS_REGION_LIST_HND)
808 *value = (msg_list_handle_t)mms_data->regionlist;
809 else if (field == MSG_MMS_ATTACH_LIST_HND)
810 *value = (msg_list_handle_t)mms_data->attachlist;
811 else if (field == MSG_MMS_TRANSITION_LIST_HND)
812 *value = (msg_list_handle_t)mms_data->transitionlist;
813 else if (field == MSG_MMS_META_LIST_HND)
814 *value = (msg_list_handle_t)mms_data->metalist;
815 else if (field == MSG_MMS_MULTIPART_LIST_HND)
816 *value = (msg_list_handle_t)mms_data->multipartlist;
818 err = MSG_ERR_INVALID_PARAMETER;
821 case MSG_STRUCT_MMS_PAGE: {
822 MMS_PAGE_S *mms_page_data = (MMS_PAGE_S *)msg_struct->data;
823 if (field == MSG_MMS_PAGE_MEDIA_LIST_HND)
824 *value = (msg_list_handle_t)mms_page_data->medialist;
826 err = MSG_ERR_INVALID_PARAMETER;
830 err = MSG_ERR_INVALID_PARAMETER;
836 int msg_mms_set_int_value(msg_struct_s *msg_struct, int field, int value)
838 msg_error_t err = MSG_SUCCESS;
840 switch (msg_struct->type) {
841 case MSG_STRUCT_MMS: {
842 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
843 if (field == MSG_MMS_ROOTLAYOUT_WIDTH_INT) {
844 mms_data->rootlayout.width.value = value;
845 } else if (field == MSG_MMS_ROOTLAYOUT_HEIGHT_INT) {
846 mms_data->rootlayout.height.value = value;
847 } else if (field == MSG_MMS_ROOTLAYOUT_BGCOLOR_INT) {
848 mms_data->rootlayout.bBgColor = true;
849 mms_data->rootlayout.bgColor = value;
850 } else if (field == MSG_MMS_HEADER_DATE_INT) {
851 mms_data->header.date = value;
852 } else if (field == MSG_MMS_HEADER_DELIVERY_REPORT_INT) {
853 mms_data->header.bDeliveryReport = (bool)value;
854 } else if (field == MSG_MMS_HEADER_DELIVERY_TIME_INT) {
855 mms_data->header.delivery.time = value;
856 } else if (field == MSG_MMS_HEADER_EXPIRY_TIME_INT) {
857 mms_data->header.expiry.time = value;
858 } else if (field == MSG_MMS_HEADER_MESSAGE_CLASS_INT) {
859 mms_data->header.messageClass = value;
860 } else if (field == MSG_MMS_HEADER_MESSAGE_TYPE_INT) {
861 mms_data->header.messageType = value;
862 } else if (field == MSG_MMS_HEADER_VERSION_INT) {
863 mms_data->header.mmsVersion = value;
864 } else if (field == MSG_MMS_HEADER_SIZE_INT) {
865 mms_data->header.messageSize = value;
866 } else if (field == MSG_MMS_HEADER_PRIORITY_INT) {
867 mms_data->header.mmsPriority = value;
868 } else if (field == MSG_MMS_HEADER_READ_REPORT_INT) {
869 mms_data->header.bReadReport = (bool)value;
870 } else if (field == MSG_MMS_HEADER_HIDE_ADDRESS_INT) {
871 mms_data->header.bHideAddress = value;
872 } else if (field == MSG_MMS_HEADER_MMS_STATUS_INT) {
873 mms_data->header.mmsStatus = value;
874 } else if (field == MSG_MMS_HEADER_CONTENT_CLASS_INT) {
875 mms_data->header.contentClass = value;
877 err = MSG_ERR_INVALID_PARAMETER;
881 case MSG_STRUCT_MMS_PAGE: {
882 MMS_PAGE_S *mms_page_data = (MMS_PAGE_S *)msg_struct->data;
883 if (field == MSG_MMS_PAGE_PAGE_DURATION_INT)
884 mms_page_data->nDur = value;
885 else if (field == MSG_MMS_PAGE_BEGIN_TIME_INT)
886 mms_page_data->nBegin = value;
887 else if (field == MSG_MMS_PAGE_END_TIME_INT)
888 mms_page_data->nEnd = value;
889 else if (field == MSG_MMS_PAGE_MIN_INT)
890 mms_page_data->nMin = value;
891 else if (field == MSG_MMS_PAGE_MAX_INT)
892 mms_page_data->nMax = value;
893 else if (field == MSG_MMS_PAGE_REPEAT_INT)
894 mms_page_data->nRepeat = value;
896 err = MSG_ERR_INVALID_PARAMETER;
899 case MSG_STRUCT_MMS_MEDIA: {
900 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
901 if (field == MSG_MMS_MEDIA_TYPE_INT)
902 mms_media_data->mediatype = (MmsSmilMediaType)value;
903 else if (field == MSG_MMS_MEDIA_DRM_TYPE_INT)
904 mms_media_data->drmType = (MsgDrmType)value;
906 err = MSG_ERR_INVALID_PARAMETER;
909 case MSG_STRUCT_MMS_ATTACH: {
910 MMS_ATTACH_S *mms_attach_data = (MMS_ATTACH_S *)msg_struct->data;
911 if (field == MSG_MMS_ATTACH_MIME_TYPE_INT)
912 mms_attach_data->mediatype = (MimeType)value;
913 else if (field == MSG_MMS_ATTACH_FILESIZE_INT)
914 mms_attach_data->fileSize = value;
915 else if (field == MSG_MMS_ATTACH_DRM_TYPE_INT)
916 mms_attach_data->drmType = (MsgDrmType)value;
918 err = MSG_ERR_INVALID_PARAMETER;
921 case MSG_STRUCT_MMS_REGION: {
922 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
923 if (field == MSG_MMS_REGION_LENGTH_LEFT_INT) {
924 mms_region_data->nLeft.value = value;
925 } else if (field == MSG_MMS_REGION_LENGTH_TOP_INT) {
926 mms_region_data->nTop.value = value;
927 } else if (field == MSG_MMS_REGION_LENGTH_WIDTH_INT) {
928 mms_region_data->width.value = value;
929 } else if (field == MSG_MMS_REGION_LENGTH_HEIGHT_INT) {
930 mms_region_data->height.value = value;
931 } else if (field == MSG_MMS_REGION_BGCOLOR_INT) {
932 mms_region_data->bBgColor = true;
933 mms_region_data->bgColor = value;
934 } else if (field == MSG_MMS_REGION_FIT_TYPE_INT) {
935 mms_region_data->fit = (REGION_FIT_TYPE_T)value;
937 err = MSG_ERR_INVALID_PARAMETER;
941 case MSG_STRUCT_MMS_TRANSITION: {
942 MMS_SMIL_TRANSITION *mms_transition_data = (MMS_SMIL_TRANSITION *)msg_struct->data;
943 if (field == MSG_MMS_TRANSITION_TYPE_INT)
944 mms_transition_data->nType = (MmsSmilTransType)value;
945 else if (field == MSG_MMS_TRANSITION_SUBTYPE_INT)
946 mms_transition_data->nSubType = (MmsSmilTransSubType)value;
947 else if (field == MSG_MMS_TRANSITION_DURATION_INT)
948 mms_transition_data->nDur = value;
950 err = MSG_ERR_INVALID_PARAMETER;
953 case MSG_STRUCT_MMS_SMIL_TEXT: {
954 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
955 if (field == MSG_MMS_SMIL_TEXT_REPEAT_INT)
956 mms_smil_text_data->nRepeat = value;
957 else if (field == MSG_MMS_SMIL_TEXT_BEGIN_INT)
958 mms_smil_text_data->nBegin = value;
959 else if (field == MSG_MMS_SMIL_TEXT_END_INT)
960 mms_smil_text_data->nEnd = value;
961 else if (field == MSG_MMS_SMIL_TEXT_DURTIME_INT)
962 mms_smil_text_data->nDurTime = value;
963 else if (field == MSG_MMS_SMIL_TEXT_BGCOLOR_INT)
964 mms_smil_text_data->nBgColor = value;
965 else if (field == MSG_MMS_SMIL_TEXT_DIRECTION_TYPE_INT)
966 mms_smil_text_data->nDirection = (MmsTextDirection)value;
967 else if (field == MSG_MMS_SMIL_TEXT_SIZE_INT)
968 mms_smil_text_data->nSize = value;
969 else if (field == MSG_MMS_SMIL_TEXT_COLOR_INT)
970 mms_smil_text_data->nColor = value;
972 err = MSG_ERR_INVALID_PARAMETER;
975 case MSG_STRUCT_MMS_SMIL_AVI: {
976 MmsSmilAVI *mms_smil_avi_data = (MmsSmilAVI *)msg_struct->data;
977 if (field == MSG_MMS_SMIL_AVI_REPEAT_INT)
978 mms_smil_avi_data->nRepeat = value;
979 else if (field == MSG_MMS_SMIL_AVI_BEGIN_INT)
980 mms_smil_avi_data->nBegin = value;
981 else if (field == MSG_MMS_SMIL_AVI_END_INT)
982 mms_smil_avi_data->nEnd = value;
983 else if (field == MSG_MMS_SMIL_AVI_DURTIME_INT)
984 mms_smil_avi_data->nDurTime = value;
985 else if (field == MSG_MMS_SMIL_AVI_BGCOLOR_INT)
986 mms_smil_avi_data->nBgColor = value;
988 err = MSG_ERR_INVALID_PARAMETER;
992 err = MSG_ERR_INVALID_PARAMETER;
998 int msg_mms_set_str_value(msg_struct_s *msg_struct, int field, const char *value, int size)
1001 return MSG_ERR_NULL_POINTER;
1003 msg_error_t err = MSG_SUCCESS;
1005 switch (msg_struct->type) {
1006 case MSG_STRUCT_MMS_MEDIA: {
1007 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
1008 if (field == MSG_MMS_MEDIA_SRC_STR) {
1009 strncpy(mms_media_data->szSrc, value, MSG_FILEPATH_LEN_MAX);
1010 } else if (field == MSG_MMS_MEDIA_FILENAME_STR) {
1011 strncpy(mms_media_data->szFileName, value, MSG_FILEPATH_LEN_MAX);
1012 } else if (field == MSG_MMS_MEDIA_FILEPATH_STR) {
1013 MSG_SEC_DEBUG("media file path = %s", value);
1014 strncpy(mms_media_data->szFilePath, value, MSG_FILEPATH_LEN_MAX);
1016 char *filename = NULL;
1017 filename = (char *)strrchr(value, '/');
1019 if (filename != NULL) {
1020 strncpy(mms_media_data->szFileName, filename + 1, MSG_FILENAME_LEN_MAX);
1021 strncpy(mms_media_data->szContentID, filename + 1, MSG_MSG_ID_LEN);
1023 strncpy(mms_media_data->szFileName, value, MSG_FILENAME_LEN_MAX);
1024 strncpy(mms_media_data->szContentID, value, MSG_MSG_ID_LEN);
1026 } else if (field == MSG_MMS_MEDIA_CONTENT_ID_STR) {
1027 __removeLessGreaterMark(value, mms_media_data->szContentID, MSG_MSG_ID_LEN);
1028 } else if (field == MSG_MMS_MEDIA_REGION_ID_STR) {
1029 strncpy(mms_media_data->regionId, value, MAX_SMIL_REGION_ID);
1030 } else if (field == MSG_MMS_MEDIA_ALTERNATIVE_STR) {
1031 strncpy(mms_media_data->szAlt, value, MAX_SMIL_ALT_LEN);
1032 } else if (field == MSG_MMS_MEDIA_DRM_FULLPATH_STR) {
1033 strncpy(mms_media_data->szDrm2FullPath, value, MSG_FILEPATH_LEN_MAX);
1034 } else if (field == MSG_MMS_MEDIA_CONTENT_LOCATION_STR) {
1035 strncpy(mms_media_data->szContentLocation, value, MSG_MSG_ID_LEN);
1036 } else if (field == MSG_MMS_MEDIA_CONTENT_TYPE_STR) {
1037 strncpy(mms_media_data->szContentType, value, MSG_MSG_ID_LEN);
1039 err = MSG_ERR_INVALID_PARAMETER;
1043 case MSG_STRUCT_MMS_ATTACH: {
1044 MMS_ATTACH_S *mms_attach_data = (MMS_ATTACH_S *)msg_struct->data;
1045 if (field == MSG_MMS_ATTACH_FILENAME_STR) {
1046 strncpy(mms_attach_data->szFileName, value, MSG_FILENAME_LEN_MAX);
1047 } else if (field == MSG_MMS_ATTACH_FILEPATH_STR) {
1048 MSG_SEC_DEBUG("attach file path = %s", value);
1049 mms_attach_data->mediatype = MIME_UNKNOWN;
1050 mms_attach_data->fileSize = -1;
1052 strncpy(mms_attach_data->szFilePath, value, MSG_FILEPATH_LEN_MAX);
1054 char *filename = NULL;
1055 filename = (char *)strrchr(value, '/');
1056 if (filename != NULL) {
1057 strncpy(mms_attach_data->szFileName, filename + 1, MSG_FILENAME_LEN_MAX);
1059 strncpy(mms_attach_data->szFileName, value, MSG_FILENAME_LEN_MAX);
1061 } else if (field == MSG_MMS_ATTACH_DRM_FULLPATH_STR) {
1062 strncpy(mms_attach_data->szDrm2FullPath, value, MSG_FILEPATH_LEN_MAX);
1063 } else if (field == MSG_MMS_ATTACH_CONTENT_TYPE_STR) {
1064 strncpy(mms_attach_data->szContentType, value, MSG_MSG_ID_LEN);
1066 err = MSG_ERR_INVALID_PARAMETER;
1070 case MSG_STRUCT_MMS_REGION: {
1071 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
1072 if (field == MSG_MMS_REGION_ID_STR)
1073 strncpy(mms_region_data->szID, value, MAX_SMIL_REGION_ID);
1075 err = MSG_ERR_INVALID_PARAMETER;
1078 case MSG_STRUCT_MMS_TRANSITION: {
1079 MMS_SMIL_TRANSITION *mms_transition_data = (MMS_SMIL_TRANSITION *)msg_struct->data;
1080 if (field == MSG_MMS_TRANSITION_ID_STR)
1081 strncpy(mms_transition_data->szID, value, MAX_SMIL_TRANSITION_ID);
1083 err = MSG_ERR_INVALID_PARAMETER;
1086 case MSG_STRUCT_MMS_META: {
1087 MMS_SMIL_META *mms_meta_data = (MMS_SMIL_META *)msg_struct->data;
1088 if (field == MSG_MMS_META_ID_STR)
1089 strncpy(mms_meta_data->szID, value, MAX_SMIL_META_ID);
1090 else if (field == MSG_MMS_META_NAME_STR)
1091 strncpy(mms_meta_data->szName, value, MAX_SMIL_META_NAME);
1092 else if (field == MSG_MMS_META_CONTENT_STR)
1093 strncpy(mms_meta_data->szContent, value, MAX_SMIL_META_CONTENT);
1095 err = MSG_ERR_INVALID_PARAMETER;
1098 case MSG_STRUCT_MMS_SMIL_TEXT: {
1099 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
1100 if (field == MSG_MMS_SMIL_TEXT_TRANSITION_IN_ID_STR)
1101 strncpy(mms_smil_text_data->szTransInId, value, MAX_SMIL_TRANSIN_ID);
1102 else if (field == MSG_MMS_SMIL_TEXT_TRANSITION_OUT_ID_STR)
1103 strncpy(mms_smil_text_data->szTransOutId, value, MAX_SMIL_TRANSOUT_ID);
1105 err = MSG_ERR_INVALID_PARAMETER;
1108 case MSG_STRUCT_MMS_SMIL_AVI: {
1109 MmsSmilAVI *mms_smil_avi_data = (MmsSmilAVI *)msg_struct->data;
1110 if (field == MSG_MMS_SMIL_AVI_TRANSITION_IN_ID_STR)
1111 strncpy(mms_smil_avi_data->szTransInId, value, MAX_SMIL_TRANSIN_ID);
1112 else if (field == MSG_MMS_SMIL_AVI_TRANSITION_OUT_ID_STR)
1113 strncpy(mms_smil_avi_data->szTransOutId, value, MAX_SMIL_TRANSOUT_ID);
1115 err = MSG_ERR_INVALID_PARAMETER;
1118 case MSG_STRUCT_MMS: {
1119 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
1120 if (field == MSG_MMS_HEADER_CONTENT_LOCATION_STR) { /* mms header */
1121 strncpy(mms_data->header.contentLocation, value, sizeof(mms_data->header.contentLocation) - 1 );
1122 } else if (field == MSG_MMS_HEADER_CONTENT_TYPE_STR) {
1123 strncpy(mms_data->header.szContentType, value, sizeof(mms_data->header.szContentType) - 1 );
1124 } else if (field == MSG_MMS_HEADER_FROM_STR) {
1125 strncpy(mms_data->header.szFrom, value, sizeof(mms_data->header.szFrom) - 1 );
1126 } else if (field == MSG_MMS_HEADER_MESSAGE_ID_STR) {
1127 strncpy(mms_data->header.messageID, value, sizeof(mms_data->header.messageID) - 1 );
1128 } else if (field == MSG_MMS_HEADER_TR_ID_STR) {
1129 strncpy(mms_data->header.trID, value, sizeof(mms_data->header.trID) - 1 );
1131 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_TYPE_STR) { /* smil */
1132 strncpy(mms_data->smil.szContentType, value, sizeof(mms_data->smil.szContentType) - 1 );
1133 } else if (field == MSG_MMS_SMIL_MULTIPART_NAME_STR) {
1134 strncpy(mms_data->smil.szFileName, value, sizeof(mms_data->smil.szFileName) - 1 );
1135 } else if (field == MSG_MMS_SMIL_MULTIPART_FILEPATH_STR) {
1136 strncpy(mms_data->smil.szFilePath, value, sizeof(mms_data->smil.szFilePath) - 1 );
1137 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_ID_STR) {
1138 strncpy(mms_data->smil.szContentID, value, sizeof(mms_data->smil.szContentID) - 1 );
1139 } else if (field == MSG_MMS_SMIL_MULTIPART_CONTENT_LOCATION_STR) {
1140 strncpy(mms_data->smil.szContentLocation, value, sizeof(mms_data->smil.szContentLocation) - 1 );
1142 err = MSG_ERR_INVALID_PARAMETER;
1146 case MSG_STRUCT_MULTIPART_INFO:
1147 err = msg_multipart_set_str_value(msg_struct->data, field, value, size);
1151 err = MSG_ERR_INVALID_PARAMETER;
1158 int msg_mms_set_bool_value(msg_struct_s *msg_struct, int field, bool value)
1160 msg_error_t err = MSG_SUCCESS;
1162 switch (msg_struct->type) {
1163 case MSG_STRUCT_MMS: {
1164 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
1165 if (field == MSG_MMS_ROOTLAYOUT_WIDTH_PERCENT_BOOL)
1166 mms_data->rootlayout.width.bUnitPercent = value;
1167 else if (field == MSG_MMS_ROOTLAYOUT_HEIGHT_PERCENT_BOOL)
1168 mms_data->rootlayout.height.bUnitPercent = value;
1170 err = MSG_ERR_INVALID_PARAMETER;
1173 case MSG_STRUCT_MMS_REGION: {
1174 MMS_SMIL_REGION *mms_region_data = (MMS_SMIL_REGION *)msg_struct->data;
1175 if (field == MSG_MMS_REGION_LENGTH_LEFT_PERCENT_BOOL)
1176 mms_region_data->nLeft.bUnitPercent = value;
1177 else if (field == MSG_MMS_REGION_LENGTH_TOP_PERCENT_BOOL)
1178 mms_region_data->nTop.bUnitPercent = value;
1179 else if (field == MSG_MMS_REGION_LENGTH_WIDTH_PERCENT_BOOL)
1180 mms_region_data->width.bUnitPercent = value;
1181 else if (field == MSG_MMS_REGION_LENGTH_HEIGHT_PERCENT_BOOL)
1182 mms_region_data->height.bUnitPercent = value;
1184 err = MSG_ERR_INVALID_PARAMETER;
1187 case MSG_STRUCT_MMS_SMIL_TEXT: {
1188 MmsSmilText *mms_smil_text_data = (MmsSmilText *)msg_struct->data;
1189 if (field == MSG_MMS_SMIL_TEXT_BOLD_BOOL)
1190 mms_smil_text_data->bBold = value;
1191 else if (field == MSG_MMS_SMIL_TEXT_UNDERLINE_BOOL)
1192 mms_smil_text_data->bUnderLine = value;
1193 else if (field == MSG_MMS_SMIL_TEXT_ITALIC_BOOL)
1194 mms_smil_text_data->bItalic = value;
1195 else if (field == MSG_MMS_SMIL_TEXT_REVERSE_BOOL)
1196 mms_smil_text_data->bReverse = value;
1198 err = MSG_ERR_INVALID_PARAMETER;
1202 err = MSG_ERR_INVALID_PARAMETER;
1208 int msg_mms_set_struct_handle(msg_struct_s *msg_struct, int field, msg_struct_s *value)
1210 msg_error_t err = MSG_SUCCESS;
1212 switch (msg_struct->type) {
1213 case MSG_STRUCT_MMS_MEDIA: {
1214 MMS_MEDIA_HIDDEN_S *mms_media_data = (MMS_MEDIA_HIDDEN_S *)msg_struct->data;
1216 if (field == MSG_MMS_MEDIA_SMIL_TEXT_HND)
1217 memcpy(mms_media_data->pText->data, value->data, sizeof(MmsSmilText));
1218 else if (field == MSG_MMS_MEDIA_SMIL_AVI_HND)
1219 memcpy(mms_media_data->pAVI->data, value->data, sizeof(MmsSmilAVI));
1221 err = MSG_ERR_INVALID_PARAMETER;
1225 err = MSG_ERR_INVALID_PARAMETER;
1231 int msg_mms_list_append(msg_struct_t msg_struct_handle, int field, msg_struct_t *item)
1233 msg_error_t err = MSG_SUCCESS;
1234 msg_struct_s *msg_struct = (msg_struct_s *)msg_struct_handle;
1236 msg_struct_s *msg_struct_item = NULL;
1237 switch (msg_struct->type) {
1238 case MSG_STRUCT_MMS: {
1239 MMS_DATA_HIDDEN_S *mms_data = (MMS_DATA_HIDDEN_S *)msg_struct->data;
1241 if (field == MSG_STRUCT_MMS_PAGE) {
1242 msg_struct_item = msg_mms_create_struct(MSG_STRUCT_MMS_PAGE);
1243 mms_data->pagelist = g_list_append(mms_data->pagelist, msg_struct_item);
1244 *item = (msg_struct_t)msg_struct_item;
1245 } else if (field == MSG_STRUCT_MMS_REGION) {
1246 msg_struct_item = msg_mms_create_struct(MSG_STRUCT_MMS_REGION);
1247 mms_data->regionlist = g_list_append(mms_data->regionlist, msg_struct_item);
1248 *item = (msg_struct_t)msg_struct_item;
1249 } else if (field == MSG_STRUCT_MMS_ATTACH) {
1250 msg_struct_item = msg_mms_create_struct(MSG_STRUCT_MMS_ATTACH);
1251 mms_data->attachlist = g_list_append(mms_data->attachlist, msg_struct_item);
1252 *item = (msg_struct_t)msg_struct_item;
1253 } else if (field == MSG_STRUCT_MMS_TRANSITION) {
1254 msg_struct_item = msg_mms_create_struct(MSG_STRUCT_MMS_TRANSITION);
1255 mms_data->transitionlist = g_list_append(mms_data->transitionlist, msg_struct_item);
1256 *item = (msg_struct_t)msg_struct_item;
1257 } else if (field == MSG_STRUCT_MMS_META) {
1258 msg_struct_item = msg_mms_create_struct(MSG_STRUCT_MMS_META);
1259 mms_data->metalist = g_list_append(mms_data->metalist, msg_struct_item);
1260 *item = (msg_struct_t)msg_struct_item;
1261 } else if (field == MSG_MMS_MULTIPART_LIST_HND) {
1262 msg_struct_item = (msg_struct_s *)msg_create_struct(MSG_STRUCT_MULTIPART_INFO);
1263 mms_data->multipartlist = g_list_append(mms_data->multipartlist, msg_struct_item);
1264 *item = (msg_struct_t)msg_struct_item;
1266 err = MSG_ERR_INVALID_PARAMETER;
1270 case MSG_STRUCT_MMS_PAGE: {
1271 MMS_PAGE_S *mms_page_data = (MMS_PAGE_S *)msg_struct->data;
1273 if (field == MSG_STRUCT_MMS_MEDIA) {
1274 msg_struct_item = msg_mms_create_struct(field);
1275 mms_page_data->medialist = g_list_append(mms_page_data->medialist, msg_struct_item);
1276 *item = (msg_struct_t)msg_struct_item;
1278 err = MSG_ERR_INVALID_PARAMETER;
1283 err = MSG_ERR_INVALID_PARAMETER;
1290 void convert_to_media_data(const msg_struct_s *pSrc, MMS_MEDIA_S *pDest)
1292 const MMS_MEDIA_HIDDEN_S *src_media = (MMS_MEDIA_HIDDEN_S *)pSrc->data;
1293 MMS_MEDIA_S *dst_media = pDest;
1295 dst_media->mediatype = src_media->mediatype;
1296 memcpy(dst_media->szSrc, src_media->szSrc, MSG_FILEPATH_LEN_MAX);
1297 memcpy(dst_media->szFileName, src_media->szFileName, MSG_FILEPATH_LEN_MAX);
1298 memcpy(dst_media->szFilePath, src_media->szFilePath, MSG_FILEPATH_LEN_MAX);
1299 memcpy(dst_media->szContentID, src_media->szContentID, MSG_MSG_ID_LEN);
1300 memcpy(dst_media->regionId, src_media->regionId, MAX_SMIL_REGION_ID);
1301 memcpy(dst_media->szAlt, src_media->szAlt, MAX_SMIL_ALT_LEN);
1302 memcpy(dst_media->szDrm2FullPath, src_media->szDrm2FullPath, MSG_FILEPATH_LEN_MAX);
1303 memcpy(dst_media->szContentType, src_media->szContentType, MSG_MSG_ID_LEN);
1304 memcpy(dst_media->szContentLocation, src_media->szContentLocation, MSG_MSG_ID_LEN);
1305 dst_media->drmType = src_media->drmType;
1307 if (src_media->mediatype == MMS_SMIL_MEDIA_TEXT) {
1308 msg_struct_s *smil_struct = (msg_struct_s *)src_media->pText;
1309 MmsSmilText *smiltext = (MmsSmilText *)smil_struct->data;
1310 memcpy(&dst_media->sMedia.sText, smiltext, sizeof(MmsSmilText));
1312 msg_struct_s *smil_struct = (msg_struct_s *)src_media->pAVI;
1313 MmsSmilAVI *smilavi = (MmsSmilAVI *)smil_struct->data;
1314 memcpy(&dst_media->sMedia.sAVI, smilavi, sizeof(MmsSmilAVI));
1318 void convert_from_media_data(const MMS_MEDIA_S *pSrc, msg_struct_s *pDest)
1320 const MMS_MEDIA_S *src_media = pSrc;
1321 MMS_MEDIA_HIDDEN_S *dst_media = (MMS_MEDIA_HIDDEN_S *)pDest->data;
1323 dst_media->mediatype = src_media->mediatype;
1324 memcpy(dst_media->szSrc, src_media->szSrc, MSG_FILEPATH_LEN_MAX);
1325 memcpy(dst_media->szFileName, src_media->szFileName, MSG_FILEPATH_LEN_MAX);
1326 memcpy(dst_media->szFilePath, src_media->szFilePath, MSG_FILEPATH_LEN_MAX);
1327 memcpy(dst_media->szContentID, src_media->szContentID, MSG_MSG_ID_LEN);
1328 memcpy(dst_media->regionId, src_media->regionId, MAX_SMIL_REGION_ID);
1329 memcpy(dst_media->szAlt, src_media->szAlt, MAX_SMIL_ALT_LEN);
1330 memcpy(dst_media->szDrm2FullPath, src_media->szDrm2FullPath, MSG_FILEPATH_LEN_MAX);
1331 memcpy(dst_media->szContentType, src_media->szContentType, MSG_MSG_ID_LEN);
1332 memcpy(dst_media->szContentLocation, src_media->szContentLocation, MSG_MSG_ID_LEN);
1333 dst_media->drmType = src_media->drmType;
1335 if (src_media->mediatype == MMS_SMIL_MEDIA_TEXT) {
1336 msg_struct_s *dst_smil_struct = (msg_struct_s *)dst_media->pText;
1337 MmsSmilText *dst_smiltext = (MmsSmilText *)dst_smil_struct->data;
1338 memcpy(dst_smiltext, &src_media->sMedia.sText, sizeof(MmsSmilText));
1340 msg_struct_s *dst_smil_struct = (msg_struct_s *)dst_media->pAVI;
1341 MmsSmilAVI *dst_smilavi = (MmsSmilAVI *)dst_smil_struct->data;
1342 memcpy(dst_smilavi, &src_media->sMedia.sAVI, sizeof(MmsSmilAVI));
1346 void convert_to_mmsdata2(MMS_DATA_HIDDEN_S *pSrcMms, MMS_MESSAGE_DATA_S *pDest)
1350 pDest->pageCnt = g_list_length(pSrcMms->pagelist);
1352 for (i = 0; i < pDest->pageCnt; i++) {
1353 MMS_PAGE_S *page = (MMS_PAGE_S *)calloc(1, sizeof(MMS_PAGE_S));
1354 MMS_PAGE_S *src_page = (MMS_PAGE_S *)get_msg_struct_data((msg_struct_s *)g_list_nth_data(pSrcMms->pagelist, i));
1356 page->mediaCnt = g_list_length(src_page->medialist);
1358 for (j = 0; j < page->mediaCnt; j++) {
1359 MMS_MEDIA_S *dst_media = (MMS_MEDIA_S *)calloc(1, sizeof(MMS_MEDIA_S));
1360 msg_struct_s *src_media_s = (msg_struct_s *)g_list_nth_data(src_page->medialist, j);
1363 convert_to_media_data(src_media_s, dst_media);
1365 page->medialist = g_list_append(page->medialist, dst_media);
1369 page->nDur = src_page->nDur;
1370 page->nBegin = src_page->nBegin;
1371 page->nEnd = src_page->nEnd;
1372 page->nMin = src_page->nMin;
1373 page->nMax = src_page->nMax;
1374 page->nRepeat = src_page->nRepeat;
1376 pDest->pagelist = g_list_append(pDest->pagelist, page);
1380 pDest->regionCnt = g_list_length(pSrcMms->regionlist);
1382 for (i = 0; i < pDest->regionCnt; i++) {
1383 MMS_SMIL_REGION *region = (MMS_SMIL_REGION *)calloc(1, sizeof(MMS_SMIL_REGION));
1384 MMS_SMIL_REGION *src_region = (MMS_SMIL_REGION *)get_msg_struct_data((msg_struct_s *)g_list_nth_data(pSrcMms->regionlist, i));
1386 memcpy(region, src_region, sizeof(MMS_SMIL_REGION));
1387 pDest->regionlist = g_list_append(pDest->regionlist, region);
1391 pDest->attachCnt = g_list_length(pSrcMms->attachlist);
1393 for (i = 0; i < pDest->attachCnt; i++) {
1394 MMS_ATTACH_S *attach = (MMS_ATTACH_S *)calloc(1, sizeof(MMS_ATTACH_S));
1395 MMS_ATTACH_S *src_attach = (MMS_ATTACH_S *)get_msg_struct_data((msg_struct_s *)g_list_nth_data(pSrcMms->attachlist, i));
1397 memcpy(attach, src_attach, sizeof(MMS_ATTACH_S));
1398 pDest->attachlist = g_list_append(pDest->attachlist, attach);
1402 pDest->transitionCnt = g_list_length(pSrcMms->transitionlist);
1404 for (i = 0; i < pDest->transitionCnt; i++) {
1405 MMS_SMIL_TRANSITION *transition = (MMS_SMIL_TRANSITION *)calloc(1, sizeof(MMS_SMIL_TRANSITION));
1406 MMS_SMIL_TRANSITION *src_transition = (MMS_SMIL_TRANSITION *)get_msg_struct_data((msg_struct_s *)g_list_nth_data(pSrcMms->transitionlist, i));
1408 memcpy(transition, src_transition, sizeof(MMS_SMIL_TRANSITION));
1409 pDest->transitionlist = g_list_append(pDest->transitionlist, transition);
1413 pDest->metaCnt = g_list_length(pSrcMms->metalist);
1415 for (i = 0; i < pDest->metaCnt; i++) {
1416 MMS_SMIL_META *meta = (MMS_SMIL_META *)calloc(1, sizeof(MMS_SMIL_META));
1417 MMS_SMIL_META *src_meta = (MMS_SMIL_META *)get_msg_struct_data((msg_struct_s *)g_list_nth_data(pSrcMms->metalist, i));
1419 memcpy(meta, src_meta, sizeof(MMS_SMIL_META));
1420 pDest->metalist = g_list_append(pDest->metalist, meta);
1424 memcpy(&pDest->rootlayout, &pSrcMms->rootlayout, sizeof(MMS_SMIL_ROOTLAYOUT));
1426 memcpy(&pDest->msgAppId, &pSrcMms->msgAppId, sizeof(MMS_APPID_INFO_S));
1427 memcpy(&pDest->header, &pSrcMms->header, sizeof(MMS_HEADER_DATA_S));
1428 memcpy(&pDest->smil, &pSrcMms->smil, sizeof(MMS_MULTIPART_DATA_S));
1431 void convert_from_mmsdata2(const MMS_MESSAGE_DATA_S *pSrc, MMS_DATA_HIDDEN_S *pDestMms)
1435 for (i = 0; i < pSrc->pageCnt; i++) {
1436 msg_struct_s *page_struct = msg_mms_create_struct(MSG_STRUCT_MMS_PAGE);
1437 MMS_PAGE_S *page = (MMS_PAGE_S *)page_struct->data;
1439 MMS_PAGE_S *src_page = (MMS_PAGE_S *)g_list_nth_data(pSrc->pagelist, i);
1440 page->mediaCnt = g_list_length(src_page->medialist);
1442 for (j = 0; j < page->mediaCnt; j++) {
1443 msg_struct_s *dst_media_s = msg_mms_create_struct(MSG_STRUCT_MMS_MEDIA);
1445 MMS_MEDIA_S *src_media = (MMS_MEDIA_S *)g_list_nth_data(src_page->medialist, j);
1447 convert_from_media_data(src_media, dst_media_s);
1449 page->medialist = g_list_append(page->medialist, dst_media_s);
1452 page->nDur = src_page->nDur;
1453 page->nBegin = src_page->nBegin;
1454 page->nEnd = src_page->nEnd;
1455 page->nMin = src_page->nMin;
1456 page->nMax = src_page->nMax;
1457 page->nRepeat = src_page->nRepeat;
1459 pDestMms->pagelist = g_list_append(pDestMms->pagelist, page_struct);
1462 for (i = 0; i < pSrc->regionCnt; i++) {
1463 msg_struct_s *region_struct = msg_mms_create_struct(MSG_STRUCT_MMS_REGION);
1464 MMS_SMIL_REGION *region = (MMS_SMIL_REGION *)region_struct->data;
1465 MMS_SMIL_REGION *src_region = (MMS_SMIL_REGION *)g_list_nth_data(pSrc->regionlist, i);
1466 memcpy(region, src_region, sizeof(MMS_SMIL_REGION));
1467 pDestMms->regionlist = g_list_append(pDestMms->regionlist, region_struct);
1470 for (i = 0; i < pSrc->attachCnt; i++) {
1471 msg_struct_s *attach_struct = msg_mms_create_struct(MSG_STRUCT_MMS_ATTACH);
1472 MMS_ATTACH_S *attach = (MMS_ATTACH_S *)attach_struct->data;
1473 MMS_ATTACH_S *src_attach = (MMS_ATTACH_S *)g_list_nth_data(pSrc->attachlist, i);
1474 memcpy(attach, src_attach, sizeof(MMS_ATTACH_S));
1475 pDestMms->attachlist = g_list_append(pDestMms->attachlist, attach_struct);
1478 for (i = 0; i < pSrc->transitionCnt; i++) {
1479 msg_struct_s *transition_struct = msg_mms_create_struct(MSG_STRUCT_MMS_TRANSITION);
1480 MMS_SMIL_TRANSITION *transition = (MMS_SMIL_TRANSITION *)transition_struct->data;
1481 MMS_SMIL_TRANSITION *src_transition = (MMS_SMIL_TRANSITION *)g_list_nth_data(pSrc->transitionlist, i);
1482 memcpy(transition, src_transition, sizeof(MMS_SMIL_TRANSITION));
1483 pDestMms->transitionlist = g_list_append(pDestMms->transitionlist, transition_struct);
1486 for (i = 0; i < pSrc->metaCnt; i++) {
1487 msg_struct_s *meta_struct = msg_mms_create_struct(MSG_STRUCT_MMS_META);
1488 MMS_SMIL_META *meta = (MMS_SMIL_META *)meta_struct->data;
1489 MMS_SMIL_META *src_meta = (MMS_SMIL_META *)g_list_nth_data(pSrc->metalist, i);
1491 memcpy(meta, src_meta, sizeof(MMS_SMIL_META));
1492 pDestMms->metalist = g_list_append(pDestMms->metalist, meta_struct);
1495 memcpy(&pDestMms->rootlayout, &pSrc->rootlayout, sizeof(MMS_SMIL_ROOTLAYOUT));
1497 memcpy(&pDestMms->msgAppId, &pSrc->msgAppId, sizeof(MMS_APPID_INFO_S));
1499 memcpy(&pDestMms->header, &pSrc->header, sizeof(MMS_HEADER_DATA_S));
1500 memcpy(&pDestMms->smil, &pSrc->smil, sizeof(MMS_MULTIPART_DATA_S));
1504 int msg_multipart_get_str_value(void *data, int field, char *value, int size)
1506 if (!data || !value)
1507 return MSG_ERR_NULL_POINTER;
1509 int ret = MSG_SUCCESS;
1511 MMS_MULTIPART_DATA_S *msg_data = (MMS_MULTIPART_DATA_S *)data;
1514 case MSG_MMS_MULTIPART_CONTENT_TYPE_STR:
1515 strncpy(value, msg_data->szContentType, size);
1517 case MSG_MMS_MULTIPART_NAME_STR:
1518 strncpy(value, msg_data->szFileName, size);
1520 case MSG_MMS_MULTIPART_FILEPATH_STR:
1521 strncpy(value, msg_data->szFilePath, size);
1523 case MSG_MMS_MULTIPART_THUMBNAIL_FILEPATH_STR:
1524 strncpy(value, msg_data->szThumbFilePath, size);
1526 case MSG_MMS_MULTIPART_CONTENT_ID_STR:
1527 strncpy(value, msg_data->szContentID, size);
1529 case MSG_MMS_MULTIPART_CONTENT_LOCATION_STR:
1530 strncpy(value, msg_data->szContentLocation, size);
1534 ret = MSG_ERR_INVALID_PARAMETER;
1541 int msg_multipart_get_int_value(void *data, int field, int *value)
1543 if (!data || !value)
1544 return MSG_ERR_NULL_POINTER;
1546 int ret = MSG_SUCCESS;
1548 MMS_MULTIPART_DATA_S *msg_data = (MMS_MULTIPART_DATA_S *)data;
1551 case MSG_MMS_MULTIPART_TCS_LEVEL_INT:
1552 *value = msg_data->tcs_bc_level;
1554 case MSG_MMS_MULTIPART_MALWARE_ALLOW_INT:
1555 *value = msg_data->malware_allow;
1558 ret = MSG_ERR_INVALID_PARAMETER;
1565 int msg_multipart_set_str_value(void *data, int field, const char *value, int size)
1567 if (!data || !value)
1568 return MSG_ERR_NULL_POINTER;
1570 int ret = MSG_SUCCESS;
1572 MMS_MULTIPART_DATA_S *msg_data = (MMS_MULTIPART_DATA_S *)data;
1574 /* CID 41980: Reducing the size argument to strncpy calls to accomodate string termination '\0' in case source string is larger than size */
1576 case MSG_MMS_MULTIPART_CONTENT_TYPE_STR:
1577 strncpy(msg_data->szContentType, value, MSG_MSG_ID_LEN);
1579 case MSG_MMS_MULTIPART_NAME_STR:
1580 strncpy(msg_data->szFileName, value, MSG_FILENAME_LEN_MAX);
1582 case MSG_MMS_MULTIPART_FILEPATH_STR:
1583 strncpy(msg_data->szFilePath, value, MSG_FILEPATH_LEN_MAX);
1585 case MSG_MMS_MULTIPART_THUMBNAIL_FILEPATH_STR:
1586 strncpy(msg_data->szThumbFilePath, value, MSG_FILEPATH_LEN_MAX);
1588 case MSG_MMS_MULTIPART_CONTENT_ID_STR:
1589 strncpy(msg_data->szContentID, value, MSG_MSG_ID_LEN);
1591 case MSG_MMS_MULTIPART_CONTENT_LOCATION_STR:
1592 strncpy(msg_data->szContentLocation, value, MSG_MSG_ID_LEN);
1595 ret = MSG_ERR_INVALID_PARAMETER;
1601 void convert_to_hidden_mmsdata(MMS_DATA_S *pSrc, msg_struct_s *pDest)
1603 MMS_DATA_HIDDEN_S *pDestMms = (MMS_DATA_HIDDEN_S *)pDest->data;
1605 MMS_MESSAGE_DATA_S *MmsMessageData = NULL;
1606 unique_ptr<MMS_MESSAGE_DATA_S*, void(*)(MMS_MESSAGE_DATA_S**)> buf(&MmsMessageData, unique_ptr_deleter);
1607 MmsMessageData = (MMS_MESSAGE_DATA_S *)new char[sizeof(MMS_MESSAGE_DATA_S)];
1608 memset(MmsMessageData, 0x00, sizeof(MMS_MESSAGE_DATA_S));
1610 MsgMmsConvertMmsDataToMmsMessageData(pSrc, MmsMessageData);
1612 convert_from_mmsdata2(MmsMessageData, pDestMms);
1614 MsgMmsReleaseMmsLists(MmsMessageData);
1617 memcpy(&pDestMms->header, pSrc->header, sizeof(MMS_HEADER_DATA_S));
1621 memcpy(&pDestMms->smil, pSrc->smil, sizeof(MMS_MULTIPART_DATA_S));
1622 pDestMms->smil.type = MIME_APPLICATION_SMIL;
1623 pDestMms->smil.pMultipartData = (char *)calloc(1, pDestMms->smil.nMultipartDataLen+1);
1624 if (pDestMms->smil.pMultipartData)
1625 memcpy(pDestMms->smil.pMultipartData, pSrc->smil->pMultipartData, pDestMms->smil.nMultipartDataLen);
1628 if (pSrc->multipartlist) {
1629 int list_cnt = g_list_length(pSrc->multipartlist);
1631 for (int i = 0; i < list_cnt; i++) {
1632 MMS_MULTIPART_DATA_S *src_multipart = (MMS_MULTIPART_DATA_S *)g_list_nth_data(pSrc->multipartlist, i);
1634 if (src_multipart) {
1635 msg_struct_s *multipart_struct = (msg_struct_s *)msg_create_struct(MSG_STRUCT_MULTIPART_INFO);
1637 if (multipart_struct) {
1638 MMS_MULTIPART_DATA_S *dst_multipart = (MMS_MULTIPART_DATA_S*)multipart_struct->data;
1639 memcpy(dst_multipart, src_multipart, sizeof(MMS_MULTIPART_DATA_S));
1640 pDestMms->multipartlist = g_list_append(pDestMms->multipartlist, multipart_struct);
1647 void convert_from_hidden_mmsdata(msg_struct_s *pSrc, MMS_DATA_S *pDest)
1649 MMS_DATA_HIDDEN_S *pSrcMms = (MMS_DATA_HIDDEN_S *)pSrc->data;
1651 MMS_MESSAGE_DATA_S *MmsMessageData = NULL;
1652 unique_ptr<MMS_MESSAGE_DATA_S*, void(*)(MMS_MESSAGE_DATA_S**)> buf(&MmsMessageData, unique_ptr_deleter);
1653 MmsMessageData = (MMS_MESSAGE_DATA_S *)new char[sizeof(MMS_MESSAGE_DATA_S)];
1654 memset(MmsMessageData, 0x00, sizeof(MMS_MESSAGE_DATA_S));
1656 convert_to_mmsdata2(pSrcMms, MmsMessageData);
1658 MsgMmsConvertMmsMessageDataToMmsData(MmsMessageData, pDest);
1660 MsgMmsReleaseMmsLists(MmsMessageData);
1663 void __msg_mms_data_struct_init(MMS_DATA_HIDDEN_S *pMmsDataHidden)
1665 if (pMmsDataHidden) {
1666 pMmsDataHidden->pagelist = NULL;
1667 pMmsDataHidden->regionlist = NULL;
1668 pMmsDataHidden->attachlist = NULL;
1669 pMmsDataHidden->transitionlist = NULL;
1670 pMmsDataHidden->metalist = NULL;
1672 MsgMmsInitHeader(&pMmsDataHidden->header);
1673 MsgMmsInitMultipart(&pMmsDataHidden->smil);
1674 pMmsDataHidden->smil.type = MIME_APPLICATION_SMIL;
1675 snprintf(pMmsDataHidden->smil.szContentType, sizeof(pMmsDataHidden->smil.szContentType), "%s", "application/smil");