MTK编程小结:域名解析

MTK编程小结

域名解析
对于网络编程而言,硬编码IP到客户端,定是下下策,为此,我们需要域名解析功能。MTK对此有类似的解决之道,即soc_gethostbyname,下面将它的用法简单叙述如下
soc_gethostbyname( kal_bool is_blocking,//是否为阻塞式调用,手机平台一般不会支持阻塞式调用的
     module_type mod_id,  //调用该函数的模块id,也即将来接收消息的模块
     kal_int32 request_id,//用于区分是那个请求之用,我们自定义的id值,标示不同的应用
     const kal_char *domain_name,//域名
     kal_uint8 *addr,//ipv4的ip地址,将来也许会有ipv6的
     kal_uint8 *addr_len,//数据长度
     kal_uint8 access_id,//这个访问控制id,我没有使用给它赋值为0好了
     kal_uint32 nwk_account_id //手机gprs帐户id,做过手机的人自然会明白
     )//

补充,调用这个函数不需要建立socket,而且是我们建立tcp/ip连接之前,必须完成一个必备步骤
实例代码如下:

typedef void (* mf_funcOnGetHostByName)(mf_u32 hAddr,mf_u32 nAddr);
static mf_funcOnGetHostByName mf_dnsFunc = NULL;

#define MF_DNS_APPID 1

static void MF_dns_event(void * inMsg)
{
 app_soc_get_host_by_name_ind_struct *dns_ind;
 if( inMsg )
 {
  dns_ind = (app_soc_get_host_by_name_ind_struct*) inMsg;
  if (dns_ind->result == KAL_TRUE)
  {
   mf_u32 ipAddr = 0;
   switch (dns_ind->request_id)
   {
    case MF_DNS_APPID:
     ClearProtocolEventHandler(MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
     kal_prompt_trace(MOD_ENG,"MF_getHostByName  ip: %d, %d, %d, %d", dns_ind->addr[0], dns_ind->addr[1], dns_ind->addr[2], dns_ind->addr[3]);
     MF_memcpy(&ipAddr, dns_ind->addr,dns_ind->addr_len);
     if( mf_dnsFunc )
      mf_dnsFunc(MF_ntohl((mf_u32)ipAddr),ipAddr);
     mf_dnsFunc = NULL;
     break;
   }
  }
 }
 else if( mf_dnsFunc )
 {
  mf_dnsFunc(0,0);
 }
}

mf_bool MF_getHostByName(mf_s8 * server_domain,mf_u32 * hAddr,mf_u32 * nAddr, mf_funcOnGetHostByName func)
{
 kal_int8 ret = MF_FALSE;
 static kal_uint8 addr_len=0;
 kal_uint32 nwk_account_id = mf_skt_account;
 static kal_int16 sDNSHandle = MF_DNS_APPID;
 static kal_uint32 ipAddr;

 mf_dnsFunc = func;
 
 ret = soc_gethostbyname(KAL_FALSE,
                  MOD_MMI,
                    (kal_int32)sDNSHandle,
                    (const kal_char *)server_domain,
                    (kal_uint8*)&ipAddr,
                    (kal_uint8*)&addr_len,
                    (kal_uint8)0,
                    nwk_account_id);
 
    if (ret == SOC_SUCCESS)
 {
  kal_uint8 *ptr;
  ptr = (kal_uint8*)&ipAddr;

  kal_prompt_trace(MOD_ENG,"MF_getHostByName  ip: %d, %d, %d, %d", ptr[0], ptr[1], ptr[2], ptr[3]);
  if(hAddr)
   *hAddr = MF_ntohl((mf_u32)ipAddr);
  if(nAddr)
   *nAddr = (mf_u32)ipAddr;

  return MF_TRUE;
    }
 else if(ret == SOC_WOULDBLOCK)
 {
  SetProtocolEventHandler(MF_dns_event, MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
 }
 
 kal_prompt_trace(MOD_ENG," MF_getHostByName , ret %d", ret);

 return ret;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值