#include "db.h" void addNumber(msg *myMsg){ char nr[NRSIZE], name[NAMESIZE]; printf("ADD \n============\n"); printf("Enter number: "); gets(nr); printf("Enter name: "); gets(name); myMsg->op = ADD; strcpy(myMsg->nr, nr); strcpy(myMsg->name, name); } void delNumber(msg *myMsg) { char nr[NRSIZE]; printf("Delete \n=============\n"); printf("Enter number: "); gets(nr); myMsg->op = DEL; strcpy(myMsg->nr, nr); strcpy(myMsg->name, ""); } void findNumber(msg *myMsg) { char name[NAMESIZE]; printf("Find \n=============\n"); printf("Enter name: "); gets(name); myMsg->op = NR; strcpy(myMsg->nr, ""); strcpy(myMsg->name, name); } void findName(msg *myMsg) { char nr[NRSIZE]; printf("Find \n=============\n"); printf("Enter number: "); gets(nr); myMsg->op = NAME; strcpy(myMsg->nr, nr); strcpy(myMsg->name, ""); } void getOut(msg *myMsg, int sock) { printf("Quitting...\n===============\n"); myMsg->op = EXIT; write(sock, myMsg, sizeof(myMsg)); close(sock); exit(0); } void printMsg(msg myMsg) { printf("myMsg.nr = %s\n", myMsg.nr); printf("myMsg.name = %s\n", myMsg.name); sleep(2); } void menu(msg *myMsg, int sock) { char choice[5]; char val; system("clear"); puts("\nWelcome to IPC, InternalPhonenumberCatalogue"); puts("============================================\n\n"); puts("1 - Add a number\n"); puts("2 - Delete a number\n"); puts("3 - Find a number\n"); puts("4 - Find a name\n"); puts("5 - Exit\n\n"); puts("Enter your choice: "); fgets(choice, sizeof(choice), stdin); switch(choice[0]){ case '1': addNumber(myMsg); break; case '2': delNumber(myMsg); break; case '3': findNumber(myMsg); break; case '4': findName(myMsg); break; case '5': getOut(myMsg, sock); break; default : puts("Try again <1-4 or 5>\n\n"); sleep(1); break; } } main(int argc, char *argv[]) { char *remhost; u_short remport; int sock; struct sockaddr_in remote; struct hostent *h; msg myMsg; if (argc != 3) { fprintf(stderr,"Usage: dbclient \n"); exit(1); } remhost = argv[1]; remport = atoi(argv[2]); /* Create the socket. */ if((sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) { perror("dbclient:socket"); exit(1); } bzero((char *) &remote, sizeof(remote)); remote.sin_family = AF_INET; if((h = gethostbyname(remhost)) == NULL) { perror("dbclient:gethostbyname"); exit(1); } bcopy((char *)h->h_addr, (char *)&remote.sin_addr, h->h_length); remote.sin_port = htons(remport); if(connect(sock, (struct sockaddr *)&remote, sizeof(remote)) < 0) { perror("dbclient:connect"); exit(1); } for(;;) { menu(&myMsg, sock); write(sock, &myMsg, sizeof(myMsg)); read(sock, &myMsg, sizeof(myMsg));/*lyssna efter svar från servern*/ if(myMsg.op == NACK) { puts("Could not execute your request, please try again"); } else if(myMsg.op == ACK) { printf("Operation executed.\n"); } else if(myMsg.op == PRN) { printMsg(myMsg); } sleep(2); } close(sock); }