void DnsProxyListener::GetHostByNameHandler::run() { if (DBG) { ALOGD("DnsProxyListener::GetHostByNameHandler::run\n"); } char iface[IF_NAMESIZE + 1]; if (mIface == NULL) { _resolv_get_pids_associated_interface(mPid, iface, sizeof(iface)); } struct hostent* hp; hp = android_gethostbynameforiface(mName, mAf, mIface ? mIface : iface); if (DBG) { ALOGD("GetHostByNameHandler::run gethostbyname errno: %s hp->h_name = %s, name_len = %d\n", hp ? "success" : strerror(errno), (hp && hp->h_name) ? hp->h_name: "null", (hp && hp->h_name) ? strlen(hp->h_name)+ 1 : 0); } bool success = true; if (hp) { success = mClient->sendCode(ResponseCode::DnsProxyQueryResult) == 0; success &= sendhostent(mClient, hp); } else { success = mClient->sendBinaryMsg(ResponseCode::DnsProxyOperationFailed, NULL, 0) == 0; } if (!success) { ALOGW("GetHostByNameHandler: Error writing DNS result to client\n"); } mClient->decRef(); }
void DnsProxyListener::GetHostByAddrHandler::run() { if (DBG) { ALOGD("DnsProxyListener::GetHostByAddrHandler::run\n"); } char tmp[IF_NAMESIZE + 1]; int mark = mMark; if (mIface == NULL) { //fall back to the per uid interface if no per pid interface exists if(!_resolv_get_pids_associated_interface(mPid, tmp, sizeof(tmp))) if(!_resolv_get_uids_associated_interface(mUid, tmp, sizeof(tmp))) mark = -1; } struct hostent* hp; // NOTE gethostbyaddr should take a void* but bionic thinks it should be char* hp = android_gethostbyaddrforiface((char*)mAddress, mAddressLen, mAddressFamily, mIface ? mIface : tmp, mark); if (DBG) { ALOGD("GetHostByAddrHandler::run gethostbyaddr errno: %s hp->h_name = %s, name_len = %d\n", hp ? "success" : strerror(errno), (hp && hp->h_name) ? hp->h_name: "null", (hp && hp->h_name) ? strlen(hp->h_name)+ 1 : 0); } bool success = true; if (hp) { success = mClient->sendCode(ResponseCode::DnsProxyQueryResult) == 0; success &= sendhostent(mClient, hp); } else { success = mClient->sendBinaryMsg(ResponseCode::DnsProxyOperationFailed, NULL, 0) == 0; } if (!success) { ALOGW("GetHostByAddrHandler: Error writing DNS result to client\n"); } mClient->decRef(); }