-
Notifications
You must be signed in to change notification settings - Fork 4
Example DTLS‐Server
ANYKS edited this page Sep 1, 2025
·
6 revisions
#include <awh/server/sample.hpp>
using namespace awh;
using namespace placeholders;
class Server {
private:
const fmk_t * _fmk;
const log_t * _log;
public:
bool accept(const string & ip, const string & mac, const uint32_t port){
this->_log->print("ACCEPT: ip = %s, mac = %s, port = %d", log_t::flag_t::INFO, ip.c_str(), mac.c_str(), port);
return true;
}
void active([[maybe_unused]] const uint64_t bid, const server::sample_t::mode_t mode){
this->_log->print("%s client", log_t::flag_t::INFO, (mode == server::sample_t::mode_t::CONNECT ? "Connect" : "Disconnect"));
}
void message(const uint64_t bid, const vector <char> & buffer, server::sample_t * sample){
this->_log->print("%s", log_t::flag_t::INFO, string(buffer.begin(), buffer.end()).c_str());
sample->send(bid, buffer.data(), buffer.size());
}
public:
Server(const fmk_t * fmk, const log_t * log) : _fmk(fmk), _log(log) {}
};
int32_t main(int32_t argc, char * argv[]){
fmk_t fmk;
log_t log(&fmk);
dns_t dns(&fmk, &log);
server::core_t core(&dns, &fmk, &log);
server::sample_t sample(&core, &fmk, &log);
Server executor(&fmk, &log);
log.name("DTLS Server");
log.format("%H:%M:%S %d.%m.%Y");
core.sonet(awh::scheme_t::sonet_t::DTLS);
node_t::ssl_t ssl;
ssl.verify = false;
ssl.key = "./certs/certificates/server-key.pem";
ssl.cert = "./certs/certificates/server-cert.pem";
core.ssl(ssl);
sample.init(2222, "127.0.0.1");
sample.on <void (const uint64_t, const server::sample_t::mode_t)> ("active", &Server::active, &executor, _1, _2);
sample.on <bool (const string &, const string &, const uint32_t)> ("accept", &Server::accept, &executor, _1, _2, _3);
sample.on <void (const uint64_t, const vector <char> &)> ("message", &Server::message, &executor, _1, _2, &sample);
sample.start();
return EXIT_SUCCESS;
}copyright © ANYKS