X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=src%2Fnetwork.c;h=9ccb2b57b1ecf99e8b271f70abcfab3b98ffe349;hb=2fb65b9beceb0945b593e28332507aa1b7c3fd90;hp=c7425efb5f55c0c89894fdbf179f2a89d676347c;hpb=c8c162c2b1f82f32160bcaa4159ea8735a8582c5;p=my-code%2Fivac.git diff --git a/src/network.c b/src/network.c index c7425ef..9ccb2b5 100644 --- a/src/network.c +++ b/src/network.c @@ -53,6 +53,12 @@ int network_init(t_net *net) { int network_shutdown(t_net *net) { + int channel; + + for(channel=0;channelconnection[channel].status&C_SOCKET) + close(net->connection[channel].fd); + if(close(net->l_fd)==-1) { perror("[network] close call"); return N_ERROR; @@ -95,9 +101,11 @@ int network_manage_connection(t_net *net) { perror("[network] socket call"); return N_ERROR; } + net->connection[i].status|=C_SOCKET; } - if(!net->connection[i].status&C_ESTABL) { + if((!net->connection[i].status&C_ESTABL)&& + (net->connection[i].status&C_SOCKET)) { memset(&addr,0,sizeof(struct sockaddr)); addr.sin_family=AF_INET; @@ -115,6 +123,7 @@ int network_manage_connection(t_net *net) { printf("[network] established connection to %s port %d on channel %d\n", net->connection[i].ip,net->connection[i].port,i); + net->connection[i].status|=C_ESTABL; } @@ -183,71 +192,3 @@ int network_receive(int fd,unsigned char *data,int datasize) { return count; } - -int send_info(int channel,t_net *net,char *name) { - - char data[SEND_N_MAX]; - int size; - - size=strlen(name); - - data[0]=SEND_N_NAME; - data[1]=size; - strncpy(data+2,name,size); - size+=2; - - data[size]=SEND_N_G_CAP; - data[size+1]=sizeof(unsigned char); - data[size+1+sizeof(unsigned char)]=net->cap; - size+=(sizeof(unsigned char)+2); - - data[size]=SEND_N_AV_CAP; - data[size+1]=sizeof(unsigned short); - data[size+1+sizeof(unsigned short)]=net->avcap; - size+=(sizeof(unsigned short)+2); - - if(network_send(net->connection[channel].fd,data,size)==N_ERROR) { - puts("[network] send_info failed"); - return N_ERROR; - } - - return N_SUCCESS; -} - -int receive_info(int channel,t_net *net) { - - char data[CHAR_N_UNAME+2]; - int count,length; - - count=0; - - if((length=network_receive(net->connection[channel].fd, - data,SEND_N_MAX))==N_ERROR) { - puts("[network] receive_info failed"); - return N_ERROR; - } - - while(length-count) { - switch(data[count]) { - case SEND_N_NAME: - strncpy(net->connection[channel].name,&data[count+2],data[count+1]); - net->connection[channel].name[(int)data[count+2]]='\0'; - count+=(data[count+2]+2); - break; - case SEND_N_G_CAP: - net->connection[channel].cap=data[count+4]; - count+=(sizeof(unsigned char)+2); - break; - case SEND_N_AV_CAP: - net->connection[channel].avcap=data[count+3]<<8; - net->connection[channel].avcap|=data[count+4]; - count+=(sizeof(unsigned short)+2); - break; - default: - puts("[network] receive_info, unknown character"); - return N_ERROR; - } - } - - return N_SUCCESS; -}