- 积分
- 412
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
发表于 2012-1-15 15:06:44
|
显示全部楼层
本帖最后由 loquat 于 2012-1-15 16:08 编辑
while那部分需要改一改,打算多设置几个接口
怎么结束黑名单和白名单?
int IsBlack(char *szNo)
{
int f,nRet=0;//返回值
int rsize=0,fsize=0;
unsigned int err;
char *buf=0;
char fname[128]="0:\\Misc\\Black.tmo"; // tmo文件名
if ((f=fopen(fname, A_ReadOnly+A_BIN, 0, &err))==-1)
{
return 0;
}
fsize=lseek(f,0,S_END,&err,&err);
lseek(f,0,S_SET,&err,&err);
if (fsize<=0 || (buf=malloc(fsize+1))==0)
{
fclose(f,&err);
return 0;
}
rsize = fread(f,buf,fsize,&err);
buf[rsize] = 0;
fclose(f, &err);
if(rsize == fsize)
{
char black=0; //黑名单标识
char c,*p=buf, *p2;
char szTemp[31],szInfo[120];
unsigned short wst_b[60];
WSHDR *wst, _wst;
wst=CreateLocalWS(&_wst, wst_b, 60);
GetCalleeNumber(IsCalling(), wst); //获取拨入号码
GetProvAndCity(wst->wsbody, szNo); //获取省和城市名
ws2gb(wst, szInfo, 0);
p2 =szTemp;
while( *p )
{
c = *p;
if(c == '[')
black = 1; //黑名单开始
if(c == '{')
white = 1; //白名单开始
if(c > 0x7f)
{*p2++ = c;}
if(c == ';') // 分割符
{
*p2 = 0;
if( strstr(szInfo, szTemp) )
{
if( black )
nRet = 1;
else if( white )
nRet = -1;
else
nRet = 0;
break;
}
else
p2 = szTemp;
}
p++;
}
}
mfree(buf);
buf=0;
return nRet;
}
|
|