与客户端通信的CGI程序

/*接收前台传过来的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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值