Mercurial > irccd
annotate irccdctl/main.c @ 964:0dd6afe7386d
irccd: implement plugin loaders
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 29 Jan 2021 13:50:44 +0100 |
parents | 4af3140f234d |
children | d7501067de95 |
rev | line source |
---|---|
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.c -- irccdctl(1) main file |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2021 David Demelier <markand@malikania.fr> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
960
4af3140f234d
misc: various fixes for Alpine Linux
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
19 #include <compat.h> |
4af3140f234d
misc: various fixes for Alpine Linux
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
20 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <sys/socket.h> |
960
4af3140f234d
misc: various fixes for Alpine Linux
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
22 #include <sys/time.h> |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <sys/un.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <assert.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <err.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <errno.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <limits.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <stdarg.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <stdbool.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <stdlib.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include <stdnoreturn.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <string.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include <unistd.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include <stdio.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include <irccd/limits.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include <irccd/util.h> |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 static bool verbose; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 static int sock; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 static struct sockaddr_un sockaddr = { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 .sun_family = PF_LOCAL, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 .sun_path = "/tmp/irccd.sock" |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 }; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
46 static char in[IRC_BUF_LEN]; |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
47 static char out[IRC_BUF_LEN]; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 static char * |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 poll(void) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 { |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
52 static char ret[IRC_BUF_LEN]; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 char *nl; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 while (!(nl = strstr(in, "\n"))) { |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
56 char buf[IRC_BUF_LEN] = {0}; |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
57 ssize_t nr; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
59 if ((nr = recv(sock, buf, sizeof (buf) - 1, 0)) <= 0) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
60 errc(1, nr == 0 ? ECONNRESET : errno, "abort"); |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 if (strlcat(in, buf, sizeof (in)) >= sizeof (in)) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 errc(1, EMSGSIZE, "abort"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 *nl = '\0'; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 strlcpy(ret, in, sizeof (ret)); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 memmove(in, nl + 1, sizeof (in) - (nl - in) - 1); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 return ret; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 dial(void) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 const struct timeval tv = { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 .tv_sec = 30 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 }; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 if ((sock = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 err(1, "socket"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof (tv)) < 0 || |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof (tv)) < 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 err(1, "setsockopt"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 if (connect(sock, (const struct sockaddr *)&sockaddr, SUN_LEN(&sockaddr)) < 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 err(1, "connect"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 check(void) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 /* Ensure we're talking to irccd. */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 int major, minor, patch; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 if ((sscanf(poll(), "IRCCD %d.%d.%d", &major, &minor, &patch) != 3)) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 errx(1, "abort: not irccd instance"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 if (verbose) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 printf("connected to irccd %d.%d.%d\n", major, minor, patch); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 req(const char *fmt, ...) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 { |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
103 char buf[IRC_BUF_LEN]; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 va_list ap; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 va_start(ap, fmt); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 vsnprintf(buf, sizeof (buf), fmt, ap); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 va_end(ap); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 if (strlcat(out, buf, sizeof (out)) >= sizeof (out) || |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 strlcat(out, "\n", sizeof (out)) >= sizeof (out)) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 errc(1, EMSGSIZE, "abort"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 while (out[0]) { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 ssize_t ns, len; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 len = strlen(out); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 if ((ns = send(sock, out, len, MSG_NOSIGNAL)) <= 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 err(1, "send"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 if (ns >= len) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 memset(out, 0, sizeof (out)); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 else |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 memmove(out, out + ns, sizeof (out) - ns); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 ok(void) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 const char *response = poll(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 if (strcmp(response, "OK") != 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 errx(1, "abort: %s", response); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 static void |
947
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
139 cmd_server_disconnect(int argc, char **argv) |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
140 { |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
141 if (argc == 1) |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
142 req("SERVER-DISCONNECT %s", argv[0]); |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
143 else |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
144 req("SERVER-DISCONNECT"); |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
145 |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
146 ok(); |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
147 } |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
148 |
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
149 static void |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 cmd_server_list(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 (void)argc; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 (void)argv; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 char *list; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 req("SERVER-LIST"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 if (strncmp(list = poll(), "OK ", 3) != 0) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 errx(1, "failed to retrieve server list"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 /* Skip "OK " */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 list += 3; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 /* Since list is separated by spaces, just convert them to \n */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 for (char *p; (p = strchr(list, ' ')); ) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 *p = '\n'; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 puts(list); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 cmd_server_message(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 (void)argc; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 req("SERVER-MESSAGE %s %s %s", argv[0], argv[1], argv[2]); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 cmd_server_me(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 (void)argc; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 req("SERVER-ME %s %s %s", argv[0], argv[1], argv[2]); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 cmd_server_mode(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 { |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
193 (void)argc; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
194 (void)argv; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 #if 0 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 req("MODE %s %s %s%c%s%c%s%c%s", argv[0], argv[1], argv[2], |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 argc >= 4 ? ' ', argv[3] : "", |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 argc >= 5 ? ' ', argv[4] : "", |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 argc >= 6 ? ' ', argv[5] : ""); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 #endif |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 cmd_server_nick(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 { |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
207 (void)argc; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
208 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 req("SERVER-NICK %s %s", argv[0], argv[1]); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 cmd_server_notice(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 { |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
216 (void)argc; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
217 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 req("SERVER-NOTICE %s %s %s", argv[0], argv[1], argv[2]); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 cmd_server_part(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 { |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
225 (void)argc; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
226 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 /* Let's advertise irccd a bit. */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 req("SERVER-PART %s %s %s", argv[0], argv[1], |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 argc >= 3 ? argv[2] : "irccd is shutting down"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 cmd_server_topic(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 { |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
236 (void)argc; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
237 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 req("SERVER-TOPIC %s %s %s", argv[0], argv[1], argv[2]); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 ok(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
242 static void |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
243 show_connect(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
244 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
245 const char *args[2] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
246 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
247 if (irc_util_split(line, args, 2) == 2) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
248 printf("event: onConnect\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
249 printf("server: %s\n", args[0]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
250 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
251 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
252 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
253 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
254 show_disconnect(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
255 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
256 const char *args[2] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
257 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
258 if (irc_util_split(line, args, 2) == 2) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
259 printf("event: onDisonnect\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
260 printf("server: %s\n", args[0]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
261 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
262 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
263 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
264 static void |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
265 show_invite(char *line) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
266 { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
267 const char *args[5] = {0}; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
268 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
269 if (irc_util_split(line, args, 5) == 5) { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
270 printf("event: onInvite\n"); |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
271 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
272 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
273 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
274 printf("nickname: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
275 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
276 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
277 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
278 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
279 show_join(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
280 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
281 const char *args[4] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
282 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
283 if (irc_util_split(line, args, 4) == 4) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
284 printf("event: onJoin\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
285 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
286 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
287 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
288 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
289 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
290 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
291 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
292 show_kick(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
293 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
294 const char *args[6] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
295 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
296 if (irc_util_split(line, args, 6) >= 5) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
297 printf("event: onKick\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
298 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
299 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
300 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
301 printf("target: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
302 printf("reason: %s\n", args[5] ? args[5] : ""); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
303 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
304 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
305 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
306 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
307 show_me(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
308 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
309 const char *args[5] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
310 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
311 if (irc_util_split(line, args, 5) == 5) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
312 printf("event: onMe\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
313 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
314 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
315 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
316 printf("message: %s\n", args[4]); |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
317 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
318 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
319 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
320 static void |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
321 show_message(char *line) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
322 { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
323 const char *args[5] = {0}; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
324 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
325 if (irc_util_split(line, args, 5) == 5) { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
326 printf("event: onMessage\n"); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
327 printf("server: %s\n", args[1]); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
328 printf("origin: %s\n", args[2]); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
329 printf("channel: %s\n", args[3]); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
330 printf("message: %s\n", args[4]); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
331 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
332 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
333 |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
334 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
335 show_mode(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
336 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
337 const char *args[8] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
338 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
339 if (irc_util_split(line, args, 8) >= 5) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
340 printf("event: onMode\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
341 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
342 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
343 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
344 printf("mode: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
345 printf("limit: %s\n", (args[5] ? args[5] : "")); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
346 printf("user: %s\n", (args[6] ? args[6] : "")); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
347 printf("mask: %s\n", (args[7] ? args[7] : "")); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
348 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
349 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
350 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
351 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
352 show_nick(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
353 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
354 const char *args[4] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
355 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
356 if (irc_util_split(line, args, 4) == 4) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
357 printf("event: onNick\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
358 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
359 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
360 printf("nickname: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
361 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
362 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
363 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
364 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
365 show_notice(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
366 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
367 const char *args[5] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
368 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
369 if (irc_util_split(line, args, 5) == 5) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
370 printf("event: onNotice\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
371 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
372 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
373 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
374 printf("message: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
375 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
376 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
377 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
378 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
379 show_part(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
380 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
381 const char *args[5] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
382 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
383 if (irc_util_split(line, args, 5) >= 4) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
384 printf("event: onPart\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
385 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
386 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
387 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
388 printf("reason: %s\n", (args[4] ? args[4] : "")); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
389 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
390 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
391 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
392 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
393 show_topic(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
394 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
395 const char *args[5] = {0}; |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
396 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
397 if (irc_util_split(line, args, 5) >= 4) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
398 printf("event: onTopic\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
399 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
400 printf("origin: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
401 printf("channel: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
402 printf("topic: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
403 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
404 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
405 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
406 static void |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
407 show_whois(char *line) |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
408 { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
409 const char *args[6] = {0}; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
410 //char *p, *token; |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
411 |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
412 if (irc_util_split(line, args, 6) >= 4) { |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
413 printf("event: onWhois\n"); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
414 printf("server: %s\n", args[1]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
415 printf("nickname: %s\n", args[2]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
416 printf("username: %s\n", args[3]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
417 printf("hostname: %s\n", args[4]); |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
418 printf("username: %s\n", args[5]); |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
956
diff
changeset
|
419 //printf("channels: %s\n", args[6]); |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
420 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
421 } |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
422 |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
423 static const struct { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
424 const char *event; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
425 void (*show)(char *); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
426 } watchtable[] = { |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
427 { "EVENT-CONNECT", show_connect }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
428 { "EVENT-DISCONNECT", show_disconnect }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
429 { "EVENT-INVITE", show_invite }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
430 { "EVENT-JOIN", show_join }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
431 { "EVENT-KICK", show_kick }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
432 { "EVENT-MESSAGE", show_message }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
433 { "EVENT-ME", show_me }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
434 { "EVENT-MODE", show_mode }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
435 { "EVENT-NICK", show_nick }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
436 { "EVENT-NOTICE", show_notice }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
437 { "EVENT-PART", show_part }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
438 { "EVENT-TOPIC", show_topic }, |
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
439 { "EVENT-WHOIS", show_whois } |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
440 }; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
441 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
442 static void |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
443 show(char *ev) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
444 { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
445 for (size_t i = 0; i < IRC_UTIL_SIZE(watchtable); ++i) { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
446 if (strncmp(watchtable[i].event, ev, strlen(watchtable[i].event)) == 0) { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
447 watchtable[i].show(ev); |
956
5e682f1cebcc
irccd: improve SSL support and add basic whois
David Demelier <markand@malikania.fr>
parents:
953
diff
changeset
|
448 printf("\n"); |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
449 break; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
450 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
451 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
452 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
453 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
454 static void |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
455 cmd_watch(int argc, char **argv) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
456 { |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
457 (void)argc; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
458 (void)argv; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
459 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
460 struct timeval tv = {0}; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
461 char *ev; |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
462 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
463 /* Enable watch. */ |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
464 req("WATCH"); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
465 ok(); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
466 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
467 /* Turn off timeout to receive indefinitely. */ |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
468 if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof (tv)) < 0) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
469 err(1, "setsockopt"); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
470 |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
471 while ((ev = poll())) |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
472 show(ev); |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
473 } |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
474 |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 static const struct cmd { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 const char *name; |
950
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
477 int minargs; |
9fcb0038fe0a
irccd: bring SSL support back
David Demelier <markand@malikania.fr>
parents:
947
diff
changeset
|
478 int maxargs; |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
479 void (*exec)(int, char **); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 } cmds[] = { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
481 /* name min max exec */ |
947
95201fd9ad88
irccd: servers are now linked lists
David Demelier <markand@malikania.fr>
parents:
941
diff
changeset
|
482 { "server-disconnect", 0, 1, cmd_server_disconnect }, |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 { "server-list", 0, 0, cmd_server_list }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 { "server-me", 3, 3, cmd_server_me }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
485 { "server-message", 3, 3, cmd_server_message }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 { "server-mode", 3, 6, cmd_server_mode }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 { "server-nick", 2, 2, cmd_server_nick }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
488 { "server-notice", 3, 3, cmd_server_notice }, |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 { "server-part", 3, 3, cmd_server_part }, |
953
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
490 { "server-topic", 3, 3, cmd_server_topic }, |
ab43ba409f9d
irccd: add SSL, and cleanup events
David Demelier <markand@malikania.fr>
parents:
950
diff
changeset
|
491 { "watch", 0, 0, cmd_watch } |
941
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 }; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
494 static int |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
495 cmp_cmd(const void *d1, const void *d2) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
496 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
497 return strcmp(d1, ((const struct cmd *)d2)->name); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
499 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
500 static const struct cmd * |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
501 find_cmd(const char *name) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
502 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
503 return bsearch(name, cmds, IRC_UTIL_SIZE(cmds), sizeof (cmds[0]), cmp_cmd); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
504 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
505 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
506 static void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
507 run(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
508 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
509 const struct cmd *c; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
510 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
511 if (!(c = find_cmd(argv[0]))) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
512 errx(1, "abort: command not found"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
513 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
514 --argc; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
515 ++argv; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
516 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
517 if (argc < c->minargs || argc > c->maxargs) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
518 errx(1, "abort: invalid number of arguments"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
519 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
520 c->exec(argc, argv); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
521 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
522 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
523 static noreturn void |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
524 usage(void) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
525 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
526 /* TODO: getprogname() */ |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
527 fprintf(stderr, "usage: irccdctl [-v] [-s sock] command [arguments...]\n"); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
528 exit(1); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
529 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
530 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
531 int |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
532 main(int argc, char **argv) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
533 { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
534 for (int ch; (ch = getopt(argc, argv, "s:v")) != -1; ) { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
535 switch (ch) { |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
536 case 's': |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
537 strlcpy(sockaddr.sun_path, optarg, sizeof (sockaddr.sun_path)); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
538 break; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
539 case 'v': |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
540 verbose = true; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
541 break; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
542 default: |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
543 break; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
544 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
545 } |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
546 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
547 argc -= optind; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
548 argv += optind; |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
549 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
550 if (argc < 1) |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
551 usage(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
552 |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
553 dial(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
554 check(); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
555 run(argc, argv); |
e43ccb1f0ace
irccdctl: add basics commands
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
556 } |