📄 icserver.c
字号:
if (node->children[j]->node_type != IC_XML_NODE_TAG)
continue;
if (Z2Strcmp(node->children[j]->tag_name, "vs:privateKey") == 0)
{
privKeyNode = node->children[j];
}
else if (Z2Strcmp(node->children[j]->tag_name, "vs:authToken") == 0)
{
authTokenNode = node->children[j];
}
else if (Z2Strcmp(node->children[j]->tag_name, "vs:cert") == 0)
{
certNode = node->children[j];
}
else if (Z2Strcmp(node->children[j]->tag_name, "vs:location") == 0)
{
VOLT_SET_FNCT_LINE (fnctLine)
icTableGet (
node->children[j]->attributes, "url", &url, libCtx);
if (url == (char *)0)
goto cleanup1;
else
{
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = Z2Strdup (url, &(responseData->url));
if (status != 0)
goto cleanup1;
}
}
}
}
}
if (authTokenNode != (icXmlNode *) 0)
{
/* Should have one TEXT child
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_INPUT;
if ( (authTokenNode->num_children != 1) ||
(authTokenNode->children[0]->node_type != IC_XML_NODE_TEXT) )
goto cleanup1;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = Z2Strdup (
authTokenNode->children[0]->text, &(responseData->authToken));
if (status != 0)
goto cleanup1;
}
if (privKeyNode != (icXmlNode *) 0)
{
/* Should have one TEXT child
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_INPUT;
if ( (privKeyNode->num_children != 1) ||
(privKeyNode->children[0]->node_type != IC_XML_NODE_TEXT) )
goto cleanup1;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = icBase64Decode (
&(responseData->privateKey), &(responseData->privateKeyLen),
privKeyNode->children[0]->text, -1, libCtx);
if (status != 0)
goto cleanup1;
}
if (certNode != (icXmlNode *) 0)
{
/* Should have one TEXT child
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_INPUT;
if ( (certNode->num_children != 1) ||
(certNode->children[0]->node_type != IC_XML_NODE_TEXT) )
goto cleanup1;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = icBase64Decode (
&certDer, &len, certNode->children[0]->text, -1, libCtx);
if (status != 0)
goto cleanup1;
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ENCODING;
ptr = certDer;
responseData->asn1Cert = d2i_Asn1X509Cert ((void *)0, &ptr, len);
if (responseData->asn1Cert == (Asn1X509Cert *)0)
goto cleanup1;
}
/* Consistency check on responseData
*/
status = 0;
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
if ( ((*code == IC_SERVER_KEY_RETURNED_RESPONSE) &&
(responseData->privateKey == (void*) 0)) ||
((*code == IC_SERVER_TOKEN_RETURNED_RESPONSE) &&
(responseData->authToken == (void*) 0)) ||
((*code == IC_SERVER_TOKEN_RETURNED_RESPONSE) &&
(responseData->id == (void*) 0)) ||
((*code == IC_SERVER_GOTO_URL_RESPONSE) &&
(responseData->url == (void*) 0)) )
status = VT_ERROR_INVALID_INPUT;
cleanup1:
icXmlParserFree (&parser, libCtx);
icInputStreamFree (&bufStream, libCtx);
if (certDer != (unsigned char *)0)
Z2Free (certDer);
if (status == 0)
return (0);
if (responseData->authToken != (char *)0)
{
Z2Free (responseData->authToken);
responseData->authToken = (char *)0;
}
if (responseData->privateKey != (unsigned char *)0)
{
Z2Free (responseData->privateKey);
responseData->privateKey = (unsigned char *)0;
}
if (responseData->id != (unsigned char *)0)
{
Z2Free (responseData->id);
responseData->id = (unsigned char *)0;
}
if (responseData->asn1Cert != (Asn1X509Cert *)0)
{
Asn1X509Cert_free (responseData->asn1Cert);
responseData->asn1Cert = (Asn1X509Cert *)0;
}
if (responseData->url != (char *)0)
{
Z2Free (responseData->url);
responseData->url = (char *)0;
}
VOLT_LOG_ERROR (
(VtLibCtx)libCtx, status, errorType, fnctLine,
"icParseServerResponse", (char *)0)
return (status);
}
int icDistrictToServer (
unsigned char *district,
char **ret1,
VoltLibCtx *libCtx
)
{
int status;
unsigned int defNameLen, domainLen;
char *domain = (char *)0;
char *ret = (char *)0;
char *temp, *dot;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
*ret1 = (char *)0;
dot = ".";
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = icGetDomainFromDistrict (district, &domain, libCtx);
if (status != 0)
goto cleanup2;
defNameLen = Z2Strlen (IC_SERVER_DEFAULT_SERVER_NAME);
domainLen = Z2Strlen (domain);
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
if (ret == (char *)0)
goto cleanup2;
temp = ret;
Z2Memcpy (temp, IC_SERVER_DEFAULT_SERVER_NAME, defNameLen);
temp += defNameLen;
Z2Memcpy (temp, dot, 1);
temp++;
Z2Memcpy (temp, domain, domainLen + 1);
*ret1 = ret;
status = 0;
cleanup2:
if (domain != (char *)0)
Z2Free (domain);
VOLT_LOG_ERROR_COMPARE (
status, (VtLibCtx)libCtx, status, errorType, fnctLine,
"icDistrictToServer", (char *)0)
return (status);
}
int icDistrictToParameterServer (
unsigned char *district,
char **ret1,
VoltLibCtx *libCtx
)
{
int status;
unsigned int defNameLen, domainLen;
char *domain = (char *)0;
char *temp, *ret, *dot;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
*ret1 = (char *)0;
dot = ".";
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = icGetDomainFromDistrict (district, &domain, libCtx);
if (status != 0)
goto cleanup3;
defNameLen = Z2Strlen(IC_SERVER_DEFAULT_PARAMS_SERVER_NAME);
domainLen = Z2Strlen (domain);
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
if (ret == (char *)0)
goto cleanup3;
temp = ret;
Z2Memcpy (temp, IC_SERVER_DEFAULT_PARAMS_SERVER_NAME, defNameLen);
temp += defNameLen;
Z2Memcpy (temp, dot, 1);
temp++;
Z2Memcpy (temp, domain, domainLen + 1);
*ret1 = ret;
status = 0;
cleanup3:
if (domain != (char *)0)
Z2Free (domain);
VOLT_LOG_ERROR_COMPARE (
status, (VtLibCtx)libCtx, status, errorType, fnctLine,
"icDistrictToParameterServer", (char *)0)
return (status);
}
int icDomainToServer (
unsigned char *domain,
char **ret1,
VoltLibCtx *libCtx
)
{
int status;
unsigned int defNameLen, domainLen;
char *ret = (char *)0;
char *nullChar, *temp;
VOLT_DECLARE_FNCT_LINE (fnctLine)
*ret1 = (char *)0;
nullChar = "\0";
defNameLen = Z2Strlen (IC_SERVER_DEFAULT_SERVER_NAME);
domainLen = Z2Strlen (domain);
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
if (ret == (char *)0)
goto errorcode1;
temp = ret;
Z2Memcpy (temp, IC_SERVER_DEFAULT_SERVER_NAME, defNameLen);
temp += defNameLen;
Z2Memcpy (temp, nullChar, 1);
temp++;
Z2Memcpy (temp, domain, domainLen + 1);
*ret1 = ret;
status = 0;
errorcode1:
VOLT_LOG_ERROR_COMPARE (
status, (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
"icDomainToServer", (char *)0)
return (status);
}
int icDomainToParameterServer (
unsigned char *domain,
char **ret1,
VoltLibCtx *libCtx
)
{
int status;
unsigned int defNameLen, domainLen;
char *ret = (char *)0;
char *dot, *temp;
VOLT_DECLARE_FNCT_LINE (fnctLine)
*ret1 = (char *)0;
dot = ".";
defNameLen = Z2Strlen (IC_SERVER_DEFAULT_PARAMS_SERVER_NAME);
domainLen = Z2Strlen (domain);
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
if (ret == (char*) 0)
goto errorcode;
temp = ret;
Z2Memcpy (temp, IC_SERVER_DEFAULT_PARAMS_SERVER_NAME, defNameLen);
temp += defNameLen;
Z2Memcpy (temp, dot, 1);
temp++;
Z2Memcpy (temp, domain, domainLen + 1);
*ret1 = ret;
status = 0;
errorcode:
VOLT_LOG_ERROR_COMPARE (
status, (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
"icDomainToParameterServer", (char *)0)
return (status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -