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