Untested no_client_away_msg support.
This commit is contained in:
parent
a4fe5d0861
commit
925bee51c8
@ -1,3 +1,8 @@
|
|||||||
|
2006-09-18 Arnaud Cornet <arnaud.cornet@gmail.com>
|
||||||
|
|
||||||
|
* src/irc.c: added no_client_away_msg configuration directive and
|
||||||
|
code.
|
||||||
|
|
||||||
2006-07-02 Arnaud Cornet <arnaud.cornet@gmail.com>
|
2006-07-02 Arnaud Cornet <arnaud.cornet@gmail.com>
|
||||||
|
|
||||||
* src/irc.c: added /bip subcommands:
|
* src/irc.c: added /bip subcommands:
|
||||||
|
9
TODO
9
TODO
@ -8,9 +8,6 @@
|
|||||||
|
|
||||||
- use gnutls
|
- use gnutls
|
||||||
- MODE #channel and WHO #channel on join
|
- MODE #channel and WHO #channel on join
|
||||||
11:23 < KiBi> Un /away truc chose automatique quand plus aucun client n'est
|
|
||||||
attaché.
|
|
||||||
- in english: automatic command when no more client is connected
|
|
||||||
|
|
||||||
- this:
|
- this:
|
||||||
Hi Arnaud,
|
Hi Arnaud,
|
||||||
@ -27,3 +24,9 @@ Best regards,
|
|||||||
Whoopie
|
Whoopie
|
||||||
--
|
--
|
||||||
Donner des droits plus méchants au log global
|
Donner des droits plus méchants au log global
|
||||||
|
|
||||||
|
DONE:
|
||||||
|
|
||||||
|
11:23 < KiBi> Un /away truc chose automatique quand plus aucun client n'est
|
||||||
|
attaché.
|
||||||
|
- in english: automatic command when no more client is connected
|
||||||
|
18
src/bip.c
18
src/bip.c
@ -407,6 +407,7 @@ static int add_connection(list_t *connectionl, list_t *data,
|
|||||||
|
|
||||||
c = calloc(sizeof(struct c_connection), 1);
|
c = calloc(sizeof(struct c_connection), 1);
|
||||||
list_init(&c->channell, NULL);
|
list_init(&c->channell, NULL);
|
||||||
|
list_init(&c->on_connect_send, NULL);
|
||||||
|
|
||||||
while ((t = list_remove_first(data))) {
|
while ((t = list_remove_first(data))) {
|
||||||
switch (t->type) {
|
switch (t->type) {
|
||||||
@ -455,7 +456,7 @@ static int add_connection(list_t *connectionl, list_t *data,
|
|||||||
c->away_nick = t->pdata;
|
c->away_nick = t->pdata;
|
||||||
break;
|
break;
|
||||||
case LEX_ON_CONNECT_SEND:
|
case LEX_ON_CONNECT_SEND:
|
||||||
c->on_connect_send = t->pdata;
|
list_add(&c->on_connect_send, t->pdata);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
conf_die("unknown keyword in connection statement");
|
conf_die("unknown keyword in connection statement");
|
||||||
@ -790,6 +791,7 @@ void ircize(list_t *ll)
|
|||||||
} \
|
} \
|
||||||
} while(0);
|
} while(0);
|
||||||
MAYFREE(link->away_nick);
|
MAYFREE(link->away_nick);
|
||||||
|
MAYFREE(link->no_client_away_msg);
|
||||||
MAYFREE(link->password);
|
MAYFREE(link->password);
|
||||||
MAYFREE(link->user);
|
MAYFREE(link->user);
|
||||||
MAYFREE(link->real_name);
|
MAYFREE(link->real_name);
|
||||||
@ -811,8 +813,20 @@ void ircize(list_t *ll)
|
|||||||
|
|
||||||
link->follow_nick = c->follow_nick;
|
link->follow_nick = c->follow_nick;
|
||||||
link->ignore_first_nick = c->ignore_first_nick;
|
link->ignore_first_nick = c->ignore_first_nick;
|
||||||
link->on_connect_send = strmaydup(c->on_connect_send);
|
|
||||||
|
/* XXX vider laliste on_connect_send */
|
||||||
|
list_iterator_t ocsit;
|
||||||
|
for (list_it_init(&c->channell, &ocsit);
|
||||||
|
list_it_item(&ocsit);
|
||||||
|
list_it_next(&ocsit)) {
|
||||||
|
free(list_it_item(&ocsit));
|
||||||
|
}
|
||||||
|
list_init(&link->on_connect_send);
|
||||||
|
list_append(&link->on_connect_send,
|
||||||
|
&c->on_connect_send);
|
||||||
link->away_nick = strmaydup(c->away_nick);
|
link->away_nick = strmaydup(c->away_nick);
|
||||||
|
link->no_client_away_msg =
|
||||||
|
strmaydup(c->no_client_away_msg);
|
||||||
|
|
||||||
link->username = strmaydup(u->name);
|
link->username = strmaydup(u->name);
|
||||||
link->password = malloc(20);
|
link->password = malloc(20);
|
||||||
|
@ -51,7 +51,8 @@ struct c_connection
|
|||||||
int follow_nick;
|
int follow_nick;
|
||||||
int ignore_first_nick;
|
int ignore_first_nick;
|
||||||
char *away_nick;
|
char *away_nick;
|
||||||
char *on_connect_send;
|
list_t on_connect_send;
|
||||||
|
char *no_client_away_msg;
|
||||||
|
|
||||||
struct client *client;
|
struct client *client;
|
||||||
};
|
};
|
||||||
|
@ -80,7 +80,7 @@ struct tuple *tuple_l_new(int type, void *p)
|
|||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_USERNAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_SSL_CHECK_MODE LEX_SSL_CHECK_STORE LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG LEX_LOG LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_LOGIN LEX_BLRESET_ON_TALK LEX_DEFAULT_USER LEX_DEFAULT_NICK LEX_DEFAULT_REALNAME
|
%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_USERNAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_SSL_CHECK_MODE LEX_SSL_CHECK_STORE LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG LEX_LOG LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_LOGIN LEX_BLRESET_ON_TALK LEX_DEFAULT_USER LEX_DEFAULT_NICK LEX_DEFAULT_REALNAME LEX_NO_CLIENT_AWAY_MSG
|
||||||
|
|
||||||
%union {
|
%union {
|
||||||
int number;
|
int number;
|
||||||
|
12
src/irc.c
12
src/irc.c
@ -814,7 +814,7 @@ static int irc_cli_startup(struct link_client *ic, struct line *line,
|
|||||||
list_it_item(&it); list_it_next(&it))
|
list_it_item(&it); list_it_next(&it))
|
||||||
write_init_string(CONN(ic), list_it_item(&it), init_nick);
|
write_init_string(CONN(ic), list_it_item(&it), init_nick);
|
||||||
|
|
||||||
/* we change nick on client */
|
/* we change nick on server */
|
||||||
if (LINK(ic)->l_server) {
|
if (LINK(ic)->l_server) {
|
||||||
struct link_server *server = LINK(ic)->l_server;
|
struct link_server *server = LINK(ic)->l_server;
|
||||||
WRITE_LINE1(CONN(ic), initmask, "NICK", server->nick);
|
WRITE_LINE1(CONN(ic), initmask, "NICK", server->nick);
|
||||||
@ -825,6 +825,12 @@ static int irc_cli_startup(struct link_client *ic, struct line *line,
|
|||||||
strcmp(LINK(ic)->away_nick, server->nick) == 0)
|
strcmp(LINK(ic)->away_nick, server->nick) == 0)
|
||||||
WRITE_LINE1(CONN(server), NULL, "NICK",
|
WRITE_LINE1(CONN(server), NULL, "NICK",
|
||||||
LINK(server)->connect_nick);
|
LINK(server)->connect_nick);
|
||||||
|
|
||||||
|
/* change away status */
|
||||||
|
if (LINK(ic)->l_clientc == 0) {
|
||||||
|
if (server && LINK(ic)->no_client_away_msg)
|
||||||
|
WRITE_LINE0(CONN(server), NULL, "AWAY");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(initmask);
|
free(initmask);
|
||||||
@ -1921,6 +1927,9 @@ void irc_client_close(struct link_client *ic)
|
|||||||
if (is && LINK(ic)->away_nick)
|
if (is && LINK(ic)->away_nick)
|
||||||
WRITE_LINE1(CONN(is), NULL, "NICK",
|
WRITE_LINE1(CONN(is), NULL, "NICK",
|
||||||
LINK(ic)->away_nick);
|
LINK(ic)->away_nick);
|
||||||
|
if (is && LINK(ic)->no_client_away_msg)
|
||||||
|
WRITE_LINE1(CONN(is), NULL, "AWAY",
|
||||||
|
LINK(ic)->no_client_away_msg);
|
||||||
log_client_none_connected(LINK(ic)->log);
|
log_client_none_connected(LINK(ic)->log);
|
||||||
}
|
}
|
||||||
irc_client_free(ic);
|
irc_client_free(ic);
|
||||||
@ -2391,6 +2400,7 @@ struct link *irc_link_new()
|
|||||||
|
|
||||||
hash_init(&link->chan_infos, HASH_NOCASE);
|
hash_init(&link->chan_infos, HASH_NOCASE);
|
||||||
list_init(&link->chan_infos_order, list_ptr_cmp);
|
list_init(&link->chan_infos_order, list_ptr_cmp);
|
||||||
|
list_init(&link->on_connect_send, list_ptr_cmp);
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ struct link {
|
|||||||
|
|
||||||
int follow_nick;
|
int follow_nick;
|
||||||
int ignore_first_nick;
|
int ignore_first_nick;
|
||||||
char *on_connect_send;
|
list_t on_connect_send;
|
||||||
char *away_nick;
|
char *away_nick;
|
||||||
hash_t chan_infos; /* channels we want */
|
hash_t chan_infos; /* channels we want */
|
||||||
list_t chan_infos_order; /* for order only */
|
list_t chan_infos_order; /* for order only */
|
||||||
|
@ -91,6 +91,7 @@ list_t *parse_conf(FILE *file)
|
|||||||
"ignore_first_nick" { return LEX_IGN_FIRST_NICK; }
|
"ignore_first_nick" { return LEX_IGN_FIRST_NICK; }
|
||||||
"away_nick" { return LEX_AWAY_NICK; }
|
"away_nick" { return LEX_AWAY_NICK; }
|
||||||
"on_connect_send" { return LEX_ON_CONNECT_SEND; }
|
"on_connect_send" { return LEX_ON_CONNECT_SEND; }
|
||||||
|
"no_client_away_msg" { return LEX_NO_CLIENT_AWAY_MSG; }
|
||||||
"pid_file" { return LEX_PID_FILE; }
|
"pid_file" { return LEX_PID_FILE; }
|
||||||
"blreset_on_talk" { return LEX_BLRESET_ON_TALK; }
|
"blreset_on_talk" { return LEX_BLRESET_ON_TALK; }
|
||||||
\"[^"]*\" {
|
\"[^"]*\" {
|
||||||
|
@ -262,6 +262,11 @@ void *list_remove_last(list_t *list)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *__list_ptr_cpy(void *a)
|
||||||
|
{
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static void *list_remove_item(list_t *l, struct list_item *li)
|
static void *list_remove_item(list_t *l, struct list_item *li)
|
||||||
{
|
{
|
||||||
@ -384,7 +389,7 @@ void list_free(list_t *t)
|
|||||||
void list_append(list_t *src, list_t *dest)
|
void list_append(list_t *src, list_t *dest)
|
||||||
{
|
{
|
||||||
list_iterator_t it;
|
list_iterator_t it;
|
||||||
|
|
||||||
for (list_it_init(src, &it); list_it_item(&it); list_it_next(&it))
|
for (list_it_init(src, &it); list_it_item(&it); list_it_next(&it))
|
||||||
list_add_last(dest, list_it_item(&it));
|
list_add_last(dest, list_it_item(&it));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user