Bug 961598 - support DNS reslover. r=vchang

This commit is contained in:
John Shih 2014-02-20 19:04:51 +08:00
parent 4e5dcc9d23
commit 1dba42f7f1
4 changed files with 45 additions and 0 deletions

View File

@ -283,6 +283,7 @@ NetworkService.prototype = {
let options = {
cmd: "setDNS",
ifname: networkInterface.name,
domain: "mozilla." + networkInterface.name + ".doman",
dns1_str: networkInterface.dns1,
dns2_str: networkInterface.dns2
};
@ -296,6 +297,7 @@ NetworkService.prototype = {
ifname: network.name,
oldIfname: (oldInterface && oldInterface !== network) ? oldInterface.name : null,
gateway_str: network.gateway,
domain: "mozilla." + network.name + ".doman",
dns1_str: network.dns1,
dns2_str: network.dns2
};

View File

@ -205,6 +205,11 @@ CommandFunc NetworkUtils::sNetworkInterfaceSetAlarmChain[] = {
NetworkUtils::networkInterfaceAlarmSuccess
};
CommandFunc NetworkUtils::sSetDnsChain[] = {
NetworkUtils::setDefaultInterface,
NetworkUtils::setInterfaceDns
};
/**
* Helper function to get the bit length from given mask.
*/
@ -738,6 +743,26 @@ void NetworkUtils::disableNat(CommandChain* aChain,
doCommand(command, aChain, aCallback);
}
void NetworkUtils::setDefaultInterface(CommandChain* aChain,
CommandCallback aCallback,
NetworkResultOptions& aResult)
{
char command[MAX_COMMAND_SIZE];
snprintf(command, MAX_COMMAND_SIZE - 1, "resolver setdefaultif %s", GET_CHAR(mIfname));
doCommand(command, aChain, aCallback);
}
void NetworkUtils::setInterfaceDns(CommandChain* aChain,
CommandCallback aCallback,
NetworkResultOptions& aResult)
{
char command[MAX_COMMAND_SIZE];
snprintf(command, MAX_COMMAND_SIZE - 1, "resolver setifdns %s %s %s %s", GET_CHAR(mIfname), GET_CHAR(mDomain), GET_CHAR(mDns1_str), GET_CHAR(mDns2_str));
doCommand(command, aChain, aCallback);
}
#undef GET_CHAR
#undef GET_FIELD
@ -868,6 +893,11 @@ void NetworkUtils::wifiOperationModeSuccess(CommandChain* aChain,
postMessage(aChain->getParams(), aResult);
}
void NetworkUtils::setDnsFail(NetworkParams& aOptions, NetworkResultOptions& aResult)
{
postMessage(aOptions, aResult);
}
#undef ASSIGN_FIELD
#undef ASSIGN_FIELD_VALUE
@ -1054,6 +1084,11 @@ bool NetworkUtils::setDNS(NetworkParams& aOptions)
snprintf(num, PROPERTY_VALUE_MAX - 1, "%d", atoi(dnschange) + 1);
property_set("net.dnschange", num);
// DNS needs to be set through netd since JellyBean (4.3).
if (SDK_VERSION >= 18) {
RUN_CHAIN(aOptions, sSetDnsChain, setDnsFail)
}
return true;
}

View File

@ -30,6 +30,7 @@ public:
NetworkParams(const NetworkParams& aOther) {
mIp = aOther.mIp;
mCmd = aOther.mCmd;
mDomain = aOther.mDomain;
mDns1_str = aOther.mDns1_str;
mDns2_str = aOther.mDns2_str;
mGateway = aOther.mGateway;
@ -106,6 +107,7 @@ public:
COPY_FIELD(mId)
COPY_FIELD(mCmd)
COPY_OPT_STRING_FIELD(mDomain, EmptyString())
COPY_OPT_STRING_FIELD(mDns1_str, EmptyString())
COPY_OPT_STRING_FIELD(mDns2_str, EmptyString())
COPY_OPT_STRING_FIELD(mGateway, EmptyString())
@ -156,6 +158,7 @@ public:
int32_t mId;
nsString mCmd;
nsString mDomain;
nsString mDns1_str;
nsString mDns2_str;
nsString mGateway;
@ -299,6 +302,7 @@ private:
static CommandFunc sNetworkInterfaceEnableAlarmChain[];
static CommandFunc sNetworkInterfaceDisableAlarmChain[];
static CommandFunc sNetworkInterfaceSetAlarmChain[];
static CommandFunc sSetDnsChain[];
/**
* Individual netd command stored in command chain.
@ -331,6 +335,8 @@ private:
static void setDnsForwarders(PARAMS);
static void enableNat(PARAMS);
static void disableNat(PARAMS);
static void setDefaultInterface(PARAMS);
static void setInterfaceDns(PARAMS);
static void wifiTetheringSuccess(PARAMS);
static void usbTetheringSuccess(PARAMS);
static void networkInterfaceStatsSuccess(PARAMS);
@ -351,6 +357,7 @@ private:
static void setDhcpServerFail(PARAMS);
static void networkInterfaceStatsFail(PARAMS);
static void networkInterfaceAlarmFail(PARAMS);
static void setDnsFail(PARAMS);
#undef PARAMS
/**

View File

@ -15,6 +15,7 @@ dictionary NetworkCommandOptions
// "removeHostRoutes".
DOMString ip; // for "removeNetworkRoute", "setWifiTethering".
DOMString netmask; // for "removeNetworkRoute".
DOMString domain; // for "setDNS"
DOMString dns1_str; // for "setDNS", "setDefaultRouteAndDNS".
DOMString dns2_str; // for "setDNS", "setDefaultRouteAndDNS".
DOMString oldIfname; // for "setDefaultRouteAndDNS".