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

📄 xltenc.c

📁 SyncML手册及其编程
💻 C
📖 第 1 页 / 共 5 页
字号:
/*************************************************************************//* module:          Encoder source file                                  *//* file:            xltenc.c                                             *//* target system:   All                                                  *//* target OS:       All                                                  */   /*************************************************************************//* * Copyright Notice * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication  * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc.,  * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). * All Rights Reserved. * Implementation of all or part of any Specification may require  * licenses under third party intellectual property rights,  * including without limitation, patent rights (such a third party  * may or may not be a Supporter). The Sponsors of the Specification  * are not responsible and shall not be held responsible in any  * manner for identifying or failing to identify any or all such  * third party intellectual property rights. *  * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED  * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM,  * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA,  * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML  * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING  * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION  * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT  * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO.,  * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY  * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF  * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF  * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL,  * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH  * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED  * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. *  * The above notice and this paragraph must be included on all copies  * of this document that are made. *  *//*************************************************************************//*  Definitions                                                          *//*************************************************************************/#include "syncml_tk_prefix_file.h" // %%% luz: needed for precompiled headers in eVC++#include <xltenc.h>#ifdef __SML_WBXML__  #include "xltencwbxml.h"#endif#ifdef __SML_XML__  #include "xltencxml.h"#endif#include "xlttags.h"#include "xltmetinf.h"#include "xltdevinf.h"#include "smlmetinfdtd.h"#include "smldevinfdtd.h"#include <libstr.h>#include <libmem.h>#include <smldtd.h>Ret_t getTNbyPE(SmlProtoElement_t, XltTagID_t*);Ret_t xltEncBlock(XltTagID_t, XltRO_t, const VoidPtr_t, SmlEncoding_t, BufferMgmtPtr_t, SmlPcdataExtension_t);Ret_t xltEncList(XltListType_t, XltRO_t, VoidPtr_t, SmlEncoding_t, BufferMgmtPtr_t, SmlPcdataExtension_t);#ifndef __SML_LITE__Ret_t xltBuildExtention(SmlPcdataExtension_t, XltRO_t, VoidPtr_t, SmlEncoding_t, BufferMgmtPtr_t);#endiftypedef struct PEEnc_s{    XltTagID_t     tagid;    SmlProtoElement_t type;} PEEnc_t, *PEEncPtr_t;PEEncPtr_t getPEEncTable(void);PEEncPtr_t getPEEncTable(void){   PEEncPtr_t _tmpPEEncPtr;  PEEnc_t const PE[] =  {    { TN_ADD,          SML_PE_ADD            },    { TN_ALERT,        SML_PE_ALERT          },    { TN_ATOMIC,       SML_PE_ATOMIC_START   },    { TN_ATOMIC_END,   SML_PE_ATOMIC_END     },    { TN_COPY,         SML_PE_COPY           },    { TN_DELETE,       SML_PE_DELETE         },    { TN_EXEC,         SML_PE_EXEC           },    { TN_GET,          SML_PE_GET            },    { TN_MAP,          SML_PE_MAP            },    { TN_PUT,          SML_PE_PUT            },    { TN_RESULTS,      SML_PE_RESULTS        },    { TN_SEARCH,       SML_PE_SEARCH         },        { TN_SEQUENCE,     SML_PE_SEQUENCE_START },    { TN_SEQUENCE_END, SML_PE_SEQUENCE_END   },        { TN_STATUS,       SML_PE_STATUS         },    { TN_SYNC,         SML_PE_SYNC_START     },    { TN_SYNC_END,     SML_PE_SYNC_END       },        { TN_REPLACE,      SML_PE_REPLACE        },    { TN_UNDEF,        SML_PE_UNDEF          }  };  _tmpPEEncPtr = (PEEncPtr_t)smlLibMalloc(sizeof(PE));  if (_tmpPEEncPtr == NULL) return NULL;  smlLibMemcpy(_tmpPEEncPtr, &PE, sizeof(PE));  return _tmpPEEncPtr;  }Ret_t getTNbyPE(SmlProtoElement_t pE, XltTagID_t *tagID){        int i = 0;     PEEncPtr_t pPETbl = getPEEncTable();    if (pPETbl == NULL)    {      smlLibFree(pPETbl);      return SML_ERR_NOT_ENOUGH_SPACE;    }    while (((pPETbl+i)->type) != SML_PE_UNDEF)    {      if (((pPETbl+i)->type) == pE)      {      	*tagID = (pPETbl+i)->tagid;      	smlLibFree(pPETbl);        return SML_ERR_OK;      }          i++;    }           	smlLibFree(pPETbl);    *tagID = TN_UNDEF;    return SML_ERR_XLT_INVAL_PROTO_ELEM;}// %%% luz:2003-07-31: added SyncML FPI (formal public identifier) tablesconst char * const SyncMLFPI[SML_NUM_VERS] = {  "???",  "-//SYNCML//DTD SyncML 1.0//EN",  "-//SYNCML//DTD SyncML 1.1//EN"};const char * const SyncMLDevInfFPI[SML_NUM_VERS] = {  "???",  "-//SYNCML//DTD DevInf 1.0//EN",  "-//SYNCML//DTD DevInf 1.1//EN"};/** * FUNCTION: smlXltEncInit * * Initializes an XML buffer; Creates XML code for the SyncHdr * and appends it to the buffer. * Returns 0 if operation was successful. * * PRE-Condition:   no memory should be allocated for ppEncoder (should be NULL) *                  pHeader has to contain a valid SyncHdr structure *                  pBufEnd must point to the end of the (WB)XML buffer *                  ppBufPos has to be initialized to the start point of the *                  (WB)XML buffer. *                   * * POST-Condition:  After the function call ppBufPos points to the *                  first free byte in the buffer behind the (WB)XML document * * IN:              enc, the encoding constant (SML_WBXML or SML_XML) *                  pHeader, the SyncML header structure *                  pBufEnd, pointer to the end of the buffer to write on *  * IN/OUT:          ppBufPos, current position of the bufferpointer *                  ppEncoder, the encoder object        * * RETURN:          shows error codes of function,  *                  0, if OK *                  Possible Error Codes: *                  SML_ERR_XLT_MISSING_CONT             *                  SML_ERR_XLT_BUF_ERR                  *                  SML_ERR_XLT_INVAL_ELEM_TYPE          *                  SML_ERR_XLT_INVAL_LIST_TYPE          *                  SML_ERR_XLT_INVAL_TAG_TYPE           *                  SML_ERR_XLT_ENC_UNK	                *                  SML_ERR_XLT_INVAL_PROTO_ELEM */Ret_t xltEncInit(SmlEncoding_t enc,                 const SmlSyncHdrPtr_t pHeader,                 const MemPtr_t pBufEnd,                 MemPtr_t *ppBufPos,                 XltEncoderPtr_t *ppEncoder,                 SmlVersion_t vers){  // Return variable  Ret_t _err;  XltEncoderPtr_t _pEncoder;  //Structure containing buffer pointers, length and written bytes  BufferMgmtPtr_t _pBufMgr;#ifdef __SML_WBXML__    MemByte_t _stablen     =  0x1D; //XLT_STABLEN;    MemByte_t _wbxmlver    = XLT_WBXMLVER;    MemByte_t _charset     = XLT_CHARSET;    MemByte_t _pubident1   = XLT_PUBIDENT1;    MemByte_t _pubident2   = XLT_PUBIDENT2;    // %%% luz:2003-07-31: now uses FPI according to syncml version    const char *_syncmldtd = SyncMLFPI[vers];#endif#ifdef __SML_XML__  MemPtr_t _tmpStr;  MemPtr_t _xmlver = (MemPtr_t)XML_VERSION;  MemPtr_t _xmlenc = (MemPtr_t)XML_ENCODING;  MemByte_t _begpar = XML_BEGPAR;  MemByte_t _endpar = XML_ENDPAR;#endif  //MemByte_t _tmp = 0x00;CURRENTLY NOT USED  if ((_pEncoder = (XltEncoderPtr_t)smlLibMalloc(sizeof(XltEncoder_t))) == NULL) return SML_ERR_NOT_ENOUGH_SPACE;  if ((_pBufMgr = (BufferMgmtPtr_t)smlLibMalloc(sizeof(BufferMgmt_t))) == NULL) {      smlLibFree(_pEncoder);      return SML_ERR_NOT_ENOUGH_SPACE;   }  //set the encoding  _pEncoder->enc = enc;    // %%% luz:2003-07-31: added version  _pEncoder->vers = vers;  _pEncoder->cur_ext = (SmlPcdataExtension_t)SML_EXT_UNDEFINED;  _pEncoder->last_ext = (SmlPcdataExtension_t)SML_EXT_UNDEFINED;  _pEncoder->end_tag_size = 0;  _pEncoder->space_evaluation = NULL;    _pBufMgr->smlXltBufferP = *ppBufPos;  _pBufMgr->smlXltBufferLen = pBufEnd - *ppBufPos;  _pBufMgr->smlXltStoreBufP = _pBufMgr->smlXltBufferP;  _pBufMgr->smlXltWrittenBytes = 0;    _pBufMgr->smlCurExt = _pEncoder->cur_ext;  _pBufMgr->smlLastExt = _pEncoder->last_ext;  _pBufMgr->smlActiveExt = SML_EXT_UNDEFINED;  _pBufMgr->switchExtTag = TN_UNDEF;  _pBufMgr->spaceEvaluation = 0;  _pBufMgr->vers = vers;  _pBufMgr->endTagSize = 0;  switch (enc)  {#ifdef __SML_WBXML__    case SML_WBXML:    {      // Set the WBXML Header Values      // WBXML Version      if ((_err = wbxmlWriteTypeToBuffer((MemPtr_t)(&_wbxmlver), TAG, 1, _pBufMgr)) != SML_ERR_OK) break;      // Public Idetifier - default unknown      if ((_err = wbxmlWriteTypeToBuffer((MemPtr_t)(&_pubident1), TAG, 1, _pBufMgr)) != SML_ERR_OK) break;      if ((_err = wbxmlWriteTypeToBuffer((MemPtr_t)(&_pubident2), TAG, 1, _pBufMgr)) != SML_ERR_OK) break;      // Character set - not yet implemented      if ((_err = wbxmlWriteTypeToBuffer((MemPtr_t)(&_charset), TAG, 1, _pBufMgr)) != SML_ERR_OK) break;      // Sting table length -  not yet implemented      if ((_err = wbxmlWriteTypeToBuffer((MemPtr_t)(&_stablen), TAG, 1, _pBufMgr)) != SML_ERR_OK) break;      // FPI - %%% luz:2003-07-31: not constant any more, varies according to SyncML version      if ((_err = xltAddToBuffer((MemPtr_t) (_syncmldtd) , smlLibStrlen((String_t)_syncmldtd), _pBufMgr)) != SML_ERR_OK) break;      break;    }#endif#ifdef __SML_XML__    case SML_XML:    {                     if ((_err = xltAddToBuffer((MemPtr_t)(&_begpar), 1, _pBufMgr)) != SML_ERR_OK) break;      _tmpStr = (MemPtr_t)"?xml version=\"";      if ((_err = xltAddToBuffer(_tmpStr, smlLibStrlen((String_t)_tmpStr), _pBufMgr)) != SML_ERR_OK) break;      _tmpStr = _xmlver;      if ((_err = xltAddToBuffer(_tmpStr, smlLibStrlen((String_t)_tmpStr), _pBufMgr)) != SML_ERR_OK) break;      _tmpStr = (MemPtr_t)"\" encoding=\"";      if ((_err = xltAddToBuffer(_tmpStr, smlLibStrlen((String_t)_tmpStr), _pBufMgr)) != SML_ERR_OK) break;      _tmpStr = _xmlenc;      if ((_err = xltAddToBuffer(_tmpStr, smlLibStrlen((String_t)_tmpStr), _pBufMgr)) != SML_ERR_OK) break;      _tmpStr = (MemPtr_t)"\"?";      if ((_err = xltAddToBuffer(_tmpStr, smlLibStrlen((String_t)_tmpStr), _pBufMgr)) != SML_ERR_OK) break;      if ((_err = xltAddToBuffer((MemPtr_t)(&_endpar), 1, _pBufMgr)) != SML_ERR_OK) break;      break;    }

⌨️ 快捷键说明

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