X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/7dd057638b40c2c565bdd514fcdf8143cf0e73e3..0e859bd9eaa372c09645cbf04193d784d1b629d7:/src/proto-p10.c diff --git a/src/proto-p10.c b/src/proto-p10.c index 9cb06c2..d9944d7 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -89,15 +89,19 @@ #define CMD_SERVSET "SERVSET" #define CMD_SET "SET" #define CMD_SETTIME "SETTIME" +#define CMD_SGLINE "SGLINE" #define CMD_SHUN "SHUN" #define CMD_SILENCE "SILENCE" +#define CMD_SMO "SMO" #define CMD_SNO "SNO" +#define CMD_SSHUN "SSHUN" #define CMD_SQUERY "SQUERY" #define CMD_SQUIT "SQUIT" #define CMD_STATS "STATS" #define CMD_SVSJOIN "SVSJOIN" #define CMD_SVSNICK "SVSNICK" #define CMD_SVSPART "SVSPART" +#define CMD_SVSQUIT "SVSQUIT" #define CMD_SWHOIS "SWHOIS" #define CMD_TIME "TIME" #define CMD_TOPIC "TOPIC" @@ -181,15 +185,19 @@ #define TOK_SERVSET "SERVSET" #define TOK_SET "SET" #define TOK_SETTIME "SE" +#define TOK_SGLINE "SGL" #define TOK_SHUN "SU" #define TOK_SILENCE "U" +#define TOK_SMO "SMO" #define TOK_SNO "SNO" +#define TOK_SSHUN "SSU" #define TOK_SQUERY "SQUERY" #define TOK_SQUIT "SQ" #define TOK_STATS "R" #define TOK_SVSJOIN "SJ" #define TOK_SVSNICK "SN" #define TOK_SVSPART "SP" +#define TOK_SVSQUIT "SX" #define TOK_SWHOIS "SW" #define TOK_TIME "TI" #define TOK_TOPIC "T" @@ -282,15 +290,19 @@ #define P10_SERVSET TYPE(SERVSET) #define P10_SET TYPE(SET) #define P10_SETTIME TYPE(SETTIME) +#define P10_SGLINE TYPE(SGLINE) #define P10_SHUN TYPE(SHUN) #define P10_SILENCE TYPE(SILENCE) +#define P10_SMO TYPE(SMO) #define P10_SNO TYPE(SNO) +#define P10_SSHUN TYPE(SSHUN) #define P10_SQUERY TYPE(SQUERY) #define P10_SQUIT TYPE(SQUIT) #define P10_STATS TYPE(STATS) #define P10_SVSJOIN TYPE(SVSJOIN) #define P10_SVSNICK TYPE(SVSNICK) #define P10_SVSPART TYPE(SVSPART) +#define P10_SVSQUIT TYPE(SVSQUIT) #define P10_SWHOIS TYPE(SWHOIS) #define P10_TIME TYPE(TIME) #define P10_TOPIC TYPE(TOPIC) @@ -480,7 +492,7 @@ irc_server(struct server *srv) } } -static void +void irc_p10_pton(irc_in_addr_t *ip, const char *input) { if (strlen(input) == 6) { @@ -507,7 +519,7 @@ irc_p10_pton(irc_in_addr_t *ip, const char *input) } } -static void +void irc_p10_ntop(char *output, const irc_in_addr_t *ip) { if (!irc_in_addr_is_valid(*ip)) { @@ -589,6 +601,15 @@ irc_user(struct userNode *user) modes[modelen++] = 'f'; if (IsHiddenHost(user)) modes[modelen++] = 'x'; + if (IsBotM(user)) + modes[modelen++] = 'B'; + if (IsHideChans(user)) + modes[modelen++] = 'n'; + if (IsHideIdle(user)) + modes[modelen++] = 'I'; + if (IsXtraOp(user)) + modes[modelen++] = 'X'; + modes[modelen] = 0; /* we don't need to put the + in modes because it's in the format string. */ @@ -803,8 +824,8 @@ irc_introduce(const char *passwd) void irc_gline(struct server *srv, struct gline *gline, int silent) { - putsock("%s " P10_GLINE " %s +%s %ld :%s<%s> %s", - self->numeric, (srv ? srv->numeric : "*"), gline->target, gline->expires-now, silent ? "AUTO " : "", gline->issuer, gline->reason); + putsock("%s " P10_GLINE " %s +%s %ld %ld :%s<%s> %s", + self->numeric, (srv ? srv->numeric : "*"), gline->target, gline->expires-now, now, silent ? "AUTO " : "", gline->issuer, gline->reason); } void @@ -1020,6 +1041,12 @@ irc_svspart(struct userNode *from, struct userNode *who, struct chanNode *to) putsock("%s " P10_SVSPART " %s %s", from->uplink->numeric, who->numeric, to->name); } +void +irc_svsquit(struct userNode *from, struct userNode *who, char *reason) +{ + putsock("%s " P10_SVSQUIT " %s :%s", from->uplink->numeric, who->numeric, reason); +} + void irc_kick(struct userNode *who, struct userNode *target, struct chanNode *channel, const char *msg) { @@ -1320,7 +1347,7 @@ static CMD_FUNC(cmd_rping) struct server *dest; if (!(dest = GetServerN(argv[1]))) - return 0; + return 1; /* if its a jupe or something, return 1 so its silently ignored */ if (dest == self) irc_rpong(argv[2], argv[3], argv[4], argv[5]); @@ -1545,7 +1572,9 @@ static struct { P(BADCHAN), P(LOCAL_BADCHAN), P(SEE_CHAN), P(PROPAGATE), P(DISPLAY), P(SEE_OPERS), P(WIDE_GLINE), P(FORCE_OPMODE), P(FORCE_LOCAL_OPMODE), P(REMOTEREHASH), P(CHECK), P(SEE_SECRET_CHAN), - P(SHUN), P(LOCAL_SHUN), P(WIDE_SHUN), + P(SHUN), P(LOCAL_SHUN), P(WIDE_SHUN), P(ZLINE), + P(LOCAL_ZLINE), P(WIDE_ZLINE), P(LIST_CHAN), P(WHOIS_NOTICE), + P(HIDE_IDLE), P(XTRAOP), P(HIDE_CHANNELS), #undef P { 0, 0 } }; @@ -2023,17 +2052,29 @@ static CMD_FUNC(cmd_num_topic) static CMD_FUNC(cmd_num_gline) { - if (argc < 6) - return 0; - gline_add(origin, argv[3], atoi(argv[4])-now, argv[5], now, 0, 0); + if (argc < 7) { + if (argc < 6) + return 0; + else + gline_add(origin, argv[3], atoi(argv[4])-now, argv[5], now, 0, 0); + } else { + if (argv[5] == "+") + gline_add(origin, argv[3], atoi(argv[4])-now, argv[6], now, 0, 0); + } return 1; } static CMD_FUNC(cmd_num_shun) { - if (argc < 6) - return 0; - shun_add(origin, argv[3], atoi(argv[4])-now, argv[5], now, 0); + if (argc < 7) { + if (argc < 6) + return 0; + else + shun_add(origin, argv[3], atoi(argv[4])-now, argv[5], now, 0); + } else { + if (argv[5] == "+") + shun_add(origin, argv[3], atoi(argv[4])-now, argv[6], now, 0); + } return 1; } @@ -2283,6 +2324,34 @@ static CMD_FUNC(cmd_gline) return 0; } +static CMD_FUNC(cmd_sgline) +{ + struct server *sender; + + if (argc < 4) + return 0; + + if (!(sender = GetServerH(origin))) + return 0; + + gline_add(origin, argv[1], strtoul(argv[2], NULL, 0), argv[argc-1], now, 1, 0); + return 1; +} + +static CMD_FUNC(cmd_sshun) +{ + struct server *sender; + + if (argc < 4) + return 0; + + if (!(sender = GetServerH(origin))) + return 0; + + shun_add(origin, argv[1], strtoul(argv[2], NULL, 0), argv[argc-1], now, 1); + return 1; +} + static CMD_FUNC(cmd_shun) { if (argc < 3) @@ -2456,8 +2525,12 @@ init_parse(void) dict_insert(irc_func_dict, TOK_WHOIS, cmd_whois); dict_insert(irc_func_dict, CMD_GLINE, cmd_gline); dict_insert(irc_func_dict, TOK_GLINE, cmd_gline); + dict_insert(irc_func_dict, CMD_SGLINE, cmd_sgline); + dict_insert(irc_func_dict, TOK_SGLINE, cmd_sgline); dict_insert(irc_func_dict, CMD_SHUN, cmd_shun); dict_insert(irc_func_dict, TOK_SHUN, cmd_shun); + dict_insert(irc_func_dict, CMD_SSHUN, cmd_sshun); + dict_insert(irc_func_dict, TOK_SSHUN, cmd_sshun); dict_insert(irc_func_dict, CMD_OPMODE, cmd_opmode); dict_insert(irc_func_dict, TOK_OPMODE, cmd_opmode); dict_insert(irc_func_dict, CMD_CLEARMODE, cmd_clearmode); @@ -2466,6 +2539,8 @@ init_parse(void) dict_insert(irc_func_dict, TOK_VERSION, cmd_version); dict_insert(irc_func_dict, CMD_ADMIN, cmd_admin); dict_insert(irc_func_dict, TOK_ADMIN, cmd_admin); + dict_insert(irc_func_dict, CMD_SMO, cmd_dummy); + dict_insert(irc_func_dict, TOK_SMO, cmd_dummy); dict_insert(irc_func_dict, CMD_SNO, cmd_dummy); dict_insert(irc_func_dict, TOK_SNO, cmd_dummy); @@ -2515,6 +2590,7 @@ init_parse(void) /* ignore /trace and /motd commands targetted at us */ dict_insert(irc_func_dict, TOK_TRACE, cmd_dummy); dict_insert(irc_func_dict, TOK_MOTD, cmd_dummy); + dict_insert(irc_func_dict, TOK_UPING, cmd_dummy); /* handle topics */ dict_insert(irc_func_dict, "331", cmd_num_topic); @@ -3032,10 +3108,10 @@ void mod_usermode(struct userNode *user, const char *mode_change) { case 'd': do_user_mode(FLAGS_DEAF); break; case 'k': do_user_mode(FLAGS_SERVICE); break; case 'g': do_user_mode(FLAGS_GLOBAL); break; - // sethost - reed/apples - // case 'h': do_user_mode(FLAGS_HELPER); break; - // I check if there's an 'h' in the first part, and if there, - // then everything after the space becomes their new host. + case 'B': do_user_mode(FLAGS_BOT); break; + case 'n': do_user_mode(FLAGS_HIDECHANS); break; + case 'I': do_user_mode(FLAGS_HIDEIDLE); break; + case 'X': do_user_mode(FLAGS_XTRAOP); break; case 'C': do_user_mode(FLAGS_CLOAKHOST); if (*word) { char cloakhost[MAXLEN]; @@ -3060,6 +3136,10 @@ void mod_usermode(struct userNode *user, const char *mode_change) { safestrncpy(user->cryptip, cloakip, sizeof(user->cryptip)); } break; + // sethost - reed/apples + // case 'h': do_user_mode(FLAGS_HELPER); break; + // I check if there's an 'h' in the first part, and if there, + // then everything after the space becomes their new host. case 'h': do_user_mode(FLAGS_SETHOST); if (*word) { char sethost[MAXLEN];