]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/proto-p10.c
Fixed crash in track on server kick, and added tip to help for register about < and >
[irc/evilnet/x3.git] / src / proto-p10.c
index a9731da75b8d1b302f2236b525c8a2afcaee514d..7d17423f9b3a734ae2fd826de0a20b260e125e03 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "nickserv.h"
 #include "chanserv.h"
+#include "hosthiding.h"
 #include "proto-common.c"
 
 /* Full commands. */
@@ -90,6 +91,7 @@
 #define CMD_SQUIT               "SQUIT"
 #define CMD_STATS               "STATS"
 #define CMD_SVSNICK             "SVSNICK"
+#define CMD_SWHOIS              "SWHOIS"
 #define CMD_TIME                "TIME"
 #define CMD_TOPIC               "TOPIC"
 #define CMD_TRACE               "TRACE"
 #define TOK_SQUIT               "SQ"
 #define TOK_STATS               "R"
 #define TOK_SVSNICK             "SN"
+#define TOK_SWHOIS              "SW"
 #define TOK_TIME                "TI"
 #define TOK_TOPIC               "T"
 #define TOK_TRACE               "TR"
 #define P10_SQUIT               TYPE(SQUIT)
 #define P10_STATS               TYPE(STATS)
 #define P10_SVSNICK             TYPE(SVSNICK)
+#define P10_SWHOIS              TYPE(SWHOIS)
 #define P10_TIME                TYPE(TIME)
 #define P10_TOPIC               TYPE(TOPIC)
 #define P10_TRACE               TYPE(TRACE)
@@ -857,6 +861,12 @@ irc_invite(struct userNode *from, struct userNode *who, struct chanNode *to)
     putsock("%s " P10_INVITE " %s %s", from->numeric, who->nick, to->name);
 }
 
+void
+irc_silence(struct userNode *who, const char *mask, int add)
+{
+    putsock("%s " P10_SILENCE " %s %s%s", self->numeric, who->numeric, add ? "" : "-", mask);
+}
+
 void
 irc_join(struct userNode *who, struct chanNode *what)
 {
@@ -890,6 +900,14 @@ irc_svsnick(struct userNode *from, struct userNode *target, const char *newnick)
     putsock("%s " P10_SVSNICK " %s %s "FMT_TIME_T, from->uplink->numeric, target->numeric, newnick, now);
 }
 
+void
+irc_swhois(struct userNode *from, struct userNode *target, const char *message)
+{
+    putsock("%s " P10_SWHOIS " %s %s%s", from->uplink->numeric, target->numeric, message ? ":" : "",
+                                         message ? message : "");
+
+}
+
 void
 irc_part(struct userNode *who, struct chanNode *what, const char *reason)
 {
@@ -1859,6 +1877,8 @@ init_parse(void)
     dict_insert(irc_func_dict, TOK_STATS, cmd_stats);
     dict_insert(irc_func_dict, CMD_SVSNICK, cmd_svsnick);
     dict_insert(irc_func_dict, TOK_SVSNICK, cmd_svsnick);
+    dict_insert(irc_func_dict, CMD_SWHOIS, cmd_dummy);
+    dict_insert(irc_func_dict, TOK_SWHOIS, cmd_dummy);
     dict_insert(irc_func_dict, CMD_WHOIS, cmd_whois);
     dict_insert(irc_func_dict, TOK_WHOIS, cmd_whois);
     dict_insert(irc_func_dict, CMD_GLINE, cmd_gline);
@@ -2267,6 +2287,14 @@ AddUser(struct server* uplink, const char *nick, const char *ident, const char *
     safestrncpy(uNode->hostname, hostname, sizeof(uNode->hostname));
     safestrncpy(uNode->numeric, numeric, sizeof(uNode->numeric));
     irc_p10_pton(&uNode->ip, realip);
+
+    if (irc_in_addr_is_ipv4(uNode->ip)) {
+      make_virtip((char*)irc_ntoa(&uNode->ip), (char*)irc_ntoa(&uNode->ip), uNode->cryptip);
+      make_virthost((char*)irc_ntoa(&uNode->ip), uNode->hostname, uNode->crypthost);
+    } else if (irc_in_addr_is_ipv6(uNode->ip)) {
+      make_ipv6virthost((char*)irc_ntoa(&uNode->ip), uNode->hostname, uNode->crypthost);
+    }
+
     uNode->timestamp = timestamp;
     modeList_init(&uNode->channels);
     uNode->uplink = uplink;