/* * Copyright (c) 2026 Nakidai Perumenei * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "ircd.h" #include #include int parse_message(char *buf, struct Message *msg) { char *t, *next; size_t i; memset(msg, 0, sizeof(*msg)); if (*buf == ':') { t = ++buf; next = strchr(buf, ' '); if (!next) return 1; *next++ = 0; buf = next; next = strchr(t, '@'); if (next) { *next++ = 0; if (!*t) return 1; msg->nick = t; t = next; next = strchr(msg->nick, '!'); if (next) { *next++ = 0; if (!*msg->nick || !*next) return 1; msg->user = next; } } if (!*t) return 1; msg->host = t; } msg->command = buf; t = strstr(buf, " :"); if (t) *((t += 2) - 2) = 0; for (i = 0; i < PARAM_MAX - !!t; ++i, buf = next) { next = strchr(buf, ' '); if (!next) break; *next++ = 0; msg->params[i] = next; } if (strchr(buf, ' ')) return 1; if (t) msg->params[i] = t; return 0; }