Browse Source

protocol between issuer and mamber implemented, member has problems on connecting...

master
root 6 years ago
parent
commit
05167ba440
  1. 2
      client.c
  2. 2
      client.h
  3. 114
      issuer.c
  4. 119
      member.c
  5. 6
      server.c

2
client.c

@ -25,7 +25,7 @@ client_t* client_open(conn_handler handler) {
return client;
}
int client_connect(client_t *client, int16_t port, char *ip_str) {
int client_connect(client_t *client, char *ip_str, int16_t port) {
struct sockaddr_in servaddr;
unsigned int servaddr_len = 0;

2
client.h

@ -23,7 +23,7 @@ typedef struct client {
client_t* client_open(conn_handler handler);
int client_connect(client_t *client, int16_t port, char *ip_str);
int client_connect(client_t *client, char *ip_str, int16_t port);
int client_close(client_t* client);

114
issuer.c

@ -16,6 +16,15 @@ typedef struct issuer {
struct ecdaa_issuer_secret_key_FP256BN isk;
} issuer_t;
typedef enum issuer_state {
ON,
SETUPDONE,
JOINSTART,
JOINPROCEED,
PUBLISH,
READY
} issuerstate_e;
int process_issuer(int connfd);
int main() {
@ -43,26 +52,105 @@ int main() {
int process_issuer(int connfd) {
char inbuf[MAX_BUFSIZE];
char outbuf[MAX_BUFSIZE];
int n = 0;
for (;;) {
int ret = 2;
issuerstate_e state = ON;
while (ret == 2) {
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;
printf("process_member: cannot read from socket\n");
ret = -1;
}
printf("> ISSUER: %s\n", inbuf);
strncpy(outbuf, "OK", 2);
printf("< ISSUER: %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("OK", inbuf, 2)) {
switch (state) {
case SETUPDONE:
case JOINPROCEED:
case PUBLISH:
state = READY;
break;
default:
strncpy(outbuf, "ERR\n", 4);
break;
}
} else if (0 == strncmp("ERR", inbuf, 3)) {
switch (state) {
case SETUPDONE:
case JOINPROCEED:
case PUBLISH:
printf("command failed at client\n");
state = READY;
break;
default:
printf("invalid instruction\n");
strncpy(outbuf, "ERR\n", 4);
break;
}
if (0 == strncmp("shutdown", inbuf, 8)) {
printf("process_issuer: shutting down gracefully\n");
return 1;
} else if (0 == strncmp("SETUP", inbuf, 5)) {
switch (state) {
case ON:
printf("setup()\n");
strncpy(outbuf, "SETUPDONE\n", 10);
state = SETUPDONE;
break;
default:
strncpy(outbuf, "ERR\n", 4);
break;
}
} else if (0 == strncmp("JOIN", inbuf, 4)) {
switch (state) {
case READY:
printf("join()\n");
strncpy(outbuf, "JOINSTART\n", 10);
state = JOINSTART;
break;
default:
strncpy(outbuf, "ERR\n", 4);
break;
}
} else if (0 == strncmp("APPEND", inbuf, 6)) {
switch (state) {
case JOINSTART:
printf("append()\n");
strncpy(outbuf, "JOINPROCEED\n", 12);
state = JOINPROCEED;
break;
default:
strncpy(outbuf, "ERR\n", 4);
break;
}
} else if (0 == strncmp("PUBLISH", inbuf, 7)) {
switch (state) {
case READY:
printf("publish()\n");
strncpy(outbuf, "PUBLISH\n", 8);
state = PUBLISH;
break;
default:
strncpy(outbuf, "ERR\n", 4);
break;
}
} else if (0 == strncmp("EXIT", inbuf, 4)) {
printf("exit()\n");
strncpy(outbuf, "OK\n", 3);
ret = 0;
} else if (0 == strncmp("SHUTDOWN", inbuf, 8)) {
strncpy(outbuf, "OK\n", 3);
ret = 1;
} else {
printf("error()\n");
strncpy(outbuf, "ERR\n", 4);
ret = 0;
}
printf("< ISSUER: %s\n", outbuf);
write(connfd, outbuf, sizeof(outbuf));
}
return
ret;
}

119
member.c

@ -2,6 +2,7 @@
#include <string.h>
#include <ecdaa-tpm.h>
#include "client.h"
#include "server.h"
#define ISSUERIP "127.0.0.1"
#define ISSUERPORT 6590
@ -21,80 +22,130 @@ typedef enum memberstate {
APPEND,
JOINED,
ATTEST,
PUBLISH
PUBLISH,
SHUTDOWN
}memberstate_t;
int process_member_client(int connfd);
int process_member(int connfd);
int member_join(int connfd);
int main() {
int err = 0;
client_t *client;
server_t *server;
client = client_open(&process_member_client);
if (NULL == client) {
server = server_open(&process_member, MEMBERPORT);
if (NULL == server) {
printf("listen failed, closing...\n");
}
for (; !err;) {
err = client_connect(client, ISSUERPORT, ISSUERIP);
err = server_accept(server);
if (1 == err) {
printf("graceful shutdown...\n");
} else if (err) {
printf("accept failed, closing...\n");
}
}
printf("shut down client\n");
client_close(client);
printf("shut down server\n");
server_close(server);
return 0;
}
int process_member_client(int connfd) {
int process_member(int connfd) {
char inbuf[MAX_BUFSIZE];
char outbuf[MAX_BUFSIZE];
int n = 0;
memberstate_t state = JOIN;
int ret = 2;
strncpy(outbuf, "JOIN", 4);
printf("< MEMBER: %s\n", outbuf);
write(connfd, outbuf, sizeof(outbuf));
for (;;) {
while (ret == 2) {
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;
printf("process_member: cannot read from socket\n");
ret = -1;
}
printf("> MEMBER: %s\n", inbuf);
if (0 == strncmp("ATTEST", inbuf, 6)) {
printf("attest()\n");
strncpy(outbuf, "OK\n", 3);
}
else if (0 == strncmp("PUBLISH", inbuf, 7)) {
printf("publish()\n");
strncpy(outbuf, "OK\n", 3);
}
else if (0 == strncmp("JOIN", inbuf, 4)) {
printf("join()\n");
client_t *client;
client = client_open(&member_join);
if(0 != client_connect(client, ISSUERIP, ISSUERPORT)) {
strncpy(outbuf, "ERR\n", 4);
ret = -1;
} else {
if(0 != client_close(client)) {
strncpy(outbuf, "ERR\n", 4);
}
strncpy(outbuf, "OK\n", 3);
}
}
else if (0 == strncmp("EXIT", inbuf, 4)) {
printf("exit()\n");
strncpy(outbuf, "OK\n", 3);
ret = 0;
}
else if (0 == strncmp("SHUTDOWN", inbuf, 8)) {
strncpy(outbuf, "OK\n", 3);
ret = 1;
}
else {
printf("error()\n");
strncpy(outbuf, "ERR\n", 4);
ret = -1;
}
printf("< MEMBER: %s\n", outbuf);
write(connfd, outbuf, sizeof(outbuf));
}
return ret;
}
int member_join(int connfd) {
char inbuf[MAX_BUFSIZE];
char outbuf[MAX_BUFSIZE];
int n = 0;
memberstate_t state = JOIN;
for (;;) {
switch(state) {
case JOIN:
strncpy(outbuf, "JOIN", 4);
state = APPEND;
break;
case APPEND:
if (0 == strncmp("JOINSTART", inbuf, 9)) {
strncpy(outbuf, "APPEND\n", 7);
state = JOINED;
}
break;
case JOINED:
state = ATTEST;
state = PUBLISH;
break;
case ATTEST:
state = JOINED;
break;
case PUBLISH:
if (0 == strncmp("JOINPROCEED", inbuf, 11)) {
strncpy(outbuf, "OK\n", 3);
return 0;
}
break;
default:
return -1;
}
printf("> MEMBER: %s\n", inbuf);
strncpy(outbuf, "OK", 2);
printf("< MEMBER: %s\n", outbuf);
bzero(outbuf, MAX_BUFSIZE);
printf("ISSUER < 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;
bzero(inbuf, MAX_BUFSIZE);
if (0 >= read(connfd, inbuf, sizeof(inbuf))) {
printf("process_issuer: cannot read from socket\n");
return -1;
}
}
}

6
server.c

@ -37,6 +37,8 @@ int server_accept(server_t *server) {
struct sockaddr_in client;
unsigned int client_len = 0;
int connfd = -1;
int ret = 0;
if (NULL == server || 0 != listen(server->conn->fd, MAX_CLIENTS)) {
printf("server_accept: listen failed\n");
return -1;
@ -48,13 +50,13 @@ int server_accept(server_t *server) {
printf("server_accept: connection to client failed, ");
return -1;
} else {
server->handler(connfd);
ret = server->handler(connfd);
if(0 != close(connfd)) {
printf("server_accept: failed to close client connection properly");
return -1;
}
}
return 0;
return ret;
}
int server_close(server_t *server) {

Loading…
Cancel
Save