1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-07 21:05:42 +02:00

Beta version of IRC proxy feature in Relay plugin

Major changes in Relay plugin:
- IRC proxy feature (beta),
- raw buffer.

Changes in IRC plugin:
- add tags for messages sent to servers,
- add signal "irc_input_send" to simulate text/command on an IRC buffer,
- add prefix in infolist "irc_nick".
This commit is contained in:
Sebastien Helleu
2010-09-17 14:47:36 +02:00
parent 26a99c2912
commit d2d60d4711
59 changed files with 2545 additions and 1124 deletions
+2 -2
View File
@@ -420,8 +420,8 @@
........................................
Daten direkt an Server senden (siehe RFC 2812)
server: an diesen Server senden (interner Name)
data: unbearbeitete Daten die gesendet werden sollen
server: send to this server (internal name)
data: raw data to send
........................................
• *`/reconnect`* `[-all [-nojoin] | Servername [Servername ...] [-nojoin]]`::
+1 -1
View File
@@ -204,7 +204,7 @@
** Werte: on, off (Standardwert: off)
* *irc.look.raw_messages*
** Beschreibung: Anzahl der IRC-RAW-Nachrichten die im Speicher gehalten werden sollen falls der RAW-Daten-Buffer geschlossen ist (die Nachrichten werden umgehend angezeigt, wenn ein RAW-Daten-Buffer geöffnet wird)
** Beschreibung: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** Typ: integer
** Werte: 0 .. 65535 (Standardwert: 256)
+11 -10
View File
@@ -1,17 +1,18 @@
• *`/relay`* `[list | listfull | add protocol.name port | del protocol.name]`::
• *`/relay`* `[list | listfull | add protocol.name port | del protocol.name | raw]`::
........................................
Relay-Kontrolle
list: Auflistung der Relay-Clients (nur aktive Relays)
listfull: detaillierte Auflistung der Relay-Clients (alle Relays)
listrelay: Auflistung der Relays (Name und Port)
add: füge ein Relay, für ein Protokoll + Name, hinzu
del: entferne Relay für ein Protokoll + Name
protocol.name: Protokoll und Name des Relays
Beispiel: irc.freenode
port: Port den der Relay nutzen soll
list: list relay clients (only active relays)
listfull: list relay clients (verbose, all relays)
listrelay: list relays (name and port)
add: add relay for a protocol + name
del: remove relay for a protocol + name
protocol.name: protocol and name to relay
for example: irc.freenode
port: port used for relay
raw: open buffer with raw Relay data
Ohne Angabe von Argumenten werden alle Relay-Clients, in einem neuen Buffer, dargestellt.
Without argument, this command opens buffer with list of relay clients.
........................................
+5
View File
@@ -43,6 +43,11 @@
** Typ: boolesch
** Werte: on, off (Standardwert: on)
* *relay.look.raw_messages*
** Beschreibung: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** Typ: integer
** Werte: 0 .. 65535 (Standardwert: 256)
* *relay.network.max_clients*
** Beschreibung: Maximale Anzahl an Clients die mit einem Port verbunden sein dürfen
** Typ: integer
+1 -1
View File
@@ -421,7 +421,7 @@
send raw data to server without parsing
server: send to this server (internal name)
data: raw data to send
data: raw data to send
........................................
• *`/reconnect`* `[-all [-nojoin] | servername [servername ...] [-nojoin]]`::
+1 -1
View File
@@ -204,7 +204,7 @@
** values: on, off (default value: off)
* *irc.look.raw_messages*
** description: number of IRC raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** description: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** type: integer
** values: 0 .. 65535 (default value: 256)
+2 -1
View File
@@ -1,4 +1,4 @@
• *`/relay`* `[list | listfull | add protocol.name port | del protocol.name]`::
• *`/relay`* `[list | listfull | add protocol.name port | del protocol.name | raw]`::
........................................
relay control
@@ -11,6 +11,7 @@
protocol.name: protocol and name to relay
for example: irc.freenode
port: port used for relay
raw: open buffer with raw Relay data
Without argument, this command opens buffer with list of relay clients.
........................................
+5
View File
@@ -43,6 +43,11 @@
** type: boolean
** values: on, off (default value: on)
* *relay.look.raw_messages*
** description: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** type: integer
** values: 0 .. 65535 (default value: 256)
* *relay.network.max_clients*
** description: maximum number of clients connecting to a port
** type: integer
+3
View File
@@ -6447,6 +6447,9 @@ Arguments:
| irc | xxx,irc_out_yyy ^(1)^ | string: message |
irc message sent to server
| irc | xxx,irc_outtags_yyy ^(1)^ | string: tags + ";" + message |
tags + irc message sent to server
| irc | irc_ctcp | string: message |
CTCP received
+1 -1
View File
@@ -204,7 +204,7 @@
** valeurs: on, off (valeur par défaut: off)
* *irc.look.raw_messages*
** description: nombre de messages IRC bruts à sauvegarder en mémoire lorsque le tampon des données brutes est fermé (ces messages seront affichés lors de l'ouverture du tampon des données brutes)
** description: nombre de messages bruts à sauvegarder en mémoire lorsque le tampon des données brutes est fermé (ces messages seront affichés lors de l'ouverture du tampon des données brutes)
** type: entier
** valeurs: 0 .. 65535 (valeur par défaut: 256)
+2 -1
View File
@@ -1,4 +1,4 @@
• *`/relay`* `[list | listfull | add protocole.nom port | del protocole.nom]`::
• *`/relay`* `[list | listfull | add protocole.nom port | del protocole.nom | raw]`::
........................................
contrôle du relai
@@ -11,6 +11,7 @@
protocole.nom: protocole et nom à relayer
par exemple: irc.freenode
port: port utilisé pour le relai
raw: ouvre le tampon avec les données brutes Relay
Sans paramètre, cette commande ouvre le tampon avec la liste des clients pour le relai.
........................................
+5
View File
@@ -43,6 +43,11 @@
** type: booléen
** valeurs: on, off (valeur par défaut: on)
* *relay.look.raw_messages*
** description: nombre de messages bruts à sauvegarder en mémoire lorsque le tampon des données brutes est fermé (ces messages seront affichés lors de l'ouverture du tampon des données brutes)
** type: entier
** valeurs: 0 .. 65535 (valeur par défaut: 256)
* *relay.network.max_clients*
** description: nombre maximum de clients qui se connectent sur un port
** type: entier
+3
View File
@@ -6530,6 +6530,9 @@ Paramètres :
| irc | xxx,irc_out_yyy ^(1)^ | chaîne : message |
message irc envoyé au serveur
| irc | xxx,irc_outtags_yyy ^(1)^ | chaîne : étiquettes + ";" + message |
étiquettes + message irc envoyé au serveur
| irc | irc_ctcp | chaîne : message |
CTCP reçu
+2 -2
View File
@@ -420,8 +420,8 @@
........................................
invia dati grezzi al server senza analisi
server: invia a questo server (nome interno)
dati: dati grezzi da inviare
server: send to this server (internal name)
data: raw data to send
........................................
• *`/reconnect`* `[-all [-nojoin] | nome_server [nome_server ...] [-nojoin]]`::
+1 -1
View File
@@ -204,7 +204,7 @@
** valori: on, off (valore predefinito: off)
* *irc.look.raw_messages*
** descrizione: numero di messaggi grezzi IRC da salvare quando il buffer dei dati grezzi chiuso (i messaggi verranno visualizzati all'apertura del buffer dei dati grezzi)
** descrizione: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** tipo: intero
** valori: 0 .. 65535 (valore predefinito: 256)
+11 -10
View File
@@ -1,17 +1,18 @@
• *`/relay`* `[list | listfull | add protocollo.nome porta | del protocollo.nome]`::
• *`/relay`* `[list | listfull | add protocol.name port | del protocol.name | raw]`::
........................................
controllo relay
list: elenca i client relay (solo quelli attivi)
listfull: elenca i client relay (dettagliato, tutti i relay)
listrelay: elenca i relay (nome e porta)
add: aggiungi relay per un protocollo + nome
del: rimuovi relay per un protocollo + nome
protocollo.nome: protocollo e nome con cui effettuare il relay
per esempio: irc.freenode
port: porta utilizzata per il relay
list: list relay clients (only active relays)
listfull: list relay clients (verbose, all relays)
listrelay: list relays (name and port)
add: add relay for a protocol + name
del: remove relay for a protocol + name
protocol.name: protocol and name to relay
for example: irc.freenode
port: port used for relay
raw: open buffer with raw Relay data
Senza argomento, il comando apre i buffer con l'elenco dei client relay.
Without argument, this command opens buffer with list of relay clients.
........................................
+5
View File
@@ -43,6 +43,11 @@
** tipo: bool
** valori: on, off (valore predefinito: on)
* *relay.look.raw_messages*
** descrizione: number of raw messages to save in memory when raw data buffer is closed (messages will be displayed when opening raw data buffer)
** tipo: intero
** valori: 0 .. 65535 (valore predefinito: 256)
* *relay.network.max_clients*
** descrizione: numero massimo di client connessi ad una porta
** tipo: intero
+4
View File
@@ -6564,6 +6564,10 @@ Argomenti:
| irc | xxx,irc_out_yyy ^1^ | string: messaggio |
messaggio irc inviato al server
// TRANSLATION MISSING
| irc | xxx,irc_outtags_yyy ^(1)^ | string: tags + ";" + message |
tags + irc message sent to server
| irc | irc_ctcp | string: messaggio |
CTCP ricevuto
+6 -4
View File
@@ -166,6 +166,10 @@
./src/plugins/relay/relay.c
./src/plugins/relay/relay-client.c
./src/plugins/relay/relay-client.h
./src/plugins/relay/relay-client-irc.c
./src/plugins/relay/relay-client-irc.h
./src/plugins/relay/relay-client-weechat.c
./src/plugins/relay/relay-client-weechat.h
./src/plugins/relay/relay-command.c
./src/plugins/relay/relay-command.h
./src/plugins/relay/relay-completion.c
@@ -175,10 +179,8 @@
./src/plugins/relay/relay.h
./src/plugins/relay/relay-info.c
./src/plugins/relay/relay-info.h
./src/plugins/relay/relay-protocol-irc.c
./src/plugins/relay/relay-protocol-irc.h
./src/plugins/relay/relay-protocol-weechat.c
./src/plugins/relay/relay-protocol-weechat.h
./src/plugins/relay/relay-raw.c
./src/plugins/relay/relay-raw.h
./src/plugins/relay/relay-server.c
./src/plugins/relay/relay-server.h
./src/plugins/relay/relay-upgrade.c
+42 -22
View File
File diff suppressed because it is too large Load Diff
+42 -22
View File
File diff suppressed because it is too large Load Diff
+43 -22
View File
File diff suppressed because it is too large Load Diff
+42 -26
View File
File diff suppressed because it is too large Load Diff
+37 -17
View File
File diff suppressed because it is too large Load Diff
+42 -22
View File
File diff suppressed because it is too large Load Diff
+42 -22
View File
File diff suppressed because it is too large Load Diff
+37 -17
View File
File diff suppressed because it is too large Load Diff
+6 -4
View File
@@ -167,6 +167,10 @@ SET(WEECHAT_SOURCES
./src/plugins/relay/relay.c
./src/plugins/relay/relay-client.c
./src/plugins/relay/relay-client.h
./src/plugins/relay/relay-client-irc.c
./src/plugins/relay/relay-client-irc.h
./src/plugins/relay/relay-client-weechat.c
./src/plugins/relay/relay-client-weechat.h
./src/plugins/relay/relay-command.c
./src/plugins/relay/relay-command.h
./src/plugins/relay/relay-completion.c
@@ -176,10 +180,8 @@ SET(WEECHAT_SOURCES
./src/plugins/relay/relay.h
./src/plugins/relay/relay-info.c
./src/plugins/relay/relay-info.h
./src/plugins/relay/relay-protocol-irc.c
./src/plugins/relay/relay-protocol-irc.h
./src/plugins/relay/relay-protocol-weechat.c
./src/plugins/relay/relay-protocol-weechat.h
./src/plugins/relay/relay-raw.c
./src/plugins/relay/relay-raw.h
./src/plugins/relay/relay-server.c
./src/plugins/relay/relay-server.h
./src/plugins/relay/relay-upgrade.c
+28 -16
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -373,7 +373,7 @@ irc_channel_check_away (struct t_irc_server *server,
|| (channel->nicks_count <= weechat_config_integer (irc_config_network_away_check_max_nicks))))
{
channel->checking_away++;
irc_server_sendf (server, IRC_SERVER_OUTQUEUE_PRIO_LOW,
irc_server_sendf (server, IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
"WHO %s", channel->name);
}
else
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1705,8 +1705,8 @@ irc_config_init ()
irc_config_look_raw_messages = weechat_config_new_option (
irc_config_file, ptr_section,
"raw_messages", "integer",
N_("number of IRC raw messages to save in memory when raw data buffer "
"is closed (messages will be displayed when opening raw data buffer)"),
N_("number of raw messages to save in memory when raw data buffer is "
"closed (messages will be displayed when opening raw data buffer)"),
NULL, 0, 65535, "256", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
irc_config_look_smart_filter = weechat_config_new_option (
irc_config_file, ptr_section,
+1 -1
View File
@@ -249,7 +249,7 @@ irc_ctcp_reply_to_nick (struct t_irc_server *server,
const char *nick, const char *ctcp,
const char *arguments)
{
irc_server_sendf (server, IRC_SERVER_OUTQUEUE_PRIO_LOW,
irc_server_sendf (server, IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
"NOTICE %s :\01%s%s%s\01",
nick, ctcp,
(arguments) ? " " : "",
+4 -1
View File
@@ -407,7 +407,9 @@ irc_info_get_infolist_cb (void *data, const char *infolist_name,
if (pointer)
{
/* build list with only one nick */
if (!irc_nick_add_to_infolist (ptr_infolist, pointer))
if (!irc_nick_add_to_infolist (ptr_infolist,
ptr_server,
pointer))
{
weechat_infolist_free (ptr_infolist);
return NULL;
@@ -421,6 +423,7 @@ irc_info_get_infolist_cb (void *data, const char *infolist_name,
ptr_nick = ptr_nick->next_nick)
{
if (!irc_nick_add_to_infolist (ptr_infolist,
ptr_server,
ptr_nick))
{
weechat_infolist_free (ptr_infolist);
File diff suppressed because it is too large Load Diff
+2
View File
@@ -26,5 +26,7 @@ extern void irc_input_user_message_display (struct t_gui_buffer *buffer,
const char *text);
extern int irc_input_data_cb (void *data, struct t_gui_buffer *buffer,
const char *input_data);
extern int irc_input_send_cb (void *data, const char *signal,
const char *type_data, void *signal_data);
#endif /* __WEECHAT_IRC_INPUT_H */
+7
View File
@@ -741,9 +741,11 @@ irc_nick_color_for_pv (struct t_irc_channel *channel, const char *nickname)
int
irc_nick_add_to_infolist (struct t_infolist *infolist,
struct t_irc_server *server,
struct t_irc_nick *nick)
{
struct t_infolist_item *ptr_item;
char prefix[2];
if (!infolist || !nick)
return 0;
@@ -760,6 +762,11 @@ irc_nick_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "color", nick->color))
return 0;
prefix[0] = ' ';
prefix[1] = '\0';
irc_nick_get_gui_infos (server, nick, prefix, NULL, NULL, NULL);
if (!weechat_infolist_new_var_string (ptr_item, "prefix", prefix))
return 0;
return 1;
}
+1
View File
@@ -114,6 +114,7 @@ extern char *irc_nick_as_prefix (struct t_irc_server *server,
extern const char * irc_nick_color_for_pv (struct t_irc_channel *channel,
const char *nickname);
extern int irc_nick_add_to_infolist (struct t_infolist *infolist,
struct t_irc_server *server,
struct t_irc_nick *nick);
extern void irc_nick_print_log (struct t_irc_nick *nick);
File diff suppressed because it is too large Load Diff
+19 -30
View File
@@ -67,9 +67,6 @@ void
irc_raw_open (int switch_to_buffer)
{
struct t_irc_raw_message *ptr_raw_message;
int buffer_created;
buffer_created = 0;
if (!irc_raw_buffer)
{
@@ -80,30 +77,23 @@ irc_raw_open (int switch_to_buffer)
irc_raw_buffer = weechat_buffer_new (IRC_RAW_BUFFER_NAME,
&irc_input_data_cb, NULL,
&irc_buffer_close_cb, NULL);
buffer_created = 1;
/* failed to create buffer ? then return */
if (!irc_raw_buffer)
return;
weechat_buffer_set (irc_raw_buffer,
"title", _("IRC raw messages"));
weechat_buffer_set (irc_raw_buffer, "short_name", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_type", "debug");
weechat_buffer_set (irc_raw_buffer, "localvar_set_server", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_channel", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_no_log", "1");
/* disable all highlights on this buffer */
weechat_buffer_set (irc_raw_buffer, "highlight_words", "-");
if (buffer_created)
{
weechat_buffer_set (irc_raw_buffer,
"title", _("IRC raw messages"));
weechat_buffer_set (irc_raw_buffer, "short_name", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_type", "debug");
weechat_buffer_set (irc_raw_buffer, "localvar_set_server", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_channel", IRC_RAW_BUFFER_NAME);
weechat_buffer_set (irc_raw_buffer, "localvar_set_no_log", "1");
/* disable all highlights on this debug buffer */
weechat_buffer_set (irc_raw_buffer, "highlight_words", "-");
}
if (switch_to_buffer)
weechat_buffer_set (irc_raw_buffer, "display", "1");
/* print messages in list */
for (ptr_raw_message = irc_raw_messages; ptr_raw_message;
ptr_raw_message = ptr_raw_message->next_message)
@@ -112,11 +102,9 @@ irc_raw_open (int switch_to_buffer)
}
}
}
else
{
if (switch_to_buffer)
weechat_buffer_set (irc_raw_buffer, "display", "1");
}
if (irc_raw_buffer && switch_to_buffer)
weechat_buffer_set (irc_raw_buffer, "display", "1");
}
/*
@@ -283,7 +271,7 @@ irc_raw_message_add (struct t_irc_server *server, int send, int modified,
}
/*
* irc_raw_print: print a message on IRC debug buffer
* irc_raw_print: print a message on IRC raw buffer
*/
void
@@ -294,7 +282,8 @@ irc_raw_print (struct t_irc_server *server, int send, int modified,
if (!message)
return;
/* auto-open IRC raw buffer if debug for irc plugin is >= 1 */
if (!irc_raw_buffer && (weechat_irc_plugin->debug >= 1))
irc_raw_open (0);
@@ -309,7 +298,7 @@ irc_raw_print (struct t_irc_server *server, int send, int modified,
}
/*
* irc_raw_add_to_infolist: add a raw messagt in an infolist
* irc_raw_add_to_infolist: add a raw message in an infolist
* return 1 if ok, 0 if error
*/
File diff suppressed because it is too large Load Diff
+11 -5
View File
@@ -85,10 +85,13 @@ enum t_irc_server_option
#define IRC_SERVER_DEFAULT_PORT 6667
#define IRC_SERVER_DEFAULT_NICKS "weechat1,weechat2,weechat3,weechat4,weechat5"
#define IRC_SERVER_OUTQUEUE_PRIO_HIGH 1
#define IRC_SERVER_OUTQUEUE_PRIO_LOW 2
/* number of queues for sending messages */
#define IRC_SERVER_NUM_OUTQUEUES_PRIO 2
/* flags for irc_server_sendf() */
#define IRC_SERVER_SEND_OUTQ_PRIO_HIGH 1
#define IRC_SERVER_SEND_OUTQ_PRIO_LOW 2
/* output queue of messages to server (for sending slowly to server) */
struct t_irc_outqueue
@@ -97,6 +100,7 @@ struct t_irc_outqueue
char *message_before_mod; /* msg before any modifier */
char *message_after_mod; /* msg after modifier(s) */
int modified; /* msg was modified by modifier(s) */
char *tags; /* tags (used by Relay plugin) */
struct t_irc_outqueue *next_outqueue; /* link to next msg in queue */
struct t_irc_outqueue *prev_outqueue; /* link to prev msg in queue */
};
@@ -202,10 +206,12 @@ extern struct t_irc_server *irc_server_copy (struct t_irc_server *server,
extern int irc_server_rename (struct t_irc_server *server, const char *new_name);
extern void irc_server_send_signal (struct t_irc_server *server,
const char *signal, const char *command,
const char *full_message);
const char *full_message,
const char *tags);
extern struct t_hashtable *irc_server_parse_message_to_hashtable (const char *message);
extern void irc_server_sendf (struct t_irc_server *server, int queue_msg,
const char *format, ...);
extern void irc_server_set_send_default_tags (const char *tags);
extern void irc_server_sendf (struct t_irc_server *server, int flags,
const char *tags, const char *format, ...);
extern struct t_irc_server *irc_server_search (const char *server_name);
extern void irc_server_set_buffer_title (struct t_irc_server *server);
extern struct t_gui_buffer *irc_server_create_buffer (struct t_irc_server *server);
+1 -1
View File
@@ -99,7 +99,7 @@ irc_upgrade_save_all_data (struct t_upgrade_file *upgrade_file)
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_nick_add_to_infolist (infolist, ptr_nick))
if (!irc_nick_add_to_infolist (infolist, ptr_server, ptr_nick))
{
weechat_infolist_free (infolist);
return 0;
+2
View File
@@ -35,6 +35,7 @@
#include "irc-config.h"
#include "irc-debug.h"
#include "irc-info.h"
#include "irc-input.h"
#include "irc-server.h"
#include "irc-channel.h"
#include "irc-nick.h"
@@ -171,6 +172,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
weechat_hook_signal ("xfer_send_ready", &irc_server_xfer_send_ready_cb, NULL);
weechat_hook_signal ("xfer_resume_ready", &irc_server_xfer_resume_ready_cb, NULL);
weechat_hook_signal ("xfer_send_accept_resume", &irc_server_xfer_send_accept_resume_cb, NULL);
weechat_hook_signal ("irc_input_send", &irc_input_send_cb, NULL);
/* modifiers */
weechat_hook_modifier ("irc_color_decode", &irc_color_modifier_cb, NULL);
+3 -2
View File
@@ -21,12 +21,13 @@ ADD_LIBRARY(relay MODULE
relay.c relay.h
relay-buffer.c relay-buffer.h
relay-client.c relay-client.h
relay-client-irc.c relay-client-irc.h
relay-client-weechat.c relay-client-weechat.h
relay-command.c relay-command.h
relay-completion.c relay-completion.h
relay-config.c relay-config.h
relay-info.c relay-info.h
relay-protocol-irc.c relay-protocol-irc.h
relay-protocol-weechat.c relay-protocol-weechat.h
relay-raw.c relay-raw.h
relay-server.c relay-server.h
relay-upgrade.c relay-upgrade.h)
SET_TARGET_PROPERTIES(relay PROPERTIES PREFIX "")
+6 -4
View File
@@ -29,6 +29,10 @@ relay_la_SOURCES = relay.c \
relay-buffer.h \
relay-client.c \
relay-client.h \
relay-client-irc.c \
relay-client-irc.h \
relay-client-weechat.c \
relay-client-weechat.h \
relay-command.c \
relay-command.h \
relay-completion.c \
@@ -37,10 +41,8 @@ relay_la_SOURCES = relay.c \
relay-config.h \
relay-info.c \
relay-info.h \
relay-protocol-irc.c \
relay-protocol-irc.h \
relay-protocol-weechat.c \
relay-protocol-weechat.h \
relay-raw.c \
relay-raw.h \
relay-server.c \
relay-server.h \
relay-upgrade.c \
+2 -1
View File
@@ -125,9 +125,10 @@ relay_buffer_refresh (const char *hotlist)
str_recv = weechat_string_format_size (ptr_client->bytes_recv);
str_sent = weechat_string_format_size (ptr_client->bytes_sent);
weechat_printf_y (relay_buffer, (line * 2) + 3,
_("%s%-26s protocol: %s, received: %s, sent: %s"),
_("%s%-26s id: %d, protocol: %s, received: %s, sent: %s"),
weechat_color(str_color),
" ",
ptr_client->id,
relay_protocol_string[ptr_client->protocol],
(str_recv) ? str_recv : "?",
(str_sent) ? str_sent : "?");
File diff suppressed because it is too large Load Diff
@@ -17,15 +17,15 @@
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __WEECHAT_RELAY_PROTOCOL_IRC_H
#define __WEECHAT_RELAY_PROTOCOL_IRC_H 1
#ifndef __WEECHAT_RELAY_CLIENT_IRC_H
#define __WEECHAT_RELAY_CLIENT_IRC_H 1
struct t_relay_client;
#define RELAY_IRC_DATA(client, var) \
(((struct t_relay_protocol_irc_data *)client->protocol_data)->var)
(((struct t_relay_client_irc_data *)client->protocol_data)->var)
struct t_relay_protocol_irc_data
struct t_relay_client_irc_data
{
char *address; /* client address (used when sending */
/* data to client) */
@@ -33,14 +33,16 @@ struct t_relay_protocol_irc_data
int user_received; /* command "USER" received */
int connected; /* 1 if client is connected as IRC */
/* client */
struct t_hook *hook_signal_irc_in2;/* hook signal "irc_in2" */
struct t_hook *hook_signal_irc_out;/* hook signal "irc_out" */
struct t_hook *hook_signal_irc_in2; /* signal "irc_in2" */
struct t_hook *hook_signal_irc_outtags; /* signal "irc_outtags" */
struct t_hook *hook_signal_irc_disc; /* signal "irc_disconnected" */
};
extern void relay_protocol_irc_recv (struct t_relay_client *client,
const char *data);
extern void relay_protocol_irc_alloc (struct t_relay_client *client);
extern void relay_protocol_irc_free (struct t_relay_client *client);
extern void relay_protocol_irc_print_log (struct t_relay_client *client);
extern void relay_client_irc_recv (struct t_relay_client *client,
const char *data);
extern void relay_client_irc_close_connection (struct t_relay_client *client);
extern void relay_client_irc_alloc (struct t_relay_client *client);
extern void relay_client_irc_free (struct t_relay_client *client);
extern void relay_client_irc_print_log (struct t_relay_client *client);
#endif /* __WEECHAT_RELAY_PROTOCOL_IRC_H */
#endif /* __WEECHAT_RELAY_CLIENT_IRC_H */
@@ -17,15 +17,15 @@
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __WEECHAT_RELAY_PROTOCOL_WEECHAT_H
#define __WEECHAT_RELAY_PROTOCOL_WEECHAT_H 1
#ifndef __WEECHAT_RELAY_CLIENT_WEECHAT_H
#define __WEECHAT_RELAY_CLIENT_WEECHAT_H 1
struct t_relay_client;
#define RELAY_WEECHAT_DATA(client, var) \
(((struct t_relay_protocol_weechat_data *)client->protocol_data)->var)
(((struct t_relay_client_weechat_data *)client->protocol_data)->var)
struct t_relay_protocol_weechat_data
struct t_relay_client_weechat_data
{
char *address; /* client address (used when sending */
/* data to client) */
@@ -35,10 +35,10 @@ struct t_relay_protocol_weechat_data
/* client */
};
extern void relay_protocol_weechat_recv (struct t_relay_client *client,
const char *data);
extern void relay_protocol_weechat_alloc (struct t_relay_client *client);
extern void relay_protocol_weechat_free (struct t_relay_client *client);
extern void relay_protocol_weechat_print_log (struct t_relay_client *client);
extern void relay_client_weechat_recv (struct t_relay_client *client,
const char *data);
extern void relay_client_weechat_alloc (struct t_relay_client *client);
extern void relay_client_weechat_free (struct t_relay_client *client);
extern void relay_client_weechat_print_log (struct t_relay_client *client);
#endif /* __WEECHAT_RELAY_PROTOCOL_WEECHAT_H */
#endif /* __WEECHAT_RELAY_CLIENT_WEECHAT_H */
File diff suppressed because it is too large Load Diff
+1
View File
@@ -44,6 +44,7 @@ enum t_relay_status
struct t_relay_client
{
int id; /* unique id (diff. for each client) */
int sock; /* socket for connection */
char *address; /* string with IP address */
enum t_relay_status status; /* status (connecting, active,..) */
+18 -10
View File
@@ -30,6 +30,7 @@
#include "relay-buffer.h"
#include "relay-client.h"
#include "relay-config.h"
#include "relay-raw.h"
#include "relay-server.h"
@@ -64,9 +65,10 @@ relay_command_client_list (int full)
if (full)
{
weechat_printf (NULL,
_("%3d. %s%s%s (%s%s%s), started on: %s, last "
"activity: %s, bytes: %lu recv, %lu sent"),
i,
_(" id: %d, %s%s%s (%s%s%s), "
"started on: %s, last activity: %s, "
"bytes: %lu recv, %lu sent"),
ptr_client->id,
RELAY_COLOR_CHAT_HOST,
ptr_client->address,
RELAY_COLOR_CHAT,
@@ -83,8 +85,8 @@ relay_command_client_list (int full)
if (!RELAY_CLIENT_HAS_ENDED(ptr_client->status))
{
weechat_printf (NULL,
_("%3d. %s%s%s, started on: %s"),
i,
_(" id: %d, %s%s%s, started on: %s"),
ptr_client->id,
RELAY_COLOR_CHAT_HOST,
ptr_client->address,
RELAY_COLOR_CHAT,
@@ -124,8 +126,7 @@ relay_command_server_list ()
"%a, %d %b %Y %H:%M:%S", date_tmp);
weechat_printf (NULL,
_("%3d. port %s%d%s, relay: %s%s.%s%s, started on: %s"),
i,
_(" port %s%d%s, relay: %s%s.%s%s, started on: %s"),
RELAY_COLOR_CHAT_BUFFER,
ptr_server->port,
RELAY_COLOR_CHAT,
@@ -223,6 +224,11 @@ relay_command_relay (void *data, struct t_gui_buffer *buffer, int argc,
}
return WEECHAT_RC_OK;
}
if (weechat_strcasecmp (argv[1], "raw") == 0)
{
relay_raw_open (1);
return WEECHAT_RC_OK;
}
}
if (!relay_buffer)
@@ -262,7 +268,7 @@ relay_command_init ()
weechat_hook_command ("relay",
N_("relay control"),
N_("[list | listfull | add protocol.name port | "
"del protocol.name]"),
"del protocol.name | raw]"),
N_(" list: list relay clients (only active "
"relays)\n"
" listfull: list relay clients (verbose, all "
@@ -272,13 +278,15 @@ relay_command_init ()
" del: remove relay for a protocol + name\n"
"protocol.name: protocol and name to relay\n"
" for example: irc.freenode\n"
" port: port used for relay\n\n"
" port: port used for relay\n"
" raw: open buffer with raw Relay data\n\n"
"Without argument, this command opens buffer "
"with list of relay clients."),
"list %(relay_relays)"
" || listfull %(relay_relays)"
" || listrelay"
" || add %(relay_protocol_name) %(relay_free_port)"
" || del %(relay_relays)",
" || del %(relay_relays)"
" || raw",
&relay_command_relay, NULL);
}
+7
View File
@@ -38,6 +38,7 @@ struct t_config_section *relay_config_section_port = NULL;
/* relay config, look section */
struct t_config_option *relay_config_look_auto_open_buffer;
struct t_config_option *relay_config_look_raw_messages;
/* relay config, color section */
@@ -257,6 +258,12 @@ relay_config_init ()
"auto_open_buffer", "boolean",
N_("auto open relay buffer when a new client is connecting"),
NULL, 0, 0, "on", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
relay_config_look_raw_messages = weechat_config_new_option (
relay_config_file, ptr_section,
"raw_messages", "integer",
N_("number of raw messages to save in memory when raw data buffer is "
"closed (messages will be displayed when opening raw data buffer)"),
NULL, 0, 65535, "256", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
ptr_section = weechat_config_new_section (relay_config_file, "color",
0, 0,
+1
View File
@@ -26,6 +26,7 @@ extern struct t_config_file *relay_config_file;
extern struct t_config_section *relay_config_section_port;
extern struct t_config_option *relay_config_look_auto_open_buffer;
extern struct t_config_option *relay_config_look_raw_messages;
extern struct t_config_option *relay_config_color_text;
extern struct t_config_option *relay_config_color_text_bg;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+52
View File
@@ -0,0 +1,52 @@
/*
* Copyright (C) 2003-2010 Sebastien Helleu <flashcode@flashtux.org>
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __WEECHAT_RELAY_RAW_H
#define __WEECHAT_RELAY_RAW_H 1
#define RELAY_RAW_BUFFER_NAME "relay_raw"
#define RELAY_RAW_PREFIX_RECV "-->"
#define RELAY_RAW_PREFIX_SEND "<--"
struct t_relay_raw_message
{
time_t date; /* date/time of message */
char *prefix; /* prefix */
char *message; /* message */
struct t_relay_raw_message *prev_message; /* pointer to prev. message */
struct t_relay_raw_message *next_message; /* pointer to next message */
};
struct t_relay_client;
extern struct t_gui_buffer *relay_raw_buffer;
extern int irc_relay_messages_count;
extern struct t_relay_raw_message *relay_raw_messages, *last_relay_raw_message;
extern void relay_raw_open (int switch_to_buffer);
extern struct t_relay_raw_message *relay_raw_message_add_to_list (time_t date,
const char *prefix,
const char *message);
extern void relay_raw_print (struct t_relay_client *client, int send,
const char *message);
extern void relay_raw_message_free_all ();
extern int relay_raw_add_to_infolist (struct t_infolist *infolist,
struct t_relay_raw_message *raw_message);
#endif /* __WEECHAT_RELAY_RAW_H */