FreeCalypso > hg > themwi-system-sw
annotate sip-manual-out/uas.c @ 207:185225722714
doc: new extended RTP format
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Thu, 06 Apr 2023 21:30:33 -0800 | 
| parents | b51247739897 | 
| children | 
| rev | line source | 
|---|---|
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 71 
d74b545a3c2a
sip-manual-out: new test program
 Mychaela Falconia <falcon@freecalypso.org> parents: 
69diff
changeset | 2 * UAS for sip-manual-out. | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 */ | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 #include <sys/types.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <sys/socket.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <netinet/in.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <stdio.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include <stdlib.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 #include <string.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 #include <strings.h> | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 #include "../libsip/parse.h" | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 #include "../libsip/uas_basic.h" | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 #include "../libsip/out_msg.h" | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 static void | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 unsupported_method(req, ess, sin) | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 struct sip_pkt_rx *req; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 struct uas_parse_hdrs *ess; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 struct sockaddr_in *sin; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 { | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 struct sip_msg_out resp; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 int rc; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 | 
| 71 
d74b545a3c2a
sip-manual-out: new test program
 Mychaela Falconia <falcon@freecalypso.org> parents: 
69diff
changeset | 25 printf("SIP %.16s request: unsupported method\n", req->req_method); | 
| 48 
8117d8ee44a5
sip-in: beginning of INVITE handling
 Mychaela Falconia <falcon@freecalypso.org> parents: 
47diff
changeset | 26 start_response_out_msg(&resp, "501 Method not supported"); | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 rc = add_resp_basic_headers(&resp, ess, req->req_method); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 if (rc < 0) { | 
| 71 
d74b545a3c2a
sip-manual-out: new test program
 Mychaela Falconia <falcon@freecalypso.org> parents: 
69diff
changeset | 29 too_long: fprintf(stderr, | 
| 
d74b545a3c2a
sip-manual-out: new test program
 Mychaela Falconia <falcon@freecalypso.org> parents: 
69diff
changeset | 30 "sending 501 error: response length exceeded\n"); | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 return; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 } | 
| 148 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 33 rc = out_msg_add_header(&resp, "Allow", "INVITE,ACK,BYE"); | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 if (rc < 0) | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 goto too_long; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 out_msg_finish(&resp); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 sip_tx_packet(&resp, sin); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 } | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 void | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 process_sip_request(msg, sin) | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 struct sip_pkt_rx *msg; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 struct sockaddr_in *sin; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 { | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 struct uas_parse_hdrs ess; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 int rc; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 rc = uas_get_basic_headers(msg, &ess); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 if (rc < 0) { | 
| 71 
d74b545a3c2a
sip-manual-out: new test program
 Mychaela Falconia <falcon@freecalypso.org> parents: 
69diff
changeset | 50 printf("SIP %.16s request: bad or missing %s header\n", | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 msg->req_method, ess.error_field); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 return; | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 } | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 /* dispatch by method */ | 
| 148 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 55 if (!strcmp(msg->req_method, "INVITE")) | 
| 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 56 handle_invite_req(msg, &ess, sin); | 
| 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 57 else if (!strcmp(msg->req_method, "ACK")) | 
| 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 58 printf("Received ACK request, swallowing it\n"); | 
| 
b51247739897
sip-manual-out: attempt to play along with re-INVITEs
 Mychaela Falconia <falcon@freecalypso.org> parents: 
147diff
changeset | 59 else if (!strcmp(msg->req_method, "BYE")) | 
| 147 
94b5831c017f
sip-manual-out code: split bye_in.c from uas.c
 Mychaela Falconia <falcon@freecalypso.org> parents: 
75diff
changeset | 60 handle_bye_req(msg, &ess, sin); | 
| 47 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 else | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 unsupported_method(msg, &ess, sin); | 
| 
62f39c7cee15
themwi-sip-in skeleton started
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 } | 
