changed dynamic cast to static. added nullptr return to tls datagram

fb-udp
Claudius Holeksa 2022-01-07 13:18:56 +01:00
parent 4e29918740
commit 8c37b329dc
5 changed files with 20 additions and 12 deletions

View File

@ -212,16 +212,15 @@ Conveyor<Own<IoStream>> UnixNetworkAddress::connect() {
return Conveyor<Own<IoStream>>{std::move(io_stream)}; return Conveyor<Own<IoStream>>{std::move(io_stream)};
} }
Own<Datagram> UnixNetworkAddress::datagram(){ Own<Datagram> UnixNetworkAddress::datagram() {
SAW_ASSERT(addresses.size() > 0){ SAW_ASSERT(addresses.size() > 0) { return nullptr; }
return nullptr;
}
int fd = addresses.front().socket(SOCK_DGRAM); int fd = addresses.front().socket(SOCK_DGRAM);
int optval = 1; int optval = 1;
int rc = ::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); int rc =
SAW_ASSERT(rc == 0){ ::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
SAW_ASSERT(rc == 0) {
::close(fd); ::close(fd);
return nullptr; return nullptr;
} }

View File

@ -91,11 +91,11 @@ public:
virtual ~ErrorOrValue() = default; virtual ~ErrorOrValue() = default;
template <typename T> ErrorOr<UnfixVoid<T>> &as() { template <typename T> ErrorOr<UnfixVoid<T>> &as() {
return dynamic_cast<ErrorOr<UnfixVoid<T>> &>(*this); return static_cast<ErrorOr<UnfixVoid<T>> &>(*this);
} }
template <typename T> const ErrorOr<UnfixVoid<T>> &as() const { template <typename T> const ErrorOr<UnfixVoid<T>> &as() const {
return dynamic_cast<const ErrorOr<UnfixVoid<T>> &>(*this); return static_cast<const ErrorOr<UnfixVoid<T>> &>(*this);
} }
}; };

View File

@ -92,18 +92,20 @@ public:
virtual Conveyor<Own<IoStream>> accept() = 0; virtual Conveyor<Own<IoStream>> accept() = 0;
}; };
class NetworkAddress;
/** /**
* Datagram class. Bound to a local address it is able to receive inbound datagram messages * Datagram class. Bound to a local address it is able to receive inbound
* and send them as well as long as an address is provided as well * datagram messages and send them as well as long as an address is provided as
* well
*/ */
class Datagram { class Datagram {
public: public:
virtual ~Datagram() = default; virtual ~Datagram() = default;
virtual void write(void* buffer, size_t length, NetworkAddress& dest) = 0; virtual void write(void *buffer, size_t length, NetworkAddress &dest) = 0;
virtual Conveyor<size_t> writeDone() = 0; virtual Conveyor<size_t> writeDone() = 0;
virtual void read(void* buffer, size_t min_length, size_t max_length) = 0; virtual void read(void *buffer, size_t min_length, size_t max_length) = 0;
virtual Conveyor<size_t> readDone() = 0; virtual Conveyor<size_t> readDone() = 0;
}; };

View File

@ -209,6 +209,11 @@ Conveyor<Own<IoStream>> TlsNetworkAddress::connect() {
return caf.conveyor.attach(std::move(helper)); return caf.conveyor.attach(std::move(helper));
} }
Own<Datagram> TlsNetworkAddress::datagram(){
///@unimplemented
return nullptr;
}
static ssize_t forst_tls_push_func(gnutls_transport_ptr_t p, const void *data, static ssize_t forst_tls_push_func(gnutls_transport_ptr_t p, const void *data,
size_t size) { size_t size) {
IoStream *stream = reinterpret_cast<IoStream *>(p); IoStream *stream = reinterpret_cast<IoStream *>(p);

View File

@ -46,6 +46,8 @@ public:
Conveyor<Own<IoStream>> connect() override; Conveyor<Own<IoStream>> connect() override;
Own<Datagram> datagram() override;
std::string toString() const override; std::string toString() const override;
const std::string &address() const override; const std::string &address() const override;