/* * Copyright (c) 2022 joshua stein * * 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. */ #ifndef __IRC_H__ #define __IRC_H__ enum { IRC_STATE_UNINITED = 0, IRC_STATE_DISCONNECTED, IRC_STATE_CONNECTING, IRC_STATE_CONNECTED, IRC_STATE_IDLE }; #define IRC_MSG_MAX_ARGS 6 struct irc_msg { short code; char cmd[16]; char source[64]; char msg[512]; char arg[IRC_MSG_MAX_ARGS][64]; }; struct irc_user { char nick[32]; char username[32]; char hostname[128]; }; struct irc_channel_nick { char nick[32]; char flags; #define IRC_NICK_FLAG_OP (7 << 0) #define IRC_NICK_FLAG_VOICE (6 << 0) short next_nick; }; struct irc_channel { char name[64]; struct irc_channel_nick *nicks; size_t nnicks; size_t nicks_size; short first_nick; char topic[400]; }; void irc_process(struct chatter *chatter); void irc_abort(struct chatter *chatter); void irc_close(struct chatter *chatter); void irc_process_input(struct chatter *chatter, char *input); #endif