AmendHub

Download

jcs

/

wallops

/

irc.h

 

(View History)

jcs   *: Add tabbed view for multiple channels Latest amendment: 46 on 2023-01-11

1 /*
2 * Copyright (c) 2022 joshua stein <jcs@jcs.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #ifndef __IRC_H__
18 #define __IRC_H__
19
20 #include "chatter.h"
21 #include "tcp.h"
22 #include "util.h"
23
24 enum {
25 IRC_STATE_DISCONNECTED = 0,
26 IRC_STATE_DEAD,
27 IRC_STATE_CONNECTING,
28 IRC_STATE_CONNECTED
29 };
30
31 #define IRC_MSG_MAX_ARGS 6
32
33 struct irc_msg {
34 short code;
35 char cmd[16];
36 char source[64];
37 char msg[512];
38 char arg[IRC_MSG_MAX_ARGS][64];
39 };
40
41 struct irc_user {
42 char nick[32];
43 char username[32];
44 char hostname[128];
45 };
46
47 struct irc_channel_nick {
48 char nick[32];
49 char flags;
50 #define IRC_NICK_FLAG_OP (7 << 0)
51 #define IRC_NICK_FLAG_VOICE (6 << 0)
52 short next_nick;
53 };
54
55 struct irc_channel {
56 SLIST_ENTRY(irc_channel) list;
57 struct chatter *chatter;
58 struct irc_connection *connection;
59 struct irc_channel_nick *nicks;
60 size_t nnicks;
61 size_t nicks_size;
62 short first_nick;
63 char name[64];
64 char topic[400];
65 };
66 SLIST_HEAD(irc_channels_head, irc_channel);
67
68 struct irc_connection {
69 SLIST_ENTRY(irc_connection) list;
70 short state;
71 struct chatter *chatter;
72 char *hostname;
73 short port;
74 char *password;
75 char *nick;
76 char *ident;
77 char *realname;
78 char *channel_autojoin;
79 bool did_autojoin;
80 struct irc_channels_head channels_list;
81 short nchannels;
82 TCPiopb rcv_pb, send_pb, close_pb;
83 TCPStatusPB status_pb;
84 StreamPtr stream;
85 wdsEntry wds[2];
86 char obuf[512];
87 char ibuf[512]; /* RFC2812 says max line will be 512 */
88 char line[512];
89 short ibuflen;
90 short linelen;
91 /* docs say 4*MTU+1024, but MTU will probably be <1500 */
92 unsigned char tcp_buf[(4 * 1500) + 1024];
93 };
94 SLIST_HEAD(irc_connections_head, irc_connection);
95 extern struct irc_connections_head irc_connections_list;
96
97 struct irc_connection * irc_connect(struct chatter *chatter,
98 const char *server, const unsigned short port, const char *password,
99 const char *nick, const char *ident, const char *realname,
100 const char *channel);
101 void irc_close_connection(struct irc_connection *conn);
102 void irc_dealloc_connection(struct irc_connection *conn);
103 void irc_process(struct irc_connection *conn);
104 void irc_abort(struct irc_connection *conn);
105 void irc_close(struct irc_connection *conn);
106 void irc_process_input(struct irc_connection *conn,
107 struct irc_channel *channel, char *input);
108
109 #endif