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>
|
||||
|
||||
* src/irc.c: added /bip subcommands:
|
||||
|
9
TODO
9
TODO
@ -8,9 +8,6 @@
|
||||
|
||||
- use gnutls
|
||||
- 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:
|
||||
Hi Arnaud,
|
||||
@ -27,3 +24,9 @@ Best regards,
|
||||
Whoopie
|
||||
--
|
||||
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);
|
||||
list_init(&c->channell, NULL);
|
||||
list_init(&c->on_connect_send, NULL);
|
||||
|
||||
while ((t = list_remove_first(data))) {
|
||||
switch (t->type) {
|
||||
@ -455,7 +456,7 @@ static int add_connection(list_t *connectionl, list_t *data,
|
||||
c->away_nick = t->pdata;
|
||||
break;
|
||||
case LEX_ON_CONNECT_SEND:
|
||||
c->on_connect_send = t->pdata;
|
||||
list_add(&c->on_connect_send, t->pdata);
|
||||
break;
|
||||
default:
|
||||
conf_die("unknown keyword in connection statement");
|
||||
@ -790,6 +791,7 @@ void ircize(list_t *ll)
|
||||
} \
|
||||
} while(0);
|
||||
MAYFREE(link->away_nick);
|
||||
MAYFREE(link->no_client_away_msg);
|
||||
MAYFREE(link->password);
|
||||
MAYFREE(link->user);
|
||||
MAYFREE(link->real_name);
|
||||
@ -811,8 +813,20 @@ void ircize(list_t *ll)
|
||||
|
||||
link->follow_nick = c->follow_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->no_client_away_msg =
|
||||
strmaydup(c->no_client_away_msg);
|
||||
|
||||
link->username = strmaydup(u->name);
|
||||
link->password = malloc(20);
|
||||
|
@ -51,7 +51,8 @@ struct c_connection
|
||||
int follow_nick;
|
||||
int ignore_first_nick;
|
||||
char *away_nick;
|
||||
char *on_connect_send;
|
||||
list_t on_connect_send;
|
||||
char *no_client_away_msg;
|
||||
|
||||
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 {
|
||||
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))
|
||||
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) {
|
||||
struct link_server *server = LINK(ic)->l_server;
|
||||
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)
|
||||
WRITE_LINE1(CONN(server), NULL, "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);
|
||||
@ -1921,6 +1927,9 @@ void irc_client_close(struct link_client *ic)
|
||||
if (is && LINK(ic)->away_nick)
|
||||
WRITE_LINE1(CONN(is), NULL, "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);
|
||||
}
|
||||
irc_client_free(ic);
|
||||
@ -2391,6 +2400,7 @@ struct link *irc_link_new()
|
||||
|
||||
hash_init(&link->chan_infos, HASH_NOCASE);
|
||||
list_init(&link->chan_infos_order, list_ptr_cmp);
|
||||
list_init(&link->on_connect_send, list_ptr_cmp);
|
||||
return link;
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ struct link {
|
||||
|
||||
int follow_nick;
|
||||
int ignore_first_nick;
|
||||
char *on_connect_send;
|
||||
list_t on_connect_send;
|
||||
char *away_nick;
|
||||
hash_t chan_infos; /* channels we want */
|
||||
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; }
|
||||
"away_nick" { return LEX_AWAY_NICK; }
|
||||
"on_connect_send" { return LEX_ON_CONNECT_SEND; }
|
||||
"no_client_away_msg" { return LEX_NO_CLIENT_AWAY_MSG; }
|
||||
"pid_file" { return LEX_PID_FILE; }
|
||||
"blreset_on_talk" { return LEX_BLRESET_ON_TALK; }
|
||||
\"[^"]*\" {
|
||||
|
@ -262,6 +262,11 @@ void *list_remove_last(list_t *list)
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void *__list_ptr_cpy(void *a)
|
||||
{
|
||||
return a;
|
||||
}
|
||||
|
||||
/*
|
||||
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)
|
||||
{
|
||||
list_iterator_t it;
|
||||
|
||||
|
||||
for (list_it_init(src, &it); list_it_item(&it); list_it_next(&it))
|
||||
list_add_last(dest, list_it_item(&it));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user