#define _XOPEN_SOURCE	600

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <openssl/rand.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>

#define K	1024
#define PORT	47350

#ifndef SYSTEM_SSL_CERT_DIR
  #define SYSTEM_SSL_CERT_DIR   "./cert"
//#define SYSTEM_SSL_CERT_DIR   SYSTEM_CONFIG_DIR "/ssl/certs/"
#endif

// Command to make a certificate (self-signed):
// openssl req -new -x509 -nodes -out server.pem -keyout server.pem -days 370

#define SERVER_CERT     SYSTEM_SSL_CERT_DIR "./server.pem"
#define SERVER_KEY      SYSTEM_SSL_CERT_DIR "./server.pem"
#define CA_CERT         SYSTEM_SSL_CERT_DIR "./server.pem"

typedef struct ssl_conn {
  int sock;
  SSL *handle;
} ssl_conn;

