summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/endpoint_definition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/src/endpoint_definition.cpp')
-rw-r--r--implementation/endpoints/src/endpoint_definition.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/implementation/endpoints/src/endpoint_definition.cpp b/implementation/endpoints/src/endpoint_definition.cpp
index 9a4caea..d748aa3 100644
--- a/implementation/endpoints/src/endpoint_definition.cpp
+++ b/implementation/endpoints/src/endpoint_definition.cpp
@@ -9,14 +9,41 @@
namespace vsomeip {
-endpoint_definition::endpoint_definition()
- : port_(ILLEGAL_PORT) {
+std::map<boost::asio::ip::address,
+ std::map<uint16_t,
+ std::map<bool, std::shared_ptr<endpoint_definition> > > >
+endpoint_definition::definitions_;
+
+std::shared_ptr<endpoint_definition>
+endpoint_definition::get(const boost::asio::ip::address &_address,
+ uint16_t _port, bool _is_reliable) {
+
+ std::shared_ptr<endpoint_definition> its_result;
+
+ auto find_address = definitions_.find(_address);
+ if (find_address != definitions_.end()) {
+ auto find_port = find_address->second.find(_port);
+ if (find_port != find_address->second.end()) {
+ auto found_reliable = find_port->second.find(_is_reliable);
+ if (found_reliable != find_port->second.end()) {
+ its_result = found_reliable->second;
+ }
+ }
+ }
+
+ if (!its_result) {
+ its_result = std::make_shared<endpoint_definition>(
+ _address, _port, _is_reliable);
+ definitions_[_address][_port][_is_reliable] = its_result;
+ }
+ return its_result;
}
endpoint_definition::endpoint_definition(
const boost::asio::ip::address &_address, uint16_t _port,
bool _is_reliable)
- : address_(_address), port_(_port), is_reliable_(_is_reliable), remote_port_(_port) {
+ : address_(_address), port_(_port), remote_port_(_port),
+ is_reliable_(_is_reliable) {
}
const boost::asio::ip::address & endpoint_definition::get_address() const {