summaryrefslogtreecommitdiff
path: root/modules/io
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-07-19 15:14:39 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-07-19 15:14:39 +0200
commitd37e2449e0c5f44b4d10ecd6c99841a9b3c4b582 (patch)
treeafc017525271fce04b78fb0415ff379132bca1c6 /modules/io
parent14dbb72f6c6043b442c5a74299fbe55b9f199ca6 (diff)
wip
Diffstat (limited to 'modules/io')
-rw-r--r--modules/io/c++/io.hpp3
-rw-r--r--modules/io/c++/io_unix.cpp20
2 files changed, 23 insertions, 0 deletions
diff --git a/modules/io/c++/io.hpp b/modules/io/c++/io.hpp
index ea185a8..43ef7f0 100644
--- a/modules/io/c++/io.hpp
+++ b/modules/io/c++/io.hpp
@@ -175,6 +175,9 @@ public:
*/
virtual conveyor<own<network_address>>
resolve_address(const std::string &addr, uint16_t port_hint = 0) = 0;
+
+ virtual error_or<own<network_address>>
+ parse_address(const std::string &addr, uint16_t port_hint = 0) = 0;
/**
* Parse the provided string and uint16 to the preferred storage method
diff --git a/modules/io/c++/io_unix.cpp b/modules/io/c++/io_unix.cpp
index 8afdae9..5a8da3a 100644
--- a/modules/io/c++/io_unix.cpp
+++ b/modules/io/c++/io_unix.cpp
@@ -440,6 +440,10 @@ public:
resolve_address(const std::string &address,
uint16_t port_hint = 0) override;
+ error_or<own<network_address>>
+ parse_address(const std::string& address,
+ uint16_t port_hint = 0) override;
+
own<server> listen(network_address &addr) override;
conveyor<own<io_stream>> connect(network_address &addr) override;
@@ -855,6 +859,22 @@ unix_network::resolve_address(const std::string &path, uint16_t port_hint) {
heap<unix_network_address>(path, port_hint, std::move(addresses))};
}
+error_or<own<network_address>>
+unix_network::parse_address(const std::string& path, uint16_t port_hint){
+ std::string_view addr_view{path};
+ {
+ std::string_view str_begins_with = "unix:";
+ if(begins_with(addr_view, str_begins_with)) {
+ addr_view.remove_prefix(str_begins_with.size());
+ }
+ }
+
+ //std::vector<socket_address> addresses =
+ // socket_address::parse(addr_view, port_hint);
+
+ return make_error<err::not_implemented>("Only resolving is implemented in unix, not plain parsing.");
+}
+
unix_io_provider::unix_io_provider(unix_event_port &port_ref,
own<event_port> port)
: event_port_{port_ref}, event_loop_{std::move(port)}, unix_network_{