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

📄 vsclientpolicyxmllib.c

📁 IBE是一种非对称密码技术
💻 C
📖 第 1 页 / 共 3 页
字号:
        goto err;
      if (getXMLNodeValue(&(policy->parameterRefreshRateNegative), node, "negative", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "strictParameterChecking") == 0)
    {
      if (getXMLNodeValue(&(policy->strictParameterChecking), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "parameterAggressiveDistricts") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (makeStringArray(&(policy->parameterAggressiveDistricts), &(policy->parameterAggressiveDistrictsCount), node->children[0]->text, libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "trustedDistricts") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (makeStringArray(&(policy->trustedDistricts), &(policy->trustedDistrictsCount), node->children[0]->text, libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "passwordCaching") == 0)
    {
      if (getXMLNodeValue(&(policy->passwordCaching), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "decryptionSettings") == 0)
    {
      if (getXMLNodeValue(&(policy->decryptionMode), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "sendZDR") == 0)
    {
      if (getXMLNodeValue(&(policy->sendUniversalReader), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "zdrTemplate") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (Z2Strdup (node->children[0]->text, &(policy->zfrTemplate)) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "zdr2Template") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (Z2Strdup (node->children[0]->text, &(policy->zdm2Template)) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "msgBodyTemplate") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (Z2Strdup (node->children[0]->text, &(policy->htmlMessageBodyTemplate)) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "encryptRules") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (Z2Strdup (node->children[0]->text, &(policy->encryptRules)) != 0)
        goto err;
    }
    else if (strcmp(node->tag_name, "keyPurgeTime") == 0)
    {
      if (getXMLNodeValue(&(policy->keyPurgeTime), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "clientSettings") == 0)
    {
      policy->clientSettings = (clientSettingsT **)Z3Malloc(sizeof(clientSettingsT *) * node->num_children);
      policy->clientSettingsCount = 0;
      for (j = 0; j < node->num_children; j++)
      {
        if (node->children[j]->node_type != IC_XML_NODE_TAG)
          continue;

        clientSettings = ParseClientSettings(node->children[j], libCtx);
        if (clientSettings == (void *) 0)
          goto err;

        policy->clientSettings[policy->clientSettingsCount] = clientSettings;
        policy->clientSettingsCount++;
      }
    }
    else if (strcmp(node->tag_name, "defaultZDM") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (Z2Strdup (node->children[0]->text, &(policy->defaultZDM)) != 0)
        goto err;
    }
  }

  icXmlParserFree (&parser, libCtx);
  return policy;


err:
  if (bufStream != (icInputStream *)0)
    icInputStreamFree (&bufStream, libCtx);
  if(parser != (void*) 0)
    icXmlParserFree (&parser, libCtx);
  if(policy != (void*) 0)
    FreeClientPolicy(policy, libCtx);
  return ((vsClientPolicyT *)0);
}

clientSettingsT *ParseClientSettings (
   icXmlNode *node,
   VoltLibCtx *libCtx
   )
{
  clientSettingsT *settings;
  char *attrStr;
  int max, i;
  icXmlNode *settingNode;

  settings = NewClientSettings(libCtx);

  icTableGet(node->attributes, "name", &attrStr, libCtx);
  if (attrStr == (void *) 0)
    goto err;
  if (Z2Strdup (attrStr, &(settings->clientName)) != 0)
    goto err;

  max = node->num_children;
  settings->keys = (char **)Z3Malloc(sizeof(char *) * max);
  settings->values = (char **)Z3Malloc(sizeof(char *) * max);

  for (i = 0; i < node->num_children; i++)
  {
    settingNode = node->children[i];
    if (settingNode->node_type != IC_XML_NODE_TAG)
      continue;

    icTableGet(settingNode->attributes, "value", &attrStr, libCtx);
    if (attrStr == (void *) 0)
      goto err;

    if (Z2Strdup (
      settingNode->tag_name, &(settings->keys[settings->count])) != 0)
      goto err;

    if (Z2Strdup (attrStr, &(settings->values[settings->count])) != 0)
      goto err;

    settings->count++;
  }

  if (settings->count < max)
  {
    settings->keys = (char **)Z2Realloc(settings->keys, sizeof(char *) * settings->count);
    settings->values = (char **)Z2Realloc(settings->values, sizeof(char *) * settings->count);
  }

  return settings;

err:
  FreeClientSettings(settings, libCtx);

  return (void *) 0;
}

clientSettingsT *NewClientSettings (
   VoltLibCtx *libCtx
   )
{
  clientSettingsT *settings;

  settings = (clientSettingsT *)Z3Malloc(sizeof(clientSettingsT));
  settings->clientName = (void *) 0;
  settings->keys = (void *) 0;
  settings->values = (void *) 0;
  settings->count = 0;

  return settings;
}

void FreeClientSettings (
   clientSettingsT *settings,
   VoltLibCtx *libCtx
   )
{
  int i;

  if (settings == (void *) 0)
    return;

  for (i = 0; i < settings->count; i++)
  {
    Z2Free(settings->keys[i]);
    Z2Free(settings->values[i]);
  }
  if (settings->keys != (void *) 0)
    Z2Free(settings->keys);

  if (settings->values != (void *) 0)
    Z2Free(settings->values);

  if (settings->clientName != (void *) 0)
    Z2Free(settings->clientName);

  Z2Free(settings);
}

#if VOLT_OS == VOLT_WINDOWS_32

char *GetHeaderInternalDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   )
{
  int status;
  WCHAR buf[MAX_MESSAGE_STRING_SIZE];
  unsigned char *utf8Buf = (unsigned char *)0;
  char *retVal = (char *)0;
  LPCWSTR dllFile = L"VSBuildStrings.dll";

  if (policy->hResources == (void *) 0) 
  {
    if ((policy->hResources = LoadLibraryW(dllFile)) == (void *) 0) 
    {
      status = Z2Strdup (MESSAGE_HEADER_INTERNAL_DEFAULT, &retVal);
      return (retVal);
    }
  }

  if (LoadStringW (policy->hResources, 
    MESSAGE_HEADER_INTERNAL_DEFAULT_RESOURCE, buf, 
    MAX_MESSAGE_STRING_SIZE) <= 0) 
  {
    status = Z2Strdup (MESSAGE_HEADER_INTERNAL_DEFAULT, &retVal);
    return (retVal);
  }

  /* convert to Unicode string to UTF8
  */
  status = VoltConvertWideToMultiByteAlloc(
    buf,
    CP_UTF8,
    &utf8Buf,
    libCtx);
  if (status != 0)
  {
    if (utf8Buf != (unsigned char *) 0)
      Z2Free (utf8Buf);
    status = Z2Strdup (MESSAGE_HEADER_INTERNAL_DEFAULT, &retVal);
    return (retVal);
  }

  return utf8Buf;
}


char *GetHeaderExternalDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   )
{
  unsigned int status;
  WCHAR buf[MAX_MESSAGE_STRING_SIZE];
  unsigned char *utf8Buf = (unsigned char *)0;
  char *retVal = (char *)0;
  LPCWSTR dllFile = L"VSBuildStrings.dll";

  if (policy->hResources == (void *) 0) 
  {
    if ((policy->hResources = LoadLibraryW(dllFile)) == (void *) 0) 
    {
      status = Z2Strdup (MESSAGE_HEADER_EXTERNAL_DEFAULT, &retVal);
      return (retVal);
    }
  }

  if (LoadStringW(policy->hResources, 
    MESSAGE_HEADER_EXTERNAL_DEFAULT_RESOURCE, buf, 
    MAX_MESSAGE_STRING_SIZE) <= 0) 
  {
    status = Z2Strdup (MESSAGE_HEADER_EXTERNAL_DEFAULT, &retVal);
    return (retVal);
  }

  /* convert to Unicode string to UTF8
  */
  status = VoltConvertWideToMultiByteAlloc(
    buf,
    CP_UTF8,
    &utf8Buf,
    libCtx);
  if (status != 0)
  {
    if (utf8Buf != (unsigned char *) 0)
      Z2Free (utf8Buf);
    status = Z2Strdup (MESSAGE_HEADER_EXTERNAL_DEFAULT, &retVal);
    return (retVal);
  }

  return utf8Buf;
}

char *GetFooterDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   )
{
  unsigned int status;
  WCHAR buf[MAX_MESSAGE_STRING_SIZE];
  unsigned char *utf8Buf = (unsigned char *)0;
  char *retVal = (char *)0;
  LPCWSTR dllFile = L"VSBuildStrings.dll";

  if (policy->hResources == (void *) 0) 
  {
    if ((policy->hResources = LoadLibraryW(dllFile)) == (void *) 0) 
    {
      status = Z2Strdup (MESSAGE_FOOTER_DEFAULT, &retVal);
      return (retVal);
    }
  }

  if (LoadStringW(policy->hResources, 
    MESSAGE_FOOTER_DEFAULT_RESOURCE, buf, 
    MAX_MESSAGE_STRING_SIZE) <= 0) 
  {
    status = Z2Strdup (MESSAGE_FOOTER_DEFAULT, &retVal);
    return (retVal);
  }

  /* convert to Unicode string to UTF8
  */
  status = VoltConvertWideToMultiByteAlloc(
    buf,
    CP_UTF8,
    &utf8Buf,
    libCtx);
  if (status != 0)
  {
    if (utf8Buf != (unsigned char *) 0)
      Z2Free (utf8Buf);
    status = Z2Strdup (MESSAGE_FOOTER_DEFAULT, &retVal);
    return (retVal);
  }

  return utf8Buf;
}

/* This is the old code. Not being used
*/
HRESULT convertCharSet (
   UINT nCharSet1, 
   LPSTR szCharSet1, 
   UINT nCharSet2, 
   LPSTR *szCharSet2, 
   VoltLibCtx *libCtx
   )
{
  HRESULT hres    = S_OK;
  
  LPWSTR wzCharSet  = (void *) 0;
  LPSTR szCharSet    = (void *) 0;
  ULONG ulCharSetW  = 0;
  ULONG ulCharSetA  = 0;
  int error      = 0;

  *szCharSet2 = (void *) 0;

  if (nCharSet1 == nCharSet2)
  {
    if (Z2Strdup (szCharSet1, szCharSet2) == 0)
      return S_OK;
    else
      return -1;
  }
  
  //Get size of wide string
  if ((error = MultiByteToWideChar(nCharSet1, 0, szCharSet1, -1, (void *) 0, 0)) == 0) {
    hres = -1;
    goto Quit;
  }

  ulCharSetW = error;
  if ((wzCharSet = (LPWSTR)Z3Malloc(sizeof(WCHAR) * (ulCharSetW + 1))) == (void *) 0) {
    hres = -1;
    goto Quit;
  }

  if ((error = MultiByteToWideChar(nCharSet1, 0, szCharSet1, -1, wzCharSet, ulCharSetW)) == 0) {
    hres = -1;
    goto Quit;
  }

  //Get size of narrow string
  if ((error = WideCharToMultiByte(nCharSet2, 0, wzCharSet, -1, (void *) 0, 0, (void *) 0, (void *) 0)) == 0) {
    hres = -1;
    goto Quit;
  }

  ulCharSetA = error;
  if ((szCharSet = (LPSTR)Z3Malloc(sizeof(CHAR) * (ulCharSetA + 1))) == (void *) 0) {
    hres = -1;
    goto Quit;
  }

  if ((error = WideCharToMultiByte(nCharSet2, 0, wzCharSet, -1, szCharSet, ulCharSetA, (void *) 0, (void *) 0)) == 0) {
    hres = -1;
    goto Quit;
  }

  *szCharSet2 = szCharSet;
  szCharSet = (void *) 0; //don't free

Quit:

  if (szCharSet) {
    Z2Free(szCharSet);
  }

  if (wzCharSet) {
    Z2Free(wzCharSet);
  }

  return hres;
}
#endif

⌨️ 快捷键说明

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