Remove client-side code for channel setup, headed toward a dumb client.
This commit is contained in:
@@ -10,7 +10,6 @@ static const struct option long_options[] = {
|
|||||||
{"server_public_key_filename", required_argument, NULL, 'r'},
|
{"server_public_key_filename", required_argument, NULL, 'r'},
|
||||||
{"server_address", required_argument, NULL, 'a'},
|
{"server_address", required_argument, NULL, 'a'},
|
||||||
{"server_port", required_argument, NULL, 't'},
|
{"server_port", required_argument, NULL, 't'},
|
||||||
{"channel_bitrate", required_argument, NULL, 'b'},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
@@ -19,7 +18,6 @@ int main(int argc, char *argv[]) {
|
|||||||
std::string server_public_key_filename;
|
std::string server_public_key_filename;
|
||||||
std::string server_address;
|
std::string server_address;
|
||||||
std::string server_port;
|
std::string server_port;
|
||||||
std::list<uint32_t> channel_bitrates;
|
|
||||||
{
|
{
|
||||||
int option, option_index;
|
int option, option_index;
|
||||||
while ((option = getopt_long(argc, argv, "s:", long_options, &option_index)) != -1) {
|
while ((option = getopt_long(argc, argv, "s:", long_options, &option_index)) != -1) {
|
||||||
@@ -39,9 +37,6 @@ int main(int argc, char *argv[]) {
|
|||||||
case 't':
|
case 't':
|
||||||
server_port = optarg;
|
server_port = optarg;
|
||||||
break;
|
break;
|
||||||
case 'b':
|
|
||||||
channel_bitrates.push_back(strtoul(optarg, NULL, 10));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,7 +49,7 @@ int main(int argc, char *argv[]) {
|
|||||||
PublicKey server_public_key;
|
PublicKey server_public_key;
|
||||||
server_public_key.ReadFromFile(server_public_key_filename);
|
server_public_key.ReadFromFile(server_public_key_filename);
|
||||||
|
|
||||||
auto client = CryptoPubClient::FromHostname(server_address, server_port, secret_key, server_public_key, channel_bitrates);
|
auto client = CryptoPubClient::FromHostname(server_address, server_port, secret_key, server_public_key);
|
||||||
client->Loop();
|
client->Loop();
|
||||||
|
|
||||||
std::cerr << "Shutting down" << std::endl;
|
std::cerr << "Shutting down" << std::endl;
|
||||||
|
|||||||
31
crypto.cc
31
crypto.cc
@@ -24,13 +24,16 @@
|
|||||||
#define TLV_TYPE_ENCRYPTED_BLOB 0x0000
|
#define TLV_TYPE_ENCRYPTED_BLOB 0x0000
|
||||||
#define TLV_TYPE_NONCE 0x0001
|
#define TLV_TYPE_NONCE 0x0001
|
||||||
#define TLV_TYPE_PUBLIC_KEY 0x0002
|
#define TLV_TYPE_PUBLIC_KEY 0x0002
|
||||||
#define TLV_TYPE_DOWNSTREAM_BITRATE 0x0003
|
#define TLV_TYPE_OPAQUE 0x0003
|
||||||
|
#define TLV_TYPE_DOWNSTREAM_BITRATE 0x0004
|
||||||
|
|
||||||
#define TLV_TYPE_ENCRYPTED 0x8000
|
#define TLV_TYPE_ENCRYPTED 0x8000
|
||||||
#define TLV_TYPE_HANDSHAKE 0x8001
|
#define TLV_TYPE_HANDSHAKE 0x8001
|
||||||
#define TLV_TYPE_HANDSHAKE_SECURE 0x8002
|
#define TLV_TYPE_HANDSHAKE_SECURE 0x8002
|
||||||
#define TLV_TYPE_TUNNEL_REQUEST 0x8003
|
#define TLV_TYPE_PING 0x8003
|
||||||
#define TLV_TYPE_CHANNEL 0x8004
|
#define TLV_TYPE_PONG 0x8004
|
||||||
|
#define TLV_TYPE_TUNNEL_REQUEST 0x8005
|
||||||
|
#define TLV_TYPE_CHANNEL 0x8006
|
||||||
|
|
||||||
|
|
||||||
void CryptoUtil::GenKey(SharedKey* key) {
|
void CryptoUtil::GenKey(SharedKey* key) {
|
||||||
@@ -465,10 +468,9 @@ void CryptoPubServerConnection::OnError(const short what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CryptoPubClient::CryptoPubClient(struct sockaddr* addr, socklen_t addrlen, const SecretKey& secret_key, const PublicKey& server_public_key, const std::list<uint32_t>& channel_bitrates)
|
CryptoPubClient::CryptoPubClient(struct sockaddr* addr, socklen_t addrlen, const SecretKey& secret_key, const PublicKey& server_public_key)
|
||||||
: CryptoPubConnBase(secret_key),
|
: CryptoPubConnBase(secret_key),
|
||||||
event_base_(event_base_new()),
|
event_base_(event_base_new()) {
|
||||||
channel_bitrates_(channel_bitrates) {
|
|
||||||
bev_ = bufferevent_socket_new(event_base_, -1, BEV_OPT_CLOSE_ON_FREE);
|
bev_ = bufferevent_socket_new(event_base_, -1, BEV_OPT_CLOSE_ON_FREE);
|
||||||
peer_public_key_.FromString(server_public_key.AsString());
|
peer_public_key_.FromString(server_public_key.AsString());
|
||||||
CryptoUtil::PrecalculateKey(secret_key_, peer_public_key_, &precalc_key_);
|
CryptoUtil::PrecalculateKey(secret_key_, peer_public_key_, &precalc_key_);
|
||||||
@@ -483,14 +485,14 @@ CryptoPubClient::~CryptoPubClient() {
|
|||||||
event_base_free(event_base_);
|
event_base_free(event_base_);
|
||||||
}
|
}
|
||||||
|
|
||||||
CryptoPubClient* CryptoPubClient::FromHostname(const std::string& server_address, const std::string& server_port, const SecretKey& secret_key, const PublicKey& server_public_key, const std::list<uint32_t>& channel_bitrates) {
|
CryptoPubClient* CryptoPubClient::FromHostname(const std::string& server_address, const std::string& server_port, const SecretKey& secret_key, const PublicKey& server_public_key) {
|
||||||
struct addrinfo* res;
|
struct addrinfo* res;
|
||||||
int gai_ret = getaddrinfo(server_address.c_str(), server_port.c_str(), NULL, &res);
|
int gai_ret = getaddrinfo(server_address.c_str(), server_port.c_str(), NULL, &res);
|
||||||
if (gai_ret) {
|
if (gai_ret) {
|
||||||
std::cerr << "Failed to resolve server_address: " << gai_strerror(gai_ret) << std::endl;
|
std::cerr << "Failed to resolve server_address: " << gai_strerror(gai_ret) << std::endl;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
auto ret = new CryptoPubClient((struct sockaddr*)res->ai_addr, res->ai_addrlen, secret_key, server_public_key, channel_bitrates);
|
auto ret = new CryptoPubClient((struct sockaddr*)res->ai_addr, res->ai_addrlen, secret_key, server_public_key);
|
||||||
freeaddrinfo(res);
|
freeaddrinfo(res);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -502,8 +504,6 @@ void CryptoPubClient::OnHandshake(const TLVNode& decoded) {
|
|||||||
|
|
||||||
this->state_ = READY;
|
this->state_ = READY;
|
||||||
Log() << "Handshake successful" << std::endl;
|
Log() << "Handshake successful" << std::endl;
|
||||||
|
|
||||||
SendTunnelRequest();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CryptoPubClient::OnMessage(const TLVNode& message) {
|
bool CryptoPubClient::OnMessage(const TLVNode& message) {
|
||||||
@@ -527,17 +527,6 @@ void CryptoPubClient::OnConnect() {
|
|||||||
SendHandshake();
|
SendHandshake();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CryptoPubClient::SendTunnelRequest() {
|
|
||||||
TLVNode tunnel_request(TLV_TYPE_TUNNEL_REQUEST);
|
|
||||||
for (auto channel_bitrate : channel_bitrates_) {
|
|
||||||
auto channel = new TLVNode(TLV_TYPE_CHANNEL);
|
|
||||||
channel_bitrate = htonl(channel_bitrate);
|
|
||||||
channel->AppendChild(new TLVNode(TLV_TYPE_DOWNSTREAM_BITRATE, std::string((char*)&channel_bitrate, sizeof(channel_bitrate))));
|
|
||||||
tunnel_request.AppendChild(channel);
|
|
||||||
}
|
|
||||||
EncryptSend(tunnel_request);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CryptoPubClient::OnError() {
|
void CryptoPubClient::OnError() {
|
||||||
Log() << "Connection error" << std::endl;
|
Log() << "Connection error" << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
6
crypto.h
6
crypto.h
@@ -146,10 +146,10 @@ class CryptoPubServerConnection : public CryptoPubConnBase {
|
|||||||
|
|
||||||
class CryptoPubClient : public CryptoPubConnBase {
|
class CryptoPubClient : public CryptoPubConnBase {
|
||||||
public:
|
public:
|
||||||
CryptoPubClient(struct sockaddr* addr, socklen_t addrlen, const SecretKey& secret_key, const PublicKey& server_public_key, const std::list<uint32_t>& channel_bitrates);
|
CryptoPubClient(struct sockaddr* addr, socklen_t addrlen, const SecretKey& secret_key, const PublicKey& server_public_key);
|
||||||
~CryptoPubClient();
|
~CryptoPubClient();
|
||||||
|
|
||||||
static CryptoPubClient* FromHostname(const std::string& server_address, const std::string& server_port, const SecretKey& secret_key, const PublicKey& server_public_key, const std::list<uint32_t>& channel_bitrates);
|
static CryptoPubClient* FromHostname(const std::string& server_address, const std::string& server_port, const SecretKey& secret_key, const PublicKey& server_public_key);
|
||||||
|
|
||||||
void Loop();
|
void Loop();
|
||||||
|
|
||||||
@@ -164,6 +164,4 @@ class CryptoPubClient : public CryptoPubConnBase {
|
|||||||
void SendTunnelRequest();
|
void SendTunnelRequest();
|
||||||
|
|
||||||
struct event_base* event_base_;
|
struct event_base* event_base_;
|
||||||
|
|
||||||
const std::list<uint32_t> channel_bitrates_;
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user