2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.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.
18 #include "MsgUtilFunction.h"
20 /*==================================================================================================
21 FUNCTION IMPLEMENTATION
22 ==================================================================================================*/
25 int MsgEncodeCountInfo(MSG_COUNT_INFO_S *pCountInfo, char **ppDest)
29 dataSize = sizeof(MSG_COUNT_INFO_S);
31 *ppDest = (char*)new char[dataSize];
33 void* p = (void*)*ppDest;
35 memcpy(p, pCountInfo, dataSize);
41 int MsgEncodeRecipientList(MSG_RECIPIENTS_LIST_S *pRecipientList, char **ppDest)
43 int count = 0, dataSize = 0;
45 count = pRecipientList->recipientCnt;
46 dataSize = sizeof(int) + (sizeof(MSG_ADDRESS_INFO_S)*count);
48 *ppDest = (char*)new char[dataSize];
50 void* p = (void*)*ppDest;
52 memcpy(p, &count, sizeof(int));
53 p = (void*)((char*)p + sizeof(int));
55 for (int i = 0; i < count; i++)
57 memcpy(p, &(pRecipientList->recipientAddr[i]), sizeof(MSG_ADDRESS_INFO_S));
58 p = (void*)((char*)p + sizeof(MSG_ADDRESS_INFO_S));
65 int MsgEncodeCountByMsgType(int MsgCount, char **ppDest)
69 dataSize = sizeof(int);
71 *ppDest = (char*)new char[dataSize];
73 void* p = (void*)*ppDest;
75 memcpy(p, &MsgCount, dataSize);
81 int MsgEncodeMsgId(MSG_MESSAGE_ID_T *pMsgId, char **ppDest)
85 dataSize = (sizeof(MSG_MESSAGE_ID_T));
87 *ppDest = (char*)new char[dataSize];
89 void* p = (void*)*ppDest;
91 memcpy(p, pMsgId, dataSize);
97 int MsgEncodeMsgInfo(MSG_MESSAGE_INFO_S *pMsgInfo, char **ppDest)
101 dataSize = sizeof(MSG_MESSAGE_INFO_S);
103 *ppDest = (char*)new char[dataSize];
105 void* p = (void*)*ppDest;
107 memcpy(p, pMsgInfo, sizeof(MSG_MESSAGE_INFO_S));
109 p = (void*)((char*)p + sizeof(MSG_MESSAGE_INFO_S));
115 int MsgEncodeMsgInfo(MSG_MESSAGE_INFO_S *pMsgInfo, MSG_SENDINGOPT_INFO_S* pSendOptInfo, char **ppDest)
119 dataSize = (sizeof(MSG_MESSAGE_INFO_S) + sizeof(MSG_SENDINGOPT_INFO_S));
121 *ppDest = (char*)new char[dataSize];
123 void* p = (void*)*ppDest;
125 memcpy(p, pMsgInfo, sizeof(MSG_MESSAGE_INFO_S));
127 p = (void*)((char*)p + sizeof(MSG_MESSAGE_INFO_S));
129 memcpy(p, pSendOptInfo, sizeof(MSG_SENDINGOPT_INFO_S));
135 int MsgEncodeFolderViewList(MSG_LIST_S *pFolderViewList, char **ppDest)
137 int count = 0, dataSize = 0;
139 count = pFolderViewList->nCount;
141 dataSize = sizeof(int) + (sizeof(MSG_MESSAGE_S)*count);
143 *ppDest = (char*)new char[dataSize];
145 void* p = (void*)*ppDest;
147 memcpy(p, &count, sizeof(int));
148 p = (void*)((char*)p + sizeof(int));
150 for (int i = 0; i < count; i++)
152 memcpy(p, &(pFolderViewList->msgInfo[i]), sizeof(MSG_MESSAGE_S));
153 p = (void*)((char*)p + sizeof(MSG_MESSAGE_S));
160 int MsgEncodeFolderList(MSG_FOLDER_LIST_S *pFolderList, char **ppDest)
162 int count = 0, dataSize = 0;
164 count = pFolderList->nCount;
165 dataSize = sizeof(int) + (sizeof(MSG_FOLDER_INFO_S)*count);
167 *ppDest = (char*)new char[dataSize];
169 void* p = (void*)*ppDest;
171 memcpy(p, &count, sizeof(int));
172 p = (void*)((char*)p + sizeof(int));
174 for (int i = 0; i < count; i++)
176 memcpy(p, &(pFolderList->folderInfo[i]), sizeof(MSG_FOLDER_INFO_S));
177 p = (void*)((char*)p + sizeof(MSG_FOLDER_INFO_S));
184 int MsgEncodeSetting(MSG_SETTING_S *pSetting, char **ppDest)
186 int dataSize = sizeof(MSG_OPTION_TYPE_T);
188 switch (pSetting->type)
190 case MSG_GENERAL_OPT :
191 dataSize += sizeof(MSG_GENERAL_OPT_S);
193 case MSG_SMS_SENDOPT :
194 dataSize += sizeof(MSG_SMS_SENDOPT_S);
197 dataSize += sizeof(MSG_SMSC_LIST_S);
199 case MSG_MMS_SENDOPT :
200 dataSize += sizeof(MSG_MMS_SENDOPT_S);
202 case MSG_MMS_RECVOPT :
203 dataSize += sizeof(MSG_MMS_RECVOPT_S);
205 case MSG_MMS_STYLEOPT :
206 dataSize += sizeof(MSG_MMS_STYLEOPT_S);
208 case MSG_PUSHMSG_OPT :
209 dataSize += sizeof(MSG_PUSHMSG_OPT_S);
212 dataSize += sizeof(MSG_CBMSG_OPT_S);
214 case MSG_VOICEMAIL_OPT :
215 dataSize += sizeof(MSG_VOICEMAIL_OPT_S);
217 case MSG_MSGSIZE_OPT :
218 dataSize += sizeof(MSG_MSGSIZE_OPT_S);
222 *ppDest = (char*)new char[dataSize];
224 void* p = (void*)*ppDest;
226 memcpy(p, pSetting, dataSize);
232 int MsgEncodeMsgType(MSG_MESSAGE_TYPE_S *pMsgType, char **ppDest)
236 dataSize = (sizeof(MSG_MESSAGE_TYPE_S));
238 *ppDest = (char*)new char[dataSize];
240 void* p = (void*)*ppDest;
242 memcpy(p, pMsgType, dataSize);
248 int MsgEncodeThreadViewList(MSG_THREAD_VIEW_LIST_S *pThreadViewList, char **ppDest)
250 int count = 0, dataSize = 0;
252 count = pThreadViewList->nCount;
254 dataSize = sizeof(int) + (sizeof(MSG_THREAD_VIEW_S)*count);
256 *ppDest = (char*)new char[dataSize];
258 void* p = (void*)*ppDest;
260 memcpy(p, &count, sizeof(int));
261 p = (void*)((char*)p + sizeof(int));
263 for (int i = 0; i < count; i++)
265 memcpy(p, &(pThreadViewList->msgThreadInfo[i]), sizeof(MSG_THREAD_VIEW_S));
266 p = (void*)((char*)p + sizeof(MSG_THREAD_VIEW_S));
273 int MsgEncodeConversationViewList(MSG_LIST_S *pConvViewList, char **ppDest)
275 int count = 0, dataSize = 0;
277 count = pConvViewList->nCount;
279 dataSize = sizeof(int) + (sizeof(MSG_LIST_S)*count);
281 *ppDest = (char*)new char[dataSize];
283 void* p = (void*)*ppDest;
285 memcpy(p, &count, sizeof(int));
286 p = (void*)((char*)p + sizeof(int));
288 for (int i = 0; i < count; i++)
290 memcpy(p, &(pConvViewList->msgInfo[i]), sizeof(MSG_LIST_S));
291 p = (void*)((char*)p + sizeof(MSG_LIST_S));
298 int MsgEncodeMsgGetContactCount(MSG_THREAD_COUNT_INFO_S *threadCountInfo, char **ppDest)
300 int dataSize = sizeof(int) + sizeof(int) + sizeof(int) + sizeof(int);
302 MSG_DEBUG("datasize = [%d] \n", dataSize);
304 *ppDest = (char*)new char[dataSize];
306 void* p = (void*)*ppDest;
308 memcpy(p, &(threadCountInfo->totalCount), sizeof(int));
309 p = (void*)((char*)p + sizeof(int));
311 memcpy(p, &(threadCountInfo->unReadCount), sizeof(int));
312 p = (void*)((char*)p + sizeof(int));
314 memcpy(p, &(threadCountInfo->mmsMsgCount), sizeof(int));
315 p = (void*)((char*)p + sizeof(int));
317 memcpy(p, &(threadCountInfo->smsMsgCount), sizeof(int));
318 p = (void*)((char*)p + sizeof(int));
323 int MsgEncodeMemSize(unsigned int *memsize, char **ppDest)
327 dataSize = sizeof(unsigned int);
329 *ppDest = (char*)new char[dataSize];
331 void* p = (void*)*ppDest;
333 memcpy(p, memsize, dataSize);
339 int MsgEncodeSyncMLOperationData(int msgId, int extId, char **ppDest)
343 dataSize = sizeof(int) + sizeof(int);
345 *ppDest = (char*)new char[dataSize];
347 void* p = (void*)*ppDest;
349 memcpy(p, &msgId, sizeof(int));
350 p = (void*)((char*)p + sizeof(int));
352 memcpy(p, &extId, sizeof(int));
358 int MsgEncodeStorageChangeData(const MSG_STORAGE_CHANGE_TYPE_T storageChangeType, const MSG_MSGID_LIST_S *pMsgIdList, char **ppDest)
363 count = pMsgIdList->nCount;
365 dataSize = sizeof(MSG_STORAGE_CHANGE_TYPE_T) + sizeof(int) + (sizeof(MSG_MESSAGE_ID_T)*count);
367 *ppDest = (char*)new char[dataSize];
369 void* p = (void*)*ppDest;
371 memcpy(p, &storageChangeType, sizeof(MSG_STORAGE_CHANGE_TYPE_T));
372 p = (void*)((char*)p + sizeof(MSG_STORAGE_CHANGE_TYPE_T));
374 memcpy(p, &count, sizeof(int));
375 p = (void*)((char*)p + sizeof(int));
377 for (int i = 0; i < count; i++) {
378 memcpy(p, &(pMsgIdList->msgIdList[i]), sizeof(MSG_MESSAGE_ID_T));
379 p = (void*)((char*)p + sizeof(MSG_MESSAGE_ID_T));
386 int MsgEncodeReportStatus(MSG_REPORT_STATUS_INFO_S* pReportStatus, char **ppDest)
390 dataSize = (sizeof(MSG_REPORT_STATUS_INFO_S));
392 *ppDest = (char*)new char[dataSize];
394 void* p = (void*)*ppDest;
396 memcpy(p, pReportStatus, dataSize);
403 void MsgDecodeMsgId(char *pSrc, MSG_MESSAGE_ID_T *pMsgId)
405 memcpy(pMsgId, pSrc, sizeof(MSG_MESSAGE_ID_T));
409 void MsgDecodeCountInfo(char *pSrc, MSG_COUNT_INFO_S *pCountInfo)
411 memcpy(pCountInfo, pSrc, sizeof(MSG_COUNT_INFO_S));
415 void MsgDecodeMemSize(char *pSrc, unsigned int *memsize)
417 memcpy(memsize, pSrc, sizeof(unsigned int));
421 void MsgDecodeMsgInfo(char *pSrc, MSG_MESSAGE_INFO_S *pMsgInfo, MSG_SENDINGOPT_INFO_S* pSendOptInfo)
423 memcpy(pMsgInfo, pSrc, sizeof(MSG_MESSAGE_INFO_S));
425 pSrc = pSrc + sizeof(MSG_MESSAGE_INFO_S);
427 memcpy(pSendOptInfo, pSrc, sizeof(MSG_SENDINGOPT_INFO_S));
431 void MsgDecodeFolderViewList(char *pSrc, MSG_LIST_S *pFolderViewList)
435 memcpy(&count, pSrc, sizeof(int));
436 pSrc = pSrc + sizeof(int);
440 pFolderViewList->nCount = count;
441 pFolderViewList->msgInfo = (msg_message_t*)new char[sizeof(MSG_MESSAGE_S)*count];
443 MSG_MESSAGE_S* pInfoTmp = (MSG_MESSAGE_S*)pFolderViewList->msgInfo;
445 for (int i = 0; i < count; i++)
447 memcpy(pInfoTmp, pSrc, sizeof(MSG_MESSAGE_S));
448 pSrc = pSrc + sizeof(MSG_MESSAGE_S);
452 else if ( count == 0 )
454 pFolderViewList->nCount = count;
455 pFolderViewList->msgInfo = NULL;
460 void MsgDecodeRecipientList(char *pSrc, MSG_RECIPIENTS_LIST_S *pRecipientList)
464 memcpy(&count, pSrc, sizeof(int));
465 pSrc = pSrc + sizeof(int);
467 pRecipientList->recipientCnt= count;
468 pRecipientList->recipientAddr = (MSG_ADDRESS_INFO_S*)new char[sizeof(MSG_ADDRESS_INFO_S)*count];
470 MSG_ADDRESS_INFO_S* pInfoTmp = pRecipientList->recipientAddr;
472 for (int i = 0; i < count; i++)
474 memcpy(pInfoTmp, pSrc, sizeof(MSG_ADDRESS_INFO_S));
475 pSrc = pSrc + sizeof(MSG_ADDRESS_INFO_S);
481 void MsgDecodeFolderList(char *pSrc, MSG_FOLDER_LIST_S *pFolderList)
485 memcpy(&count, pSrc, sizeof(int));
486 pSrc = pSrc + sizeof(int);
488 pFolderList->nCount = count;
489 pFolderList->folderInfo = (MSG_FOLDER_INFO_S*)new char[sizeof(MSG_FOLDER_INFO_S)*count];
491 MSG_FOLDER_INFO_S* pInfoTmp = pFolderList->folderInfo;
493 for (int i = 0; i < count; i++)
495 memcpy(pInfoTmp, pSrc, sizeof(MSG_FOLDER_INFO_S));
496 pSrc = pSrc + sizeof(MSG_FOLDER_INFO_S);
502 void MsgDecodeSetting(char *pSrc, MSG_SETTING_S *pSetting)
504 int dataSize = sizeof(MSG_OPTION_TYPE_T);
506 switch (pSetting->type)
508 case MSG_GENERAL_OPT :
509 dataSize += sizeof(MSG_GENERAL_OPT_S);
511 case MSG_SMS_SENDOPT :
512 dataSize += sizeof(MSG_SMS_SENDOPT_S);
515 dataSize += sizeof(MSG_SMSC_LIST_S);
517 case MSG_MMS_SENDOPT :
518 dataSize += sizeof(MSG_MMS_SENDOPT_S);
520 case MSG_MMS_RECVOPT :
521 dataSize += sizeof(MSG_MMS_RECVOPT_S);
523 case MSG_MMS_STYLEOPT :
524 dataSize += sizeof(MSG_MMS_STYLEOPT_S);
526 case MSG_PUSHMSG_OPT :
527 dataSize += sizeof(MSG_PUSHMSG_OPT_S);
530 dataSize += sizeof(MSG_CBMSG_OPT_S);
532 case MSG_VOICEMAIL_OPT :
533 dataSize += sizeof(MSG_VOICEMAIL_OPT_S);
535 case MSG_MSGSIZE_OPT :
536 dataSize += sizeof(MSG_MSGSIZE_OPT_S);
540 memcpy(pSetting, pSrc, dataSize);
544 void MsgDecodeMsgType(char *pSrc, MSG_MESSAGE_TYPE_S* pMsgType)
546 memcpy(pMsgType, pSrc, sizeof(MSG_MESSAGE_TYPE_S));
550 void MsgDecodeThreadViewList(char *pSrc, MSG_THREAD_VIEW_LIST_S *pThreadViewList)
554 memcpy(&count, pSrc, sizeof(int));
555 pSrc = pSrc + sizeof(int);
559 pThreadViewList->nCount = count;
560 pThreadViewList->msgThreadInfo = (msg_thread_view_t*)new char[sizeof(MSG_THREAD_VIEW_S)*count];
562 MSG_THREAD_VIEW_S* pInfoTmp = (MSG_THREAD_VIEW_S*)pThreadViewList->msgThreadInfo;
564 for (int i = 0; i < count; i++)
566 memcpy(pInfoTmp, pSrc, sizeof(MSG_THREAD_VIEW_S));
567 pSrc = pSrc + sizeof(MSG_THREAD_VIEW_S);
573 pThreadViewList->nCount = count;
574 pThreadViewList->msgThreadInfo = NULL;
579 void MsgDecodeConversationViewList(char *pSrc, MSG_LIST_S *pConvViewList)
583 memcpy(&count, pSrc, sizeof(int));
584 pSrc = pSrc + sizeof(int);
588 pConvViewList->nCount = count;
589 pConvViewList->msgInfo = (msg_message_t*)new char[sizeof(MSG_MESSAGE_S)*count];
591 MSG_MESSAGE_S* pInfoTmp = (MSG_MESSAGE_S*)pConvViewList->msgInfo;
593 for (int i = 0; i < count; i++)
595 memcpy(pInfoTmp, pSrc, sizeof(MSG_MESSAGE_S));
596 pSrc = pSrc + sizeof(MSG_MESSAGE_S);
602 pConvViewList->nCount = count;
603 pConvViewList->msgInfo = NULL;
608 void MsgDecodeContactCount(char *pSrc, MSG_THREAD_COUNT_INFO_S *pMsgThreadCountList)
615 memcpy(&count, pSrc, sizeof(int));
616 pSrc = pSrc + sizeof(int);
617 pMsgThreadCountList->totalCount = count;
620 memcpy(&count, pSrc, sizeof(int));
621 pSrc = pSrc + sizeof(int);
622 pMsgThreadCountList->unReadCount = count;
625 memcpy(&count, pSrc, sizeof(int));
626 pSrc = pSrc + sizeof(int);
627 pMsgThreadCountList->mmsMsgCount = count;
630 memcpy(&count, pSrc, sizeof(int));
631 pSrc = pSrc + sizeof(int);
632 pMsgThreadCountList->smsMsgCount = count;
639 void MsgDecodeReportStatus(char *pSrc, MSG_REPORT_STATUS_INFO_S *pReportStatus)
646 memcpy(&count, pSrc, sizeof(MSG_DELIVERY_REPORT_STATUS_T));
647 pSrc = pSrc + sizeof(MSG_DELIVERY_REPORT_STATUS_T);
648 pReportStatus->deliveryStatus = count;
651 memcpy(&count, pSrc, sizeof(time_t));
652 pSrc = pSrc + sizeof(time_t);
653 pReportStatus->deliveryStatusTime = count;
656 memcpy(&count, pSrc, sizeof(MSG_READ_REPORT_STATUS_T));
657 pSrc = pSrc + sizeof(MSG_READ_REPORT_STATUS_T);
658 pReportStatus->readStatus = count;
661 memcpy(&count, pSrc, sizeof(time_t));
662 pSrc = pSrc + sizeof(time_t);
663 pReportStatus->readStatusTime = count;
671 int MsgMakeEvent(const void *pData, int DataSize, MSG_EVENT_TYPE_T MsgEvent, MSG_ERROR_T MsgError, void **ppEvent)
673 MSG_EVENT_S* pMsgEvent = NULL;
675 *ppEvent = (MSG_EVENT_S*)new char[sizeof(MSG_EVENT_S) + DataSize];
677 pMsgEvent = (MSG_EVENT_S*)*ppEvent;
679 pMsgEvent->eventType = MsgEvent;
680 pMsgEvent->result = MsgError;
682 MSG_DEBUG("eventType [%d : %s]", pMsgEvent->eventType, MsgDbgEvtStr(pMsgEvent->eventType));
683 MSG_DEBUG("result [%d]", pMsgEvent->result);
686 memcpy((void*)pMsgEvent->data, pData, DataSize);
688 return (sizeof(MSG_EVENT_S) + DataSize);