projects
/
my-code
/
ivac.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bc3326e
)
added quit msg to send before network close
author
hackbard
<hackbard>
Tue, 11 May 2004 07:53:24 +0000
(07:53 +0000)
committer
hackbard
<hackbard>
Tue, 11 May 2004 07:53:24 +0000
(07:53 +0000)
src/ivac.c
patch
|
blob
|
history
src/ivac.h
patch
|
blob
|
history
diff --git
a/src/ivac.c
b/src/ivac.c
index
8b9c312
..
0108131
100644
(file)
--- a/
src/ivac.c
+++ b/
src/ivac.c
@@
-129,6
+129,22
@@
int ivac_send_info(int channel,t_ivac *ivac) {
return SUCCESS;
}
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];
int ivac_receive_info(int channel,t_ivac *ivac) {
char data[SEND_N_MAX];
@@
-158,6
+174,11
@@
int ivac_receive_info(int channel,t_ivac *ivac) {
ivac->challenger[channel].av_cap|=data[count+3];
count+=4;
break;
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;
default:
puts("[ivac] ivac_receive_info, unknown character");
return ERROR;
@@
-200,7
+221,7
@@
int ivac_event_cb(t_event *event,void *ptr) {
/* remote is sending info */
if(FD_ISSET(ivac->net.connection[channel].fd,&(event->rfds)))
ivac_receive_info(channel,ivac);
/* 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);
}
}
}
}
@@
-307,11
+328,16
@@
int ivac_parse_command(t_input *input,void *ptr) {
if((arg[1][0]>='0')&&(arg[1][0]<='9')) channel=atoi(arg[1]);
else channel=-1;
if((channel>=0)&&(channel<MAX_CONNECTIONS)) {
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);
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]);
}
}
else sprintf(c_str,"invalid argument: '%s'",arg[1]);
}
diff --git
a/src/ivac.h
b/src/ivac.h
index
a946580
..
b635160
100644
(file)
--- a/
src/ivac.h
+++ b/
src/ivac.h
@@
-28,6
+28,7
@@
#define IVAC_SEND_NAME 'n'
#define IVAC_SEND_G_CAP 'g'
#define IVAC_SEND_AV_CAP 'c'
#define IVAC_SEND_NAME 'n'
#define IVAC_SEND_G_CAP 'g'
#define IVAC_SEND_AV_CAP 'c'
+#define IVAC_SEND_QUIT 'q'
#define NETWORK (1<<0)
#define NETWORK (1<<0)