annotate libsip/resp_ident.c @ 124:7e04d28fae8b

sip-in: default use-100rel to no BulkVS servers act badly when we send a reliable 180 Ringing response to an incoming call, even though they advertise 100rel support in the Supported header in the INVITE packet, and we probably won't be implementing 100rel for outbound because doing per-the-spec PRACK as a UAC is just too burdensome. Therefore, we need to consider 100rel extension as not-really-supported in themwi-system-sw.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 01 Oct 2022 15:54:50 -0800
parents ff5e96162430
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
93
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * In this module we implement an essential step in the process
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * of handling incoming SIP response messages: extracting Call-ID
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * and CSeq headers and preparsing the latter, providing key info
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * for matching these incoming responses with call state and
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * with outstanding UAC requests.
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 */
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <ctype.h>
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <string.h>
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <strings.h>
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdio.h>
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <stdlib.h>
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "parse.h"
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "resp_ident.h"
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 extern char *get_single_header();
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 sip_resp_extract_ident(msg, id)
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 struct sip_pkt_rx *msg;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 struct sip_resp_ident *id;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 {
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 char *hval, *cp;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 int dup_flag = 0;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 hval = get_single_header(msg, "Call-ID", "i", &dup_flag);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 if (!hval || dup_flag) {
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 id->error_field = "Call-ID";
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 return(-1);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 }
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 id->call_id = hval;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 hval = get_single_header(msg, "CSeq", (char *) 0, &dup_flag);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 if (!hval || dup_flag) {
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 bad_cseq: id->error_field = "CSeq";
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 return(-1);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 if (!isdigit(*hval))
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 goto bad_cseq;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 id->cseq_num = strtoul(hval, &cp, 10);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 if (!isspace(*cp))
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 goto bad_cseq;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 while (isspace(*cp))
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 cp++;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (!isupper(*cp))
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 goto bad_cseq;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 id->cseq_method = cp;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 while (isalnum(*cp))
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 cp++;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (*cp)
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 goto bad_cseq;
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 return(0);
ff5e96162430 libsip: new function for extracting Call-ID and CSeq from responses
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 }