/* time challenge response is valid for */
time_t chal_time;
+ rb_fde_t *ctrlF; /* For servers:
+ control fd used for sending commands
+ to servlink */
+
struct SlinkRpl slinkrpl; /* slink reply being parsed */
unsigned char *slinkq; /* sendq for control data */
int slinkq_ofs; /* ofset into slinkq */
extern void send_queued(struct Client *to);
-extern void send_queued_slink_write(int fd, void *data);
+extern void send_queued_slink_write(rb_fde_t *F, void *data);
extern void sendto_one(struct Client *target_p, const char *, ...) AFP(2, 3);
extern void sendto_one_notice(struct Client *target_p,const char *, ...) AFP(2, 3);
client_p->localClient->lasttime = client_p->localClient->firsttime = rb_current_time();
client_p->localClient->F = NULL;
+ client_p->localClient->ctrlF = NULL;
client_p->preClient = (struct PreClient *) rb_bh_alloc(pclient_heap);
client_p->localClient->F = NULL;
}
+ if(client_p->localClient->ctrlF)
+ {
+ rb_close(client_p->localClient->ctrlF);
+ client_p->localClient->ctrlF = NULL;
+ }
+
rb_linebuf_donebuf(&client_p->localClient->buf_sendq);
rb_linebuf_donebuf(&client_p->localClient->buf_recvq);
detach_conf(client_p);
target_p->localClient->slinkq[0] = SLINKCMD_ZIPSTATS;
target_p->localClient->slinkq_ofs = 0;
target_p->localClient->slinkq_len = 1;
- // send_queued_slink_write(target_p->localClient->ctrlfd, target_p);
+ send_queued_slink_write(target_p->localClient->ctrlF, target_p);
}
}
}
*/
rb_snprintf(note, sizeof note, "slink data: %s", client_p->name);
rb_note(client_p->localClient->F, note);
- // rb_note(client_p->localClient->ctrlfd, "slink ctrl: %s", client_p->name);
+ rb_snprintf(note, sizeof note, "slink ctrl: %s", client_p->name);
+ rb_note(client_p->localClient->ctrlF, note);
}
else
{
server->localClient->slinkq_len = c;
/* schedule a write */
- //XXX send_queued_slink_write(server->localClient->ctrlF, server);
+ send_queued_slink_write(server->localClient->ctrlF, server);
}
/*
close(data_fds[1]);
s_assert(server->localClient);
- // server->localClient->ctrlfd = ctrl_fds[0];
+ server->localClient->ctrlF = rb_open(ctrl_fds[0], RB_FD_PIPE, "servlink ctrl");
server->localClient->F = rb_open(data_fds[0], RB_FD_PIPE, "servlink data");
- if(!rb_set_nb(server->localClient->F))
+ if(!rb_set_nb(server->localClient->ctrlF))
{
ilog_error("setting a slink fd nonblocking");
}
- /* if(!rb_set_nb(server->localClient->ctrlfd))
+ if(!rb_set_nb(server->localClient->F))
{
ilog_error("setting a slink fd nonblocking");
}
- rb_open(server->localClient->ctrlfd, FD_SOCKET, NULL);
- */
-
read_packet(server->localClient->F, server);
}
* side effects - write is rescheduled if queue isnt emptied
*/
void
-send_queued_slink_write(int fd, void *data)
+send_queued_slink_write(rb_fde_t *F, void *data)
{
struct Client *to = data;
int retlen;
/* Next, lets try to write some data */
if(to->localClient->slinkq)
{
- /* retlen = write(to->localClient->ctrlfd,
+ retlen = rb_write(to->localClient->ctrlF,
to->localClient->slinkq + to->localClient->slinkq_ofs,
- to->localClient->slinkq_len); */
+ to->localClient->slinkq_len);
if(retlen < 0)
{
}
/* if we have any more data, reschedule a write */
- /* if(to->localClient->slinkq_len)
- rb_setselect(to->localClient->ctrlfd,
- RB_SELECT_WRITE, send_queued_slink_write, to); */
+ if(to->localClient->slinkq_len)
+ rb_setselect(to->localClient->ctrlF,
+ RB_SELECT_WRITE, send_queued_slink_write, to);
}
/* sendto_one()