#include #include #include #include "client.h" #define ISSUERIP "127.0.0.1" #define ISSUERPORT 6590 #define MEMBERIP "127.0.0.1" #define MEMBERPORT 6591 #define VERIFIERIP "127.0.0.1" #define VERIFIERPORT 6592 typedef struct member { struct ecdaa_member_public_key_FP256BN mpk; } member_t; typedef enum memberstate { ON, JOIN, APPEND, JOINED, ATTEST, PUBLISH }memberstate_t; int process_member_client(int connfd); int main() { int err = 0; client_t *client; client = client_open(&process_member_client); if (NULL == client) { printf("listen failed, closing...\n"); } for (; !err;) { err = client_connect(client, ISSUERPORT, ISSUERIP); if (1 == err) { printf("graceful shutdown...\n"); } else if (err) { printf("accept failed, closing...\n"); } } printf("shut down client\n"); client_close(client); return 0; } int process_member_client(int connfd) { char inbuf[MAX_BUFSIZE]; char outbuf[MAX_BUFSIZE]; int n = 0; memberstate_t state = JOIN; strncpy(outbuf, "JOIN", 4); printf("< MEMBER: %s\n", outbuf); write(connfd, outbuf, sizeof(outbuf)); for (;;) { bzero(inbuf, MAX_BUFSIZE); bzero(outbuf, MAX_BUFSIZE); if (0 >= read(connfd, inbuf, sizeof(inbuf))) { printf("process_issuer: cannot read from socket\n"); return -1; } switch(state) { case JOIN: state = APPEND; break; case APPEND: state = JOINED; break; case JOINED: state = ATTEST; state = PUBLISH; break; case ATTEST: state = JOINED; break; case PUBLISH: break; } printf("> MEMBER: %s\n", inbuf); strncpy(outbuf, "OK", 2); printf("< MEMBER: %s\n", outbuf); write(connfd, outbuf, sizeof(outbuf)); if (0 == strncmp("exit", inbuf, 4)) { printf("process_issuer: exiting gracefully\n"); return 0; } if (0 == strncmp("shutdown", inbuf, 8)) { printf("process_issuer: shutting down gracefully\n"); return 1; } } }