Set origin fields to "*" if missing
Also determine if a message is from the server by if the host field has been copied from the nick field. EFNet sends NOTICEs with no origin during registration. RFC 1459 has this to say: > If the prefix is missing from the message, it is assumed to have > originated from the connection from which it was received. I suppose a more correct implementation would be to set the origin to the hostname of the server, but we don't store that globally, so this is good enough.master
parent
1c8054f226
commit
10e953b8b5
4
handle.c
4
handle.c
|
@ -76,7 +76,7 @@ static const char *capList(enum Cap caps) {
|
||||||
|
|
||||||
static void require(struct Message *msg, bool origin, uint len) {
|
static void require(struct Message *msg, bool origin, uint len) {
|
||||||
if (origin) {
|
if (origin) {
|
||||||
if (!msg->nick) errx(EX_PROTOCOL, "%s missing origin", msg->cmd);
|
if (!msg->nick) msg->nick = "*";
|
||||||
if (!msg->user) msg->user = msg->nick;
|
if (!msg->user) msg->user = msg->nick;
|
||||||
if (!msg->host) msg->host = msg->user;
|
if (!msg->host) msg->host = msg->user;
|
||||||
}
|
}
|
||||||
|
@ -1114,7 +1114,7 @@ static const char *colorMentions(uint id, struct Message *msg) {
|
||||||
static void handlePrivmsg(struct Message *msg) {
|
static void handlePrivmsg(struct Message *msg) {
|
||||||
require(msg, true, 2);
|
require(msg, true, 2);
|
||||||
bool query = !strchr(network.chanTypes, msg->params[0][0]);
|
bool query = !strchr(network.chanTypes, msg->params[0][0]);
|
||||||
bool server = strchr(msg->nick, '.');
|
bool server = (msg->host == msg->nick);
|
||||||
bool mine = !strcmp(msg->nick, self.nick);
|
bool mine = !strcmp(msg->nick, self.nick);
|
||||||
uint id;
|
uint id;
|
||||||
if (query && server) {
|
if (query && server) {
|
||||||
|
|
Loading…
Reference in New Issue