FreeCalypso > hg > sipout-test-utils
diff test-voice/user_cmd.c @ 0:35c0d9f03c0a
beginning with sipout-test-voice,
a copy of sip-manual-out from themwi-system-sw
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 03 Mar 2024 23:20:19 -0800 |
parents | |
children | 059b79c9f0c3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-voice/user_cmd.c Sun Mar 03 23:20:19 2024 -0800 @@ -0,0 +1,102 @@ +/* + * In this module we implement stdin command handling, supporting + * user-initiated CANCEL and BYE as well as TFO testing commands. + */ + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> + +static void +pcm_fill_cmd(arg) + char *arg; +{ + char *cp; + unsigned octet; + + for (cp = arg; isspace(*cp); cp++) + ; + if (!isxdigit(*cp)) { +inv_syntax: fprintf(stderr, "error: pcm-fill command invalid syntax\n"); + return; + } + octet = strtoul(cp, &cp, 16); + if (*cp) + goto inv_syntax; + if (octet > 0xFF) { + fprintf(stderr, + "error: pcm-fill octet argument out of range\n"); + return; + } + set_pcm_fill_octet(octet); +} + +static void +tfo_req_cmd(args) + char *args; +{ + char *cp; + unsigned sig, codec; + + for (cp = args; isspace(*cp); cp++) + ; + if (!isdigit(*cp)) { +inv_syntax: fprintf(stderr, "error: tfo-req command invalid syntax\n"); + return; + } + sig = strtoul(cp, &cp, 0); + if (!isspace(*cp)) + goto inv_syntax; + if (sig > 0xFF) { + fprintf(stderr, "error: Sig argument out of range\n"); + return; + } + while (isspace(*cp)) + cp++; + if (!isdigit(*cp)) + goto inv_syntax; + codec = strtoul(cp, &cp, 0); + if (*cp && !isspace(*cp)) + goto inv_syntax; + if (codec > 14) { + fprintf(stderr, "error: Codec_Type argument out of range\n"); + return; + } + while (isspace(*cp)) + cp++; + if (*cp) + goto inv_syntax; + send_tfo_req(sig, codec); +} + +void +select_stdin() +{ + char buf[256], *cp; + + fgets(buf, sizeof buf, stdin); + cp = index(buf, '\n'); + if (cp) { + while (cp > buf && isspace(cp[-1])) + cp--; + *cp = '\0'; + } + for (cp = buf; isspace(*cp); cp++) + ; + if (!*cp) + return; + if (!strcmp(cp, "b") || !strcasecmp(cp, "bye")) + send_bye_req(); + else if (!strcmp(cp, "c") || !strcasecmp(cp, "cancel")) + send_cancel_req(); + else if (!strncmp(cp, "pcm-fill", 8) && isspace(cp[8])) + pcm_fill_cmd(cp + 9); + else if (!strncmp(cp, "tfo-req", 7) && isspace(cp[7])) + tfo_req_cmd(cp + 8); + else if (!strcmp(cp, "tfo-stop")) + stop_tfo_out(); + else + fprintf(stderr, "error: non-understood stdin command\n"); +}