summaryrefslogtreecommitdiffstats
path: root/share/examples/isdn/i4brunppp/i4brunppp.c
diff options
context:
space:
mode:
Diffstat (limited to 'share/examples/isdn/i4brunppp/i4brunppp.c')
-rw-r--r--share/examples/isdn/i4brunppp/i4brunppp.c224
1 files changed, 0 insertions, 224 deletions
diff --git a/share/examples/isdn/i4brunppp/i4brunppp.c b/share/examples/isdn/i4brunppp/i4brunppp.c
deleted file mode 100644
index 3c8b6e7..0000000
--- a/share/examples/isdn/i4brunppp/i4brunppp.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 1999, 2001 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4brunppp - run userland ppp for incoming call from rbch i/f
- * ------------------------------------------------------------
- *
- * $FreeBSD$
- *
- * last edit-date: [Sat Jul 21 13:38:10 2001]
- *
- *---------------------------------------------------------------------------
- *
- * BEWARE: HIGHLY EXPERIMENTAL!
- * ---------------------------
- *
- * This program is used in conjunction with an isdnd.rc entry similar to
- *
- * regexpr = "ULPPP.*call active" # look for matches in log messages
- * regprog = i4brunppp # execute program when match is found
- *
- * this one. It _must_ be put into /etc/isdn!
- * When an active call is detected, isdnd fires off i4brunppp, which attaches
- * the rbch device used to stdin/stdout and then runs ppp which is given the
- * "-direct" command and the string "inc_rbchX" (where X is the i4brbch unit
- * number) as arguments.
- *
- *---------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <syslog.h>
-#include <errno.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_rbch_ioctl.h>
-
-#define I4BDEVICE "/dev/i4b"
-
-#define PPPPROG "/usr/sbin/ppp"
-#define PPPNAME "ppp"
-#define PPPARG1 "-direct"
-#define PPPLABEL "inc_"
-
-#define VERIFYSTRING "call active"
-#define DEVSTRING "rbch"
-
-#define PPPDEBUG
-
-/*---------------------------------------------------------------------------*
- * program entry
- *---------------------------------------------------------------------------*/
-int
-main(int argc, char **argv)
-{
- char buffer[256];
- int rbch_fd;
- char *p = "DeadPointer";
- int found;
- int i;
-
-#ifdef PPPDEBUG
- FILE *dfp;
- time_t tim;
- register struct tm *tp;
-#endif
-
- /* open syslog */
-
- (void)openlog("i4brunppp", LOG_PID|LOG_CONS|LOG_NDELAY, LOG_USER);
-
-#ifdef PPPDEBUG
-
- /* open debug log */
-
- if((dfp = fopen("/tmp/i4brunppp-debug.log", "a")) == NULL)
- {
- syslog(LOG_INFO, "cannot open logfile: %s", strerror(errno));
- exit(1);
- }
-
- tim = time(NULL);
- tp = localtime(&tim);
- strftime(buffer, 40, I4B_TIME_FORMAT, tp);
- fprintf(dfp, "\n=================== %s ===================\n", buffer);
-
- for(i=0; i < argc; i++)
- fprintf(dfp, "\t%s\n", argv[i]);
-#endif
-
- /* check if this is the right message */
-
- found = 0;
-
- for(i=0; i < argc; i++)
- {
- if((strstr(argv[i], VERIFYSTRING)) != NULL)
- {
- found = 1;
- break;
- }
- }
-
- if(found == 0)
- {
-#ifdef PPPDEBUG
- fprintf(dfp, "did not found [%s], exit\n", VERIFYSTRING);
-#endif
- exit(0);
- }
-
- found = 0;
-
- /* check if we got a good device name */
-
- for(; i < argc; i++)
- {
- if((p = strstr(argv[i], DEVSTRING)) != NULL)
- {
- found = 1;
- break;
- }
- }
-
- if(found == 0)
- {
-#ifdef PPPDEBUG
- fprintf(dfp, "did not found [%s], exit\n", DEVSTRING);
-#endif
- exit(0);
- }
-
- /* everything ok, now prepare for running ppp */
-
- /* close all file descriptors */
-
- i = getdtablesize();
-
- for(;i >= 0; i--)
- if (i != 2)
- close(i);
-
- /* fiddle a terminating zero after the rbch unit number */
-
- p += strlen(DEVSTRING);
-
- if(isdigit(*p) && isdigit(*(p+1)))
- *(p+2) = '\0';
- else
- *(p+1) = '\0';
-
- /* construct /dev/i4brbchX device name */
-
- sprintf(buffer, "%s%s%s", I4BDEVICE, DEVSTRING, p);
-
- /* open the rbch device as fd 0 = stdin */
-
- rbch_fd = open(buffer, O_RDWR);
-
- if(rbch_fd != 0)
- {
- if(rbch_fd < 0)
- syslog(LOG_INFO, "cannot open %s: %s", buffer, strerror(errno));
- else
- syslog(LOG_INFO, "cannot open %s as fd 0 (is %d): %s", buffer, rbch_fd, strerror(errno));
- exit(1);
- }
-
- /* dup rbch device fd as fd 1 = stdout */
-
- if((i = dup(rbch_fd)) != 1)
- {
- if(i < 0)
- syslog(LOG_INFO, "cannot dup rbch_fd: %s", strerror(errno));
- else
- syslog(LOG_INFO, "cannot dup rbch as fd 1 (is %d): %s", i, strerror(errno));
- exit(1);
- }
-
- /* construct the label for ppp's ppp.conf file */
-
- sprintf(buffer, "%s%s%s", PPPLABEL, DEVSTRING, p);
-
- syslog(LOG_INFO, "executing: %s %s %s %s", PPPPROG, PPPNAME, PPPARG1, buffer);
-
- /* execute ppp */
-
- if((execl(PPPPROG, PPPNAME, PPPARG1, buffer, NULL)) == -1)
- {
- syslog(LOG_INFO, "cannot exec: %s", strerror(errno));
- exit(1);
- }
- syslog(LOG_INFO, "finished: %s %s %s %s", PPPPROG, PPPNAME, PPPARG1, buffer);
- return(0);
-}
-
-/* EOF */
OpenPOWER on IntegriCloud