FreeCalypso > hg > themwi-system-sw
comparison sip-in/bye_out.c @ 82:ff4b76a107a1
sip-in: process responses as UAC for BYE
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Tue, 20 Sep 2022 20:33:09 -0800 |
| parents | 915f0f397fb6 |
| children | a9137bdb6047 |
comparison
equal
deleted
inserted
replaced
| 81:915f0f397fb6 | 82:ff4b76a107a1 |
|---|---|
| 13 #include <strings.h> | 13 #include <strings.h> |
| 14 #include <syslog.h> | 14 #include <syslog.h> |
| 15 #include "../libsip/parse.h" | 15 #include "../libsip/parse.h" |
| 16 #include "../libsip/out_msg.h" | 16 #include "../libsip/out_msg.h" |
| 17 #include "call.h" | 17 #include "call.h" |
| 18 | |
| 19 extern char *get_single_header(); | |
| 20 extern struct call *find_call_by_sip_id(); | |
| 18 | 21 |
| 19 extern struct in_addr sip_bind_ip; | 22 extern struct in_addr sip_bind_ip; |
| 20 extern unsigned sip_bind_port; | 23 extern unsigned sip_bind_port; |
| 21 | 24 |
| 22 fill_bye_out_msg(msg, call) | 25 fill_bye_out_msg(msg, call) |
| 70 } | 73 } |
| 71 sip_tx_packet(&msg, &call->udp_sin); | 74 sip_tx_packet(&msg, &call->udp_sin); |
| 72 call->sip_state = SIP_STATE_BYE_SENT; | 75 call->sip_state = SIP_STATE_BYE_SENT; |
| 73 call->sip_tx_count = 1; | 76 call->sip_tx_count = 1; |
| 74 } | 77 } |
| 78 | |
| 79 void | |
| 80 process_sip_response(msg, sin) | |
| 81 struct sip_pkt_rx *msg; | |
| 82 struct sockaddr_in *sin; | |
| 83 { | |
| 84 char *call_id_hdr, *cseq_hdr; | |
| 85 struct call *call; | |
| 86 | |
| 87 call_id_hdr = get_single_header(msg, "Call-ID", "i", (int *) 0); | |
| 88 if (!call_id_hdr) | |
| 89 return; | |
| 90 call = find_call_by_sip_id(call_id_hdr); | |
| 91 if (!call) | |
| 92 return; | |
| 93 cseq_hdr = get_single_header(msg, "CSeq", (char *) 0, (int *) 0); | |
| 94 if (!cseq_hdr) | |
| 95 return; | |
| 96 if (strcmp(cseq_hdr, "1 BYE")) { | |
| 97 syslog(LOG_ERR, | |
| 98 "UAC received response with unknown CSeq %.32s", | |
| 99 cseq_hdr); | |
| 100 return; | |
| 101 } | |
| 102 if (msg->status_code < 200) | |
| 103 return; | |
| 104 if (call->sip_state == SIP_STATE_BYE_SENT) | |
| 105 call->sip_state = SIP_STATE_ENDED; | |
| 106 } |
