~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
6a8a4c0
..
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;
@@
-461,6
+461,16
@@
static void done_slip_dribble(dribbler *d, int err, void *hunoz)
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));
}