1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Use ircnet name as the proxy's "real address".

git-svn-id: http://svn.irssi.org/repos/irssi/trunk@825 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2000-11-09 21:40:22 +00:00 committed by cras
parent 9895d0cc11
commit 4211d1e80b
3 changed files with 36 additions and 26 deletions

View File

@ -141,7 +141,8 @@ void proxy_outserver_all_except(CLIENT_REC *client, const char *data, ...)
static void create_names_start(GString *str, IRC_CHANNEL_REC *channel,
CLIENT_REC *client)
{
g_string_sprintf(str, ":proxy 353 %s %c %s :", client->nick,
g_string_sprintf(str, ":%s 353 %s %c %s :",
client->proxy_address, client->nick,
channel_mode_is_set(channel, 'p') ? '*' :
channel_mode_is_set(channel, 's') ? '@' : '=',
channel->name);
@ -189,11 +190,12 @@ static void dump_join(IRC_CHANNEL_REC *channel, CLIENT_REC *client)
proxy_outdata(client, str->str);
g_string_free(str, TRUE);
proxy_outdata(client, ":proxy 366 %s %s :End of /NAMES list.\n",
client->nick, channel->name);
proxy_outdata(client, ":%s 366 %s %s :End of /NAMES list.\n",
client->proxy_address, client->nick, channel->name);
if (channel->topic != NULL) {
proxy_outdata(client, ":proxy 332 %s %s :%s\n",
client->nick, channel->name, channel->topic);
proxy_outdata(client, ":%s 332 %s %s :%s\n",
client->proxy_address, client->nick,
channel->name, channel->topic);
}
}
@ -211,23 +213,25 @@ void plugin_proxy_dump_data(CLIENT_REC *client)
}
/* welcome info */
proxy_outdata(client, ":proxy 001 %s :Welcome to the Internet Relay Network\n", client->nick);
proxy_outdata(client, ":proxy 002 %s :Your host is irssi-proxy, running version %s\n", client->nick, VERSION);
proxy_outdata(client, ":proxy 003 %s :This server was created ...\n", client->nick);
proxy_outdata(client, ":%s 001 %s :Welcome to the Internet Relay Network\n", client->proxy_address, client->nick);
proxy_outdata(client, ":%s 002 %s :Your host is irssi-proxy, running version %s\n", client->proxy_address, client->nick, VERSION);
proxy_outdata(client, ":%s 003 %s :This server was created ...\n", client->nick);
if (client->server == NULL || !client->server->emode_known)
proxy_outdata(client, ":proxy 004 %s proxy %s oirw abiklmnopqstv\n", client->nick, VERSION);
proxy_outdata(client, ":%s 004 %s proxy %s oirw abiklmnopqstv\n", client->proxy_address, client->nick, VERSION);
else
proxy_outdata(client, ":proxy 004 %s proxy %s oirw abeIiklmnopqstv\n", client->nick, VERSION);
proxy_outdata(client, ":proxy 251 %s :There are 0 users and 0 invisible on 1 servers\n", client->nick);
proxy_outdata(client, ":proxy 255 %s :I have 0 clients, 0 services and 0 servers\n", client->nick);
proxy_outdata(client, ":proxy 422 %s :MOTD File is missing\n", client->nick);
proxy_outdata(client, ":%s 004 %s proxy %s oirw abeIiklmnopqstv\n", client->proxy_address, client->nick, VERSION);
proxy_outdata(client, ":%s 251 %s :There are 0 users and 0 invisible on 1 servers\n", client->proxy_address, client->nick);
proxy_outdata(client, ":%s 255 %s :I have 0 clients, 0 services and 0 servers\n", client->proxy_address, client->nick);
proxy_outdata(client, ":%s 422 %s :MOTD File is missing\n", client->proxy_address, client->nick);
/* user mode / away status */
if (client->server != NULL) {
proxy_outserver(client, "MODE %s :+%s", client->server->nick,
client->server->usermode);
if (client->server->usermode_away)
proxy_outdata(client, ":proxy 306 %s :You have been marked as being away\n", client->nick);
if (client->server->usermode_away) {
proxy_outdata(client, ":%s 306 %s :You have been marked as being away\n",
client->proxy_address, client->nick);
}
/* Send channel joins */
g_slist_foreach(client->server->channels, (GFunc) dump_join, client);

View File

@ -41,6 +41,7 @@ static void remove_client(CLIENT_REC *rec)
proxy_clients = g_slist_remove(proxy_clients, rec);
g_free(rec->proxy_address);
net_disconnect(rec->handle);
g_source_remove(rec->tag);
line_split_free(rec->buffer);
@ -144,17 +145,18 @@ static void handle_client_cmd(CLIENT_REC *client, char *cmd, char *args)
}
if (strcmp(cmd, "PING") == 0) {
char *server = strchr(args, ':');
if (server == NULL || strcmp(server+1, "proxy") == 0) {
if (server == NULL ||
strcmp(server+1, client->proxy_address) == 0) {
if (server != NULL) *server = '\0';
if (*args == '\0') args = client->nick;
proxy_outserver(client, "PONG proxy :%s\n", args);
proxy_outdata(client, ":%s PONG proxy :%s", client->proxy_address, args);
return;
}
}
if (client->server == NULL || !client->server->connected) {
proxy_outserver(client, "NOTICE %s :Not connected to server",
client->nick);
proxy_outdata(client, ":%s NOTICE %s :Not connected to server",
client->proxy_address, client->nick);
return;
}
@ -237,7 +239,7 @@ static void handle_client_cmd(CLIENT_REC *client, char *cmd, char *args)
&target, &msg);
proxy_outserver_all_except(client, "PRIVMSG %s", args);
signal_emit("message public", 5, client->server, msg,
client->nick, "proxy", target);
client->nick, client->proxy_address, target);
g_free(params);
}
}
@ -291,6 +293,7 @@ static void sig_listen(LISTEN_REC *listen)
rec = g_new0(CLIENT_REC, 1);
rec->listen = listen;
rec->handle = handle;
rec->proxy_address = g_strdup(listen->ircnet);
rec->server = IRC_SERVER(server_find_chatnet(listen->ircnet));
rec->tag = g_input_add(handle, G_INPUT_READ,
(GInputFunction) sig_listen_client, rec);
@ -377,7 +380,8 @@ static void event_connected(IRC_SERVER_REC *server)
if (rec->connected && rec->server == NULL &&
g_strcasecmp(server->connrec->chatnet, rec->listen->ircnet) == 0) {
proxy_outserver(rec, "NOTICE %s :Connected to server", rec->nick);
proxy_outdata(rec, ":%s NOTICE %s :Connected to server",
rec->proxy_address, rec->nick);
rec->server = server;
}
}
@ -388,8 +392,9 @@ static void proxy_server_disconnected(CLIENT_REC *client,
{
GSList *tmp;
proxy_outdata(client, ":proxy NOTICE %s :Connection lost to server %s\n",
client->nick, server->connrec->address);
proxy_outdata(client, ":%s NOTICE %s :Connection lost to server %s\n",
client->proxy_address, client->nick,
server->connrec->address);
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
IRC_CHANNEL_REC *rec = tmp->data;

View File

@ -21,6 +21,7 @@ typedef struct {
int handle;
int tag;
char *proxy_address;
LISTEN_REC *listen;
IRC_SERVER_REC *server;
int pass_sent:1;