diff options
Diffstat (limited to 'contrib/ngatm')
-rw-r--r-- | contrib/ngatm/sscop/common.c | 27 | ||||
-rw-r--r-- | contrib/ngatm/sscop/common.h | 10 | ||||
-rw-r--r-- | contrib/ngatm/sscop/sscop_main.c | 45 |
3 files changed, 80 insertions, 2 deletions
diff --git a/contrib/ngatm/sscop/common.c b/contrib/ngatm/sscop/common.c index 83af901..779986d 100644 --- a/contrib/ngatm/sscop/common.c +++ b/contrib/ngatm/sscop/common.c @@ -44,7 +44,6 @@ #include <assert.h> #include <fcntl.h> #include <err.h> -#include <isc/eventlib.h> #include <netnatm/unimsg.h> #include <netnatm/saal/sscop.h> @@ -64,7 +63,9 @@ int user_fd; int loose; int user_out_fd; u_int verbose; +#ifndef USE_LIBBEGEMOT evContext evctx; +#endif evFileID sscop_h; evFileID user_h; @@ -153,7 +154,11 @@ proto_msgin(int fd __unused) if (got == 0) { eof: +#ifdef USE_LIBBEGEMOT + poll_unregister(sscop_h); +#else evDeselectFD(evctx, sscop_h); +#endif (void)close(sscop_fd); sscop_fd = -1; if (m != NULL) @@ -212,7 +217,11 @@ user_msgin(int fd __unused) if (size == 0) { eof: +#ifdef USE_LIBBEGEMOT + poll_unregister(user_h); +#else evDeselectFD(evctx, user_h); +#endif if (m != NULL) uni_msg_destroy(m); VERBOSE(("EOF on user connection")); @@ -384,9 +393,14 @@ parse_param(struct sscop_param *param, u_int *pmask, int opt, char *arg) abort(); } +#ifdef USE_LIBBEGEMOT +static void +tfunc(int tid __unused, void *uap) +#else static void tfunc(evContext ctx __unused, void *uap, struct timespec due __unused, struct timespec inter __unused) +#endif { struct timer *t = uap; @@ -402,18 +416,25 @@ sscop_start_timer(struct sscop *sscop, void *arg __unused, u_int msec, void (*func)(void *)) { struct timer *t; +#ifndef USE_LIBBEGEMOT struct timespec due; +#endif if ((t = malloc(sizeof(*t))) == NULL) err(1, NULL); t->sscop = sscop; t->func = func; +#ifdef USE_LIBBEGEMOT + if ((t->id = poll_start_timer(msec, 0, tfunc, t)) == -1) + err(1, "cannot start timer"); +#else due = evAddTime(evNowTime(), evConsTime((time_t)msec/1000, (long)(msec%1000)*1000)); if (evSetTimer(evctx, tfunc, t, due, evConsTime(0, 0), &t->id)) err(1, "cannot start timer"); +#endif return (t); } @@ -426,6 +447,10 @@ sscop_stop_timer(struct sscop *sscop __unused, void *arg __unused, void *tp) { struct timer *t = tp; +#ifdef USE_LIBBEGEMOT + poll_stop_timer(t->id); +#else evClearTimer(evctx, t->id); +#endif free(t); } diff --git a/contrib/ngatm/sscop/common.h b/contrib/ngatm/sscop/common.h index 96cbb54..35f54f9 100644 --- a/contrib/ngatm/sscop/common.h +++ b/contrib/ngatm/sscop/common.h @@ -33,6 +33,14 @@ #ifndef _SAAL_COMMON_H_ #define _SAAL_COMMON_H_ +#ifdef USE_LIBBEGEMOT +#include <rpoll.h> +#define evFileID int +#define evTimerID int +#else +#include <isc/eventlib.h> +#endif + /* * Writes to a pipe must be in messages (if we don't use framing). * It is not clear, what is the maximum message size for this. It seems @@ -49,7 +57,9 @@ extern int user_fd; /* file descriptor for USER */ extern int loose; /* loose messages */ extern int user_out_fd; /* file descriptor for output to user */ extern u_int verbose; /* talk to me */ +#ifndef USE_LIBBEGEMOT extern evContext evctx; +#endif extern evFileID sscop_h; extern evFileID user_h; diff --git a/contrib/ngatm/sscop/sscop_main.c b/contrib/ngatm/sscop/sscop_main.c index 330ca59..59ef558 100644 --- a/contrib/ngatm/sscop/sscop_main.c +++ b/contrib/ngatm/sscop/sscop_main.c @@ -41,7 +41,6 @@ #include <signal.h> #include <assert.h> #include <err.h> -#include <isc/eventlib.h> #include <netnatm/unimsg.h> #include <netnatm/saal/sscop.h> @@ -95,8 +94,13 @@ static const struct sscop_funcs sscop_funcs = { * SSCOP file descriptor is ready. Allocate and read one message * and dispatch a signal. */ +#ifdef USE_LIBBEGEMOT +static void +proto_infunc(int fd, int mask __unused, void *uap) +#else static void proto_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused) +#endif { struct uni_msg *m; @@ -107,8 +111,13 @@ proto_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused) /* * User input. Allocate and read message and dispatch signal. */ +#ifdef USE_LIBBEGEMOT +static void +user_infunc(int fd, int mask __unused, void *uap) +#else static void user_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused) +#endif { struct uni_msg *m; @@ -134,7 +143,9 @@ main(int argc, char *argv[]) struct sigaction sa; int wait = 0; u_int mask; +#ifndef USE_LIBBEGEMOT evEvent ev; +#endif /* * Default is to have the USER on stdin and SSCOP on stdout @@ -209,8 +220,10 @@ main(int argc, char *argv[]) if(user_out_fd < 0) user_out_fd = user_fd; +#ifndef USE_LIBBEGEMOT if (evCreate(&evctx)) err(1, "evCreate"); +#endif /* * Catch USR1 @@ -233,8 +246,14 @@ main(int argc, char *argv[]) /* * Register sscop fd */ +#ifdef USE_LIBBEGEMOT + if ((sscop_h = poll_register(sscop_fd, proto_infunc, + sscop, POLL_IN)) == -1) + err(1, "can't select on sscop fd"); +#else if (evSelectFD(evctx, sscop_fd, EV_READ, proto_infunc, sscop, &sscop_h)) err(1, "can't select on sscop fd"); +#endif /* * if we are active - send establish request @@ -246,11 +265,15 @@ main(int argc, char *argv[]) * Run protocol until it get's ready */ while (sscop_fd >= 0 && !ready) { +#ifdef USE_LIBBEGEMOT + poll_dispatch(1); +#else if (evGetNext(evctx, &ev, EV_WAIT) == 0) { if (evDispatch(evctx, ev)) err(1, "dispatch event"); } else if (errno != EINTR) err(1, "get event"); +#endif } /* @@ -265,15 +288,23 @@ main(int argc, char *argv[]) VERBOSE(("READY - starting data transfer")); if (!unidir && +#ifdef USE_LIBBEGEMOT + ((user_h = poll_register(user_fd, user_infunc, sscop, POLL_IN)) == -1)) +#else evSelectFD(evctx, user_fd, EV_READ, user_infunc, sscop, &user_h)) +#endif err(1, "can't select on sscop fd"); while (!sigusr1 && sscop_fd >= 0) { +#ifdef USE_LIBBEGEMOT + poll_dispatch(1); +#else if (evGetNext(evctx, &ev, EV_WAIT) == 0) { if (evDispatch(evctx, ev)) err(1, "dispatch event"); } else if (errno != EINTR) err(1, "get event"); +#endif } if (sigusr1 && sscop_fd >= 0) { @@ -282,11 +313,15 @@ main(int argc, char *argv[]) */ sscop_aasig(sscop, SSCOP_RELEASE_request, NULL, 0); while (!finished && sscop_fd >= 0) { +#ifdef USE_LIBBEGEMOT + poll_dispatch(1); +#else if (evGetNext(evctx, &ev, EV_WAIT) == 0) { if (evDispatch(evctx, ev)) err(1, "dispatch event"); } else if (errno != EINTR) err(1, "get event"); +#endif } } @@ -333,7 +368,11 @@ sscop_send_upper(struct sscop *sscop, void *arg __unused, enum sscop_aasig sig, case SSCOP_RELEASE_indication: if (end_at_eof) { VERBOSE((" ... exiting")); +#ifdef USE_LIBBEGEMOT + poll_unregister(sscop_h); +#else evDeselectFD(evctx, sscop_h); +#endif (void)close(sscop_fd); sscop_fd = -1; } @@ -345,7 +384,11 @@ sscop_send_upper(struct sscop *sscop, void *arg __unused, enum sscop_aasig sig, case SSCOP_RELEASE_confirm: if (end_at_eof) { VERBOSE((" ... exiting")); +#ifdef USE_LIBBEGEMOT + poll_unregister(sscop_h); +#else evDeselectFD(evctx, sscop_h); +#endif (void)close(sscop_fd); sscop_fd = -1; } |