📄 vsclientpolicyxmllib.c
字号:
{
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 + -