mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
res_pjsip_rfc3326.c: Account for more than one 'Reason' header
ASTERISK-27741 Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf
This commit is contained in:
committed by
Richard Mudgett
parent
0a96cd082b
commit
92158b7f37
@@ -35,32 +35,35 @@
|
||||
|
||||
static void rfc3326_use_reason_header(struct ast_sip_session *session, struct pjsip_rx_data *rdata)
|
||||
{
|
||||
const pj_str_t str_reason = { "Reason", 6 };
|
||||
pjsip_generic_string_hdr *header = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &str_reason, NULL);
|
||||
char buf[20], *cause, *text;
|
||||
static const pj_str_t str_reason = { "Reason", 6 };
|
||||
pjsip_generic_string_hdr *header;
|
||||
char buf[20];
|
||||
char *cause;
|
||||
char *text;
|
||||
int code;
|
||||
|
||||
if (!header) {
|
||||
return;
|
||||
header = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &str_reason, NULL);
|
||||
for (; header;
|
||||
header = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &str_reason, header->next)) {
|
||||
ast_copy_pj_str(buf, &header->hvalue, sizeof(buf));
|
||||
cause = ast_skip_blanks(buf);
|
||||
|
||||
if (strncasecmp(cause, "Q.850", 5) || !(cause = strstr(cause, "cause="))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If text is present get rid of it */
|
||||
if ((text = strstr(cause, ";"))) {
|
||||
*text = '\0';
|
||||
}
|
||||
|
||||
if (sscanf(cause, "cause=%30d", &code) != 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast_channel_hangupcause_set(session->channel, code & 0x7f);
|
||||
break;
|
||||
}
|
||||
|
||||
ast_copy_pj_str(buf, &header->hvalue, sizeof(buf));
|
||||
cause = ast_skip_blanks(buf);
|
||||
|
||||
if (strncasecmp(cause, "Q.850", 5) || !(cause = strstr(cause, "cause="))) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* If text is present get rid of it */
|
||||
if ((text = strstr(cause, ";"))) {
|
||||
*text = '\0';
|
||||
}
|
||||
|
||||
if (sscanf(cause, "cause=%30d", &code) != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
ast_channel_hangupcause_set(session->channel, code & 0x7f);
|
||||
}
|
||||
|
||||
static int rfc3326_incoming_request(struct ast_sip_session *session, struct pjsip_rx_data *rdata)
|
||||
|
Reference in New Issue
Block a user