FreeCalypso > hg > themwi-system-sw
view sip-manual-out/user_cmd.c @ 202:f3164f732b84
sip-manual-out: add tfo-stop command
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 02 Apr 2023 18:05:30 -0800 |
parents | a3d71489672f |
children | b3aeacc5722a |
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 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, "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"); }