diff options
Diffstat (limited to 'msm8998')
-rw-r--r-- | msm8998/hal/src/HAL.cpp | 56 | ||||
-rw-r--r-- | msm8998/hal/src/PrefixParser.cpp | 12 |
2 files changed, 46 insertions, 22 deletions
diff --git a/msm8998/hal/src/HAL.cpp b/msm8998/hal/src/HAL.cpp index 8ff0aa8..22aff0f 100644 --- a/msm8998/hal/src/HAL.cpp +++ b/msm8998/hal/src/HAL.cpp @@ -41,6 +41,7 @@ /* External Includes */ #include <cutils/log.h> #include <string> +#include <sys/socket.h> #include <sys/types.h> #include <vector> @@ -399,15 +400,26 @@ Return<void> HAL::setLocalPrefixes const hidl_vec<hidl_string>& prefixes, setLocalPrefixes_cb hidl_cb ) { + BoolResult res; + PrefixParser parser; + vector<string> prefixesStr = convertHidlStrToStdStr(prefixes); + LocalLogBuffer::FunctionLog fl(__func__); - fl.addArg("prefixes", "unused"); - #pragma unused(prefixes) + fl.addArg("prefixes", prefixesStr); - /* Fake Success */ - BoolResult res = ipaResultToBoolResult(RET::SUCCESS); - hidl_cb(res.success, res.errMsg); + if (!isInitialized()) { + BoolResult res = makeInputCheckFailure("Not initialized"); + } else if(prefixesStr.size() < 1) { + res = ipaResultToBoolResult(RET::FAIL_INPUT_CHECK); + } else if (!parser.add(prefixesStr)) { + res = makeInputCheckFailure(parser.getLastErrAsStr()); + } else { + res = ipaResultToBoolResult(RET::SUCCESS); + } + hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); + mLogs.addLog(fl); return Void(); } /* setLocalPrefixes */ @@ -484,7 +496,12 @@ Return<void> HAL::setUpstreamParameters * qualified here. But then, how do we allow them to be empty/null as well * while still preserving a sane API on PrefixParser? */ - if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) { + if (!isInitialized()) { + BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)"); + hidl_cb(res.success, res.errMsg); + fl.setResult(res.success, res.errMsg); + } + else if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) { BoolResult res = makeInputCheckFailure(v4AddrParser.getLastErrAsStr()); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); @@ -496,19 +513,6 @@ Return<void> HAL::setUpstreamParameters BoolResult res = makeInputCheckFailure(v6GwParser.getLastErrAsStr()); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); - } else if (v6GwParser.size() > 1) { - RET ipaReturn = mIPA->stopAllOffload(); - if (ipaReturn != RET::SUCCESS) { - BoolResult res = - makeInputCheckFailure("Cannot accept more than 1 IPv6 Gateway. Offload still running and may result in data path errors"); - hidl_cb(res.success, res.errMsg); - fl.setResult(res.success, res.errMsg); - } else { - BoolResult res = - makeInputCheckFailure("Cannot accept more than 1 IPv6 Gateway. In an effort to avoid any data path errors, offload has been stopped"); - hidl_cb(res.success, res.errMsg); - fl.setResult(res.success, res.errMsg); - } } else { RET ipaReturn = mIPA->setUpstream( iface.c_str(), @@ -535,7 +539,12 @@ Return<void> HAL::addDownstream PrefixParser prefixParser; - if (!prefixParser.add(prefix)) { + if (!isInitialized()) { + BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)"); + hidl_cb(res.success, res.errMsg); + fl.setResult(res.success, res.errMsg); + } + else if (!prefixParser.add(prefix)) { BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr()); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); @@ -564,7 +573,12 @@ Return<void> HAL::removeDownstream PrefixParser prefixParser; - if (!prefixParser.add(prefix)) { + if (!isInitialized()) { + BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)"); + hidl_cb(res.success, res.errMsg); + fl.setResult(res.success, res.errMsg); + } + else if (!prefixParser.add(prefix)) { BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr()); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); diff --git a/msm8998/hal/src/PrefixParser.cpp b/msm8998/hal/src/PrefixParser.cpp index 60aae08..d38bec0 100644 --- a/msm8998/hal/src/PrefixParser.cpp +++ b/msm8998/hal/src/PrefixParser.cpp @@ -118,6 +118,9 @@ string PrefixParser::getLastErrAsStr() { /* ------------------------------ PRIVATE ----------------------------------- */ bool PrefixParser::add(vector<string> in, IP_FAM famHint) { + if (in.size() == 0) + return false; + for (size_t i = 0; i < in.size(); i++) { if (!add(in[i], famHint)) return false; @@ -126,6 +129,11 @@ bool PrefixParser::add(vector<string> in, IP_FAM famHint) { } /* add */ bool PrefixParser::add(string in, IP_FAM famHint) { + if (in.length() == 0) { + mLastErr = "Failed to parse string, length = 0..."; + return false; + } + if (famHint == IP_FAM::INVALID) famHint = guessIPFamily(in); @@ -138,8 +146,10 @@ bool PrefixParser::add(string in, IP_FAM famHint) { } int mask = parseSubnetMask(subnet, famHint); - if (!isMaskValid(mask, famHint)) + if (!isMaskValid(mask, famHint)) { + mLastErr = "Invalid mask"; return false; + } Prefix pre = makeBlankPrefix(famHint); |