/* -*-c-*-
*
- * $Id: socket.c,v 1.10 2003/11/25 14:08:23 mdw Exp $
- *
* Socket source and target definitions
*
* (c) 1999 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of the `fw' port forwarder.
*
* 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,
* 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,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: socket.c,v $
- * Revision 1.10 2003/11/25 14:08:23 mdw
- * Debianization. Socket target options. Internet binding.
- *
- * Revision 1.9 2002/02/23 00:08:00 mdw
- * Fix stupid bugs from the listen(2) change.
- *
- * Revision 1.8 2002/02/22 23:44:44 mdw
- * Call @xfree@ rather than @free@. Add option to change the listen(2)
- * parameter.
- *
- * Revision 1.7 2001/06/22 19:37:00 mdw
- * New @conn_init@ interface.
- *
- * Revision 1.6 2001/02/03 20:30:03 mdw
- * Support re-reading config files on SIGHUP.
- *
- * Revision 1.5 2000/03/23 23:20:42 mdw
- * Remove listener even if connection option isn't SOCKOPT_LIMITED.
- *
- * Revision 1.4 1999/12/22 15:44:25 mdw
- * Fix log message.
- *
- * Revision 1.3 1999/10/22 22:48:36 mdw
- * New connection options: unlimited concurrent connections, and one-shot
- * listening sockets.
- *
- * Revision 1.2 1999/07/27 18:30:53 mdw
- * Various minor portability fixes.
- *
- * Revision 1.1 1999/07/26 23:33:32 mdw
- * New sources and targets.
- *
- */
-
-/*----- Header files ------------------------------------------------------*/
-
-#include "config.h"
-
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#include <mLib/alloc.h>
-#include <mLib/conn.h>
-#include <mLib/dstr.h>
-#include <mLib/fdflags.h>
-#include <mLib/sel.h>
-#include <mLib/sub.h>
-
-#include "addr.h"
-#include "conf.h"
-#include "endpt.h"
#include "fw.h"
-#include "scan.h"
-#include "socket.h"
-#include "target.h"
-
-#include "inet.h"
-#include "un.h"
/*----- Data structures ---------------------------------------------------*/
ss->a = getaddr(sc, ADDR_SRC);
if (ss->a->ops->initsrcopts)
ss->ao = ss->a->ops->initsrcopts();
- else
+ else {
ss->ao = CREATE(addr_opts);
- *ss->ao = gsao;
+ *ss->ao = gsao;
+ }
ss->o = ssgo;
return (&ss->s);
}
dstr_destroy(&d);
}
+ /* --- Confirm the address --- */
+
+ if (ss->a->ops->confirm)
+ ss->a->ops->confirm(ss->a, ADDR_SRC, ss->ao);
+
/* --- Initialize the socket for listening --- */
if ((fd = ss->a->ops->bind(ss->a, ss->ao)) < 0)
st->a = getaddr(sc, ADDR_DEST);
if (st->a->ops->inittargopts)
st->ao = st->a->ops->inittargopts();
- else
+ else {
st->ao = CREATE(addr_opts);
- *st->ao = gtao;
+ *st->ao = gtao;
+ }
dstr_puts(&d, "socket.");
st->a->ops->print(st->a, ADDR_DEST, &d);
st->t.desc = xstrdup(d.buf);
return (&st->t);
}
-/* --- @create@ --- *
- *
- * Arguments: @target *t@ = pointer to target
- * @const char *desc@ = description of connection
- *
- * Returns: Pointer to a created endpoint.
- *
- * Use: Generates a target endpoint for communication.
- */
+/* --- @confirm@ --- */
+
+static void starget_confirm(target *t)
+{
+ starget *st = (starget *)t;
+
+ if (st->a->ops->confirm)
+ st->a->ops->confirm(st->a, ADDR_DEST, st->ao);
+}
+
+/* --- @create@ --- */
static endpt *starget_create(target *t, const char *desc)
{
target_ops starget_ops = {
"socket",
- starget_option, starget_read, starget_create, starget_destroy
+ starget_option, starget_read, starget_confirm,
+ starget_create, starget_destroy
};
/*----- That's all, folks -------------------------------------------------*/