summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Olsa <Jiri Olsa jolsa@redhat.com>2010-06-02 12:04:33 +0200
committerJiri Olsa <Jiri Olsa jolsa@redhat.com>2010-06-02 12:04:33 +0200
commit1265927c7bcd40c5db213d4a9b42254a008f01d6 (patch)
tree6299da36751625cd5eb09938fd4e5d614d5695d0
parent23367a9167c0ee1efb700a474e1a40ac28856da1 (diff)
downloadtsnif-udp.tar.gz
tsnif-udp.tar.xz
tsnif-udp.zip
aliveudp
-rw-r--r--src/Makefile2
-rw-r--r--src/tsnifd.c30
-rw-r--r--src/tsnifd.h5
3 files changed, 33 insertions, 4 deletions
diff --git a/src/Makefile b/src/Makefile
index fb38799..16fd86f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -3,6 +3,7 @@ INTF_OBJS= \
src/intf.o \
src/fsm.o \
src/trans-libnl.o
+ src/trans-udp.o
STORAGE_OBJS= \
src/storage-mmap.o
@@ -44,6 +45,7 @@ TSNIFD=tsnifd
TSNIFD_OBJS= \
src/tsnifd.o \
src/tsnifd-storage.o \
+ src/tsnifd-udp.o \
$(INTF_OBJS) \
$(STORAGE_OBJS) \
$(DEBUG_OBJS)
diff --git a/src/tsnifd.c b/src/tsnifd.c
index 52393d5..ca8c78d 100644
--- a/src/tsnifd.c
+++ b/src/tsnifd.c
@@ -23,6 +23,10 @@ static struct tsnif_handle handle;
static int foreground = 0;
static int killed = 0;
+static int local = 0;
+static int udp = 1;
+static int udp_port = 4321;
+static int udp_fd = -1;
static int terminal_add(struct tsnif_term *term)
{
@@ -158,6 +162,7 @@ static int get_args(int argc, char **argv)
{"version", no_argument, 0, 'v'},
{"foreground", no_argument, 0, 'f'},
{"store-dir", required_argument, 0, 's'},
+ {"udp", optional_argument, 0, 'u'},
{"version", no_argument, 0, 'V'},
{"verbose", required_argument, 0, 'v'},
{"debug", required_argument, 0, 'd'},
@@ -180,6 +185,12 @@ static int get_args(int argc, char **argv)
storage_dir = optarg;
break;
+ case 'u':
+ udp = 1;
+ if (optarg)
+ udp_port = atoi(optarg);
+ break;
+
case 'V':
print_version(argv[0]);
break;
@@ -218,17 +229,28 @@ int main(int argc, char **argv)
if ((ret = setjmp(env))) {
- if (ret > 1)
+ if (ret > 2)
release_terms();
+ if (udp && (ret > 1))
+ udp_close(udp_fd);
+
tsnif_close(&handle);
printf("done err = %d\n", err);
return err;
}
+ if (udp) {
+ err = udp_init(udp_port);
+ if (err)
+ longjmp(env, 1);
+
+ udp_fd = err;
+ }
+
err = tsnif_list(&handle);
if (err)
- longjmp(env, 1);
+ longjmp(env, 2);
signal(SIGINT, sig_handler);
@@ -250,9 +272,9 @@ int main(int argc, char **argv)
if (FD_ISSET(ts_fd, &rfds)) {
err = tsnif_process(&handle);
if (err)
- longjmp(env, 2);
+ longjmp(env, 3);
}
}
- longjmp(env, 2);
+ longjmp(env, 3);
}
diff --git a/src/tsnifd.h b/src/tsnifd.h
index dcbe30d..931bcb4 100644
--- a/src/tsnifd.h
+++ b/src/tsnifd.h
@@ -20,4 +20,9 @@ int storage_init(struct terminal *t);
int storage_close(struct terminal *t);
int storage_data(struct terminal *t, struct tsnif_data *data);
+int udp_init(int port);
+int udp_close(int socket);
+int udp_data(int socket, struct terminal *t, struct tsnif_data *data);
+int udp_process(int socket);
+
#endif /* TSNIFD_H */