Start of a client app

This commit is contained in:
Ian Gulliver
2015-02-06 16:27:47 +00:00
parent dcbc3d6928
commit 2c9b9f97de
5 changed files with 138 additions and 11 deletions

85
auth-client.cc Normal file
View File

@@ -0,0 +1,85 @@
#include <fstream>
#include <iostream>
#include <getopt.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "crypto.h"
static const struct option long_options[] = {
{"secret_key_filename", required_argument, NULL, 's'},
{"server_public_key_filename", required_argument, NULL, 'r'},
{"server_address", required_argument, NULL, 'a'},
{"server_port", required_argument, NULL, 't'},
};
int main(int argc, char *argv[]) {
std::string secret_key_filename;
std::string public_key_filename;
std::string server_public_key_filename;
std::string server_address;
std::string server_port;
{
int option, option_index;
while ((option = getopt_long(argc, argv, "s:", long_options, &option_index)) != -1) {
switch (option) {
case 's':
secret_key_filename = optarg;
break;
case 'p':
public_key_filename = optarg;
break;
case 'r':
server_public_key_filename = optarg;
break;
case 'a':
server_address = optarg;
break;
case 't':
server_port = optarg;
break;
}
}
}
std::string secret_key;
{
std::fstream secret_key_file(secret_key_filename, std::fstream::in);
if (secret_key_file.fail()) {
std::cerr << "Failed to open secret key file" << std::endl;
return 1;
}
secret_key_file >> secret_key;
}
std::string server_public_key;
{
std::fstream server_public_key_file(server_public_key_filename, std::fstream::in);
if (server_public_key_file.fail()) {
std::cerr << "Failed to open server public key file" << std::endl;
return 1;
}
server_public_key_file >> server_public_key;
}
int fd;
{
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);
}
}