⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xltdec.c

📁 SyncML ToolKits,学习syncml的参考工具包.非常好用.
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (IS_EMPTY(pScanner->curtok)) {        smlLibFree(pGet);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pGet);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_CMDID:                rc = buildPCData(pDecoder, (VoidPtr_t)&pGet->cmdID);                cmdid++;                break;            case TN_LANG:                rc = buildPCData(pDecoder, (VoidPtr_t)&pGet->lang);                break;            case TN_META:                 rc = buildPCData(pDecoder, (VoidPtr_t)&pGet->meta);                break;                /* child tags */            case TN_CRED:                 rc = buildCred(pDecoder, (VoidPtr_t)&pGet->cred);                break;                /* flags */            case TN_NORESP:                pGet->flags |= SmlNoResp_f;                break;                /* Lists */            case TN_ITEM:                rc = appendItemList(pDecoder, &pGet->itemList);                items++;                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeGetPut(pGet);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeGetPut(pGet);            return rc;        }    }    if ((items == 0) || (cmdid == 0))    {        smlFreeGetPut(pGet);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppElem = pGet;    return SML_ERR_OK;}Ret_tbuildTargetOrSource(XltDecoderPtr_t pDecoder, VoidPtr_t *ppTarget){    XltDecScannerPtr_t pScanner;    SmlTargetPtr_t pTarget;    Long_t locuri = 0;    Ret_t rc;    pScanner = pDecoder->scanner;    if (*ppTarget != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    if ((pTarget = (SmlTargetPtr_t)smlLibMalloc(sizeof(SmlTarget_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pTarget, 0, sizeof(SmlTarget_t));    if (IS_EMPTY(pScanner->curtok)) {        smlLibFree(pTarget);        return SML_ERR_OK;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pTarget);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_LOCURI:                rc = buildPCData(pDecoder, (VoidPtr_t)&pTarget->locURI);                locuri++;                break;            case TN_LOCNAME:                rc = buildPCData(pDecoder, (VoidPtr_t)&pTarget->locName);                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeSourceTargetPtr(pTarget);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeSourceTargetPtr(pTarget);            return rc;        }    }    if (locuri == 0)     {        smlFreeSourceTargetPtr(pTarget);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppTarget = pTarget;    return SML_ERR_OK;}Ret_tbuildChal(XltDecoderPtr_t pDecoder, VoidPtr_t *ppChal){    XltDecScannerPtr_t pScanner;    SmlChalPtr_t pChal;    Long_t meta = 0;    Ret_t rc;    pScanner = pDecoder->scanner;    if (*ppChal != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    if ((pChal = (SmlChalPtr_t)smlLibMalloc(sizeof(SmlChal_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pChal, 0, sizeof(SmlChal_t));    if (IS_EMPTY(pScanner->curtok)) {        *ppChal = pChal;        return SML_ERR_OK;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pChal);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_META:                rc = buildPCData(pDecoder, (VoidPtr_t)&pChal->meta);                meta++;                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeChalPtr(pChal);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeChalPtr(pChal);            return rc;        }    }    if (meta == 0)     {        smlFreeChalPtr(pChal);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppChal = pChal;    return SML_ERR_OK;}Ret_tbuildCred(XltDecoderPtr_t pDecoder, VoidPtr_t *ppCred){    XltDecScannerPtr_t pScanner;    SmlCredPtr_t pCred;    Ret_t rc;    Long_t data = 0;     pScanner = pDecoder->scanner;    if (*ppCred != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    if ((pCred = (SmlCredPtr_t)smlLibMalloc(sizeof(SmlCred_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pCred, 0, sizeof(SmlCred_t));    if (IS_EMPTY(pScanner->curtok)) {        *ppCred = pCred;        return SML_ERR_OK;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pCred);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_DATA:                rc = buildPCData(pDecoder, (VoidPtr_t)&pCred->data);                data++;                break;            case TN_META:                rc = buildPCData(pDecoder, (VoidPtr_t)&pCred->meta);                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeCredPtr(pCred);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeCredPtr(pCred);            return rc;        }    }    if (data == 0)    {      smlFreeCredPtr(pCred);      return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppCred = pCred;    return SML_ERR_OK;}Ret_tbuildItem(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem){    XltDecScannerPtr_t pScanner;    SmlItemPtr_t pItem;    Ret_t rc;    pScanner = pDecoder->scanner;    if (*ppElem != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    if ((pItem = (SmlItemPtr_t)smlLibMalloc(sizeof(SmlItem_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pItem, 0, sizeof(SmlItem_t));    /* Item might be empty */    if (IS_EMPTY(pScanner->curtok)) {        *ppElem = pItem;        return SML_ERR_OK;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pItem);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_META:                rc = buildPCData(pDecoder, (VoidPtr_t)&pItem->meta);                break;            case TN_DATA:                rc = buildPCData(pDecoder, (VoidPtr_t)&pItem->data);#ifdef __USE_EXTENSIONS__#ifdef __SML_WBXML__                if (pItem->data && pItem->data->contentType == SML_PCDATA_OPAQUE)                    subdtdDecodeWbxml(pDecoder, (SmlPcdataPtr_t*)&pItem->data);#endif#endif                break;                /* child tags */            case TN_TARGET:                rc = buildTargetOrSource(pDecoder, (VoidPtr_t)&pItem->target);                break;            case TN_SOURCE:                rc = buildTargetOrSource(pDecoder, (VoidPtr_t)&pItem->source);                break;            /* flags */            case TN_MOREDATA:                pItem->flags |= SmlMoreData_f;                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeItemPtr(pItem);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeItemPtr(pItem);            return rc;        }    }    *ppElem = pItem;    return SML_ERR_OK;}#ifdef MAPITEM_RECEIVERet_tbuildMapItem(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem){    XltDecScannerPtr_t pScanner;    SmlMapItemPtr_t pMapItem;    Long_t target = 0, source = 0;    Ret_t rc;    if (*ppElem != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    pScanner = pDecoder->scanner;    if ((pMapItem = (SmlMapItemPtr_t)smlLibMalloc(sizeof(SmlMapItem_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pMapItem, 0, sizeof(SmlMapItem_t));    if (IS_EMPTY(pScanner->curtok)) {        smlLibFree(pMapItem);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pMapItem);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* child tags */            case TN_TARGET:                rc = buildTargetOrSource(pDecoder, (VoidPtr_t)&pMapItem->target);                target++;                break;            case TN_SOURCE:                rc = buildTargetOrSource(pDecoder, (VoidPtr_t)&pMapItem->source);                source++;                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeMapItemPtr(pMapItem);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeMapItemPtr(pMapItem);            return rc;        }    }    if ((target == 0) || (source == 0)) {        smlFreeMapItemPtr(pMapItem);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppElem = pMapItem;    return SML_ERR_OK;}#endifRet_tbuildStatus(XltDecoderPtr_t pDecoder, VoidPtr_t *ppElem){    XltDecScannerPtr_t pScanner;    SmlStatusPtr_t pStatus;    Ret_t rc;    Long_t cmd = 0, data = 0, cmdid = 0;    if (*ppElem != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    pScanner = pDecoder->scanner;    if ((pStatus = (SmlStatusPtr_t)smlLibMalloc(sizeof(SmlStatus_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pStatus, 0, sizeof(SmlStatus_t));    /* initialize the element type field */    pStatus->elementType = SML_PE_STATUS;    if (IS_EMPTY(pScanner->curtok)) {        smlLibFree(pStatus);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pStatus);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCData elements */            case TN_CMDID:                rc = buildPCData(pDecoder, (VoidPtr_t)&pStatus->cmdID);                cmdid++;                break;            case TN_MSGREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pStatus->msgRef);                break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -