summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Olsa <Jiri Olsa jolsa@redhat.com>2010-03-25 17:06:13 +0100
committerJiri Olsa <Jiri Olsa jolsa@redhat.com>2010-03-25 17:06:13 +0100
commit6ebd057e3ee33870481defeb2bacabe995e6e354 (patch)
tree86595da6af9a136f5814f50f62e53da995a41f48
parent47b12c907b2f5d9a054909fb9acc2cab62f0ed8c (diff)
downloadtsnif-6ebd057e3ee33870481defeb2bacabe995e6e354.tar.gz
tsnif-6ebd057e3ee33870481defeb2bacabe995e6e354.tar.xz
tsnif-6ebd057e3ee33870481defeb2bacabe995e6e354.zip
adding user input support for tsnif
- user switch commands for pty channels - user command to quit the program
-rw-r--r--src/tsnif.c59
1 files changed, 53 insertions, 6 deletions
diff --git a/src/tsnif.c b/src/tsnif.c
index 9330d15..d2bcc41 100644
--- a/src/tsnif.c
+++ b/src/tsnif.c
@@ -17,15 +17,31 @@ struct tsnif_term term;
static int killed = 0;
static int type = -1;
static int idx = -1;
+static int display_slave = 1;
+static int display_master = 0;
+static int display_pty(int flags)
+{
+ if ((flags == TSNIF_FLAGS_PTY_SLAVE) &&
+ !display_slave)
+ return 0;
+
+ if ((flags == TSNIF_FLAGS_PTY_MASTER) &&
+ !display_master)
+ return 0;
+
+ return 1;
+}
static int data_cb(struct tsnif_term* term, struct tsnif_data *data)
{
- if (data->flags == TSNIF_FLAGS_PTY_SLAVE) {
- fwrite(data->ptr, data->len, 1, stdout);
- fflush(NULL);
- }
+ /* rule out unwanted PTY channel */
+ if ((term->type == TSNIF_TYPE_PTY) &&
+ !display_pty(data->flags))
+ return 0;
+ fwrite(data->ptr, data->len, 1, stdout);
+ fflush(NULL);
return 0;
}
@@ -149,6 +165,31 @@ static int get_args(int argc, char **argv)
return 0;
}
+static int process_input(void)
+{
+ int c = getchar();
+ switch(c) {
+ case 's':
+ display_slave = !display_slave;
+ break;
+
+ case 'm':
+ display_master = !display_master;
+ break;
+
+ case 'q':
+ return -1;
+
+ default:
+ return 0;
+ }
+
+ printf("\ntsnif display [%s%s]\n",
+ display_master ? "M" : "",
+ display_slave ? "S" : "");
+ return 0;
+}
+
int main(int argc, char **argv)
{
int err, ret;
@@ -180,7 +221,6 @@ int main(int argc, char **argv)
if (err)
longjmp(env, 1);
-
set_term(0);
signal(SIGINT, sig_handler);
@@ -188,9 +228,11 @@ int main(int argc, char **argv)
fd_set rfds;
struct timeval tv = { 1, 0};
int ts_fd = tsnif_fd(&handle), ret;
+ int in_fd = 0;
FD_ZERO(&rfds);
FD_SET(ts_fd, &rfds);
+ FD_SET(in_fd, &rfds);
ret = select(ts_fd + 1, &rfds, NULL, NULL, &tv);
if (ret == -1) {
@@ -199,7 +241,12 @@ int main(int argc, char **argv)
} else if (!ret)
continue;
- if (tsnif_process(&handle))
+ if (FD_ISSET(ts_fd, &rfds) &&
+ tsnif_process(&handle))
+ longjmp(env, 2);
+
+ if (FD_ISSET(in_fd, &rfds) &&
+ process_input())
longjmp(env, 2);
}