void do_service(int sd) { int byte_ricevuti = 1; int operazione; struct protocol_header header; memset(&header,0,sizeof(struct protocol_header)); do { printf("* Mi metto in attesa di una nuova richiesta\n"); byte_ricevuti = riceviDato(sd,&header,sizeof(struct protocol_header)); if(byte_ricevuti == 0) break; operazione = controllaOperazione(&header); switch(operazione) { case 1: serverMap(&header,sd); break; case 2: serverUnmap(&header,sd); break; case 3: serverUpdate(&header,sd); break; case 4: serverWrite(&header,sd); break; case 5: serverWait(&header,sd); break; } printf("* Richiesta smistata, passiamo alla prossima\n"); } while (byte_ricevuti != 0); }
void handleMessage(char * messageR){ msg_t* message = (msg_t*)messageR; message->returnVal = -1; int returnVal; switch(message->msgType){ case INIT: returnVal = serverInit(file); message->returnVal = returnVal; break; case READ: returnVal = serverRead(message->inum, message->buffer, message->block); message->returnVal = returnVal; break; case LOOKUP: returnVal = serverLookup(message->pinum, message->name); message->returnVal = returnVal; break; case WRITE: returnVal = serverWrite(message->inum, message->buffer, message->block); message->returnVal = returnVal; break; case STAT: returnVal = serverStat(message->inum, &(message->stat)); message->returnVal = returnVal; break; case CREATE: returnVal = serverCreate(message->pinum, message->type, (message->name)); message->returnVal = returnVal; break; case UNLINK: returnVal = serverUnlink(message->pinum, message->name); message->returnVal = returnVal; break; case SHUTDOWN: message->returnVal = 0; memcpy(messageR, message, sizeof(*message)); UDP_Write(sd, &s, messageR, sizeof(msg_t)); //fsync(diskFD); close(diskFD); // printDisk(); exit(0); break; default: message->returnVal = -1; break; } memcpy(messageR, message, sizeof(*message)); }