FreeCalypso > hg > themwi-system-sw
view sip-manual-out/user_cmd.c @ 266:556cd78f750a
sip-out: require explicit routes to made-up N9X area codes
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 13 Nov 2023 15:18:09 -0800 |
parents | b3aeacc5722a |
children |
line wrap: on
line source
/* * 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"); }