2 * Copyright 2012-2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include "MsgMmsTypes.h"
23 #include "MsgMmsMessage.h"
26 static void __release_glist_element(gpointer data, gpointer user_data);
27 static void __release_page_element(gpointer data, gpointer user_data);
28 static msg_error_t __releasePageList(MMS_MESSAGE_DATA_S *pMsgData);
29 static msg_error_t __releaseRegionList(MMS_MESSAGE_DATA_S *pMsgData);
30 static msg_error_t __releaseAttachList(MMS_MESSAGE_DATA_S *pMsgData);
31 static msg_error_t __releaseTransitionList(MMS_MESSAGE_DATA_S *pMsgData);
32 static msg_error_t __releaseMetaList(MMS_MESSAGE_DATA_S *pMsgData);
34 void __release_glist_element(gpointer data, gpointer user_data)
41 void __release_page_element(gpointer data, gpointer user_data)
44 MMS_PAGE_S *page = (MMS_PAGE_S *)data;
46 if (page->medialist) {
47 MMS_MEDIA_S *media = NULL;
48 int mediaCnt = g_list_length(page->medialist);
50 for (int i = 0; i < mediaCnt; i++) {
51 media = (MMS_MEDIA_S *)g_list_nth_data(page->medialist, i);
56 g_list_free(page->medialist);
57 page->medialist = NULL;
65 msg_error_t __releasePageList(MMS_MESSAGE_DATA_S *pMsgData)
67 if (pMsgData == NULL) {
68 MSG_DEBUG("pMsgData is NULL");
69 return MSG_ERR_INVALID_PARAMETER;
72 if (pMsgData->pagelist) {
73 g_list_foreach(pMsgData->pagelist, __release_page_element, NULL);
74 g_list_free(pMsgData->pagelist);
75 pMsgData->pagelist = NULL;
78 pMsgData->pageCnt = 0;
83 msg_error_t __releaseRegionList(MMS_MESSAGE_DATA_S *pMsgData)
85 if (pMsgData == NULL) {
86 MSG_DEBUG("pMsgData is NULL");
87 return MSG_ERR_INVALID_PARAMETER;
90 if (pMsgData->regionlist) {
91 g_list_foreach(pMsgData->regionlist, __release_glist_element, NULL);
92 g_list_free(pMsgData->regionlist);
93 pMsgData->regionlist = NULL;
96 pMsgData->regionCnt = 0;
101 msg_error_t __releaseAttachList(MMS_MESSAGE_DATA_S *pMsgData)
103 if (pMsgData == NULL) {
104 MSG_DEBUG("pMsgData is NULL");
105 return MSG_ERR_INVALID_PARAMETER;
108 if (pMsgData->attachlist) {
109 g_list_foreach(pMsgData->attachlist, __release_glist_element, NULL);
110 g_list_free(pMsgData->attachlist);
111 pMsgData->attachlist = NULL;
114 pMsgData->attachCnt = 0;
119 msg_error_t __releaseTransitionList(MMS_MESSAGE_DATA_S *pMsgData)
121 if (pMsgData == NULL) {
122 MSG_DEBUG("pMsgData is NULL");
123 return MSG_ERR_INVALID_PARAMETER;
126 if (pMsgData->transitionlist) {
127 g_list_foreach(pMsgData->transitionlist, __release_glist_element, NULL);
128 g_list_free(pMsgData->transitionlist);
129 pMsgData->transitionlist = NULL;
132 pMsgData->transitionCnt = 0;
137 msg_error_t __releaseMetaList(MMS_MESSAGE_DATA_S *pMsgData)
139 if (pMsgData == NULL) {
140 MSG_DEBUG("pMsgData is NULL");
141 return MSG_ERR_INVALID_PARAMETER;
144 if (pMsgData->metalist) {
145 g_list_foreach(pMsgData->metalist, __release_glist_element, NULL);
146 g_list_free(pMsgData->metalist);
147 pMsgData->metalist = NULL;
150 pMsgData->metaCnt = 0;
155 void MsgMmsReleaseMmsLists(MMS_MESSAGE_DATA_S *pMsgData)
157 __releasePageList(pMsgData);
158 __releaseRegionList(pMsgData);
159 __releaseAttachList(pMsgData);
160 __releaseTransitionList(pMsgData);
161 __releaseMetaList(pMsgData);
164 msg_error_t _MsgMmsAddRegion(MMS_MESSAGE_DATA_S *pMsgData, MMS_SMIL_REGION* pRegion)
166 if(pMsgData == NULL || pRegion == NULL)
167 return MSG_ERR_INVALID_PARAMETER;
169 pMsgData->regionlist = g_list_append(pMsgData->regionlist, pRegion);
170 pMsgData->regionCnt++;
175 msg_error_t _MsgMmsAddPage(MMS_MESSAGE_DATA_S *pMsgData, MMS_PAGE_S *pPage)
177 if(pMsgData == NULL || pPage == NULL)
178 return MSG_ERR_INVALID_PARAMETER;
180 pMsgData->pagelist = g_list_append(pMsgData->pagelist, pPage);
182 MSG_DEBUG("MmsData's Page Count : %d", pMsgData->pageCnt);
186 msg_error_t _MsgMmsAddMedia(MMS_PAGE_S* pPage, MMS_MEDIA_S *pMedia)
188 if(pPage == NULL || pMedia == NULL)
189 return MSG_ERR_INVALID_PARAMETER;
191 pPage->medialist = g_list_append(pPage->medialist, pMedia);
193 MSG_DEBUG("Page's media count: %d", pPage->mediaCnt);
197 msg_error_t _MsgMmsAddTransition(MMS_MESSAGE_DATA_S *pMsgData, MMS_SMIL_TRANSITION* pTransition)
199 if(pMsgData == NULL || pTransition == NULL)
200 return MSG_ERR_INVALID_PARAMETER;
202 pMsgData->transitionlist = g_list_append(pMsgData->transitionlist, pTransition);
203 pMsgData->transitionCnt++;
208 msg_error_t _MsgMmsAddMeta(MMS_MESSAGE_DATA_S *pMsgData, MMS_SMIL_META* pMeta)
210 if(pMsgData == NULL || pMeta == NULL)
211 return MSG_ERR_INVALID_PARAMETER;
213 pMsgData->metalist = g_list_append(pMsgData->metalist, pMeta);
219 msg_error_t _MsgMmsAddAttachment(MMS_MESSAGE_DATA_S *pMsgData, MMS_ATTACH_S *pAttach)
221 if(pMsgData == NULL || pAttach == NULL)
222 return MSG_ERR_INVALID_PARAMETER;
224 pMsgData->attachlist = g_list_append(pMsgData->attachlist, pAttach);
225 pMsgData->attachCnt++;
230 int _MsgMmsGetPageCount(MMS_MESSAGE_DATA_S *pMsgData)
232 if (pMsgData == NULL) {
233 MSG_DEBUG("pMsgData is NULL");
239 if (pMsgData->pagelist)
240 count = g_list_length(pMsgData->pagelist);
242 MSG_DEBUG("Page Count: %d", count);
246 MMS_PAGE_S *_MsgMmsGetPage(MMS_MESSAGE_DATA_S *pMsgData, int pageIdx)
248 if (pMsgData == NULL) {
249 MSG_DEBUG("pMsgData is NULL");
253 MMS_PAGE_S *page = NULL;
255 if (pMsgData->pagelist)
256 page = (MMS_PAGE_S *)g_list_nth_data(pMsgData->pagelist, pageIdx);
261 int _MsgMmsGetAttachCount(MMS_MESSAGE_DATA_S *pMsgData)
263 if (pMsgData == NULL) {
264 MSG_DEBUG("pMsgData is NULL");
270 if (pMsgData->attachlist)
271 count = g_list_length(pMsgData->attachlist);
273 MSG_DEBUG("Attachment Count: %d", count);
277 MMS_ATTACH_S *_MsgMmsGetAttachment(MMS_MESSAGE_DATA_S *pMsgData, int attachIdx)
279 if (pMsgData == NULL) {
280 MSG_DEBUG("pMsgData is NULL");
284 MMS_ATTACH_S *attach = NULL;
285 if (pMsgData->attachlist)
286 attach = (MMS_ATTACH_S *)g_list_nth_data(pMsgData->attachlist, attachIdx);
291 MMS_SMIL_REGION *_MsgMmsGetSmilRegion(MMS_MESSAGE_DATA_S *pMsgData, int regionIdx)
293 if (pMsgData == NULL) {
294 MSG_DEBUG("pMsgData is NULL");
298 MMS_SMIL_REGION *region = NULL;
300 if (pMsgData->regionlist)
301 region = (MMS_SMIL_REGION *)g_list_nth_data(pMsgData->regionlist, regionIdx);
306 MMS_MEDIA_S *_MsgMmsGetMedia(MMS_PAGE_S *pPage, int mediaIdx)
309 MSG_FATAL("pPage is NULL");
313 if (mediaIdx > pPage->mediaCnt || mediaIdx < 0) {
314 MSG_FATAL("Invalid media index = %d", mediaIdx);
318 MMS_MEDIA_S *media = NULL;
319 if (pPage->medialist)
320 media = (MMS_MEDIA_S *)g_list_nth_data(pPage->medialist, mediaIdx);
326 int _MsgMmsGetTransitionCount(MMS_MESSAGE_DATA_S *pMsgData)
328 if (pMsgData == NULL) {
329 MSG_DEBUG("pMsgData is NULL");
335 if (pMsgData->transitionlist)
336 count = g_list_length(pMsgData->transitionlist);
338 MSG_DEBUG("Transition Count: %d", count);
342 MMS_SMIL_TRANSITION *_MsgMmsGetTransition(MMS_MESSAGE_DATA_S *pMsgData, int transitionIdx)
344 if (pMsgData == NULL) {
345 MSG_DEBUG("pMsgData is NULL");
349 MMS_SMIL_TRANSITION *transition = NULL;
350 if (pMsgData->transitionlist)
351 transition = (MMS_SMIL_TRANSITION *)g_list_nth_data(pMsgData->transitionlist, transitionIdx);
356 MMS_SMIL_META *_MsgMmsGetMeta(MMS_MESSAGE_DATA_S *pMsgData, int metaIdx)
358 if (pMsgData == NULL) {
359 MSG_DEBUG("pMsgData is NULL");
363 MMS_SMIL_META *meta = NULL;
365 if (pMsgData->metalist)
366 meta = (MMS_SMIL_META *)g_list_nth_data(pMsgData->metalist, metaIdx);
371 int _MsgMmsGetMetaCount(MMS_MESSAGE_DATA_S *pMsgData)
373 if (pMsgData == NULL) {
374 MSG_DEBUG("pMsgData is NULL");
380 if (pMsgData->metalist)
381 count = g_list_length(pMsgData->metalist);
383 MSG_DEBUG("Meta Count: %d", count);
387 bool _MsgMmsSetRootLayout(MMS_MESSAGE_DATA_S *pMsgData, MMS_SMIL_ROOTLAYOUT *pRootlayout)
389 memcpy(&pMsgData->rootlayout, pRootlayout, sizeof(MMS_SMIL_ROOTLAYOUT));
393 char* _MsgMmsSerializeMessageData(const MMS_MESSAGE_DATA_S *pMsgData, size_t *pSize)
397 if (pMsgData == NULL)
405 bufsize += sizeof(int); // Page cnt
407 pageCnt = pMsgData->pageCnt;
409 if (pMsgData->pagelist) {
411 for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) {
415 MMS_PAGE_S *page = (MMS_PAGE_S *)g_list_nth_data(pMsgData->pagelist, pageIdx);
417 mediaCnt = page->mediaCnt;
419 bufsize += sizeof(int); // Media cnt
421 if (page->medialist) {
422 bufsize += sizeof(MMS_MEDIA_S) * mediaCnt;
425 bufsize += sizeof(int) * 6;//Dur, Begin, End, Min, Max, Repeat
429 bufsize += sizeof(int); // region count;
431 if (pMsgData->regionlist) {
432 int elementSize = g_list_length(pMsgData->regionlist);
433 bufsize += elementSize * (sizeof(MMS_SMIL_REGION));
436 bufsize += sizeof(int); // attachment count;
437 if (pMsgData->attachlist) {
438 int elementSize = g_list_length(pMsgData->attachlist);
439 bufsize += elementSize * sizeof(MMS_ATTACH_S);
442 bufsize += sizeof(int); // transition count;
443 if (pMsgData->transitionlist) {
444 int elementSize = g_list_length(pMsgData->transitionlist);
445 bufsize += elementSize * sizeof(MMS_SMIL_TRANSITION);
448 bufsize += sizeof(int); // meta count;
449 if (pMsgData->metalist) {
450 int elementSize = g_list_length(pMsgData->metalist);
451 bufsize += elementSize * sizeof(MMS_SMIL_META);
454 bufsize += sizeof(MMS_SMIL_ROOTLAYOUT);
456 #ifdef FEATURE_JAVA_MMS
457 bufsize += sizeof(MMS_APPID_INFO_S);
460 int filePathLen = strlen(pMsgData->szSmilFilePath);
462 bufsize += sizeof(int) + filePathLen;
464 bufsize += sizeof(int); // type
465 bufsize += sizeof(MMS_HEADER_DATA_S);
466 bufsize += sizeof(MMS_MULTIPART_DATA_S);
468 MSG_DEBUG("Serialize bufsize = %d", bufsize);
470 buf = (char *)calloc(bufsize, 1);
472 int serial_index = 0;
474 memcpy(buf, &pMsgData->backup_type, sizeof(int));
475 MSG_DEBUG("[#%2d][%5d] backup type = %d",serial_index++, offset, pMsgData->backup_type);
476 offset += sizeof(int);
479 memcpy(buf + offset , &filePathLen, sizeof(int));
482 MSG_DEBUG("[#%2d][%5d] smilFilePath = %s, len = %d",serial_index++, offset, pMsgData->szSmilFilePath, filePathLen);
483 offset += sizeof(int);
485 if (filePathLen > 0) {
486 memcpy(buf + offset, pMsgData->szSmilFilePath, filePathLen);
487 offset += filePathLen;
491 MSG_DEBUG("[#%2d][%5d] page count = %d",serial_index++, offset, pMsgData->pageCnt);
492 memcpy(buf + offset, &(pMsgData->pageCnt), sizeof(int));
493 offset += sizeof(int);
495 if (pMsgData->pagelist) {
497 for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) {
498 MMS_PAGE_S *page = (MMS_PAGE_S *)g_list_nth_data(pMsgData->pagelist, pageIdx);
500 MSG_DEBUG("[#%2d][%5d][%d page] media count = %d",serial_index++, offset, pageIdx, page->mediaCnt);
501 memcpy(buf + offset, &page->mediaCnt, sizeof(int));
502 offset += sizeof(int);
504 if (page->medialist) {
505 for (int i = 0; i < page->mediaCnt; ++ i) {
506 MMS_MEDIA_S *media = (MMS_MEDIA_S *)g_list_nth_data(page->medialist, i);
507 memcpy(buf + offset, media, sizeof(MMS_MEDIA_S));
508 offset += sizeof(MMS_MEDIA_S);
512 memcpy(buf + offset, &page->nDur, sizeof(int));
513 offset += sizeof(int);
514 memcpy(buf + offset, &page->nBegin, sizeof(int));
515 offset += sizeof(int);
516 memcpy(buf + offset, &page->nEnd, sizeof(int));
517 offset += sizeof(int);
518 memcpy(buf + offset, &page->nMin, sizeof(int));
519 offset += sizeof(int);
520 memcpy(buf + offset, &page->nMax, sizeof(int));
521 offset += sizeof(int);
522 memcpy(buf + offset, &page->nRepeat, sizeof(int));
523 offset += sizeof(int);
527 MSG_DEBUG("[#%2d][%5d] region count = %d",serial_index++, offset, pMsgData->regionCnt);
529 memcpy(buf + offset, &pMsgData->regionCnt, sizeof(int));
530 offset += sizeof(int);
532 if (pMsgData->regionlist) {
533 for (int i = 0; i < pMsgData->regionCnt; ++ i) {
534 MMS_SMIL_REGION *region = (MMS_SMIL_REGION *)g_list_nth_data(pMsgData->regionlist, i);
535 memcpy(buf + offset, region, sizeof(MMS_SMIL_REGION));
536 offset += sizeof(MMS_SMIL_REGION);
540 MSG_DEBUG("[#%2d][%5d] attach count = %d",serial_index++, offset, pMsgData->attachCnt);
542 memcpy(buf + offset, &pMsgData->attachCnt, sizeof(int));
543 offset += sizeof(int);
545 if (pMsgData->attachlist) {
546 for (int i = 0; i < pMsgData->attachCnt; ++ i) {
547 MMS_ATTACH_S *attach = (MMS_ATTACH_S *)g_list_nth_data(pMsgData->attachlist, i);
548 memcpy(buf + offset, attach, sizeof(MMS_ATTACH_S));
549 offset += sizeof(MMS_ATTACH_S);
553 MSG_DEBUG("[#%2d][%5d] transition count = %d",serial_index++, offset, pMsgData->transitionCnt);
555 memcpy(buf + offset, &pMsgData->transitionCnt, sizeof(int));
556 offset += sizeof(int);
557 if (pMsgData->transitionlist) {
558 for (int i = 0; i < pMsgData->transitionCnt; ++ i) {
559 MMS_SMIL_TRANSITION *transition = (MMS_SMIL_TRANSITION *)g_list_nth_data(pMsgData->transitionlist, i);
560 memcpy(buf + offset, transition, sizeof(MMS_SMIL_TRANSITION));
561 offset += sizeof(MMS_SMIL_TRANSITION);
565 MSG_DEBUG("[#%2d][%5d] meta count = %d",serial_index++, offset, pMsgData->metaCnt);
566 memcpy(buf + offset, &pMsgData->metaCnt, sizeof(int));
567 offset += sizeof(int);
569 if (pMsgData->metalist) {
570 for (int i = 0; i < pMsgData->metaCnt; ++ i) {
571 MMS_SMIL_META *meta = (MMS_SMIL_META *)g_list_nth_data(pMsgData->metalist, i);
573 memcpy(buf + offset, meta, sizeof(MMS_SMIL_META));
574 offset += sizeof(MMS_SMIL_META);
578 MSG_DEBUG("[#%2d][%5d] root layout",serial_index++, offset);
579 memcpy(buf + offset, &pMsgData->rootlayout, sizeof(MMS_SMIL_ROOTLAYOUT));
580 offset += sizeof(MMS_SMIL_ROOTLAYOUT);
582 #ifdef FEATURE_JAVA_MMS
583 MSG_DEBUG("[#%2d][%5d] java mms",serial_index++, offset);
584 memcpy(buf + offset, &pMsgData->msgAppId, sizeof(MMS_APPID_INFO_S));
585 offset += sizeof(MMS_APPID_INFO_S);
588 memcpy (buf + offset, &pMsgData->header, sizeof(MMS_HEADER_DATA_S));
589 MSG_DEBUG("[#%2d][%5d] mms header",serial_index++, offset);
590 offset += sizeof(MMS_HEADER_DATA_S);
592 memcpy (buf + offset, &pMsgData->smil, sizeof(MMS_MULTIPART_DATA_S));
593 MSG_DEBUG("[#%2d][%5d] mms smil",serial_index++, offset);
594 offset += sizeof(MMS_MULTIPART_DATA_S);
598 MSG_DEBUG("Expect Buffer Size: %d, Final offset : %d", bufsize, offset);
603 bool _MsgMmsDeserializeMessageData(MMS_MESSAGE_DATA_S *pMsgData, const char *pData)
607 if (pMsgData == NULL || pData == NULL) {
608 MSG_DEBUG("param is NULL. pBody = %x, pData = %x", pMsgData, pData);
616 MMS_PAGE_S *pPage = NULL;
617 MMS_MEDIA_S *pMedia = NULL;
618 MMS_SMIL_REGION *pRegion = NULL;
619 MMS_ATTACH_S *pAttach = NULL;
620 MMS_SMIL_TRANSITION *pTransition = NULL;
621 MMS_SMIL_META *pMeta = NULL;
623 int serial_index = 0;
627 memcpy(&type, pData, sizeof(int));
628 MSG_DEBUG("[#%2d][%5d] backup type = %d",serial_index++, offset, type);
629 offset += sizeof(int);
631 pMsgData->backup_type = type;
633 memcpy(&filePathLen, pData + offset, sizeof(int));
634 MSG_DEBUG("[#%2d][%5d] smil path len = %d",serial_index, offset, filePathLen);
635 offset += sizeof(int);
637 if (filePathLen > MSG_FILEPATH_LEN_MAX) {
638 MSG_DEBUG("Smil File Path Length is abnormal.");
642 memset(pMsgData->szSmilFilePath, 0x00, MSG_FILEPATH_LEN_MAX);
644 if (filePathLen > 0) {
645 memcpy(pMsgData->szSmilFilePath, pData + offset, filePathLen);
646 MSG_DEBUG("[#%2d][%5d] smil path = %s",serial_index, offset, pMsgData->szSmilFilePath);
647 offset += filePathLen;
652 memcpy(&(pMsgData->pageCnt), pData + offset, sizeof(int));
653 MSG_DEBUG("[#%2d][%5d] page count = %d",serial_index++, offset, pMsgData->pageCnt);
654 offset += sizeof(int);
656 pageCnt = pMsgData->pageCnt;
658 for (int j = 0; j < pageCnt; ++j) {
659 pPage = (MMS_PAGE_S *)calloc(sizeof(MMS_PAGE_S), 1);
661 memcpy(&pPage->mediaCnt, pData + offset, sizeof(int));
662 MSG_DEBUG("[#%2d][%5d][%d page] media count = %d", serial_index++, offset, j, pPage->mediaCnt);
663 offset += sizeof(int);
665 for (int i = 0; i < pPage->mediaCnt; ++i) {
666 pMedia = (MMS_MEDIA_S *)calloc(sizeof(MMS_MEDIA_S), 1);
668 memcpy(pMedia, pData + offset, sizeof(MMS_MEDIA_S));
670 offset += sizeof(MMS_MEDIA_S);
672 pPage->medialist = g_list_append(pPage->medialist, pMedia);
675 memcpy(&pPage->nDur , pData + offset, sizeof(int));
676 offset += sizeof(int);
677 memcpy(&pPage->nBegin , pData + offset, sizeof(int));
678 offset += sizeof(int);
679 memcpy(&pPage->nEnd , pData + offset, sizeof(int));
680 offset += sizeof(int);
681 memcpy(&pPage->nMin , pData + offset, sizeof(int));
682 offset += sizeof(int);
683 memcpy(&pPage->nMax , pData + offset, sizeof(int));
684 offset += sizeof(int);
685 memcpy(&pPage->nRepeat , pData + offset, sizeof(int));
686 offset += sizeof(int);
688 pMsgData->pagelist = g_list_append(pMsgData->pagelist, pPage);
691 //Processing Region List
692 memcpy(&pMsgData->regionCnt, pData + offset, sizeof(int));
693 MSG_DEBUG("[#%2d][%5d] region count = %d",serial_index++, offset, pMsgData->regionCnt);
694 offset += sizeof(int);
696 //MSG_DEBUG(" pBody->regionCnt: %d", pBody->regionCnt);
698 for (int i = 0; i < pMsgData->regionCnt; ++i) {
699 pRegion = (MMS_SMIL_REGION *)calloc(sizeof(MMS_SMIL_REGION), 1);
701 memcpy(pRegion, pData + offset, sizeof(MMS_SMIL_REGION));
702 offset += sizeof(MMS_SMIL_REGION);
704 pMsgData->regionlist = g_list_append(pMsgData->regionlist, pRegion);
707 //Processing Attachment List
708 memcpy(&pMsgData->attachCnt, pData + offset, sizeof(int));
709 MSG_DEBUG("[#%2d][%5d] attach count = %d",serial_index++, offset, pMsgData->attachCnt);
710 offset += sizeof(int);
712 for (int i = 0; i < pMsgData->attachCnt; ++i) {
713 pAttach = (MMS_ATTACH_S *)calloc(sizeof(MMS_ATTACH_S), 1);
715 memcpy(pAttach, pData + offset, sizeof(MMS_ATTACH_S));
716 offset += sizeof(MMS_ATTACH_S);
718 pMsgData->attachlist = g_list_append(pMsgData->attachlist, pAttach);
721 //Processing Transition List
722 memcpy(&pMsgData->transitionCnt, pData + offset, sizeof(int));
723 MSG_DEBUG("[#%2d][%5d] transition count = %d",serial_index++, offset, pMsgData->transitionCnt);
724 offset += sizeof(int);
726 for (int i = 0; i < pMsgData->transitionCnt; ++i) {
727 pTransition = (MMS_SMIL_TRANSITION *)calloc(sizeof(MMS_SMIL_TRANSITION), 1);
729 memcpy(pTransition, pData + offset, sizeof(MMS_SMIL_TRANSITION));
731 offset += sizeof(MMS_SMIL_TRANSITION);
733 pMsgData->transitionlist = g_list_append(pMsgData->transitionlist, pTransition);
736 //Processing Meta List
737 memcpy(&pMsgData->metaCnt, pData + offset, sizeof(int));
738 MSG_DEBUG("[#%2d][%5d] meta count = %d",serial_index++, offset, pMsgData->metaCnt);
739 offset += sizeof(int);
741 for (int i = 0; i < pMsgData->metaCnt; ++i) {
742 pMeta = (MMS_SMIL_META *)calloc(sizeof(MMS_SMIL_META), 1);
744 memcpy(pMeta, pData + offset, sizeof(MMS_SMIL_META));
746 offset += sizeof(MMS_SMIL_META);
748 pMsgData->metalist = g_list_append(pMsgData->metalist, pMeta);
751 MSG_DEBUG("[#%2d][%5d] root layout",serial_index++, offset);
752 memcpy(&pMsgData->rootlayout, pData + offset, sizeof(MMS_SMIL_ROOTLAYOUT));
753 offset += sizeof(MMS_SMIL_ROOTLAYOUT);
755 #ifdef FEATURE_JAVA_MMS
756 MSG_DEBUG("[#%2d][%5d] java mms",serial_index++, offset);
757 memcpy(&pMsgData->msgAppId, pData + offset, sizeof(MMS_APPID_INFO_S));
758 offset += sizeof(MMS_APPID_INFO_S);
759 // MSG_DEBUG("java_app_id valid:%d, appId:%s repleToAppId:%s", pBody->msgAppId.valid, pBody->msgAppId.appId, pBody->msgAppId.replyToAppId);
762 memcpy(&pMsgData->header, pData + offset, sizeof(MMS_HEADER_DATA_S));
763 MSG_DEBUG("[#%2d][%5d] mms header",serial_index++, offset);
764 offset += sizeof(MMS_HEADER_DATA_S);
766 memcpy(&pMsgData->smil, pData + offset, sizeof(MMS_MULTIPART_DATA_S));
767 MSG_DEBUG("[#%2d][%5d] mms smil",serial_index++, offset);
768 offset += sizeof(MMS_MULTIPART_DATA_S);
770 MSG_DEBUG("Final offset : %d", offset);