/* decoder callbacks */ Ret_t buildDmTndCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndPtr_t pDmTnd; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTnd = (SmlDmTndPtr_t)smlLibMalloc(sizeof(SmlDmTnd_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTnd, 0, sizeof(SmlDmTnd_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTnd; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTnd(pDmTnd); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DMTND_MgmtTree: break; case TN_DMTND_VerDTD: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTnd->verdtd); break; case TN_DMTND_Man: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTnd->man); break; case TN_DMTND_Mod: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTnd->mod); break; case TN_DMTND_Node: rc = buildDmTndNodeList(pDecoder, (VoidPtr_t)&pDmTnd->nodelist); break; default: KCDBG(">>>>> buildDmTndDFPropsCmd: Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeDmTnd(pDmTnd); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTnd(pDmTnd); return rc; } } *ppElem = pDmTnd; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildDmTndTypeCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndTypePtr_t pDmTndType; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTndType = (SmlDmTndTypePtr_t)smlLibMalloc(sizeof(SmlDmTndType_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTndType, 0, sizeof(SmlDmTndType_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTndType; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndType(pDmTndType); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DMTND_MIME: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndType->mime); break; case TN_DMTND_DDFName: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndType->ddfname); break; default: KCDBG(">>>>> Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeDmTndType(pDmTndType); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndType(pDmTndType); return rc; } if (pScanner->curtok->type != TOK_TAG_END) { smlFreeDmTndType(pDmTndType); return SML_ERR_XLT_INVAL_SYNCML_DOC; } } *ppElem = pDmTndType; return SML_ERR_OK; }
Ret_t buildMetInfMemCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlMetInfMemPtr_t pMem; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pMem = (SmlMetInfMemPtr_t)smlLibMalloc(sizeof(SmlMetInfMem_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pMem, 0, sizeof(SmlMetInfMem_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pMem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* PCDATA elements */ case TN_METINF_SHAREDMEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->shared); break; case TN_METINF_FREEMEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->free); break; case TN_METINF_FREEID: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->freeid); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } } *ppElem = pMem; return SML_ERR_OK; }
Ret_t buildDevInfDSMemCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDevInfDSMemPtr_t pElem; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pElem = (SmlDevInfDSMemPtr_t)smlLibMalloc(sizeof(SmlDevInfDSMem_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pElem, 0, sizeof(SmlDevInfDSMem_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pElem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* PCDATA elements */ case TN_DEVINF_SHAREDMEM: // %%% luz:2003-04-28: made work as a flag pElem->flags |= SmlDevInfSharedMem_f; // rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->shared); break; case TN_DEVINF_MAXMEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->maxmem); break; case TN_DEVINF_MAXID: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->maxid); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pElem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } } *ppElem = pElem; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildMetInfAnchorCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlMetInfAnchorPtr_t pAnchor; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pAnchor = (SmlMetInfAnchorPtr_t)smlLibMalloc(sizeof(SmlMetInfAnchor_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pAnchor, 0, sizeof(SmlMetInfAnchor_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pAnchor; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfAnchor(pAnchor); //smlLibFree(pAnchor); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* PCDATA elements */ case TN_METINF_LAST: rc = buildPCData(pDecoder, (VoidPtr_t)&pAnchor->last); break; case TN_METINF_NEXT: rc = buildPCData(pDecoder, (VoidPtr_t)&pAnchor->next); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeMetinfAnchor(pAnchor); //smlLibFree(pAnchor); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfAnchor(pAnchor); //smlLibFree(pAnchor); return rc; } } *ppElem = pAnchor; return SML_ERR_OK; }
Ret_t buildDevInfXmitCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDevInfXmitPtr_t pXmit; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pXmit = (SmlDevInfXmitPtr_t)smlLibMalloc(sizeof(SmlDevInfXmit_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pXmit, 0, sizeof(SmlDevInfXmit_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pXmit; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pXmit); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* PCDATA elements */ case TN_DEVINF_CTTYPE: rc = buildPCData(pDecoder, (VoidPtr_t)&pXmit->cttype); break; case TN_DEVINF_VERCT: rc = buildPCData(pDecoder, (VoidPtr_t)&pXmit->verct); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pXmit); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pXmit); return rc; } } *ppElem = pXmit; return SML_ERR_OK; }
Ret_t buildDevInfExtCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDevInfExtPtr_t pElem; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pElem = (SmlDevInfExtPtr_t)smlLibMalloc(sizeof(SmlDevInfExt_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pElem, 0, sizeof(SmlDevInfExt_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pElem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DEVINF_XNAM: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->xnam); break; case TN_DEVINF_XVAL: rc = buildPCDataList(pDecoder, (VoidPtr_t)&pElem->xval); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pElem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } } *ppElem = pElem; return SML_ERR_OK; }
Ret_t buildMetInfMetInfCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlMetInfMetInfPtr_t pMeta; Ret_t rc; int foundWrapper = 0; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pMeta = (SmlMetInfMetInfPtr_t)smlLibMalloc(sizeof(SmlMetInfMetInf_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pMeta, 0, sizeof(SmlMetInfMetInf_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pMeta; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMetinf(pMeta); //smlLibFree(pMeta); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_METINF_METINF: /* ignore - it's just the wrapper tag */ foundWrapper = 1; break; case TN_METINF_FORMAT: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->format); break; case TN_METINF_TYPE: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->type); break; case TN_METINF_MARK: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->mark); break; case TN_METINF_SIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->size); break; case TN_METINF_VERSION: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->version); break; case TN_METINF_NEXTNONCE: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->nextnonce); break; case TN_METINF_ANCHOR: rc = buildMetInfAnchorCmd(pDecoder, (VoidPtr_t)&pMeta->anchor); break; case TN_METINF_MAXMSGSIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->maxmsgsize); break; /* SCTSTK - 18/03/2002 S.H. 2002-04-05: SyncML 1.1 */ case TN_METINF_MAXOBJSIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pMeta->maxobjsize); break; case TN_METINF_MEM: rc = buildMetInfMemCmd(pDecoder, (VoidPtr_t)&pMeta->mem); break; case TN_METINF_EMI: rc = buildPCDataList(pDecoder, (VoidPtr_t)&pMeta->emi); break; /* SyncML DS 1.2, Synthesis/luz 2005-08-24 */ case TN_METINF_FIELDLEVEL: pMeta->flags |= SmlMetInfFieldLevel_f; rc = buildEmptyTag(pDecoder); // allow for <tag></tag> instead of <tag/> break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeMetinfMetinf(pMeta); //smlLibFree(pMeta); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMetinf(pMeta); //smlLibFree(pMeta); return rc; } } if (foundWrapper) { /* Optional Metinf root tag was used in this message. * The actual token is the closing root tag. * It is required that the scanner points to the first tag _after_ * <MetInf>...</MetInf>, so we just skip to the next token and continue. */ if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMetinf(pMeta); //smlLibFree(pMeta); return rc; } } *ppElem = pMeta; return SML_ERR_OK; }
Ret_t buildMetInfMemCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlMetInfMemPtr_t pMem; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pMem = (SmlMetInfMemPtr_t)smlLibMalloc(sizeof(SmlMetInfMem_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pMem, 0, sizeof(SmlMetInfMem_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pMem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* %%% luz 2005-08-24 :this definition was plain wrong - shared is a flag, not Pcdata! case TN_METINF_SHAREDMEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->shared); break; */ /* PCDATA elements */ case TN_METINF_FREEMEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->free); break; case TN_METINF_FREEID: rc = buildPCData(pDecoder, (VoidPtr_t)&pMem->freeid); break; /* flags */ case TN_METINF_SHAREDMEM: pMem->flags |= SmlMetInfSharedMem_f; rc = buildEmptyTag(pDecoder); // allow for <tag></tag> instead of <tag/> break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeMetinfMem(pMem); //smlLibFree(pMem); return rc; } } *ppElem = pMem; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildDmTndFormatCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndFormatPtr_t pDmTndFormat; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTndFormat = (SmlDmTndFormatPtr_t)smlLibMalloc(sizeof(SmlDmTndFormat_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTndFormat, 0, sizeof(SmlDmTndFormat_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTndFormat; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndFormat(pDmTndFormat); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { VoidPtr_t pContent = smlLibMalloc(6); if ( pContent == NULL ) { smlFreeDmTndFormat(pDmTndFormat); return SML_ERR_NOT_ENOUGH_SPACE; } smlLibMemset(pContent, 0, 6); switch (pScanner->curtok->tagid) { case TN_DMTND_b64: smlLibStrcpy(pContent, "b64"); break; case TN_DMTND_bin: smlLibStrcpy(pContent, "bin"); break; case TN_DMTND_bool: smlLibStrcpy(pContent, "bool"); break; case TN_DMTND_chr: smlLibStrcpy(pContent, "chr"); break; case TN_DMTND_int: smlLibStrcpy(pContent, "int"); break; case TN_DMTND_node: smlLibStrcpy(pContent, "node"); break; case TN_DMTND_null: smlLibStrcpy(pContent, "null"); break; case TN_DMTND_xml: smlLibStrcpy(pContent, "xml"); break; case TN_DMTND_date: smlLibStrcpy(pContent, "date"); break; case TN_DMTND_time: smlLibStrcpy(pContent, "time"); break; case TN_DMTND_float: smlLibStrcpy(pContent, "float"); break; default: KCDBG(">>>>> Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pContent); smlFreeDmTndFormat(pDmTndFormat); return rc; } rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndFormat->value); if (rc != SML_ERR_OK) { smlLibFree(pContent); smlFreeDmTndFormat(pDmTndFormat); return rc; } pDmTndFormat->value->content = pContent; pDmTndFormat->value->length = smlLibStrlen(pContent); if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pContent); smlFreeDmTndFormat(pDmTndFormat); return rc; } if (pScanner->curtok->type != TOK_TAG_END) { smlLibFree(pContent); smlFreeDmTndFormat(pDmTndFormat); return SML_ERR_XLT_INVAL_SYNCML_DOC; } } *ppElem = pDmTndFormat; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildDmTndNodeCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndNodePtr_t pDmTndNode; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTndNode = (SmlDmTndNodePtr_t)smlLibMalloc(sizeof(SmlDmTndNode_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTndNode, 0, sizeof(SmlDmTndNode_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTndNode; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndNode(pDmTndNode); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DMTND_NodeName: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndNode->nodename); break; case TN_DMTND_Path: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndNode->path); break; case TN_DMTND_RTProperties: rc = buildDmTndRTPropsCmd(pDecoder, (VoidPtr_t)&pDmTndNode->rtprops); break; case TN_DMTND_DFProperties: rc = buildDmTndDFPropsCmd(pDecoder, (VoidPtr_t)&pDmTndNode->dfprops); break; case TN_DMTND_Value: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndNode->value); break; case TN_DMTND_Node: rc = buildDmTndNodeList(pDecoder, (VoidPtr_t)&pDmTndNode->nodelist); break; default: KCDBG(">>>>> buildDmTndDFPropsCmd: Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { if ( NULL != pDmTndNode->nodename && NULL != pDmTndNode->nodename->content ) { KCDBG(">>>>> buildDmTndDFPropsCmd: Node %s corrupted <<<<<\n", (char *)pDmTndNode->nodename->content); } smlFreeDmTndNode(pDmTndNode); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndNode(pDmTndNode); return rc; } } *ppElem = pDmTndNode; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildDmTndDFPropsCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndDFPropsPtr_t pDmTndDFProps; Ret_t rc = SML_ERR_OK; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTndDFProps = (SmlDmTndDFPropsPtr_t)smlLibMalloc(sizeof(SmlDmTndDFProps_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTndDFProps, 0, sizeof(SmlDmTndDFProps_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTndDFProps; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndDFProps(pDmTndDFProps); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DMTND_AccessType: rc = buildDmTndDFElementCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->accesstype); break; case TN_DMTND_DefaultValue: rc = buildDmTndFormatCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->defaultvalue); break; case TN_DMTND_Description: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndDFProps->description); break; case TN_DMTND_DFFormat: rc = buildDmTndFormatCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->dfformat); break; case TN_DMTND_Occurrence: rc = buildDmTndDFElementCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->occurrence); break; case TN_DMTND_Scope: rc = buildDmTndDFElementCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->scope); break; case TN_DMTND_DFTitle: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndDFProps->dftitle); break; case TN_DMTND_DFType: rc = buildDmTndTypeCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->dftype); break; case TN_DMTND_CaseSense: rc = buildDmTndDFElementCmd(pDecoder, (VoidPtr_t)&pDmTndDFProps->casesense); break; default: KCDBG(">>>>> buildDmTndDFPropsCmd: Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeDmTndDFProps(pDmTndDFProps); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndDFProps(pDmTndDFProps); return rc; } } *ppElem = pDmTndDFProps; return SML_ERR_OK; }
/* decoder callbacks */ Ret_t buildDmTndRTPropsCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDmTndRTPropsPtr_t pDmTndRTProps; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pDmTndRTProps = (SmlDmTndRTPropsPtr_t)smlLibMalloc(sizeof(SmlDmTndRTProps_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pDmTndRTProps, 0, sizeof(SmlDmTndRTProps_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pDmTndRTProps; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndRTProps(pDmTndRTProps); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DMTND_ACL: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->acl); break; case TN_DMTND_Format: rc = buildDmTndFormatCmd(pDecoder, (VoidPtr_t)&pDmTndRTProps->format); break; case TN_DMTND_Name: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->name); break; case TN_DMTND_Size: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->size); break; case TN_DMTND_Title: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->title); break; case TN_DMTND_TStamp: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->tstamp); break; case TN_DMTND_Type: rc = buildDmTndTypeCmd(pDecoder, (VoidPtr_t)&pDmTndRTProps->type); break; case TN_DMTND_VerNo: rc = buildPCData(pDecoder, (VoidPtr_t)&pDmTndRTProps->verno); break; default: KCDBG(">>>>> buildDmTndRTPropsCmd: Unkown token: %d <<<<<\n", pScanner->curtok->tagid); rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlFreeDmTndRTProps(pDmTndRTProps); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlFreeDmTndRTProps(pDmTndRTProps); return rc; } } *ppElem = pDmTndRTProps; return SML_ERR_OK; }
Ret_t buildDevInfCtcap(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { SmlDevInfCtcapListPtr_t pCtcap = NULL, pPrev = NULL; SmlDevInfCTDataPropListPtr_t pOldProp = NULL, pProp = NULL; SmlDevInfCTDataListPtr_t pOldParam = NULL, pParam = NULL; SmlDevInfCtcapListPtr_t pElem = NULL; XltDecScannerPtr_t pScanner; Ret_t rc; pElem = (SmlDevInfCtcapListPtr_t) *ppElem; pScanner = pDecoder->scanner; if (IS_EMPTY(pScanner->curtok)) { *ppElem = pElem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DEVINF_CTTYPE: pCtcap = (SmlDevInfCtcapListPtr_t) *ppElem; /* advance to the end of the list, and create ther an empty list element */ while (pCtcap != NULL) { pPrev = pCtcap; pCtcap = pPrev->next; } if ((pCtcap = (SmlDevInfCtcapListPtr_t)smlLibMalloc(sizeof(SmlDevInfCtcapList_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pCtcap, 0, sizeof(SmlDevInfCtcapList_t)); if (pPrev != NULL) /* we already had some entries in the list */ pPrev->next = pCtcap; else /* nope we created a new list */ *ppElem = pCtcap; pCtcap->data = (SmlDevInfCTCapPtr_t)smlLibMalloc(sizeof(SmlDevInfCTCap_t)); if (pCtcap->data == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pCtcap->data, 0, sizeof(SmlDevInfCTCap_t)); rc = buildPCData(pDecoder, (VoidPtr_t)&pCtcap->data->cttype); break; case TN_DEVINF_PROPNAME: pCtcap = (SmlDevInfCtcapListPtr_t) *ppElem; if (pCtcap == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; while (pCtcap->next != NULL) { pPrev = pCtcap; pCtcap = pCtcap->next; } /* here we are at the latest defined DevInfCTCapPtr_t */ /* now we need to create a new DevInfCTDataPtr_t element, tostore the properties name */ pOldProp = NULL; pProp = pCtcap->data->prop; while (pProp != NULL) { pOldProp = pProp; pProp = pProp->next; } pProp = (SmlDevInfCTDataPropListPtr_t) smlLibMalloc(sizeof(SmlDevInfCTDataPropList_t)); if (pProp == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pProp, 0, sizeof(SmlDevInfCTDataPropList_t)); if (pOldProp != NULL) pOldProp->next = pProp; else pCtcap->data->prop = pProp; pProp->data = (SmlDevInfCTDataPropPtr_t)smlLibMalloc(sizeof(SmlDevInfCTDataProp_t)); if (pProp->data == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pProp->data, 0, sizeof(SmlDevInfCTDataProp_t)); pProp->data->prop = (SmlDevInfCTDataPtr_t)smlLibMalloc(sizeof(SmlDevInfCTData_t)); if (pProp->data->prop == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pProp->data->prop, 0, sizeof(SmlDevInfCTData_t)); rc = buildPCData(pDecoder, (VoidPtr_t)&pProp->data->prop->name); break; case TN_DEVINF_PARAMNAME: pCtcap = (SmlDevInfCtcapListPtr_t) *ppElem; if (pCtcap == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; while (pCtcap->next != NULL) { pPrev = pCtcap; pCtcap = pCtcap->next; } /* here we are at the latest defined DevInfCTCapPtr_t */ pProp = pCtcap->data->prop; if (pProp == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; while (pProp->next != NULL) { pProp = pProp->next; } /* here we are at the latest defined PropList Element in the latest defined CTCap element */ /* now lets insert a new Param element into this property */ pOldParam = NULL; pParam = pProp->data->param; while (pParam != NULL) { pOldParam = pParam; pParam = pParam->next; } pParam = (SmlDevInfCTDataListPtr_t)smlLibMalloc(sizeof(SmlDevInfCTDataList_t)); if (pParam == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pParam, 0, sizeof(SmlDevInfCTDataList_t)); if (pOldParam != NULL) pOldParam->next = pParam; else pProp->data->param = pParam; pParam->data = (SmlDevInfCTDataPtr_t)smlLibMalloc(sizeof(SmlDevInfCTData_t)); if (pParam->data == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pParam->data, 0, sizeof(SmlDevInfCTData_t)); rc = buildPCData(pDecoder, (VoidPtr_t)&pParam->data->name); break; case TN_DEVINF_DISPLAYNAME: case TN_DEVINF_VALENUM: case TN_DEVINF_DATATYPE: case TN_DEVINF_SIZE: /* The code for the above 4 is basically the same. * The hardpart is finding the right SmlDevInfCTDataPtr_t * struct, as it can be either within a Property or an Parameter. */ pCtcap = (SmlDevInfCtcapListPtr_t) *ppElem; if (pCtcap == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; while (pCtcap->next != NULL) { pCtcap = pCtcap->next; } /* here we are at the latest defined DevInfCTCapPtr_t */ pProp = pCtcap->data->prop; if (pProp == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; while (pProp->next != NULL) { pProp = pProp->next; } if (pProp->data == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if (pProp->data->prop == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if (pProp->data->param == NULL) { /* No Param's yet so we have Property fields to fill */ switch(pScanner->curtok->tagid) { case TN_DEVINF_DISPLAYNAME: rc = buildPCData(pDecoder, (VoidPtr_t)&pProp->data->prop->dname); break; case TN_DEVINF_VALENUM: rc = buildPCDataList(pDecoder, (VoidPtr_t)&pProp->data->prop->valenum); break; case TN_DEVINF_DATATYPE: rc = buildPCData(pDecoder, (VoidPtr_t)&pProp->data->prop->datatype); break; case TN_DEVINF_SIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pProp->data->prop->size); break; default: break; } } else { pParam = pProp->data->param; while (pParam->next != NULL) { pParam = pParam->next; } if (pParam->data == NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; switch(pScanner->curtok->tagid) { case TN_DEVINF_DISPLAYNAME: rc = buildPCData(pDecoder, (VoidPtr_t)&pParam->data->dname); break; case TN_DEVINF_VALENUM: rc = buildPCDataList(pDecoder, (VoidPtr_t)&pParam->data->valenum); break; case TN_DEVINF_DATATYPE: rc = buildPCData(pDecoder, (VoidPtr_t)&pParam->data->datatype); break; case TN_DEVINF_SIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pParam->data->size); break; default: break; } } break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pElem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } } /* eof while */ pElem = *ppElem; return SML_ERR_OK; }
Ret_t buildDevInfDataStoreCmd(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDevInfDatastorePtr_t pElem; Ret_t rc; pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pElem = (SmlDevInfDatastorePtr_t)smlLibMalloc(sizeof(SmlDevInfDatastore_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pElem, 0, sizeof(SmlDevInfDatastore_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pElem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { /* PCDATA elements */ case TN_DEVINF_SOURCEREF: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->sourceref); break; case TN_DEVINF_DISPLAYNAME: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->displayname); break; case TN_DEVINF_MAXGUIDSIZE: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->maxguidsize); break; case TN_DEVINF_RXPREF: rc = buildDevInfXmitCmd(pDecoder, (VoidPtr_t)&pElem->rxpref); break; case TN_DEVINF_TXPREF: rc = buildDevInfXmitCmd(pDecoder, (VoidPtr_t)&pElem->txpref); break; case TN_DEVINF_RX: rc = buildDevInfXmitList(pDecoder, (VoidPtr_t)&pElem->rx); break; case TN_DEVINF_TX: rc = buildDevInfXmitList(pDecoder, (VoidPtr_t)&pElem->tx); break; case TN_DEVINF_DSMEM: rc = buildDevInfDSMemCmd(pDecoder, (VoidPtr_t)&pElem->dsmem); break; case TN_DEVINF_SYNCCAP: rc = buildDevInfSyncCapCmd(pDecoder, (VoidPtr_t)&pElem->synccap); break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pElem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } } *ppElem = pElem; return SML_ERR_OK; }
Ret_t buildDevInfDevInfContent(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem) { XltDecScannerPtr_t pScanner; SmlDevInfDevInfPtr_t pElem; Ret_t rc; /* Modified by Tomy to allow <UTC></UTC>, <SupportNumberOfChanges></SupportNumberOfChanges> and <SupportLargeObjs></SupportLargeObjs> */ SmlPcdataPtr_t tmp_ptr; /* End modified by Tomy */ pScanner = pDecoder->scanner; if (*ppElem != NULL) return SML_ERR_XLT_INVAL_SYNCML_DOC; if ((pElem = (SmlDevInfDevInfPtr_t)smlLibMalloc(sizeof(SmlDevInfDevInf_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE; smlLibMemset(pElem, 0, sizeof(SmlDevInfDevInf_t)); if (IS_EMPTY(pScanner->curtok)) { *ppElem = pElem; return SML_ERR_OK; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } while (pScanner->curtok->type != TOK_TAG_END) { switch (pScanner->curtok->tagid) { case TN_DEVINF_VERDTD: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->verdtd); break; case TN_DEVINF_MAN: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->man); break; case TN_DEVINF_MOD: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->mod); break; case TN_DEVINF_OEM: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->oem); break; case TN_DEVINF_FWV: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->fwv); break; case TN_DEVINF_SWV: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->swv); break; case TN_DEVINF_HWV: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->hwv); break; case TN_DEVINF_DEVID: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->devid); break; case TN_DEVINF_DEVTYP: rc = buildPCData(pDecoder, (VoidPtr_t)&pElem->devtyp); break; case TN_DEVINF_DATASTORE: rc = buildDevInfDataStoreList(pDecoder, (VoidPtr_t)&pElem->datastore); break; case TN_DEVINF_CTCAP: rc = buildDevInfCtcap(pDecoder, (VoidPtr_t)&pElem->ctcap); break; case TN_DEVINF_EXT: rc = buildDevInfExtList(pDecoder, (VoidPtr_t)&pElem->ext); break; /* SCTSTK - 18/03/2002 S.H. 2002-04-05 : SyncML 1.1 */ case TN_DEVINF_UTC: pElem->flags |= SmlDevInfUTC_f; /* Modified by Tomy to allow <UTC></UTC> */ tmp_ptr = NULL; rc = buildPCData(pDecoder, (VoidPtr_t)&tmp_ptr); if (tmp_ptr->contentType != SML_PCDATA_UNDEFINED && tmp_ptr->extension != SML_EXT_UNDEFINED && tmp_ptr->length != 0 && tmp_ptr->content != NULL) rc = SML_ERR_XLT_INVAL_SYNCML_DOC; /* End modified by Tomy */ break; case TN_DEVINF_NOFM: pElem->flags |= SmlDevInfNOfM_f; /* Modified by Tomy to allow <SupportNumberOfChanges></SupportNumberOfChanges> */ tmp_ptr = NULL; rc = buildPCData(pDecoder, (VoidPtr_t)&tmp_ptr); if (tmp_ptr->contentType != SML_PCDATA_UNDEFINED && tmp_ptr->extension != SML_EXT_UNDEFINED && tmp_ptr->length != 0 && tmp_ptr->content != NULL) rc = SML_ERR_XLT_INVAL_SYNCML_DOC; /* End modified by Tomy */ break; case TN_DEVINF_LARGEOBJECT: pElem->flags |= SmlDevInfLargeObject_f; /* Modified by Tomy to allow <SupportLargeObjs></SupportLargeObjs> */ tmp_ptr = NULL; rc = buildPCData(pDecoder, (VoidPtr_t)&tmp_ptr); if (tmp_ptr->contentType != SML_PCDATA_UNDEFINED && tmp_ptr->extension != SML_EXT_UNDEFINED && tmp_ptr->length != 0 && tmp_ptr->content != NULL) rc = SML_ERR_XLT_INVAL_SYNCML_DOC; /* End modified by Tomy */ break; default: rc = SML_ERR_XLT_INVAL_SYNCML_DOC; } if (rc != SML_ERR_OK) { smlLibFree(pElem); return rc; } if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) { smlLibFree(pElem); return rc; } } *ppElem = pElem; return SML_ERR_OK; }