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

📄 vsclientpolicyxmllib.c

📁 IBE是一种非对称密码技术
💻 C
📖 第 1 页 / 共 3 页
字号:
  {
    makeStringArray(&tempTrustedDistricts, &tempTrustedDistrictsCount, TRUSTED_DISTRICTS_DEFAULT, libCtx);
  }
  else
  {
    tempTrustedDistricts = cp->trustedDistricts;
    tempTrustedDistrictsCount = cp->trustedDistrictsCount;
  }

  found = 0;

  for (i = 0; i < tempTrustedDistrictsCount; i++)
  {
    if (icXstricmpsafe (tempTrustedDistricts[i], district, libCtx))
    {
      found = 1;
      break;
    }
  }

  if (cp->trustedDistricts == (void *) 0)
    freeStringArray(tempTrustedDistricts, tempTrustedDistrictsCount, libCtx);

  return found;
}

int vs_cp_get_password_caching_mode (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->passwordCaching;
}

int vs_cp_get_decryption_mode (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->decryptionMode;
}

int vs_cp_get_universal_reader_mode (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->sendUniversalReader;
}

char *vs_cp_get_client_setting (
   vsClientPolicyT *cp,
   char *client,
   char *key,
   VoltLibCtx *libCtx
   )
{
  int status, i, j;
  char *retVal = (char *)0;

  for (i = 0; i < cp->clientSettingsCount; i++)
  {
    if (Z2Strcmp(cp->clientSettings[i]->clientName, client) == 0)
    {
      for (j = 0; j < cp->clientSettings[i]->count; j++)
      {
        if (Z2Strcmp(cp->clientSettings[i]->keys[j], key) == 0)
        {
          status = Z2Strdup (cp->clientSettings[i]->values[j], &retVal);
          return (retVal);
        }
      }
    }
  }

  return (char *)0;
}

char *vs_cp_get_zfr_template (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->zfrTemplate == (void *) 0)
    status = Z2Strdup (ZFR_TEMPLATE_DEFAULT, &retVal);
  else
    status = Z2Strdup (cp->zfrTemplate, &retVal);

  return (retVal);
}

char *vs_cp_get_zdm2_template (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->zdm2Template == (void *) 0)
  	return (char*)0;
  	
  status = Z2Strdup (cp->zdm2Template, &retVal);

  return (retVal);
}

char *vs_cp_get_html_message_body_template (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->htmlMessageBodyTemplate == (void *) 0)
  	return (char*)0;
  	
  status = Z2Strdup (cp->htmlMessageBodyTemplate, &retVal);

  return (retVal);
}

char *vs_cp_get_encrypt_rules (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->encryptRules == (void *) 0)
  	return (char*)0;
  	
  status = Z2Strdup (cp->encryptRules, &retVal);

  return (retVal);
}

int vs_cp_get_key_purge_time (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->keyPurgeTime;
}

char *vs_cp_get_defaultZDM (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->defaultZDM != (char *)0)
    status = Z2Strdup (cp->defaultZDM, &retVal);

  return (retVal);
}


int NewClientPolicy (
   vsClientPolicyT **policy,
   VoltLibCtx *libCtx
   )
{
  *policy = (vsClientPolicyT *)Z3Malloc(sizeof(vsClientPolicyT));
  if((*policy) == (void*) 0)
  {
    return VT_ERROR_MEMORY;
  }

  Z2Memset(*policy, 0, sizeof(vsClientPolicyT));

  (*policy)->version = 1;
  (*policy)->localPolicyLocked = 0;
  (*policy)->localDomains = (void *) 0;
  (*policy)->localDomainsCount = 0;
  (*policy)->defaultDistrict = DEFAULT_DISTRICT_DEFAULT;
  (*policy)->userWhitelist = (void *) 0;
  (*policy)->userWhitelistCount = 0;
  (*policy)->provisionedList = (void *) 0;
  (*policy)->provisionedListCount = 0;
  (*policy)->provisionedDistrict = (void *) 0;
  (*policy)->fallthroughDistrict = (void *) 0;
  (*policy)->messageHeaderInternal = (void *) 0;
  (*policy)->messageHeaderExternal = (void *) 0;
  (*policy)->messageFooter = (void *) 0;
  (*policy)->parameterRefreshRateNegative = PARAMETER_REFRESH_RATE_NEGATIVE_DEFAULT;
  (*policy)->parameterRefreshRatePositive = PARAMETER_REFRESH_RATE_POSITIVE_DEFAULT;
  (*policy)->parameterAggressiveDistricts = (void *) 0;
  (*policy)->parameterAggressiveDistrictsCount = 0;
  (*policy)->strictParameterChecking = STRICT_PARAMETER_CHECKING_DEFAULT;
  (*policy)->passwordCaching = PASSWORD_CACHING_DEFAULT;
  (*policy)->decryptionMode = DECRYPTION_MODE_DEFAULT;
  (*policy)->sendUniversalReader = SEND_UNIVERSAL_READER_DEFAULT;
  (*policy)->zfrTemplate = (void *) 0;
  (*policy)->zdm2Template = (void *) 0;
  (*policy)->htmlMessageBodyTemplate = (void *) 0;
  (*policy)->encryptRules = (void *) 0;
  (*policy)->clientSettings = (void *) 0;
  (*policy)->clientSettingsCount = 0;
  (*policy)->trustedDistricts = (void *) 0;
  (*policy)->trustedDistrictsCount = 0;
  (*policy)->keyPurgeTime = KEY_PURGE_TIME_DEFAULT;
  (*policy)->defaultZDM = (void *) 0;

#if VOLT_OS == VOLT_WINDOWS_32
  (*policy)->hResources = (void *) 0;
#endif

  return 0;
}

void FreeClientPolicy (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   )
{
  int i;

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

  if (policy->localDomains != (void *) 0)
    freeStringArray(policy->localDomains, policy->localDomainsCount, libCtx);

  if (policy->userWhitelist != (void *) 0)
    freeStringArray(policy->userWhitelist, policy->userWhitelistCount, libCtx);

  if (policy->provisionedList != (void *) 0)
    freeStringArray(policy->provisionedList, policy->provisionedListCount, libCtx);

  if (policy->provisionedDistrict != (void *) 0)
    Z2Free(policy->provisionedDistrict);

  if (policy->fallthroughDistrict != (void *) 0)
    Z2Free(policy->fallthroughDistrict);

  if (policy->messageHeaderInternal != (void *) 0)
    Z2Free(policy->messageHeaderInternal);

  if (policy->messageHeaderExternal != (void *) 0)
    Z2Free(policy->messageHeaderExternal);

  if (policy->messageFooter != (void *) 0)
    Z2Free(policy->messageFooter);

  if (policy->clientSettings != (void *) 0)
  {
    for (i = 0; i < policy->clientSettingsCount; i++)
      FreeClientSettings(policy->clientSettings[i], libCtx);
    Z2Free(policy->clientSettings);
  }

  if (policy->trustedDistricts != (void *) 0)
    freeStringArray(policy->trustedDistricts, policy->trustedDistrictsCount, libCtx);  

  if (policy->zfrTemplate != (void *) 0)
    Z2Free(policy->zfrTemplate);

  if (policy->zdm2Template != (void *) 0)
    Z2Free(policy->zdm2Template);

  if (policy->htmlMessageBodyTemplate != (void *) 0)
    Z2Free(policy->htmlMessageBodyTemplate);

  if (policy->encryptRules != (void *) 0)
    Z2Free(policy->encryptRules);

  if (policy->parameterAggressiveDistricts != (void *) 0)
    freeStringArray(policy->parameterAggressiveDistricts, policy->parameterAggressiveDistrictsCount, libCtx);

  if (policy->defaultZDM != (char *)0)
    Z2Free (policy->defaultZDM);

#if VOLT_OS == VOLT_WINDOWS_32
  if (policy->hResources) {
    FreeLibrary(policy->hResources);
    policy->hResources = (void *) 0;
  }
#endif

  Z2Free(policy);
}

vsClientPolicyT *ParseClientPolicy (
   char *xml,
   VoltLibCtx *libCtx
   )
{
  icInputStream *bufStream = (icInputStream *)0;
  icXmlParser *parser = (icXmlParser *) 0;
  int ret, i, j;
  icXmlNode *root, *node;
  vsClientPolicyT *policy = (vsClientPolicyT *) 0;
  clientSettingsT *clientSettings;

  icInputStreamCreate (
    ICInputStreamImplString, (unsigned char *)xml, Z2Strlen (xml),
    VOLT_IC_STREAM_COPY_REFERENCE, &bufStream, libCtx);

  if (bufStream == (void *) 0)
    goto err;

  icXmlParserCreate (&parser, libCtx);
  if (parser == (void *) 0)
    goto err;

  ret = icXmlParserParse (parser, bufStream, libCtx);
  if(ret != 0)
    goto err;

  icInputStreamFree (&bufStream, libCtx);
  ret = NewClientPolicy(&policy, libCtx);
  if(ret != 0)
    goto err;

  root = parser->main;
  if (root == (void *) 0)
    goto err;

  if (root->node_type != IC_XML_NODE_TAG)
    goto err;

  // Read opening tag
  if (Z2Strcmp(root->tag_name, "clientPolicy") != 0)
    goto err;

  if (getXMLNodeValue(&(policy->version), root, "version", libCtx) != 0)
    goto err;

  if ((policy->version < MIN_SUPPORTED_VERSION) || (policy->version > MAX_SUPPORTED_VERSION))
    goto err;

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

    if (Z2Strcmp(node->tag_name, "localPolicyLocked") == 0)
    {
      if (getXMLNodeValue(&(policy->localPolicyLocked), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "userWhitelist") == 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->userWhitelist), &(policy->userWhitelistCount), node->children[0]->text, libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "localDomains") == 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->localDomains), &(policy->localDomainsCount), node->children[0]->text, libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "defaultDistrict") == 0)
    {
      if (getXMLNodeValue(&(policy->defaultDistrict), node, "value", libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "provisionedUserList") == 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->provisionedList), &(policy->provisionedListCount), node->children[0]->text, libCtx) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "provisionedUserDistrict") == 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->provisionedDistrict)) != 0)
        goto err;
      icTrim (policy->provisionedDistrict, libCtx);
    }
    else if (Z2Strcmp(node->tag_name, "fallThroughDistrict") == 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->fallthroughDistrict)) != 0)
        goto err;
      icTrim (policy->fallthroughDistrict, libCtx);
    }
    else if (Z2Strcmp(node->tag_name, "messageHeaderInternal") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (policy->messageHeaderInternal != (char *)0)
        Z2Free (policy->messageHeaderInternal);
      if (Z2Strdup (
        node->children[0]->text, &(policy->messageHeaderInternal)) != 0)
        goto err;
      icTrim (policy->messageHeaderInternal, libCtx);
    }
    else if (Z2Strcmp (
      node->tag_name, "messageHeaderInternalAndProvisioned") == 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->messageHeaderExternal)) != 0)
        goto err;
      icTrim (policy->messageHeaderExternal, libCtx);
    }
    else if (Z2Strcmp(node->tag_name, "messageFooter") == 0)
    {
      // Should have one TEXT child
      if ((node->num_children != 1) || (node->children[0]->node_type != IC_XML_NODE_TEXT))
        goto err;

      if (policy->messageFooter != (char *)0)
        Z2Free (policy->messageFooter);
      if (Z2Strdup (node->children[0]->text, &(policy->messageFooter)) != 0)
        goto err;
    }
    else if (Z2Strcmp(node->tag_name, "parameterRefreshRate") == 0)
    {
      if (getXMLNodeValue(&(policy->parameterRefreshRatePositive), node, "positive", libCtx) != 0)

⌨️ 快捷键说明

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