void NetworkManager::startUp() { if(_server) { Server_Close(_server); Server_Destroy(_server); _server = 0; } _server = Server_Create(); Server_Start(_server, PORT); state = NET_STATE_AWAIT_CLIENT; Server_OnConnected(Server_Connected); Server_OnRecv(Server_Recv); }
int main (int argc, char **argv) { char pname[MAXPATHNAMELEN]; char *temp_buff; int pid; struct my_msg msg; struct read_struct msg_read; struct read_struct msg_write; struct stat_struct msg_stat; struct old_new msg_link; struct Stat res_stat; struct readlink msg_readlink; struct seek_struct msg_seek; printf("\nYFS: Started File Server"); Initialize_Server(); if (Fork() == 0) { printf("\nCHILD\n"); pid=Exec(argv[1],argv); printf("\nval returned by exec is %d",pid); return 0; } else printf("\nPARENT\n"); while(1) { pid=Receive(&msg); //printf("\nInside while"); switch(msg.type) { case CREATE: //for create,type=1,data2=inode of current dir,ptr=ptr to path { printf("\nInside Server Create"); CopyFrom(pid,(void *)pname,msg.ptr,MAXPATHNAMELEN); msg.data2=Server_Create(pname,msg.data2); printf("\nInside Server Returning %d",msg.data2); if(msg.data2!=ERROR) msg.type=0; else msg.type=ERROR; printf("\nInside Server Returning %d",msg.type); Reply(&msg,pid); break; } case OPEN: //for Open,type=1,data2=inode of current dir,ptr=ptr to path { CopyFrom(pid,(void *)pname,msg.ptr,MAXPATHNAMELEN); msg.data2=Server_Open(pname,msg.data2); printf("\nVal returned by open is %d\n",msg.data2); if(msg.data2!=ERROR) msg.type=0; else msg.type=ERROR; printf("\nInside Server Returning %d\n",msg.type); Reply(&msg,pid); break; } case MKDIR: //for MkDir,type=1,data2=inode of current dir,ptr=ptr to path { CopyFrom(pid,(void *)pname,msg.ptr,MAXPATHNAMELEN); msg.data2=Server_MkDir(pname,msg.data2); printf("\nInside Server MkDir with name as %s and curr inode %d\n",pname,msg.data2); if(msg.data2!=ERROR) msg.type=0; else msg.type=ERROR; Reply(&msg,pid); break; } case CHDIR: //for ChDir,type=1,data2=inode of current dir,ptr=ptr to new dir { CopyFrom(pid,(void *)pname,msg.ptr,MAXPATHNAMELEN); printf("\nInside Server ChDir with name as %s and curr inode %d\n",pname,msg.data2); msg.data2=Server_ChDir(pname,msg.data2); if(msg.data2!=ERROR) msg.type=0; else msg.type=ERROR; Reply(&msg,pid); break; } case RMDIR: //for ChDir,type=1,data2=inode of current dir,ptr=ptr to dir { CopyFrom(pid,(void *)pname,msg.ptr,MAXPATHNAMELEN); msg.type=Server_RmDir(pname,msg.data2); Reply((void *)&msg,pid); break; } case READ: { CopyFrom(pid,(void *)&msg_read,msg.ptr,sizeof(struct read_struct)); temp_buff=(char *)malloc(msg_read.len+1); msg.type=Server_Read(msg.data2,msg_read.len,msg_read.offset,temp_buff); CopyTo(pid,msg_read.buff,temp_buff,msg_read.len); printf("\nInside Server ReturningRead %d",msg.type); printf("\n"); Reply((void *)&msg,pid); //free(temp_buff); break; } case WRITE: { printf("\nInside write in while"); CopyFrom(pid,(void *)&msg_write,msg.ptr,sizeof(struct read_struct)); temp_buff=(char *)malloc(msg_write.len+1); temp_buff[msg_write.len]='\0'; CopyFrom(pid,temp_buff,msg_write.buff,msg_write.len); printf("\nData for writing is %s and len =%d",temp_buff,msg_write.len); msg.type=Server_Write(msg.data2,msg_write.len,msg_write.offset,temp_buff); // //free(temp_buff); Reply((void *)&msg,pid); break; } case STAT: { CopyFrom(pid,(void *)&msg_stat,msg.ptr,sizeof(struct stat_struct)); msg.type=Server_Stat(msg.data2,msg_stat.pathname,&res_stat); if(msg.type!=ERROR) CopyTo(pid,(void *)msg_stat.statbuf,(void *)&res_stat,sizeof(struct Stat)); Reply(&msg,pid); break; } case LINK: { CopyFrom(pid,(void *)&msg_link,msg.ptr,sizeof(struct old_new)); msg.data2=Server_Link(msg.data2,msg_link.oldname,msg_link.newname); if(msg.data2==ERROR) msg.type=ERROR; else msg.type=0; Reply(&msg,pid); break; } case UNLINK: { temp_buff=(char *)malloc(MAXPATHNAMELEN*sizeof(char)); CopyFrom(pid,(void *)temp_buff,msg.ptr,MAXPATHNAMELEN); msg.type=Server_UnLink(msg.data2,temp_buff); Reply(&msg,pid); free(temp_buff); break; } case READLINK: { CopyFrom(pid,(void *)&msg_readlink,msg.ptr,sizeof(struct readlink)); temp_buff=(char *)malloc(msg_readlink.len+1); msg.type=Server_ReadLink(msg.data2,msg_readlink.pathname,msg_readlink.len,temp_buff); CopyTo(pid,msg_readlink.buf,temp_buff,msg_readlink.len); Reply(&msg,pid); break; } case SYMLINK: { CopyFrom(pid,(void *)&msg_link,msg.ptr,sizeof(struct old_new)); msg.data2=Server_SymLink(msg.data2,msg_link.oldname,msg_link.newname); if(msg.data2==ERROR) msg.type=ERROR; else msg.type=0; Reply(&msg,pid); break; } case SEEK: { CopyFrom(pid,(void *)&msg_seek,msg.ptr,sizeof(struct stat_struct)); msg.type=Server_Seek(msg.data2,msg_seek.curr_offset,msg_seek.new_offset,msg_seek.whence); Reply(&msg,pid); break; } case SHUTDOWN: { //Server_Sync(); TtyPrintf(0,"\nShutting Down Yalnix File Server!"); msg.type=0; Reply((void *)&msg,pid); Exit(0); break; } case SYNC: { Reply((void *)&msg,pid); //Server_sync(); break; } default: { msg.type=ERROR; Reply(&msg,pid); break; } } Reply(&msg,pid); } printf("\nExiting Yfs"); return 0;; }