//
// Copyright (C) 2015 Google, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "service/common/bluetooth/util/address_helper.h"
#include <cstdlib>
#include <base/logging.h>
#include <base/strings/string_split.h>
namespace util {
bool IsAddressValid(const std::string& address) {
bt_bdaddr_t addr;
return BdAddrFromString(address, &addr);
}
bool BdAddrFromString(const std::string& address, bt_bdaddr_t* out_addr) {
CHECK(out_addr);
if (address.length() != 17)
return false;
std::vector<std::string> byte_tokens = base::SplitString(
address, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
if (byte_tokens.size() != 6)
return false;
for (int i = 0; i < 6; i++) {
const auto& token = byte_tokens[i];
if (token.length() != 2)
return false;
char* temp = nullptr;
out_addr->address[i] = strtol(token.c_str(), &temp, 16);
if (*temp != '\0')
return false;
}
return true;
}
} // namespace util