~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/: Issue `WARN' messages for (most) initialization errors.
[tripe]
/
uslip
/
uslip.c
diff --git
a/uslip/uslip.c
b/uslip/uslip.c
index
74a5b17
..
629da12
100644
(file)
--- a/
uslip/uslip.c
+++ b/
uslip/uslip.c
@@
-9,19
+9,18
@@
*
* This file is part of Trivial IP Encryption (TrIPE).
*
*
* This file is part of Trivial IP Encryption (TrIPE).
*
- * TrIPE is free software
; you can redistribute it and/or modify
- *
it under the terms of the GNU General Public License as published by
- *
the Free Software Foundation; either version 2 of the License, o
r
- *
(at your
option) any later version.
+ * TrIPE is free software
: you can redistribute it and/or modify it under
+ *
the terms of the GNU General Public License as published by the Free
+ *
Software Foundation; either version 3 of the License, or (at you
r
+ * option) any later version.
*
*
- * TrIPE is distributed in the hope that it will be useful,
- *
but WITHOUT ANY WARRANTY; without even the implied warranty of
- *
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See th
e
- *
GNU General Public License
for more details.
+ * TrIPE is distributed in the hope that it will be useful,
but WITHOUT
+ *
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licens
e
+ * for more details.
*
* You should have received a copy of the GNU General Public License
*
* You should have received a copy of the GNU General Public License
- * along with TrIPE; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * along with TrIPE. If not, see <https://www.gnu.org/licenses/>.
*/
/*----- Header files ------------------------------------------------------*/
*/
/*----- Header files ------------------------------------------------------*/
@@
-55,6
+54,7
@@
#include <mLib/quis.h>
#include <mLib/report.h>
#include <mLib/sel.h>
#include <mLib/quis.h>
#include <mLib/report.h>
#include <mLib/sel.h>
+#include <mLib/sig.h>
#include <mLib/sub.h>
#include <mLib/tv.h>
#include <mLib/sub.h>
#include <mLib/tv.h>
@@
-135,7
+135,7
@@
static void socketaddr(struct sockaddr_un *sun, size_t *sz)
static void initqueue(pkq *q) { q->head = 0; q->tail = &q->head; }
static void initqueue(pkq *q) { q->head = 0; q->tail = &q->head; }
-static pkq_node *make_pkqnode(void *p, size_t n)
+static pkq_node *make_pkqnode(
const
void *p, size_t n)
{
pkq_node *pn;
{
pkq_node *pn;
@@
-195,10
+195,10
@@
static void destroy_pkq(pkq *q)
* calls a user-supplied calback function, and quits.
*/
* calls a user-supplied calback function, and quits.
*/
-static void
gobbler_close
(gobbler *g)
+static void
close_gobbler
(gobbler *g)
{ if (g->f.fd != -1) { sel_rmfile(&g->f); close(g->f.fd); g->f.fd = -1; } }
{ if (g->f.fd != -1) { sel_rmfile(&g->f); close(g->f.fd); g->f.fd = -1; } }
-static void
gobbler_destroy(gobbler *g) { gobbler_close
(g); DESTROY(g); }
+static void
destroy_gobbler(gobbler *g) { close_gobbler
(g); DESTROY(g); }
static void do_gobble_in(int fd, unsigned mode, void *p)
{
static void do_gobble_in(int fd, unsigned mode, void *p)
{
@@
-213,12
+213,12
@@
static void do_gobble_in(int fd, unsigned mode, void *p)
else {
moan("read (gobble): %s", strerror(errno));
if (g->done) g->done(g, errno, g->p);
else {
moan("read (gobble): %s", strerror(errno));
if (g->done) g->done(g, errno, g->p);
-
gobbler_close
(g);
+
close_gobbler
(g);
break;
}
} else if (n == 0) {
if (g->done) g->done(g, 0, g->p);
break;
}
} else if (n == 0) {
if (g->done) g->done(g, 0, g->p);
-
gobbler_close
(g);
+
close_gobbler
(g);
break;
}
}
break;
}
}
@@
-320,7
+320,7
@@
static void done_client_dribble(dribbler *d, int err, void *p)
{
if (err)
moan("write (client): %s", strerror(err));
{
if (err)
moan("write (client): %s", strerror(err));
-
gobbler_destroy
(p);
+
destroy_gobbler
(p);
destroy_dribbler(d);
reasons--;
}
destroy_dribbler(d);
reasons--;
}
@@
-345,7
+345,7
@@
static void dequeue_to_waiter(void)
}
}
}
}
-static void
client_destroy
(client *c)
+static void
destroy_client
(client *c)
{
sel_rmfile(&c->f);
close(c->f.fd);
{
sel_rmfile(&c->f);
close(c->f.fd);
@@
-374,7
+374,7
@@
static void do_client_in(int fd, unsigned mode, void *p)
break;
else {
moan("read (client): %s", strerror(errno));
break;
else {
moan("read (client): %s", strerror(errno));
-
client_destroy
(c);
+
destroy_client
(c);
return;
}
} else if (n == 0) {
return;
}
} else if (n == 0) {
@@
-383,7
+383,7
@@
static void do_client_in(int fd, unsigned mode, void *p)
if (enqueue_dribble(dribble_out, make_pkqnode(c->d.buf, c->d.len)))
reasons++;
}
if (enqueue_dribble(dribble_out, make_pkqnode(c->d.buf, c->d.len)))
reasons++;
}
-
client_destroy
(c);
+
destroy_client
(c);
return;
}
if (c->mode == '?') {
return;
}
if (c->mode == '?') {
@@
-405,7
+405,7
@@
static void do_client_in(int fd, unsigned mode, void *p)
return;
default:
moan("bad client mode `%c'", buf[0]);
return;
default:
moan("bad client mode `%c'", buf[0]);
-
client_destroy
(c);
+
destroy_client
(c);
return;
}
}
return;
}
}
@@
-451,7
+451,7
@@
static void do_accept(int fd, unsigned mode, void *hunoz)
/*----- Main daemon -------------------------------------------------------*/
/*----- Main daemon -------------------------------------------------------*/
-static void done_slip_dribble(dribbler *d, int err, void *
p
)
+static void done_slip_dribble(dribbler *d, int err, void *
hunoz
)
{
if (!err)
reasons--;
{
if (!err)
reasons--;
@@
-461,6
+461,16
@@
static void done_slip_dribble(dribbler *d, int err, void *p)
cripple_dribbler(d);
}
cripple_dribbler(d);
}
+static void close_slip(int fd)
+{
+ switch (slipstate) {
+ case SYNC1: case SYNC2: case START: case BAD: break;
+ default: moan("eof found while processing packet (discarding)"); break;
+ }
+ close(fd); sel_rmfile(&slip_in);
+ reasons--;
+}
+
static void do_slip_in(int fd, unsigned mode, void *hunoz)
{
ssize_t i, n;
static void do_slip_in(int fd, unsigned mode, void *hunoz)
{
ssize_t i, n;
@@
-477,19
+487,7
@@
static void do_slip_in(int fd, unsigned mode, void *hunoz)
for (;;) {
n = read(fd, buf, sizeof(buf));
if (n == 0) {
for (;;) {
n = read(fd, buf, sizeof(buf));
if (n == 0) {
- switch (slipstate) {
- case SYNC1:
- case SYNC2:
- case START:
- case BAD:
- break;
- default:
- moan("eof found while processing packet (discarding)");
- break;
- }
- close(fd);
- sel_rmfile(&slip_in);
- reasons--;
+ close_slip(fd);
return;
} else if (n < 0) {
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
return;
} else if (n < 0) {
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
@@
-572,11
+570,15
@@
static void do_slip_in(int fd, unsigned mode, void *hunoz)
}
}
}
}
+static void slip_term(int n, void *fdp)
+ { close_slip(*(int *)fdp); }
+
static void slipif(void)
{
int fd;
dstr d = DSTR_INIT;
struct sockaddr_un sun;
static void slipif(void)
{
int fd;
dstr d = DSTR_INIT;
struct sockaddr_un sun;
+ sig term;
size_t sz;
/* --- Make the socket --- */
size_t sz;
/* --- Make the socket --- */
@@
-601,6
+603,11
@@
static void slipif(void)
dribble_out = make_dribbler(STDOUT_FILENO, done_slip_dribble, 0);
sel_addfile(&slip_in);
dribble_out = make_dribbler(STDOUT_FILENO, done_slip_dribble, 0);
sel_addfile(&slip_in);
+ sig_init(&sel);
+ sig_add(&term, SIGTERM, slip_term, &fd);
+ sig_add(&term, SIGHUP, slip_term, &fd);
+ sig_add(&term, SIGINT, slip_term, &fd);
+
initqueue(&q_in);
reasons++;
initqueue(&q_in);
reasons++;
@@
-614,7
+621,7
@@
static void slipif(void)
/* --- Main loop --- */
while (reasons) {
/* --- Main loop --- */
while (reasons) {
- if (sel_select(&sel))
+ if (sel_select(&sel)
&& errno != EINTR
)
die(EXIT_FAILURE, "select: %s", strerror(errno));
}
die(EXIT_FAILURE, "select: %s", strerror(errno));
}
@@
-720,7
+727,7
@@
static void conndoconnect(conninfo *c)
static int timerflag;
static int timerflag;
-static void conndrip(struct timeval *tv, void *
p
)
+static void conndrip(struct timeval *tv, void *
hunoz
)
{
conninfo *c, *cc;
{
conninfo *c, *cc;
@@
-759,7
+766,7
@@
static void connloop(void (*connected)(int, conninfo *))
/* --- Sinking (glug glug) --- */
/* --- Sinking (glug glug) --- */
-static void
sink_close
(gobbler *g, int err, void *p)
+static void
close_sink
(gobbler *g, int err, void *p)
{
static char baton[4] = "/-\\|";
static int pos = 0;
{
static char baton[4] = "/-\\|";
static int pos = 0;
@@
-796,14
+803,14
@@
static void sink_connected(int fd, conninfo *c)
connrecycle(c);
return;
}
connrecycle(c);
return;
}
- make_gobbler(fd,
sink_close
, c);
+ make_gobbler(fd,
close_sink
, c);
}
static void sink(void) { connloop(sink_connected); }
/* --- Flooding --- */
}
static void sink(void) { connloop(sink_connected); }
/* --- Flooding --- */
-static void
flood_close
(dribbler *d, int err, void *p)
+static void
close_flood
(dribbler *d, int err, void *p)
{
conninfo *c = p;
{
conninfo *c = p;
@@
-828,7
+835,7
@@
static void flood_connected(int fd, conninfo *c)
for (i = 4; i < FLOOD_PKSZ; i++)
pn->buf[i + 1] = i & 0xff;
seq++;
for (i = 4; i < FLOOD_PKSZ; i++)
pn->buf[i + 1] = i & 0xff;
seq++;
- d = make_dribbler(fd,
flood_close
, c);
+ d = make_dribbler(fd,
close_flood
, c);
enqueue_dribble(d, pn);
}
enqueue_dribble(d, pn);
}