2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "net/l2/config/ConfigAddress.h"
44#include "net/config/ConfigAddressBase.hpp"
45#include "net/config/ConfigAddressLocal.hpp"
46#include "net/config/ConfigAddressRemote.hpp"
47#include "net/config/ConfigAddressReverse.hpp"
48#include "net/config/ConfigSection.hpp"
50#ifndef DOXYGEN_SHOULD_SKIP_THIS
52#include "utils/PreserveErrno.h"
61 template <
template <
typename SocketAddress>
typename ConfigAddressType>
64 [[
maybe_unused]]
const std::string& addressOptionDescription)
66 , ConfigAddressType<net::l2::SocketAddress>(
this) {
69 template <
template <
typename SocketAddress>
typename ConfigAddressType>
72 [[
maybe_unused]]
const std::string& addressOptionDescription)
74 , ConfigAddressType<net::l2::SocketAddress>(
this) {
77 "Bluetooth address (format 01:23:45:67:89:AB)",
81 [](std::string& s) -> std::string {
83 static const std::regex re(R"(^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$)");
85 if (std::regex_match(s, re)) {
89 return "Invalid Bluetooth address. Expected format like \"01:23:45:67:89:AB\" "
90 "(6 hex octets separated by ':').";
97 "Protocol service multiplexer",
100 CLI::Range(std::numeric_limits<uint16_t>::min(), std::numeric_limits<uint16_t>::max()));
103 template <
template <
typename SocketAddress>
typename ConfigAddressType>
105 SocketAddress* socketAddress =
new SocketAddress
(btAddressOpt->as<std::string>()
, psmOpt->as<uint16_t>()
);
108 return socketAddress;
111 template <
template <
typename SocketAddress>
typename ConfigAddressType>
119 template <
template <
typename SocketAddress>
typename ConfigAddressType>
129 template <
template <
typename SocketAddress>
typename ConfigAddressType>
134 template <
template <
typename SocketAddress>
typename ConfigAddressType>
138 setDefaultValue(
psmOpt, psm);
144 template <
template <
typename SocketAddress>
typename ConfigAddressType>
146 return psmOpt->as<uint16_t>();
149 template <
template <
typename SocketAddressT>
typename ConfigAddressTypeT>
152 this->setConfigurable(
psmOpt, configurable);
155 template <
template <
typename SocketAddress>
typename ConfigAddressType>
162 template <
template <
typename SocketAddress>
typename ConfigAddressType>
164 this->required(
psmOpt, required);
171template class net::config::ConfigAddress<net::l2::SocketAddress>;
172template class net::config::ConfigAddressLocal<net::l2::SocketAddress>;
173template class net::config::ConfigAddressRemote<net::l2::SocketAddress>;
174template class net::config::ConfigAddressReverse<net::l2::SocketAddress>;
175template class net::config::ConfigAddressBase<net::l2::SocketAddress>;
SocketAddress(const std::string &btAddress, uint16_t psm)
std::string getBtAddress() const
ConfigAddressReverse(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
ConfigAddress & setPsm(uint16_t psm)
ConfigAddress & setSocketAddress(const SocketAddress &socketAddress)
ConfigAddress & setBtAddress(const std::string &btAddress)
CLI::Option * btAddressOpt
void configurable(bool configurable=true) final
ConfigAddress & setPsmRequired(bool required=true)
std::string getBtAddress() const
ConfigAddress & setBtAddressRequired(bool required=true)
SocketAddress * init() final
ConfigAddress(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)