X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/69ba0d40a544c06a7a5ededaedd93941de77bbd8..858a73afbf5018d74920761f7015ac2e7d3987b6:/endpt.c diff --git a/endpt.c b/endpt.c index 19336d6..97efef1 100644 --- a/endpt.c +++ b/endpt.c @@ -1,64 +1,30 @@ /* -*-c-*- * - * $Id: endpt.c,v 1.3 2000/08/01 17:58:25 mdw Exp $ - * * Generic endpoint abstraction * * (c) 1999 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * - * This file is part of the `fw' port forwarder. + * This file is part of the `fwd' port forwarder. * - * `fw' is free software; you can redistribute it and/or modify + * `fwd' 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, or * (at your option) any later version. - * - * `fw' is distributed in the hope that it will be useful, + * + * `fwd' 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 License for more details. - * + * * You should have received a copy of the GNU General Public License - * along with `fw'; if not, write to the Free Software Foundation, + * along with `fwd'; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: endpt.c,v $ - * Revision 1.3 2000/08/01 17:58:25 mdw - * Include missing header. - * - * Revision 1.2 1999/10/22 22:46:17 mdw - * When a non-file endpoint is attached to a file, keep the file endpoint - * open until the nonfile is done. This stops socket sources from - * resetting their connection limits too early. - * - * Revision 1.1 1999/07/26 23:33:01 mdw - * Infrastructure for the new design. - * - */ - -/*----- Header files ------------------------------------------------------*/ - -#include "config.h" - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "chan.h" -#include "endpt.h" +#include "fwd.h" /*----- Data structures ---------------------------------------------------*/ @@ -81,6 +47,7 @@ typedef struct chanpair { typedef struct tango { struct tango *next, *prev; /* A big list of all tangos */ endpt *a, *b; /* The two endpoints */ + char *desc; /* Description of the connection */ unsigned s; /* State of the connection */ chanpair *c; /* The pair of channels */ } tango; @@ -155,6 +122,10 @@ void endpt_kill(endpt *a) */ if (a->f & b->f & EPF_FILE) { + if (t->c->ab.err) + fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ab.err)); + else if (t->c->ba.err) + fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ba.err)); if (t->s & EPS_AB) chan_close(&t->c->ab); if (!(b->f & EPF_PENDING) && (t->s & EPS_BA)) @@ -173,6 +144,8 @@ void endpt_kill(endpt *a) t->prev->next = t->next; else tangos = t->next; + if (t->desc) + xfree(t->desc); DESTROY(t); } @@ -201,6 +174,7 @@ void endpt_killall(void) * * Arguments: @endpt *a@ = pointer to first endpoint * @endpt *b@ = pointer to second endpoint + * @const char *desc@ = description of connection * * Returns: --- * @@ -208,9 +182,13 @@ void endpt_killall(void) * which are already joined; in fact, the the right thing to do * when your endpoint decides that it's not pending any more is * to join it to its partner again. + * + * If the endpoints are already connected then the description + * string is ignored. The endpoint manager takes a copy of the + * string, so you don't need to keep it around. */ -void endpt_join(endpt *a, endpt *b) +void endpt_join(endpt *a, endpt *b, const char *desc) { tango *t = a->t; @@ -225,6 +203,7 @@ void endpt_join(endpt *a, endpt *b) a->t = b->t = t; t->s = EPS_AB | EPS_BA; t->c = 0; + t->desc = xstrdup(desc); if (tangos) tangos->prev = t; tangos = t; @@ -382,6 +361,6 @@ void endpt_join(endpt *a, endpt *b) chan_open(&t->c->ab, a->in->fd, b->out->fd, doneab, t); chan_open(&t->c->ba, b->in->fd, a->out->fd, doneba, t); return; -} +} /*----- That's all, folks -------------------------------------------------*/