Have client rejoin on connect/reconnect
This commit is contained in:
parent
2afd09e3de
commit
04e17c8359
70
src/irc.c
70
src/irc.c
@ -53,6 +53,7 @@ void write_user_list(connection_t *c, char *dest);
|
|||||||
|
|
||||||
static void irc_copy_cli(struct link_client *src, struct link_client *dest,
|
static void irc_copy_cli(struct link_client *src, struct link_client *dest,
|
||||||
struct line *line);
|
struct line *line);
|
||||||
|
static void irc_cli_make_join(struct link_client *ic);
|
||||||
|
|
||||||
#define LAGOUT_TIME (360)
|
#define LAGOUT_TIME (360)
|
||||||
#define LAGCHECK_TIME (90)
|
#define LAGCHECK_TIME (90)
|
||||||
@ -297,6 +298,7 @@ static void irc_server_join(struct link_server *s)
|
|||||||
|
|
||||||
static void irc_server_connected(struct link_server *server)
|
static void irc_server_connected(struct link_server *server)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
LINK(server)->s_state = IRCS_CONNECTED;
|
LINK(server)->s_state = IRCS_CONNECTED;
|
||||||
irc_server_join(server);
|
irc_server_join(server);
|
||||||
log_connected(LINK(server)->log);
|
log_connected(LINK(server)->log);
|
||||||
@ -308,6 +310,9 @@ static void irc_server_connected(struct link_server *server)
|
|||||||
write_line(CONN(server), str);
|
write_line(CONN(server), str);
|
||||||
free(str);
|
free(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < LINK(server)->l_clientc; i++)
|
||||||
|
irc_cli_make_join(LINK(server)->l_clientv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -584,6 +589,40 @@ static char *get_str_elem(char *str, int num)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void irc_cli_make_join(struct link_client *ic)
|
||||||
|
{
|
||||||
|
if (LINK(ic)->l_server) {
|
||||||
|
/* join channels, step one, those in conf, in order */
|
||||||
|
list_iterator_t li;
|
||||||
|
for (list_it_init(&LINK(ic)->chan_infos_order, &li);
|
||||||
|
list_it_item(&li); list_it_next(&li)) {
|
||||||
|
struct chan_info *ci = (struct chan_info *)
|
||||||
|
list_it_item(&li);
|
||||||
|
struct channel *chan;
|
||||||
|
if ((chan = hash_get(&LINK(ic)->l_server->channels,
|
||||||
|
ci->name)))
|
||||||
|
irc_send_join(ic, chan);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* step two, those not in conf */
|
||||||
|
hash_iterator_t hi;
|
||||||
|
for (hash_it_init(&LINK(ic)->l_server->channels, &hi);
|
||||||
|
hash_it_item(&hi); hash_it_next(&hi)) {
|
||||||
|
struct channel *chan = (struct channel *)
|
||||||
|
hash_it_item(&hi);
|
||||||
|
if (!hash_get(&LINK(ic)->chan_infos, chan->name))
|
||||||
|
irc_send_join(ic, chan);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* backlog privates */
|
||||||
|
char *str;
|
||||||
|
while ((str = log_backread(LINK(ic)->log, S_PRIVATES))) {
|
||||||
|
write_line(CONN(ic), str);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int irc_cli_startup(struct link_client *ic, struct line *line,
|
static int irc_cli_startup(struct link_client *ic, struct line *line,
|
||||||
list_t *linkl)
|
list_t *linkl)
|
||||||
{
|
{
|
||||||
@ -688,36 +727,7 @@ static int irc_cli_startup(struct link_client *ic, struct line *line,
|
|||||||
return OK_FORGET;
|
return OK_FORGET;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LINK(ic)->l_server) {
|
irc_cli_make_join(ic);
|
||||||
/* join channels, step one, those in conf, in order */
|
|
||||||
list_iterator_t li;
|
|
||||||
for (list_it_init(&LINK(ic)->chan_infos_order, &li);
|
|
||||||
list_it_item(&li); list_it_next(&li)) {
|
|
||||||
struct chan_info *ci = (struct chan_info *)
|
|
||||||
list_it_item(&li);
|
|
||||||
struct channel *chan;
|
|
||||||
if ((chan = hash_get(&LINK(ic)->l_server->channels,
|
|
||||||
ci->name)))
|
|
||||||
irc_send_join(ic, chan);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* step two, those not in conf */
|
|
||||||
hash_iterator_t hi;
|
|
||||||
for (hash_it_init(&LINK(ic)->l_server->channels, &hi);
|
|
||||||
hash_it_item(&hi); hash_it_next(&hi)) {
|
|
||||||
struct channel *chan = (struct channel *)
|
|
||||||
hash_it_item(&hi);
|
|
||||||
if (!hash_get(&LINK(ic)->chan_infos, chan->name))
|
|
||||||
irc_send_join(ic, chan);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* backlog privates */
|
|
||||||
char *str;
|
|
||||||
while ((str = log_backread(LINK(ic)->log, S_PRIVATES))) {
|
|
||||||
write_line(CONN(ic), str);
|
|
||||||
free(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log_client_connected(LINK(ic)->log);
|
log_client_connected(LINK(ic)->log);
|
||||||
free(init_nick);
|
free(init_nick);
|
||||||
|
Loading…
Reference in New Issue
Block a user