#define CMD_SVSNICK "SVSNICK"
#define CMD_SVSMODE "SVSMODE"
#define CMD_SVSJOIN "SVSJOIN"
+#define CMD_SVSPART "SVSPART"
#define CMD_TIME "TIME"
#define CMD_TOPIC "TOPIC"
#define CMD_TRACE "TRACE"
#define CMD_WHO "WHO"
#define CMD_WHOIS "WHOIS"
#define CMD_WHOWAS "WHOWAS"
+#define CMD_XQUERY "XQUERY"
+#define CMD_XRESPONSE "XRESPONSE"
/* Tokenized commands. */
#define TOK_ACCOUNT "AC"
#define TOK_SVSNICK "SN"
#define TOK_SVSMODE "SM"
#define TOK_SVSJOIN "SJ"
+#define TOK_SVSPART "SP"
#define TOK_TIME "TI"
#define TOK_TOPIC "T"
#define TOK_TRACE "TR"
#define TOK_WHO "H"
#define TOK_WHOIS "W"
#define TOK_WHOWAS "X"
+#define TOK_XQUERY "XQ"
+#define TOK_XRESPONSE "XR"
/* Protocol messages; aliased to full commands or tokens depending
on compile-time configuration. ircu prefers tokens WITH THE
#define P10_SVSNICK TYPE(SVSNICK)
#define P10_SVSMODE TYPE(SVSMODE)
#define P10_SVSJOIN TYPE(SVSJOIN)
+#define P10_SVSPART TYPE(SVSPART)
#define P10_TIME TYPE(TIME)
#define P10_TOPIC TYPE(TOPIC)
#define P10_TRACE TYPE(TRACE)
#define P10_WHO TYPE(WHO)
#define P10_WHOIS TYPE(WHOIS)
#define P10_WHOWAS TYPE(WHOWAS)
+#define P10_XQUERY TYPE(XQUERY)
+#define P10_XRESPONSE TYPE(XRESPONSE)
/* Servers claiming to have a boot or link time before PREHISTORY
* trigger errors to the log. We hope no server has been running
putsock("%s " P10_RELAY " %s SI %s :%s", self->numeric, target->numeric, target->numeric, command);
}
+void
+irc_keepconn(struct userNode *target, unsigned int timeout)
+{
+ putsock("%s " P10_RELAY " %s KC %s %u", self->numeric, target->numeric, target->numeric, timeout);
+}
+
void
irc_regnick(UNUSED_ARG(struct userNode *user))
{
putsock("%s " P10_SVSJOIN " %s %s", from->numeric, user->numeric, chan);
}
+void
+irc_svspart(struct userNode *from, struct userNode *user, struct chanNode *chan)
+{
+putsock("%s " P10_SVSPART " %s %s", from->numeric, user->numeric, chan->name);
+}
+
+void
+irc_svspartchan(struct userNode *from, struct userNode *user, const char *chan)
+{
+putsock("%s " P10_SVSPART " %s %s", from->numeric, user->numeric, chan);
+}
+
void
irc_eob(void)
{
putsock(":%s %03d %s %s", self->name, num, user->nick, buffer);
}
+void
+irc_xresponse(struct server *target, const char *routing, const char *response)
+{
+ putsock("%s " P10_XRESPONSE " %s %s :%s", self->numeric, target->numeric, routing, response);
+}
+
static void send_burst(void);
static void
return 1;
}
+static CMD_FUNC(cmd_xquery)
+{
+ struct server *source;
+ if ((argc < 4)
+ || !(source = GetServerH(origin)))
+ return 0;
+ call_xquery_funcs(source, argv[2], argv[3]);
+ return 1;
+}
+
void
free_user(struct userNode *user)
{
dict_insert(irc_func_dict, TOK_ADMIN, cmd_admin);
dict_insert(irc_func_dict, CMD_TIME, cmd_time);
dict_insert(irc_func_dict, TOK_TIME, cmd_time);
+ /* We don't handle XR or the (not really defined) XQUERY. */
+ dict_insert(irc_func_dict, TOK_XQUERY, cmd_xquery);
/* In P10, DESTRUCT doesn't do anything except be broadcast to servers.
* Apparently to obliterate channels from any servers that think they