/*接收前台传过来的xml数据*/
ULONG Xml_Get(char **ppChXml)
{
CHAR *pcEnvVal;
static CHAR acPostStr[60000];
ULONG ulPostLen = 0;
pcEnvVal = getenv("REQUEST_METHOD");/*获取服务器与CGI的传输方式(post/get)*/
if ( pcEnvVal == NULL )
{
ShowInternalError(-1);
return IPPBX_FAILED;/*找不到环境变量*/
}
/* only process "POST" mathed */
if ( strcmp(pcEnvVal,"POST") ==0 )//post方法
{
memset(acPostStr, 0, sizeof(acPostStr));
if ( IPPBX_OK != process_post(acPostStr, 60000, &ulPostLen) )
{
ShowInternalError(-1);
return IPPBX_FAILED;
}
}
*ppChXml = acPostStr;
return IPPBX_OK;
}
/*接收处理post方法传来的数据*/
ULONG process_post(char *pcPostStr, ULONG ulMaxLen, ULONG *pulLen)
{
USHORT usLength;
int iCL;
char *pcEnv;
pcEnv = getenv("CONTENT_LENGTH");/*获得有效信息长度*/
if ( pcEnv )
{
iCL = atoi(pcEnv);
if ( iCL > (int)ulMaxLen )
{
fprintf(stderr," post buffer over flow!");/*stderr为处理错误信息*/
return IPPBX_FAILED;
}
}
usLength = 0;
while ( !feof(stdin) )/*stdin为定义的文件流,读取stdin*/
{
if ( usLength >= ulMaxLen )
{
fprintf(stderr," post buffer too small!");
return IPPBX_FAILED;
}
pcPostStr[usLength++] = (char)fgetc(stdin);//标准输入读取一定数据
}
/*The last char is illegal*/
usLength--;
pcPostStr[usLength] = 0;
*pulLen = usLength;
return IPPBX_OK;
}
ULONG Xml_Get(char **ppChXml)
{
CHAR *pcEnvVal;
static CHAR acPostStr[60000];
ULONG ulPostLen = 0;
pcEnvVal = getenv("REQUEST_METHOD");/*获取服务器与CGI的传输方式(post/get)*/
if ( pcEnvVal == NULL )
{
ShowInternalError(-1);
return IPPBX_FAILED;/*找不到环境变量*/
}
/* only process "POST" mathed */
if ( strcmp(pcEnvVal,"POST") ==0 )//post方法
{
memset(acPostStr, 0, sizeof(acPostStr));
if ( IPPBX_OK != process_post(acPostStr, 60000, &ulPostLen) )
{
ShowInternalError(-1);
return IPPBX_FAILED;
}
}
*ppChXml = acPostStr;
return IPPBX_OK;
}
/*接收处理post方法传来的数据*/
ULONG process_post(char *pcPostStr, ULONG ulMaxLen, ULONG *pulLen)
{
USHORT usLength;
int iCL;
char *pcEnv;
pcEnv = getenv("CONTENT_LENGTH");/*获得有效信息长度*/
if ( pcEnv )
{
iCL = atoi(pcEnv);
if ( iCL > (int)ulMaxLen )
{
fprintf(stderr," post buffer over flow!");/*stderr为处理错误信息*/
return IPPBX_FAILED;
}
}
usLength = 0;
while ( !feof(stdin) )/*stdin为定义的文件流,读取stdin*/
{
if ( usLength >= ulMaxLen )
{
fprintf(stderr," post buffer too small!");
return IPPBX_FAILED;
}
pcPostStr[usLength++] = (char)fgetc(stdin);//标准输入读取一定数据
}
/*The last char is illegal*/
usLength--;
pcPostStr[usLength] = 0;
*pulLen = usLength;
return IPPBX_OK;
}