1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-03 00:03:12 +02:00

Add isupport value in IRC servers (content of IRC message 005), with new infos: irc_server_isupport and irc_server_isupport_value

This commit is contained in:
Sebastien Helleu
2010-05-22 10:51:43 +02:00
parent 6253e3ac37
commit 2dee40dd1a
18 changed files with 260 additions and 14 deletions
+62
View File
@@ -297,6 +297,57 @@ irc_server_get_nick_index (struct t_irc_server *server)
return -1;
}
/*
* irc_server_get_isupport_value: return value of an item in "isupport" (copy
* of IRC message 005)
* if featureis found but has no value, empty
* string is returned
* if feature is not found, NULL is returned
*/
const char *
irc_server_get_isupport_value (struct t_irc_server *server, const char *feature)
{
char feature2[64], *pos_feature, *pos_equal, *pos_space;
int length;
static char value[256];
if (!server || !server->isupport || !feature)
return NULL;
/* search feature with value */
snprintf (feature2, sizeof (feature2), " %s=", feature);
pos_feature = strstr (server->isupport, feature2);
if (pos_feature)
{
/* feature found with value, return value */
pos_feature++;
pos_equal = strchr (pos_feature, '=');
pos_space = strchr (pos_feature, ' ');
if (pos_space)
length = pos_space - pos_equal - 1;
else
length = strlen (pos_equal) + 1;
if (length > (int)sizeof (value) - 1)
length = (int)sizeof (value) - 1;
memcpy (value, pos_equal + 1, length);
value[length] = '\0';
return value;
}
/* search feature without value */
feature2[strlen (feature2) - 1] = ' ';
pos_feature = strstr (server->isupport, feature2);
if (pos_feature)
{
value[0] = '\0';
return value;
}
/* feature not found in isupport */
return NULL;
}
/*
* irc_server_alloc: allocate a new server and add it to the servers queue
*/
@@ -355,6 +406,7 @@ irc_server_alloc (const char *name)
new_server->nick_first_tried = 0;
new_server->nick = NULL;
new_server->nick_modes = NULL;
new_server->isupport = NULL;
new_server->prefix = NULL;
new_server->reconnect_delay = 0;
new_server->reconnect_start = 0;
@@ -754,6 +806,8 @@ irc_server_free_data (struct t_irc_server *server)
free (server->nick);
if (server->nick_modes)
free (server->nick_modes);
if (server->isupport)
free (server->isupport);
if (server->prefix)
free (server->prefix);
if (server->away_message)
@@ -2965,6 +3019,11 @@ irc_server_disconnect (struct t_irc_server *server, int reconnect)
server->nick_modes = NULL;
weechat_bar_item_update ("input_prompt");
}
if (server->isupport)
{
free (server->isupport);
server->isupport = NULL;
}
if (server->prefix)
{
free (server->prefix);
@@ -3553,6 +3612,8 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "nick_modes", server->nick_modes))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "isupport", server->isupport))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "prefix", server->prefix))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_delay", server->reconnect_delay))
@@ -3791,6 +3852,7 @@ irc_server_print_log ()
weechat_log_printf (" nick_first_tried . . : %d", ptr_server->nick_first_tried);
weechat_log_printf (" nick . . . . . . . . : '%s'", ptr_server->nick);
weechat_log_printf (" nick_modes . . . . . : '%s'", ptr_server->nick_modes);
weechat_log_printf (" isupport . . . . . . : '%s'", ptr_server->isupport);
weechat_log_printf (" prefix . . . . . . . : '%s'", ptr_server->prefix);
weechat_log_printf (" reconnect_delay. . . : %d", ptr_server->reconnect_delay);
weechat_log_printf (" reconnect_start. . . : %ld", ptr_server->reconnect_start);