Convert auth-client to libevent
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,6 +1,6 @@
|
|||||||
all: auth-client auth-server gen-key gen-keypair
|
all: auth-client auth-server gen-key gen-keypair
|
||||||
|
|
||||||
%.o: %.cc
|
%.o: %.cc *.h
|
||||||
g++ -I/usr/local/include -std=c++11 -c -o $@ $<
|
g++ -I/usr/local/include -std=c++11 -c -o $@ $<
|
||||||
|
|
||||||
auth-client: auth-client.o crypto.o tlv.o
|
auth-client: auth-client.o crypto.o tlv.o
|
||||||
|
|||||||
@@ -67,19 +67,6 @@ int main(int argc, char *argv[]) {
|
|||||||
server_public_key_file >> server_public_key;
|
server_public_key_file >> server_public_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fd;
|
auto client = CryptoPubClient::FromHostname(server_address, server_port);
|
||||||
{
|
client->Loop();
|
||||||
struct addrinfo* res;
|
|
||||||
int ret = getaddrinfo(server_address.c_str(), server_port.c_str(), NULL, &res);
|
|
||||||
if (ret) {
|
|
||||||
std::cerr << "Failed to resolve server_address: " << gai_strerror(ret) << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
|
||||||
if (connect(fd, (struct sockaddr*)res->ai_addr, res->ai_addrlen)) {
|
|
||||||
perror("connect");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
freeaddrinfo(res);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
32
crypto.cc
32
crypto.cc
@@ -28,7 +28,7 @@ void CryptoBase::GenKeyPair(std::string* secret_key, std::string* public_key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CryptoPubServer::CryptoPubServer(const std::string secret_key)
|
CryptoPubServer::CryptoPubServer(const std::string& secret_key)
|
||||||
: secret_key_(secret_key),
|
: secret_key_(secret_key),
|
||||||
event_base_(event_base_new()) {
|
event_base_(event_base_new()) {
|
||||||
struct sockaddr_in6 server_addr = {0};
|
struct sockaddr_in6 server_addr = {0};
|
||||||
@@ -66,7 +66,7 @@ void CryptoPubServer::Loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CryptoPubServerConnection::CryptoPubServerConnection(struct bufferevent* bev, const std::string secret_key)
|
CryptoPubServerConnection::CryptoPubServerConnection(struct bufferevent* bev, const std::string& secret_key)
|
||||||
: bev_(bev),
|
: bev_(bev),
|
||||||
secret_key_(secret_key),
|
secret_key_(secret_key),
|
||||||
state_(AWAITING_HANDSHAKE) {
|
state_(AWAITING_HANDSHAKE) {
|
||||||
@@ -89,3 +89,31 @@ void CryptoPubServerConnection::OnError(struct bufferevent* bev, const short wha
|
|||||||
auto this_ = (CryptoPubServerConnection*)this__;
|
auto this_ = (CryptoPubServerConnection*)this__;
|
||||||
delete this_;
|
delete this_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CryptoPubClient::CryptoPubClient(struct sockaddr* addr, socklen_t addrlen)
|
||||||
|
: event_base_(event_base_new()),
|
||||||
|
bev_(bufferevent_socket_new(event_base_, -1, BEV_OPT_CLOSE_ON_FREE)) {
|
||||||
|
bufferevent_socket_connect(bev_, addr, addrlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
CryptoPubClient::~CryptoPubClient() {
|
||||||
|
bufferevent_free(bev_);
|
||||||
|
event_base_free(event_base_);
|
||||||
|
}
|
||||||
|
|
||||||
|
CryptoPubClient* CryptoPubClient::FromHostname(const std::string& server_address, const std::string& server_port) {
|
||||||
|
struct addrinfo* res;
|
||||||
|
int gai_ret = getaddrinfo(server_address.c_str(), server_port.c_str(), NULL, &res);
|
||||||
|
if (gai_ret) {
|
||||||
|
std::cerr << "Failed to resolve server_address: " << gai_strerror(gai_ret) << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
auto ret = new CryptoPubClient((struct sockaddr*)res->ai_addr, res->ai_addrlen);
|
||||||
|
freeaddrinfo(res);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CryptoPubClient::Loop() {
|
||||||
|
event_base_dispatch(event_base_);
|
||||||
|
}
|
||||||
|
|||||||
20
crypto.h
20
crypto.h
@@ -14,7 +14,7 @@ class CryptoBase {
|
|||||||
|
|
||||||
class CryptoPubServerConnection : public CryptoBase {
|
class CryptoPubServerConnection : public CryptoBase {
|
||||||
public:
|
public:
|
||||||
CryptoPubServerConnection(struct bufferevent* bev, const std::string secret_key);
|
CryptoPubServerConnection(struct bufferevent* bev, const std::string& secret_key);
|
||||||
~CryptoPubServerConnection();
|
~CryptoPubServerConnection();
|
||||||
static void OnReadable(struct bufferevent* bev, void* this__);
|
static void OnReadable(struct bufferevent* bev, void* this__);
|
||||||
static void OnError(struct bufferevent* bev, const short what, void* this__);
|
static void OnError(struct bufferevent* bev, const short what, void* this__);
|
||||||
@@ -33,14 +33,26 @@ class CryptoPubServerConnection : public CryptoBase {
|
|||||||
|
|
||||||
class CryptoPubServer : public CryptoBase {
|
class CryptoPubServer : public CryptoBase {
|
||||||
public:
|
public:
|
||||||
CryptoPubServer(const std::string secret_key);
|
CryptoPubServer(const std::string& secret_key);
|
||||||
~CryptoPubServer();
|
~CryptoPubServer();
|
||||||
static void OnNewConn(struct evconnlistener* listener, int fd, struct sockaddr* client_addr, int client_addrlen, void* this__);
|
static void OnNewConn(struct evconnlistener* listener, int fd, struct sockaddr* client_addr, int client_addrlen, void* this__);
|
||||||
void Loop();
|
void Loop();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct event_base *event_base_;
|
struct event_base* event_base_;
|
||||||
struct evconnlistener *listener_;
|
struct evconnlistener* listener_;
|
||||||
|
|
||||||
const std::string secret_key_;
|
const std::string secret_key_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CryptoPubClient : public CryptoBase {
|
||||||
|
public:
|
||||||
|
CryptoPubClient(struct sockaddr* addr, socklen_t addrlen);
|
||||||
|
~CryptoPubClient();
|
||||||
|
static CryptoPubClient* FromHostname(const std::string& server_address, const std::string& server_port);
|
||||||
|
void Loop();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct event_base* event_base_;
|
||||||
|
struct bufferevent* bev_;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user