return SUCCESS;
}
+int ivac_send_quit(int channel,t_ivac *ivac) {
+
+ char data[6];
+
+ data[0]=IVAC_SEND_QUIT;
+ data[1]=4;
+ strcpy(data+2,"quit");
+
+ if(network_send(ivac->net.connection[channel].fd,data,6)==N_ERROR) {
+ puts("[ivac] ivac_send_quit failed");
+ return ERROR;
+ }
+
+ return SUCCESS;
+}
+
int ivac_receive_info(int channel,t_ivac *ivac) {
char data[SEND_N_MAX];
ivac->challenger[channel].av_cap|=data[count+3];
count+=4;
break;
+ case IVAC_SEND_QUIT:
+ if(!(strncmp(data+count+2,"quit",data[1])))
+ event_math(ivac->net.connection[channel].fd,&(ivac->event),
+ READ,REMOVE);
+ network_close(&(ivac->net),channel);
default:
puts("[ivac] ivac_receive_info, unknown character");
return ERROR;
/* remote is sending info */
if(FD_ISSET(ivac->net.connection[channel].fd,&(event->rfds)))
ivac_receive_info(channel,ivac);
- ivac_display_content(ivac);
+ // ivac_display_content(ivac);
}
}
if((arg[1][0]>='0')&&(arg[1][0]<='9')) channel=atoi(arg[1]);
else channel=-1;
if((channel>=0)&&(channel<MAX_CONNECTIONS)) {
- i=network_close(&(ivac->net),channel);
- if(i==N_E_NC)
- sprintf(c_str,"channel %02d: no active connection",channel);
- else
+ if(ivac->net.connection[channel].status&C_ESTABL) {
+ ivac_send_quit(channel,ivac);
+ event_math(ivac->net.connection[channel].fd,&(ivac->event),
+ READ,REMOVE);
+ network_close(&(ivac->net),channel);
sprintf(c_str,"channel %02d: connection closed",channel);
+ memset(&(ivac->challenger[channel]),0,sizeof(t_challenger));
+ }
+ else
+ sprintf(c_str,"channel %02d: no active connection",channel);
}
else sprintf(c_str,"invalid argument: '%s'",arg[1]);
}