Introduction
Introduction Statistics Contact Development Disclaimer Help
ii-2.0-ucspi.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
ii-2.0-ucspi.diff (9012B)
---
1 commit 42a582d675b09f387b154f8149c0c75e303955e0
2 Author: Jan Klemkow <[email protected]>
3 Date: Sat Sep 2 12:36:34 2017 +0200
4
5 replace socket handling with ucspi backend
6
7 diff --git a/ii.c b/ii.c
8 index c402a87..193b0b9 100644
9 --- a/ii.c
10 +++ b/ii.c
11 @@ -1,16 +1,13 @@
12 /* See LICENSE file for license details. */
13 #include <sys/select.h>
14 -#include <sys/socket.h>
15 #include <sys/stat.h>
16 #include <sys/types.h>
17 -#include <sys/un.h>
18
19 #include <ctype.h>
20 #include <errno.h>
21 #include <fcntl.h>
22 #include <limits.h>
23 #include <netdb.h>
24 -#include <netinet/in.h>
25 #include <pwd.h>
26 #include <signal.h>
27 #include <stdarg.h>
28 @@ -20,6 +17,9 @@
29 #include <time.h>
30 #include <unistd.h>
31
32 +#define READ_FD 6
33 +#define WRITE_FD 7
34 +
35 char *argv0;
36
37 #include "arg.h"
38 @@ -59,16 +59,16 @@ static void create_dirtree(const char *);
39 static void create_filepath(char *, size_t, const char *, const ch…
40 static void die(const char *, ...);
41 static void ewritestr(int, const char *);
42 -static void handle_channels_input(int, Channel *);
43 -static void handle_server_output(int);
44 +static void handle_channels_input(Channel *);
45 +static void handle_server_output(void);
46 static int isnumeric(const char *);
47 -static void loginkey(int, const char *);
48 -static void loginuser(int, const char *, const char *);
49 -static void proc_channels_input(int, Channel *, char *);
50 -static void proc_channels_privmsg(int, Channel *, char *);
51 -static void proc_server_cmd(int, char *);
52 +static void loginkey(const char *);
53 +static void loginuser(const char *, const char *);
54 +static void proc_channels_input(Channel *, char *);
55 +static void proc_channels_privmsg(Channel *, char *);
56 +static void proc_server_cmd(char *);
57 static int read_line(int, char *, size_t);
58 -static void run(int, const char *);
59 +static void run(const char *);
60 static void setup(void);
61 static void sighandler(int);
62 static int tcpopen(const char *, const char *);
63 @@ -341,73 +341,19 @@ channel_leave(Channel *c)
64 }
65
66 static void
67 -loginkey(int ircfd, const char *key)
68 +loginkey(const char *key)
69 {
70 snprintf(msg, sizeof(msg), "PASS %s\r\n", key);
71 - ewritestr(ircfd, msg);
72 + ewritestr(WRITE_FD, msg);
73 }
74
75 static void
76 -loginuser(int ircfd, const char *host, const char *fullname)
77 +loginuser(const char *host, const char *fullname)
78 {
79 snprintf(msg, sizeof(msg), "NICK %s\r\nUSER %s localhost %s :%s…
80 nick, nick, host, fullname);
81 puts(msg);
82 - ewritestr(ircfd, msg);
83 -}
84 -
85 -static int
86 -udsopen(const char *uds)
87 -{
88 - struct sockaddr_un sun;
89 - size_t len;
90 - int fd;
91 -
92 - if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
93 - die("%s: socket: %s\n", argv0, strerror(errno));
94 -
95 - sun.sun_family = AF_UNIX;
96 - if (strlcpy(sun.sun_path, uds, sizeof(sun.sun_path)) >= sizeof(…
97 - die("%s: UNIX domain socket path truncation\n", argv0);
98 -
99 - len = strlen(sun.sun_path) + 1 + sizeof(sun.sun_family);
100 - if (connect(fd, (struct sockaddr *)&sun, len) == -1)
101 - die("%s: connect: %s\n", argv0, strerror(errno));
102 -
103 - return fd;
104 -}
105 -
106 -static int
107 -tcpopen(const char *host, const char *service)
108 -{
109 - struct addrinfo hints, *res = NULL, *rp;
110 - int fd = -1, e;
111 -
112 - memset(&hints, 0, sizeof(hints));
113 - hints.ai_family = AF_UNSPEC; /* allow IPv4 or IPv6 */
114 - hints.ai_flags = AI_NUMERICSERV; /* avoid name lookup for port …
115 - hints.ai_socktype = SOCK_STREAM;
116 -
117 - if ((e = getaddrinfo(host, service, &hints, &res)))
118 - die("%s: getaddrinfo: %s\n", argv0, gai_strerror(e));
119 -
120 - for (rp = res; rp; rp = rp->ai_next) {
121 - fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_prot…
122 - if (fd == -1)
123 - continue;
124 - if (connect(fd, rp->ai_addr, rp->ai_addrlen) == -1) {
125 - close(fd);
126 - fd = -1;
127 - continue;
128 - }
129 - break; /* success */
130 - }
131 - if (fd == -1)
132 - die("%s: could not connect to %s:%s: %s\n",
133 - argv0, host, service, strerror(errno));
134 -
135 - freeaddrinfo(res);
136 - return fd;
137 + ewritestr(WRITE_FD, msg);
138 }
139
140 static int
141 @@ -459,16 +405,16 @@ channel_print(Channel *c, const char *buf)
142 }
143
144 static void
145 -proc_channels_privmsg(int ircfd, Channel *c, char *buf)
146 +proc_channels_privmsg(Channel *c, char *buf)
147 {
148 snprintf(msg, sizeof(msg), "<%s> %s", nick, buf);
149 channel_print(c, msg);
150 snprintf(msg, sizeof(msg), "PRIVMSG %s :%s\r\n", c->name, buf);
151 - ewritestr(ircfd, msg);
152 + ewritestr(WRITE_FD, msg);
153 }
154
155 static void
156 -proc_channels_input(int ircfd, Channel *c, char *buf)
157 +proc_channels_input(Channel *c, char *buf)
158 {
159 char *p = NULL;
160 size_t buflen;
161 @@ -476,7 +422,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
162 if (buf[0] == '\0')
163 return;
164 if (buf[0] != '/') {
165 - proc_channels_privmsg(ircfd, c, buf);
166 + proc_channels_privmsg(c, buf);
167 return;
168 }
169
170 @@ -501,7 +447,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
171 channel_join(&buf[3]);
172 } else if (p) {
173 if ((c = channel_join(&buf[3])))
174 - proc_channels_privmsg(ircfd, c,…
175 + proc_channels_privmsg(c, p + 1);
176 return;
177 }
178 break;
179 @@ -533,7 +479,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
180 else
181 snprintf(msg, sizeof(msg),
182 "PART %s :leaving\r\n", c->nam…
183 - ewritestr(ircfd, msg);
184 + ewritestr(WRITE_FD, msg);
185 channel_leave(c);
186 return;
187 break;
188 @@ -543,7 +489,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
189 else
190 snprintf(msg, sizeof(msg),
191 "QUIT %s\r\n", "bye");
192 - ewritestr(ircfd, msg);
193 + ewritestr(WRITE_FD, msg);
194 isrunning = 0;
195 return;
196 break;
197 @@ -556,11 +502,11 @@ proc_channels_input(int ircfd, Channel *c, char *b…
198 snprintf(msg, sizeof(msg), "%s\r\n", &buf[1]);
199 }
200 if (msg[0] != '\0')
201 - ewritestr(ircfd, msg);
202 + ewritestr(WRITE_FD, msg);
203 }
204
205 static void
206 -proc_server_cmd(int fd, char *buf)
207 +proc_server_cmd(char *buf)
208 {
209 Channel *c;
210 const char *channel;
211 @@ -608,7 +554,7 @@ proc_server_cmd(int fd, char *buf)
212 return;
213 } else if (!strcmp("PING", argv[TOK_CMD])) {
214 snprintf(msg, sizeof(msg), "PONG %s\r\n", argv[TOK_TEXT…
215 - ewritestr(fd, msg);
216 + ewritestr(WRITE_FD, msg);
217 return;
218 } else if (!argv[TOK_NICKSRV] || !argv[TOK_USER]) {
219 /* server command */
220 @@ -695,7 +641,7 @@ read_line(int fd, char *buf, size_t bufsiz)
221 }
222
223 static void
224 -handle_channels_input(int ircfd, Channel *c)
225 +handle_channels_input(Channel *c)
226 {
227 /*
228 * Do not allow to read this fully, since commands will be
229 @@ -711,20 +657,19 @@ handle_channels_input(int ircfd, Channel *c)
230 channel_rm(c);
231 return;
232 }
233 - proc_channels_input(ircfd, c, buf);
234 + proc_channels_input(c, buf);
235 }
236
237 static void
238 -handle_server_output(int ircfd)
239 +handle_server_output(void)
240 {
241 char buf[IRC_MSG_MAX];
242
243 - if (read_line(ircfd, buf, sizeof(buf)) == -1)
244 + if (read_line(READ_FD, buf, sizeof(buf)) == -1)
245 die("%s: remote host closed connection: %s\n", argv0, s…
246 -
247 fprintf(stdout, "%lu %s\n", (unsigned long)time(NULL), buf);
248 fflush(stdout);
249 - proc_server_cmd(ircfd, buf);
250 + proc_server_cmd(buf);
251 }
252
253 static void
254 @@ -746,7 +691,7 @@ setup(void)
255 }
256
257 static void
258 -run(int ircfd, const char *host)
259 +run(const char *host)
260 {
261 Channel *c, *tmp;
262 fd_set rdset;
263 @@ -756,9 +701,9 @@ run(int ircfd, const char *host)
264
265 snprintf(ping_msg, sizeof(ping_msg), "PING %s\r\n", host);
266 while (isrunning) {
267 - maxfd = ircfd;
268 + maxfd = READ_FD;
269 FD_ZERO(&rdset);
270 - FD_SET(ircfd, &rdset);
271 + FD_SET(READ_FD, &rdset);
272 for (c = channels; c; c = c->next) {
273 if (c->fdin > maxfd)
274 maxfd = c->fdin;
275 @@ -777,17 +722,17 @@ run(int ircfd, const char *host)
276 cleanup();
277 exit(2); /* status code 2 for timeout */
278 }
279 - ewritestr(ircfd, ping_msg);
280 + ewritestr(WRITE_FD, ping_msg);
281 continue;
282 }
283 - if (FD_ISSET(ircfd, &rdset)) {
284 - handle_server_output(ircfd);
285 + if (FD_ISSET(READ_FD, &rdset)) {
286 + handle_server_output();
287 last_response = time(NULL);
288 }
289 for (c = channels; c; c = tmp) {
290 tmp = c->next;
291 if (FD_ISSET(c->fdin, &rdset))
292 - handle_channels_input(ircfd, c);
293 + handle_channels_input(c);
294 }
295 }
296 }
297 @@ -799,7 +744,7 @@ main(int argc, char *argv[])
298 const char *key = NULL, *fullname = NULL, *host = "";
299 const char *uds = NULL, *service = "6667";
300 char prefix[PATH_MAX];
301 - int ircfd, r;
302 + int r;
303
304 /* use nickname and home dir of user by default */
305 if (!(spw = getpwuid(getuid())))
306 @@ -838,11 +783,6 @@ main(int argc, char *argv[])
307 if (!*host)
308 usage();
309
310 - if (uds)
311 - ircfd = udsopen(uds);
312 - else
313 - ircfd = tcpopen(host, service);
314 -
315 #ifdef __OpenBSD__
316 /* OpenBSD pledge(2) support */
317 if (pledge("stdio rpath wpath cpath dpath", NULL) == -1)
318 @@ -856,10 +796,10 @@ main(int argc, char *argv[])
319
320 channelmaster = channel_add(""); /* master channel */
321 if (key)
322 - loginkey(ircfd, key);
323 - loginuser(ircfd, host, fullname && *fullname ? fullname : nick);
324 + loginkey(key);
325 + loginuser(host, fullname && *fullname ? fullname : nick);
326 setup();
327 - run(ircfd, host);
328 + run(host);
329 cleanup();
330
331 return 0;
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.