From ddcf88358f6b4fb28e1751b9655d1baabb0f114c Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 7 Jul 2011 22:50:19 +0200 Subject: [PATCH] general P10_RELAY, P10_SVSMODE & P10_SVSJOIN support --- src/proto-p10.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ src/proto.h | 7 +++++ 2 files changed, 83 insertions(+) diff --git a/src/proto-p10.c b/src/proto-p10.c index e29db35..278762f 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -72,6 +72,7 @@ #define CMD_PROTO "PROTO" #define CMD_QUIT "QUIT" #define CMD_REHASH "REHASH" +#define CMD_RELAY "RELAY" #define CMD_RESET "RESET" #define CMD_RESTART "RESTART" #define CMD_RPING "RPING" @@ -86,6 +87,8 @@ #define CMD_SQUIT "SQUIT" #define CMD_STATS "STATS" #define CMD_SVSNICK "SVSNICK" +#define CMD_SVSMODE "SVSMODE" +#define CMD_SVSJOIN "SVSJOIN" #define CMD_TIME "TIME" #define CMD_TOPIC "TOPIC" #define CMD_TRACE "TRACE" @@ -154,6 +157,7 @@ #define TOK_PROTO "PROTO" #define TOK_QUIT "Q" #define TOK_REHASH "REHASH" +#define TOK_RELAY "RL" #define TOK_RESET "RESET" #define TOK_RESTART "RESTART" #define TOK_RPING "RI" @@ -168,6 +172,8 @@ #define TOK_SQUIT "SQ" #define TOK_STATS "R" #define TOK_SVSNICK "SN" +#define TOK_SVSMODE "SM" +#define TOK_SVSJOIN "SJ" #define TOK_TIME "TI" #define TOK_TOPIC "T" #define TOK_TRACE "TR" @@ -247,6 +253,7 @@ #define P10_PROTO TYPE(PROTO) #define P10_QUIT TYPE(QUIT) #define P10_REHASH TYPE(REHASH) +#define P10_RELAY TYPE(RELAY) #define P10_RESET TYPE(RESET) #define P10_RESTART TYPE(RESTART) #define P10_RPING TYPE(RPING) @@ -261,6 +268,8 @@ #define P10_SQUIT TYPE(SQUIT) #define P10_STATS TYPE(STATS) #define P10_SVSNICK TYPE(SVSNICK) +#define P10_SVSMODE TYPE(SVSMODE) +#define P10_SVSJOIN TYPE(SVSJOIN) #define P10_TIME TYPE(TIME) #define P10_TOPIC TYPE(TOPIC) #define P10_TRACE TYPE(TRACE) @@ -496,6 +505,19 @@ irc_fakehost(struct userNode *user, const char *host, const char *ident, int for putsock("%s " P10_FAKEHOST " %s %s %s%s", self->numeric, user->numeric, ident, host, force ? " FORCE" : ""); } +void +irc_relay(char *message) +{ + putsock("%s " P10_RELAY " %s", self->numeric, message); + fprintf(stderr,"%s " P10_RELAY " %s", self->numeric, message); +} + +void +irc_simul(struct userNode *target, char *command) +{ + putsock("%s " P10_RELAY " %s SI %s :%s", self->numeric, target->numeric, target->numeric, command); +} + void irc_regnick(UNUSED_ARG(struct userNode *user)) { @@ -594,6 +616,24 @@ irc_privmsg(struct userNode *from, const char *to, const char *message) putsock("%s " P10_PRIVMSG " %s :%s", from->numeric, to, message); } +void +irc_svsmode(struct userNode *from, struct userNode *user, const char *modes) +{ +putsock("%s " P10_SVSMODE " %s %s", from->numeric, user->numeric, modes); +} + +void +irc_svsjoin(struct userNode *from, struct userNode *user, struct chanNode *chan) +{ +putsock("%s " P10_SVSJOIN " %s %s", from->numeric, user->numeric, chan->name); +} + +void +irc_svsjoinchan(struct userNode *from, struct userNode *user, const char *chan) +{ +putsock("%s " P10_SVSJOIN " %s %s", from->numeric, user->numeric, chan); +} + void irc_eob(void) { @@ -675,6 +715,7 @@ void irc_ungline(const char *mask) { putsock("%s " P10_GLINE " * -%s %lu", self->numeric, mask, now); + //putsock("%s " P10_GLINE " * %s * %lu", self->numeric, mask, now); } /* Return negative if *(struct modeNode**)pa is "less than" pb, @@ -1668,6 +1709,39 @@ static CMD_FUNC(cmd_time) return 1; } +static CMD_FUNC(cmd_relay) +{ + struct server *sNode; + unsigned int len; + char buf[3]; + // RELAY + len = strlen(argv[1]); + buf[2] = 0; + switch(len) { + case 2: + sNode = GetServerN(argv[1]); + break; + case 5: + buf[0] = argv[1][0]; + buf[1] = argv[1][1]; + sNode = GetServerN(buf); + break; + case 6: + buf[0] = argv[1][1]; + buf[1] = argv[1][2]; + sNode = GetServerN(buf); + break; + default: + /* Invalid destination. Ignore. */ + return 0; + } + if(sNode->numeric == self->numeric) { + //ok someone relayed something to us! + + } + return 1; +} + void free_user(struct userNode *user) { @@ -1795,6 +1869,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_RELAY, cmd_relay); + dict_insert(irc_func_dict, TOK_RELAY, cmd_relay); 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); diff --git a/src/proto.h b/src/proto.h index 92bd7ed..a2e03a1 100644 --- a/src/proto.h +++ b/src/proto.h @@ -148,6 +148,13 @@ void irc_account(struct userNode *user, const char *stamp, unsigned long timesta void irc_regnick(struct userNode *user); void irc_fakehost(struct userNode *user, const char *host, const char *ident, int force); +/* svs maintenance */ +void irc_svsmode(struct userNode *from, struct userNode *user, const char *modes); +void irc_svsjoin(struct userNode *from, struct userNode *user, struct chanNode *chan); +void irc_svsjoinchan(struct userNode *from, struct userNode *user, const char *chan); +void irc_relay(char *message); +void irc_simul(struct userNode *target, char *command); + /* numeric messages */ void irc_numeric(struct userNode *user, unsigned int num, const char *format, ...); /* RFC1459-compliant numeric responses */ -- 2.20.1