along1976 发表于 2012-1-15 12:37:54

代码参考,loquat请进。

本帖最后由 along1976 于 2012-1-15 12:38 编辑

//代码参考,站内短信发不了
int IsBlack(char *szNo)
{

int f,nRet=0;//返回值

int rsize=0,fsize=0;

unsigned int err;

char *buf=0;

char fname="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 = 0;

fclose(f, &err);

if(rsize == fsize)

{

char black=0; //黑名单标识

char c,*p=buf, *p2;

char szTemp,szInfo;

unsigned short wst_b;

WSHDR *wst, _wst;

wst=CreateLocalWS(&_wst, wst_b, 60);


GetProvAndCity(wst->wsbody, szNo); //获取省和城市名

ws2gb(wst, szInfo, 0);

p2 =szTemp;

while( *p )

{

c = *p;

if(c == '{') //黑名单开始

black = 1;

if(c > 0x7f)

{

*p2++ = c;

}

if(c == ';') // 分割符

{

*p2 = 0;

if( strstr(szInfo, szTemp) )

{

if( black )

nRet = 1;

else

nRet = -1;

break;

}

else

p2 = szTemp;

}

p++;

}

}

mfree(buf);

buf=0;

return nRet;
}

loquat 发表于 2012-1-15 13:33:54

代码收到,先测试一下。。。

loquat 发表于 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="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 = 0;
fclose(f, &err);
if(rsize == fsize)
{
      char black=0; //黑名单标识
      char c,*p=buf, *p2;
      char szTemp,szInfo;
      unsigned short wst_b;
      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;
}

loquat 发表于 2012-1-15 15:17:17

拨入号码在黑名单中,返回1,
拨入号码在白名单中,返回-1
拨入号码不在以上两个列表中,返回0

BingK 发表于 2012-1-15 15:42:06

         GetCalleeNumber(IsCalling(), wst); //获取拨入号码
         wst=CreateLocalWS(&_wst, wst_b, 60);这两句要反一下

along1976 发表于 2012-1-20 21:24:48

楼上是冰大吧:)

高极名功 发表于 2012-2-4 16:30:44

你们还能记得住网址?
页: [1]
查看完整版本: 代码参考,loquat请进。