X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/47a7631fc173b345182df04f67523d3b2fe4ba83..858a73afbf5018d74920761f7015ac2e7d3987b6:/endpt.c diff --git a/endpt.c b/endpt.c index 2e51e54..97efef1 100644 --- a/endpt.c +++ b/endpt.c @@ -7,24 +7,24 @@ /*----- 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. */ -#include "fw.h" +#include "fwd.h" /*----- Data structures ---------------------------------------------------*/ @@ -47,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; @@ -121,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)) @@ -139,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); } @@ -167,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: --- * @@ -174,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; @@ -191,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;