您的位置:首页 > 理论基础 > 计算机网络

I8320 手机网络连接建立方法

2010-11-08 20:33 204 查看
没有找到头文件,根据文档拼凑出来的gprs连接方法。

连接成功后需要把pdp0的dns信息加入/etc/resolv.conf里面,删除默认网关,把pdp0的地址作为默认网关

typedef struct {
int BPrimaryPmpProfile;
int PrimaryPmpProfileID;
char Apn[255];
int BStaticIpAddr;
// NetAddr_t IpAddr;
int BStaticDnsAddr;
int DnsCount;
// NetAddr_t DnsAddr[255];
int pad[1024];
}NetPMProfileInfo_t;

typedef struct {
int Event;
int ProfileId;
int Error;
void * Data;
}NetEventInfo_t;

int PdpConnected=0;

void _network_services_cm_cb(NetEventInfo_t * event_cb)
{
printf("event_cb->Error=%d event_cb->Event=%d/n",event_cb->Error,event_cb->Event);

if(event_cb->Error==0) {
if(event_cb->Event==0) {
PdpConnected=1;
unsigned char * ip_addr=(unsigned char *) event_cb->Data;
char command[1024];
system("route delete default");
sprintf(command,"route add default gw %u.%u.%u.%u/n",ip_addr[0x54],ip_addr[0x55],ip_addr[0x56],ip_addr[0x57]);
printf("%s/n",command);
system(command);
sprintf(command,"echo /"nameserver %u.%u.%u.%u/" > /etc/resolv.conf",ip_addr[0x9c],ip_addr[0x9d],ip_addr[0x9e],ip_addr[0x9f]);
printf("%s/n",command);
system(command);
sprintf(command,"echo /"nameserver %u.%u.%u.%u/" >> /etc/resolv.conf",ip_addr[0xb0],ip_addr[0xb1],ip_addr[0xb2],ip_addr[0xb3]);
printf("%s/n",command);
system(command);

// FILE * file=fopen("/mnt/ums/netinfo","w+");
// fwrite((void *)event_cb->Data,1,1024,file);
// fclose(file);

printf("pdp connected/n");
}
if(event_cb->Event==1) {
PdpConnected=0;
printf("pdp closed/n");
}
}
}

int cm_context_close (void);

static int register_rc=0;
static int profileid=-1;
int cm_context_open (void)
{
NetPMProfileInfo_t profinfo;
int profileid_list[20];
int profile_count=1;
if(register_rc)
cm_context_close();
register_rc=0;
memset(&profinfo,0,sizeof(NetPMProfileInfo_t));
int rc=NetCMClientRegister(_network_services_cm_cb);
printf("register rc=%d/n",rc);
if(rc!=0) {
return 0;
}

rc=NetPMGetDefaultProfileId(&profileid);
printf("get profile id rc=%d profileid=%d/n",rc,profileid);
if(rc!=0) {
NetCMClientDeRegister();
return 0;
}

profileid_list[0]=profileid;

rc=NetCMConnectionOpen(profileid_list,profile_count);
printf("connection rc=%d/n",rc);
if(rc!=0) {
NetCMClientDeRegister();
return 0;
}

PdpConnected=0;
int i=0;
for(i=0;i<10;i++) {
if(PdpConnected==1) break;
sleep(1);
}

rc=NetPMGetDefaultProfileInfo(&profinfo);
printf("profinfo rc=%d/n",rc);

// FILE * file=fopen("/mnt/ums/netinfo","w+");
// fwrite((void *)&profinfo,1,1024,file);
// fclose(file);

#if 0
struct hostent *hostinfo=NetDNSGetHostByName(profileid,"www.szonline.com");
if(hostinfo==NULL) {
printf("could not get host information/n");
}
else {
printf("address=%u.%u.%u.%u/n",hostinfo->h_addr_list[0][0],
hostinfo->h_addr_list[0][1],hostinfo->h_addr_list[0][2],
hostinfo->h_addr_list[0][3]);
}
#endif

register_rc=1;
return 1;
}

int cm_context_close (void)
{
int rc=0;
if(register_rc==0) {
printf("no connection close/n");
return 0;
}
if(PdpConnected) {
rc=NetCMConnectionClose(profileid);
printf("close rc=%d/n",rc);
}
int i=0;
for(i=0;i<10;i++) {
if(PdpConnected==0) break;
sleep(1);
}

rc=NetCMClientDeRegister();
printf("deregister =%d/n",rc);
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐