#include "issuer.h" typedef enum issuer_state { ON, JOINSTART, JOINPROCEED, READY } issuerstate_e; typedef struct issuer { struct ecdaa_issuer_public_key_FP256BN ipk; struct ecdaa_issuer_secret_key_FP256BN isk; issuerstate_e state; } issuer_t; issuer_t issuer; int main() { int err = 0; if (2 != server_start(&process_issuer, ISSUERPORT)) { printf("server failed\n"); } return 0; } int process_issuer(char *buffer) { ssize_t len = 0; int ret = 0; printf("> ISSUER: %s\n", buffer); if (0 == strncasecmp("OK", buffer, 2)) { switch (issuer.state) { case JOINPROCEED: issuer.state = READY; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("ERR", buffer, 3)) { switch (issuer.state) { case JOINPROCEED: printf("command failed at client\n"); issuer.state = READY; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("SETUP", buffer, 5)) { switch (issuer.state) { case ON: printf("setup()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "SETUPDONE\n", 10); issuer.state = READY; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("JOIN", buffer, 4)) { switch (issuer.state) { case READY: printf("join()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "JOINSTART\n", 10); issuer.state = JOINSTART; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("APPEND", buffer, 6)) { switch (issuer.state) { case JOINSTART: printf("append()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "JOINPROCEED\n", 12); issuer.state = READY; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("PUBLISH", buffer, 7)) { switch (issuer.state) { case READY: printf("publish()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "PUBLISH\n", 8); issuer.state = READY; break; default: bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); break; } } else if (0 == strncasecmp("EXIT", buffer, 4)) { printf("exit()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "OK\n", 3); ret = 1; } else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) { bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "OK\n", 3); ret = 2; } else { printf("error()\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); ret = 0; } printf("< ISSUER: %s", buffer); return ret; }