CSc/CS.h
author hh
Thu, 21 Nov 2019 14:55:10 +0100
changeset 0 5c129dd80d4f
permissions -rw-r--r--
--
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
hh
parents:
diff changeset
     1
#ifndef _CSH_
hh
parents:
diff changeset
     2
#define _CSH_ 1
hh
parents:
diff changeset
     3
hh
parents:
diff changeset
     4
#include <stdlib.h>
hh
parents:
diff changeset
     5
#include <string.h>
hh
parents:
diff changeset
     6
#include <stdio.h>
hh
parents:
diff changeset
     7
#include <unistd.h>
hh
parents:
diff changeset
     8
#include <pthread.h>
hh
parents:
diff changeset
     9
#include <signal.h>
hh
parents:
diff changeset
    10
#include <errno.h>
hh
parents:
diff changeset
    11
#include <time.h>
hh
parents:
diff changeset
    12
#include <math.h>
hh
parents:
diff changeset
    13
#include <sys/types.h>
hh
parents:
diff changeset
    14
#include <sys/socket.h>
hh
parents:
diff changeset
    15
#include <netdb.h>
hh
parents:
diff changeset
    16
#include <sys/time.h>
hh
parents:
diff changeset
    17
#include <openssl/ssl.h>
hh
parents:
diff changeset
    18
#include <openssl/bio.h>
hh
parents:
diff changeset
    19
#include <openssl/err.h>
hh
parents:
diff changeset
    20
#include <sys/wait.h>
hh
parents:
diff changeset
    21
#include <sys/select.h>
hh
parents:
diff changeset
    22
#include <sys/mman.h>
hh
parents:
diff changeset
    23
#include <semaphore.h>
hh
parents:
diff changeset
    24
#include <signal.h>
hh
parents:
diff changeset
    25
#include <execinfo.h>
hh
parents:
diff changeset
    26
#include <libgen.h>
hh
parents:
diff changeset
    27
hh
parents:
diff changeset
    28
typedef struct DebugS {
hh
parents:
diff changeset
    29
	char id[128];
hh
parents:
diff changeset
    30
	char msg[256];
hh
parents:
diff changeset
    31
} DebugT, *DebugP;
hh
parents:
diff changeset
    32
#define DebugA() (DebugP)malloc(sizeof(DebugT))
hh
parents:
diff changeset
    33
hh
parents:
diff changeset
    34
typedef struct ShareS {
hh
parents:
diff changeset
    35
	int conns;
hh
parents:
diff changeset
    36
	int msgs;
hh
parents:
diff changeset
    37
	int act;
hh
parents:
diff changeset
    38
	int mashOpenClientCount;
hh
parents:
diff changeset
    39
	int mashOpenSSLClientCount;
hh
parents:
diff changeset
    40
	sem_t counterSem;
hh
parents:
diff changeset
    41
	sem_t debugSem;
hh
parents:
diff changeset
    42
} ShareT, *ShareP;
hh
parents:
diff changeset
    43
#define ShareA(v) if((v = mmap(NULL, sizeof(ShareT), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0)) < 0) SYSERR("mmap")
hh
parents:
diff changeset
    44
hh
parents:
diff changeset
    45
typedef struct CSS {
hh
parents:
diff changeset
    46
	DebugT debug;
hh
parents:
diff changeset
    47
	int debMaxLev;
hh
parents:
diff changeset
    48
	int port0;
hh
parents:
diff changeset
    49
	int portZ;
hh
parents:
diff changeset
    50
	char *text;
hh
parents:
diff changeset
    51
	int ttl;
hh
parents:
diff changeset
    52
	int mp0;
hh
parents:
diff changeset
    53
	int mn;
hh
parents:
diff changeset
    54
	int rp0;
hh
parents:
diff changeset
    55
	int rn;
hh
parents:
diff changeset
    56
   struct timespec pace;
hh
parents:
diff changeset
    57
   int pacing;
hh
parents:
diff changeset
    58
	int issl;
hh
parents:
diff changeset
    59
	int connThreshold;		// connection retry threshhold
hh
parents:
diff changeset
    60
	int connTO;					// connection timeout in usecs
hh
parents:
diff changeset
    61
	int selTO;					// selection timeout in secs
hh
parents:
diff changeset
    62
	char *ceP;					// -->SSL certs path
hh
parents:
diff changeset
    63
	char *caP;					//	-->CA  certs path
hh
parents:
diff changeset
    64
	ShareP shP;
hh
parents:
diff changeset
    65
	char home[128];
hh
parents:
diff changeset
    66
} CST, *CSP;
hh
parents:
diff changeset
    67
#define CSA(v) if((v = (CSP)malloc(sizeof(CST))) < 0) SYSERR("malloc")
hh
parents:
diff changeset
    68
hh
parents:
diff changeset
    69
typedef struct HeaderS {
hh
parents:
diff changeset
    70
	int ttl;
hh
parents:
diff changeset
    71
	int ts;
hh
parents:
diff changeset
    72
	int listPort;
hh
parents:
diff changeset
    73
} HeaderT, *HeaderP;
hh
parents:
diff changeset
    74
typedef struct PayloadS {
hh
parents:
diff changeset
    75
	time_t ts;
hh
parents:
diff changeset
    76
	char text;
hh
parents:
diff changeset
    77
} PayloadT, *PayloadP;
hh
parents:
diff changeset
    78
typedef struct ContainerS {
hh
parents:
diff changeset
    79
	HeaderT hdr;
hh
parents:
diff changeset
    80
	PayloadT payl;
hh
parents:
diff changeset
    81
} ContainerT, *ContainerP;
hh
parents:
diff changeset
    82
typedef struct DataS {
hh
parents:
diff changeset
    83
	DebugT debug;
hh
parents:
diff changeset
    84
	ContainerP contP;
hh
parents:
diff changeset
    85
	int dataLen;
hh
parents:
diff changeset
    86
} DataT, *DataP;
hh
parents:
diff changeset
    87
#define DataA(v) if((v = (DataP)malloc(sizeof(DataT))) < 0) SYSERR("malloc")
hh
parents:
diff changeset
    88
hh
parents:
diff changeset
    89
typedef struct SocketS {
hh
parents:
diff changeset
    90
	int remPort;
hh
parents:
diff changeset
    91
	int sc;
hh
parents:
diff changeset
    92
	SSL *sslP;
hh
parents:
diff changeset
    93
} SocketT, *SocketP;
hh
parents:
diff changeset
    94
#define SocketA(v) if((v = (SocketP)malloc(sizeof(SocketT))) < 0) SYSERR("malloc")
hh
parents:
diff changeset
    95
hh
parents:
diff changeset
    96
typedef enum{ring, mash} topology;
hh
parents:
diff changeset
    97
typedef struct NodeS {
hh
parents:
diff changeset
    98
	DebugT debug;
hh
parents:
diff changeset
    99
	topology topo;
hh
parents:
diff changeset
   100
	int ssc;
hh
parents:
diff changeset
   101
	int locPort;
hh
parents:
diff changeset
   102
	int first;
hh
parents:
diff changeset
   103
	int last;
hh
parents:
diff changeset
   104
	int nodes;
hh
parents:
diff changeset
   105
	int nodeIdx;
hh
parents:
diff changeset
   106
	int kicker;
hh
parents:
diff changeset
   107
	int *forw;
hh
parents:
diff changeset
   108
	int closing;
hh
parents:
diff changeset
   109
	pthread_t closingThread;
hh
parents:
diff changeset
   110
	SocketP cliSides;
hh
parents:
diff changeset
   111
	SocketP srvSides;
hh
parents:
diff changeset
   112
	DataT data;
hh
parents:
diff changeset
   113
	int len;
hh
parents:
diff changeset
   114
	int ssl;
hh
parents:
diff changeset
   115
	SSL_CTX *ctx;
hh
parents:
diff changeset
   116
	struct sigaction *sigactP;
hh
parents:
diff changeset
   117
} NodeT, *NodeP;
hh
parents:
diff changeset
   118
#define NodeA(v) if((v = (NodeP)malloc(sizeof(NodeT))) < 0) SYSERR("malloc")
hh
parents:
diff changeset
   119
typedef enum{client, server} nodeside;
hh
parents:
diff changeset
   120
hh
parents:
diff changeset
   121
extern void debug_init();
hh
parents:
diff changeset
   122
extern char *gpa(struct sockaddr *);
hh
parents:
diff changeset
   123
extern void gai(int, struct addrinfo *ai, DebugP);
hh
parents:
diff changeset
   124
#define GAI(level, ai) gai(level, ai, deP)
hh
parents:
diff changeset
   125
extern void ssl_err(DebugP, char*);
hh
parents:
diff changeset
   126
extern void abend(DebugP);
hh
parents:
diff changeset
   127
extern void Node(topology, int*, int, int, int, int);
hh
parents:
diff changeset
   128
extern void Data(DataP, DebugP);
hh
parents:
diff changeset
   129
extern int dttlData(DataP);
hh
parents:
diff changeset
   130
extern int ttlData(DataP);
hh
parents:
diff changeset
   131
extern int remPortData(DataP);
hh
parents:
diff changeset
   132
extern DataP loadData(DataP, int, char*);
hh
parents:
diff changeset
   133
extern char *unldData(DataP);
hh
parents:
diff changeset
   134
extern char *digest24Data(DataP, char *);
hh
parents:
diff changeset
   135
extern int chkData(DataP);
hh
parents:
diff changeset
   136
extern void sabotageData(DataP);
hh
parents:
diff changeset
   137
extern int tsData(DataP);
hh
parents:
diff changeset
   138
extern void back_trace();
hh
parents:
diff changeset
   139
extern void pre(char *);
hh
parents:
diff changeset
   140
extern void deb(int, DebugP);
hh
parents:
diff changeset
   141
extern void err(int, char *, DebugP);
hh
parents:
diff changeset
   142
hh
parents:
diff changeset
   143
#define DEBID(...) sprintf(deP->id, __VA_ARGS__)
hh
parents:
diff changeset
   144
#define LOG(level, ...) sprintf(deP->msg, __VA_ARGS__), deb(level, deP)
hh
parents:
diff changeset
   145
#define SYSERR(e) LOG(0, "%s: %s (%d)", e, strerror(errno), errno), abend(deP)
hh
parents:
diff changeset
   146
#define SSLERR(e) ssl_err(deP, e)
hh
parents:
diff changeset
   147
#define SOFTERR(e) LOG(0, e), fflush(stderr)
hh
parents:
diff changeset
   148
#define HARDERR(e) SOFTERR(e), abend(deP);
hh
parents:
diff changeset
   149
#define ERR(e) perror(e), exit(EXIT_FAILURE)
hh
parents:
diff changeset
   150
hh
parents:
diff changeset
   151
#define PACING SIGUSR1
hh
parents:
diff changeset
   152
hh
parents:
diff changeset
   153
extern CSP csP;
hh
parents:
diff changeset
   154
hh
parents:
diff changeset
   155
#endif