- 积分
- 412
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
发表于 2009-3-7 14:27:30
|
显示全部楼层
本帖最后由 loquat 于 2009-3-7 14:28 编辑
- #include "..\inc\swilib.h"
- //#pragma swi_number=0x0248
- //__swi void GetCalleeNumber(int index, WSHDR *ws);
- extern void GetCalleeNumber(int index, WSHDR *ws);
- int do_check(int group)
- {
- char path[]="0:\\Misc\\BlackList.txt";
- unsigned int err;
- int f=fopen(path, A_ReadOnly, P_READ, &err);
- if(f<0)
- return 0;//0,不在黑名单或者名单不存在
- char *buf=malloc(4096);
- int size=fread(f, buf, 4096, &err);
- fclose(f, &err);
- char *p;
- p=strstr(buf, "[Profile]:");
- if(p)
- {
- p+=10;
- if((*p)>='1'&&(*p)<='8')
- {
- if((*p-'1')!=GetProfile())
- return 0;
- }
- //int pf=GetProfile();
- }
- p=strstr(buf, "[Group]:");
- if(p)
- {
- p+=8;
- if((*p)>='1'&&(*p)<='9')
- {
- if(group==(*p)-0x28)
- return 1;
- }
- }
- if(size>=0)
- buf[size]=0;
- char num[32];
- WSHDR *ws=AllocWS(32);
- GetCalleeNumber(IsCalling(), ws);
- ws_2str(ws, num, 32);
- char *s=num;
- if(strncmp(num, "+86", 3)==0)
- s+=3;
- //char *
- p=strstr(buf, s);
- int rec;
- s=p-1;
- if(p)
- {
- if(s)
- {
- if((*s)>='0'&&(*s)<='9')
- rec=0;
- else
- rec=1;
- }
- else
- rec=1;//拒接
- }
- else
- rec=0;
- mfree(buf);
- FreeWS(ws);
- return rec;
- }
复制代码- #ifdef E71Cv41
- #define ADDR_GetCalleeNumber 0xA094D15E+1
- #define ADR_PlaySound2 0xA05ABEA4
- #endif
- CODE16
- EXTERN do_check
- RSEG BLACK_LIST_BODY
- PUBLIC GetCalleeNumber
-
- GetCalleeNumber:
- PUSH {R7,LR}
- LDR R7, =ADDR_GetCalleeNumber
- BLX R7
- POP {R7,PC}
-
- BODY:
- PUSH {R0-R7,LR}
- BLX do_check
- CMP R0, #1
- BNE RP
- MOV R0, #0
- SWI 0x66 //EndCallBusy
- B EXIT
- RP:
- POP {R0-R7}
- LDR R7,=ADR_PlaySound2
- BLX R7
- //SWI 0x33 //PlaySound2
- POP {PC}
- EXIT:
- POP {R0-R7,PC}
- /*
- NONAME:
- PUSH {R0-R7,LR}
- MOV R0, #1
- BL get_it
- CMP R0, #0
- BEQ EXITNOME
- MOV R0, #0
- //LDR R3, =ADR_EndCallBusy
- //BLX R3
- SWI 0x66 //EndCallBusy
- EXITNOME:
- POP {R0-R7,PC}*/
-
- CODE32
- RSEG BLACKLIST_DUMP
- BLACK_LIST_DUMP:
- LDR R12, =BODY
- BX R12
-
- CODE16
- RSEG RHOOKBLACKLIST:CODE(1)
- BLX BLACK_LIST_DUMP
-
- END
复制代码- -carm
- -Z(CODE)BLACK_LIST_BODY,CODE,DATA_C,ICODE,INITTAB,INTVEC,IRQ_STACK,CSTACK=A1359A00-FFFFFFFF
- -Z(CODE)BLACKLIST_DUMP=A08511F4-FFFFFFFF
- -Z(CODE)RHOOKBLACKLIST=A071DC0E-FFFFFFFF
- //-Z(CODE)NONAMEHOOK=A09DBC14-FFFFFFFF
复制代码 |
|