FreeCalypso > hg > themwi-system-sw
view libsip/resp_ident.c @ 199:e6c7ced3c031
mgw: accept zero-length RTP payload as BFI
Mainline OsmoBTS now has an option (rtp continuous-streaming)
that causes it to emit an RTP packet every 20 ms without gaps,
sending a BFI marker in the form of zero-length RTP payload
when it has nothing else to send. These codec-independent
BFI markers don't indicate TAF, but this provision is a good
start. Accept this BFI packet format in themwi-mgw.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 29 Mar 2023 20:23:43 -0800 |
parents | ff5e96162430 |
children |
line wrap: on
line source
/* * In this module we implement an essential step in the process * of handling incoming SIP response messages: extracting Call-ID * and CSeq headers and preparsing the latter, providing key info * for matching these incoming responses with call state and * with outstanding UAC requests. */ #include <ctype.h> #include <string.h> #include <strings.h> #include <stdio.h> #include <stdlib.h> #include "parse.h" #include "resp_ident.h" extern char *get_single_header(); sip_resp_extract_ident(msg, id) struct sip_pkt_rx *msg; struct sip_resp_ident *id; { char *hval, *cp; int dup_flag = 0; hval = get_single_header(msg, "Call-ID", "i", &dup_flag); if (!hval || dup_flag) { id->error_field = "Call-ID"; return(-1); } id->call_id = hval; hval = get_single_header(msg, "CSeq", (char *) 0, &dup_flag); if (!hval || dup_flag) { bad_cseq: id->error_field = "CSeq"; return(-1); } if (!isdigit(*hval)) goto bad_cseq; id->cseq_num = strtoul(hval, &cp, 10); if (!isspace(*cp)) goto bad_cseq; while (isspace(*cp)) cp++; if (!isupper(*cp)) goto bad_cseq; id->cseq_method = cp; while (isalnum(*cp)) cp++; if (*cp) goto bad_cseq; return(0); }