Пример #1
0
/**
 * Returns the codepage which belongs to a certain tag ID
 *
 * @pre valid tag ID
 * @post the code page is returned
 * @param tagID (IN)
 *        the ID of the tag
 * @param pExt (IN)
 *        the codepage/extention of the tag
 * @return 0, if OK
 */
Ret_t getExtById(XltTagID_t tagID,  SmlPcdataExtension_t *pExt)
{
    int i = 0;
  SmlPcdataExtension_t ext;
  /* Iterate over all defined extensions to find the corresponding TAG.
   * Empty extensions, e.g. not defined numbers will be skipped.
   */
  for (ext = SML_EXT_UNDEFINED; ext < SML_EXT_LAST; ext++) {
    TagPtr_t pTags = getTagTable(ext);
    if (pTags == NULL) {
      continue; /* skip empty codepage */
    }
    i = 0;
    while (((pTags+i)->id) != TN_UNDEF) {
      if (((pTags+i)->id) == tagID){
            *pExt = ext;
          return SML_ERR_OK;
          }
        i++;
        }
    }
  /* tag not found in any extension */
  *pExt = (SmlPcdataExtension_t)255;
  return SML_ERR_XLT_INVAL_PROTO_ELEM;
}
Пример #2
0
Ret_t getTagString(XltTagID_t tagID, String_t tagString, SmlPcdataExtension_t ext)
{
  // %%% luz 2005-11-11 : added retry loop to try MetInf as a fallback (workaround for ill-formed xml like in sync4j pda clients)
  do {
    int i = 0;
    TagPtr_t pTags = getTagTable(ext);
    if (pTags == NULL) {
      tagString[0] = '\0';
      return SML_ERR_NOT_ENOUGH_SPACE;
    }
    while (((pTags+i)->id) != TN_UNDEF) {
      if (((pTags+i)->id) == tagID) {
        String_t _tmp = (pTags+i)->xml;
        smlLibStrcpy(tagString, _tmp);
        return SML_ERR_OK;
      }
      i++;
    }
    // tag not found
    if (ext==SML_EXT_METINF) break; // already tried with implicit or explicit metinf
    // try metinf implicitly for ill-formed xml like sync4j clients
    ext=SML_EXT_METINF;
  } while(TRUE);

  tagString[0] = '\0';
  return SML_ERR_XLT_INVAL_PROTO_ELEM;
}
Пример #3
0
/**
 * Returns the tag ID which belongs to a tag string in a certain codepage
 *
 * @pre valid tag string, valid code page
 * @post tag id is returned
 * @param tag (IN)
 *        the string representation of the tag
 * @param ext (IN)
 *        code page group for the tag
 * @param pTagID (IN)
 *        the tag id of the tag
 * @return 0, if OK
 */
Ret_t getTagIDByStringAndExt(String_t tag, SmlPcdataExtension_t ext, XltTagID_t *pTagID)
{
    int i = 0;
    TagPtr_t pTags = getTagTable(ext);
    if (pTags == NULL) {
      return SML_ERR_NOT_ENOUGH_SPACE;
    }
    for (i=0;((pTags+i)->id) != TN_UNDEF; i++) {
      if (*(pTags+i)->xml != *tag) continue; // if the first char doesn't match we skip the strcmp to speed things up
        if (smlLibStrcmp(((pTags+i)->xml), tag) == 0) {
            *pTagID = (pTags+i)->id;
            return SML_ERR_OK;
        }
    }
    *pTagID = TN_UNDEF;
    return SML_ERR_XLT_INVAL_PROTO_ELEM;
}
Пример #4
0
/**
 * Returns the tag ID which belongs to a tag string in a certain namespace
 *
 * @pre valid tag string, valid namespace
 * @post tag id is returned
 * @param tag (IN)
 *        the string representation of the tag
 * @param ns (IN)
 *        namespace group for the tag
 * @param pTagID (IN)
 *        the tag id of the tag
 * @return 0, if OK
 */
Ret_t getTagIDByStringAndNamespace(String_t tag, String_t ns, XltTagID_t *pTagID)
{
    int i = 0;
    TagPtr_t pTags = getTagTable(getExtByName(ns));
    if (pTags == NULL)
    {
      return SML_ERR_NOT_ENOUGH_SPACE;
    }
    while (((pTags+i)->id) != TN_UNDEF)
    {
      if ((smlLibStrcmp(((pTags+i)->xml), tag) == 0))
      {
        *pTagID = (pTags+i)->id;
        return SML_ERR_OK;
      }
      i++;
    }
    *pTagID = TN_UNDEF;
    return SML_ERR_XLT_INVAL_PROTO_ELEM;
}
Пример #5
0
/**
 * Returns a WBXML byte which belongs to a tag ID in a defined codepage.
 * This function is needed for the WBXML encoding
 *
 * @pre valid tag ID, valid code page
 * @post tag byte is returned
 * @param tagID (IN)
 *        the ID for the tag
 * @param ext (IN)
 *        code page group for the tag
 * @param pTagByte (IN)
 *        the byte representation of the tag
 * @return 0, if OK
 */
Ret_t getTagByte(XltTagID_t tagID, SmlPcdataExtension_t ext, Byte_t *pTagByte)
{
  int i = 0;
  TagPtr_t pTags = getTagTable(ext);
  if (pTags == NULL)
  {
    return SML_ERR_NOT_ENOUGH_SPACE;
  }
  while (((pTags+i)->id) != TN_UNDEF)
  {
    if (((pTags+i)->id) == tagID)
    {
      *pTagByte = (pTags+i)->wbxml;
      return SML_ERR_OK;
    }
    i++;
  }
  *pTagByte = 0;
  return SML_ERR_XLT_INVAL_PROTO_ELEM;
}
Пример #6
0
Ret_t getTagString(XltTagID_t tagID, String_t tagString, SmlPcdataExtension_t ext)
{
  int i = 0;
  TagPtr_t pTags = getTagTable(ext);
  if (pTags == NULL) {
    tagString[0] = '\0';
    return SML_ERR_NOT_ENOUGH_SPACE;
  }
  while (((pTags+i)->id) != TN_UNDEF) {
    if ((((pTags+i)->id) == tagID)) {
      String_t _tmp = (pTags+i)->xml;
      smlLibStrcpy(tagString, _tmp); 
      return SML_ERR_OK;
    }    
    i++;
  }        
  //smlLibStrcpy(tagString, '\0'); 
  tagString[0] = '\0';
  return SML_ERR_XLT_INVAL_PROTO_ELEM;
}