|
|
|
|
@ -3674,16 +3674,16 @@ static int __sip_xmit(struct sip_pvt *p, struct ast_str *data)
|
|
|
|
|
int res = 0;
|
|
|
|
|
const struct ast_sockaddr *dst = sip_real_dst(p);
|
|
|
|
|
|
|
|
|
|
ast_debug(2, "Trying to put '%.11s' onto %s socket destined for %s\n", data->str, get_transport_pvt(p), ast_sockaddr_stringify(dst));
|
|
|
|
|
ast_debug(2, "Trying to put '%.11s' onto %s socket destined for %s\n", ast_str_buffer(data), get_transport_pvt(p), ast_sockaddr_stringify(dst));
|
|
|
|
|
|
|
|
|
|
if (sip_prepare_socket(p) < 0) {
|
|
|
|
|
return XMIT_ERROR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (p->socket.type == SIP_TRANSPORT_UDP) {
|
|
|
|
|
res = ast_sendto(p->socket.fd, data->str, ast_str_strlen(data), 0, dst);
|
|
|
|
|
res = ast_sendto(p->socket.fd, ast_str_buffer(data), ast_str_strlen(data), 0, dst);
|
|
|
|
|
} else if (p->socket.tcptls_session) {
|
|
|
|
|
res = sip_tcptls_write(p->socket.tcptls_session, data->str, ast_str_strlen(data));
|
|
|
|
|
res = sip_tcptls_write(p->socket.tcptls_session, ast_str_buffer(data), ast_str_strlen(data));
|
|
|
|
|
} else {
|
|
|
|
|
ast_debug(2, "Socket type is TCP but no tcptls_session is present to write to\n");
|
|
|
|
|
return XMIT_ERROR;
|
|
|
|
|
@ -3941,10 +3941,10 @@ static int retrans_pkt(const void *data)
|
|
|
|
|
ast_verbose("Retransmitting #%d (%s) to %s:\n%s\n---\n",
|
|
|
|
|
pkt->retrans, sip_nat_mode(pkt->owner),
|
|
|
|
|
ast_sockaddr_stringify(dst),
|
|
|
|
|
pkt->data->str);
|
|
|
|
|
ast_str_buffer(pkt->data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
append_history(pkt->owner, "ReTx", "%d %s", reschedule, pkt->data->str);
|
|
|
|
|
append_history(pkt->owner, "ReTx", "%d %s", reschedule, ast_str_buffer(pkt->data));
|
|
|
|
|
xmitres = __sip_xmit(pkt->owner, pkt->data);
|
|
|
|
|
|
|
|
|
|
/* If there was no error during the network transmission, schedule the next retransmission,
|
|
|
|
|
@ -4102,7 +4102,7 @@ static enum sip_result __sip_reliable_xmit(struct sip_pvt *p, uint32_t seqno, in
|
|
|
|
|
ast_free(pkt);
|
|
|
|
|
return AST_FAILURE;
|
|
|
|
|
}
|
|
|
|
|
ast_str_set(&pkt->data, 0, "%s%s", data->str, "\0");
|
|
|
|
|
ast_str_set(&pkt->data, 0, "%s%s", ast_str_buffer(data), "\0");
|
|
|
|
|
/* copy other parameters from the caller */
|
|
|
|
|
pkt->method = sipmethod;
|
|
|
|
|
pkt->seqno = seqno;
|
|
|
|
|
@ -4375,7 +4375,7 @@ void __sip_pretend_ack(struct sip_pvt *p)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
cur = p->packets;
|
|
|
|
|
method = (cur->method) ? cur->method : find_sip_method(cur->data->str);
|
|
|
|
|
method = (cur->method) ? cur->method : find_sip_method(ast_str_buffer(cur->data));
|
|
|
|
|
__sip_ack(p, cur->seqno, cur->is_resp, method);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -4388,7 +4388,7 @@ int __sip_semi_ack(struct sip_pvt *p, uint32_t seqno, int resp, int sipmethod)
|
|
|
|
|
|
|
|
|
|
for (cur = p->packets; cur; cur = cur->next) {
|
|
|
|
|
if (cur->seqno == seqno && cur->is_resp == resp &&
|
|
|
|
|
(cur->is_resp || method_match(sipmethod, cur->data->str))) {
|
|
|
|
|
(cur->is_resp || method_match(sipmethod, ast_str_buffer(cur->data)))) {
|
|
|
|
|
/* this is our baby */
|
|
|
|
|
if (cur->retransid > -1) {
|
|
|
|
|
if (sipdebug)
|
|
|
|
|
@ -4502,12 +4502,12 @@ static int send_response(struct sip_pvt *p, struct sip_request *req, enum xmitty
|
|
|
|
|
ast_verbose("\n<--- %sTransmitting (%s) to %s --->\n%s\n<------------>\n",
|
|
|
|
|
reliable ? "Reliably " : "", sip_nat_mode(p),
|
|
|
|
|
ast_sockaddr_stringify(dst),
|
|
|
|
|
req->data->str);
|
|
|
|
|
ast_str_buffer(req->data));
|
|
|
|
|
}
|
|
|
|
|
if (p->do_history) {
|
|
|
|
|
struct sip_request tmp = { .rlPart1 = 0, };
|
|
|
|
|
parse_copy(&tmp, req);
|
|
|
|
|
append_history(p, reliable ? "TxRespRel" : "TxResp", "%s / %s - %s", tmp.data->str, sip_get_header(&tmp, "CSeq"),
|
|
|
|
|
append_history(p, reliable ? "TxRespRel" : "TxResp", "%s / %s - %s", ast_str_buffer(tmp.data), sip_get_header(&tmp, "CSeq"),
|
|
|
|
|
(tmp.method == SIP_RESPONSE || tmp.method == SIP_UNKNOWN) ? REQ_OFFSET_TO_STR(&tmp, rlPart2) : sip_methods[tmp.method].text);
|
|
|
|
|
deinit_req(&tmp);
|
|
|
|
|
}
|
|
|
|
|
@ -4547,15 +4547,15 @@ static int send_request(struct sip_pvt *p, struct sip_request *req, enum xmittyp
|
|
|
|
|
add_blank(req);
|
|
|
|
|
if (sip_debug_test_pvt(p)) {
|
|
|
|
|
if (ast_test_flag(&p->flags[0], SIP_NAT_FORCE_RPORT)) {
|
|
|
|
|
ast_verbose("%sTransmitting (NAT) to %s:\n%s\n---\n", reliable ? "Reliably " : "", ast_sockaddr_stringify(&p->recv), req->data->str);
|
|
|
|
|
ast_verbose("%sTransmitting (NAT) to %s:\n%s\n---\n", reliable ? "Reliably " : "", ast_sockaddr_stringify(&p->recv), ast_str_buffer(req->data));
|
|
|
|
|
} else {
|
|
|
|
|
ast_verbose("%sTransmitting (no NAT) to %s:\n%s\n---\n", reliable ? "Reliably " : "", ast_sockaddr_stringify(&p->sa), req->data->str);
|
|
|
|
|
ast_verbose("%sTransmitting (no NAT) to %s:\n%s\n---\n", reliable ? "Reliably " : "", ast_sockaddr_stringify(&p->sa), ast_str_buffer(req->data));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (p->do_history) {
|
|
|
|
|
struct sip_request tmp = { .rlPart1 = 0, };
|
|
|
|
|
parse_copy(&tmp, req);
|
|
|
|
|
append_history(p, reliable ? "TxReqRel" : "TxReq", "%s / %s - %s", tmp.data->str, sip_get_header(&tmp, "CSeq"), sip_methods[tmp.method].text);
|
|
|
|
|
append_history(p, reliable ? "TxReqRel" : "TxReq", "%s / %s - %s", ast_str_buffer(tmp.data), sip_get_header(&tmp, "CSeq"), sip_methods[tmp.method].text);
|
|
|
|
|
deinit_req(&tmp);
|
|
|
|
|
}
|
|
|
|
|
res = (reliable) ?
|
|
|
|
|
@ -6706,7 +6706,7 @@ static int sip_hangup(struct ast_channel *ast)
|
|
|
|
|
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
|
|
|
|
|
|
|
|
|
/* Start the process if it's not already started */
|
|
|
|
|
if (!p->alreadygone && p->initreq.data && !ast_strlen_zero(p->initreq.data->str)) {
|
|
|
|
|
if (!p->alreadygone && p->initreq.data && ast_str_strlen(p->initreq.data)) {
|
|
|
|
|
if (needcancel) { /* Outgoing call, not up */
|
|
|
|
|
if (ast_test_flag(&p->flags[0], SIP_OUTGOING)) {
|
|
|
|
|
/* if we can't send right now, mark it pending */
|
|
|
|
|
@ -6720,7 +6720,7 @@ static int sip_hangup(struct ast_channel *ast)
|
|
|
|
|
struct sip_pkt *cur;
|
|
|
|
|
|
|
|
|
|
for (cur = p->packets; cur; cur = cur->next) {
|
|
|
|
|
__sip_semi_ack(p, cur->seqno, cur->is_resp, cur->method ? cur->method : find_sip_method(cur->data->str));
|
|
|
|
|
__sip_semi_ack(p, cur->seqno, cur->is_resp, cur->method ? cur->method : find_sip_method(ast_str_buffer(cur->data)));
|
|
|
|
|
}
|
|
|
|
|
p->invitestate = INV_CANCELLED;
|
|
|
|
|
/* Send a new request: CANCEL */
|
|
|
|
|
@ -9039,8 +9039,8 @@ static int parse_request(struct sip_request *req)
|
|
|
|
|
*c = '\0';
|
|
|
|
|
} else if (*c == '\n') { /* end of this line */
|
|
|
|
|
*c = '\0';
|
|
|
|
|
current_header_offset = (c + 1) - req->data->str;
|
|
|
|
|
previous_header = req->data->str + dst[i];
|
|
|
|
|
current_header_offset = (c + 1) - ast_str_buffer(req->data);
|
|
|
|
|
previous_header = ast_str_buffer(req->data) + dst[i];
|
|
|
|
|
if (skipping_headers) {
|
|
|
|
|
/* check to see if this line is blank; if so, turn off
|
|
|
|
|
the skipping flag, so the next line will be processed
|
|
|
|
|
@ -9086,7 +9086,7 @@ static int parse_request(struct sip_request *req)
|
|
|
|
|
if we've already reached the maximum number of lines for portion of the message
|
|
|
|
|
we were parsing, we can't accept any more, so just ignore it.
|
|
|
|
|
*/
|
|
|
|
|
previous_header = req->data->str + dst[i];
|
|
|
|
|
previous_header = ast_str_buffer(req->data) + dst[i];
|
|
|
|
|
if ((i < lim) && !ast_strlen_zero(previous_header)) {
|
|
|
|
|
if (sipdebug) {
|
|
|
|
|
ast_debug(4, "%7s %2d [%3d]: %s\n",
|
|
|
|
|
@ -9227,7 +9227,7 @@ static void change_hold_state(struct sip_pvt *dialog, struct sip_request *req, i
|
|
|
|
|
holdstate ? "On" : "Off",
|
|
|
|
|
dialog->owner->name,
|
|
|
|
|
dialog->owner->uniqueid);
|
|
|
|
|
append_history(dialog, holdstate ? "Hold" : "Unhold", "%s", req->data->str);
|
|
|
|
|
append_history(dialog, holdstate ? "Hold" : "Unhold", "%s", ast_str_buffer(req->data));
|
|
|
|
|
if (!holdstate) { /* Put off remote hold */
|
|
|
|
|
ast_clear_flag(&dialog->flags[1], SIP_PAGE2_CALL_ONHOLD); /* Clear both flags */
|
|
|
|
|
return;
|
|
|
|
|
@ -12258,9 +12258,9 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
if (min_text_packet_size)
|
|
|
|
|
ast_str_append(&a_text, 0, "a=ptime:%d\r\n", min_text_packet_size);
|
|
|
|
|
|
|
|
|
|
if (m_audio->len - m_audio->used < 2 || m_video->len - m_video->used < 2 ||
|
|
|
|
|
m_text->len - m_text->used < 2 || a_text->len - a_text->used < 2 ||
|
|
|
|
|
a_audio->len - a_audio->used < 2 || a_video->len - a_video->used < 2)
|
|
|
|
|
if (ast_str_size(m_audio) - ast_str_strlen(m_audio) < 2 || ast_str_size(m_video) - ast_str_strlen(m_video) < 2 ||
|
|
|
|
|
ast_str_size(m_text) - ast_str_strlen(m_text) < 2 || ast_str_size(a_text) - ast_str_strlen(a_text) < 2 ||
|
|
|
|
|
ast_str_size(a_audio) - ast_str_strlen(a_audio) < 2 || ast_str_size(a_video) - ast_str_strlen(a_video) < 2)
|
|
|
|
|
ast_log(LOG_WARNING, "SIP SDP may be truncated due to undersized buffer!!\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -12350,8 +12350,8 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
for (i = 1; i <= 3; i++) {
|
|
|
|
|
if (p->offered_media[SDP_AUDIO].order_offered == i) {
|
|
|
|
|
if (needaudio) {
|
|
|
|
|
add_content(resp, m_audio->str);
|
|
|
|
|
add_content(resp, a_audio->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_audio));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_audio));
|
|
|
|
|
add_content(resp, hold);
|
|
|
|
|
if (a_crypto) {
|
|
|
|
|
add_content(resp, a_crypto);
|
|
|
|
|
@ -12362,8 +12362,8 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
}
|
|
|
|
|
} else if (p->offered_media[SDP_VIDEO].order_offered == i) {
|
|
|
|
|
if (needvideo) { /* only if video response is appropriate */
|
|
|
|
|
add_content(resp, m_video->str);
|
|
|
|
|
add_content(resp, a_video->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_video));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_video));
|
|
|
|
|
add_content(resp, hold); /* Repeat hold for the video stream */
|
|
|
|
|
if (v_a_crypto) {
|
|
|
|
|
add_content(resp, v_a_crypto);
|
|
|
|
|
@ -12374,8 +12374,8 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
}
|
|
|
|
|
} else if (p->offered_media[SDP_TEXT].order_offered == i) {
|
|
|
|
|
if (needtext) { /* only if text response is appropriate */
|
|
|
|
|
add_content(resp, m_text->str);
|
|
|
|
|
add_content(resp, a_text->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_text));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_text));
|
|
|
|
|
add_content(resp, hold); /* Repeat hold for the text stream */
|
|
|
|
|
if (t_a_crypto) {
|
|
|
|
|
add_content(resp, t_a_crypto);
|
|
|
|
|
@ -12386,8 +12386,8 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
}
|
|
|
|
|
} else if (p->offered_media[SDP_IMAGE].order_offered == i) {
|
|
|
|
|
if (add_t38) {
|
|
|
|
|
add_content(resp, m_modem->str);
|
|
|
|
|
add_content(resp, a_modem->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_modem));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_modem));
|
|
|
|
|
} else {
|
|
|
|
|
add_content(resp, "m=image 0 udptl t38\r\n");
|
|
|
|
|
}
|
|
|
|
|
@ -12396,32 +12396,32 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
|
|
|
|
|
} else {
|
|
|
|
|
/* generate new SDP from scratch, no offers */
|
|
|
|
|
if (needaudio) {
|
|
|
|
|
add_content(resp, m_audio->str);
|
|
|
|
|
add_content(resp, a_audio->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_audio));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_audio));
|
|
|
|
|
add_content(resp, hold);
|
|
|
|
|
if (a_crypto) {
|
|
|
|
|
add_content(resp, a_crypto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (needvideo) { /* only if video response is appropriate */
|
|
|
|
|
add_content(resp, m_video->str);
|
|
|
|
|
add_content(resp, a_video->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_video));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_video));
|
|
|
|
|
add_content(resp, hold); /* Repeat hold for the video stream */
|
|
|
|
|
if (v_a_crypto) {
|
|
|
|
|
add_content(resp, v_a_crypto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (needtext) { /* only if text response is appropriate */
|
|
|
|
|
add_content(resp, m_text->str);
|
|
|
|
|
add_content(resp, a_text->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_text));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_text));
|
|
|
|
|
add_content(resp, hold); /* Repeat hold for the text stream */
|
|
|
|
|
if (t_a_crypto) {
|
|
|
|
|
add_content(resp, t_a_crypto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (add_t38) {
|
|
|
|
|
add_content(resp, m_modem->str);
|
|
|
|
|
add_content(resp, a_modem->str);
|
|
|
|
|
add_content(resp, ast_str_buffer(m_modem));
|
|
|
|
|
add_content(resp, ast_str_buffer(a_modem));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -12828,7 +12828,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho
|
|
|
|
|
/* This is the request URI, which is the next hop of the call
|
|
|
|
|
which may or may not be the destination of the call
|
|
|
|
|
*/
|
|
|
|
|
ast_string_field_set(p, uri, invite->str);
|
|
|
|
|
ast_string_field_set(p, uri, ast_str_buffer(invite));
|
|
|
|
|
|
|
|
|
|
if (!ast_strlen_zero(p->todnid)) {
|
|
|
|
|
/*! \todo Need to add back the VXML URL here at some point, possibly use build_string for all this junk */
|
|
|
|
|
@ -13622,7 +13622,7 @@ static int transmit_state_notify(struct sip_pvt *p, int state, int full, int tim
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
add_content(&req, tmp->str);
|
|
|
|
|
add_content(&req, ast_str_buffer(tmp));
|
|
|
|
|
|
|
|
|
|
p->pendinginvite = p->ocseq; /* Remember that we have a pending NOTIFY in order not to confuse the NOTIFY subsystem */
|
|
|
|
|
|
|
|
|
|
@ -13678,7 +13678,7 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
add_content(&req, out->str);
|
|
|
|
|
add_content(&req, ast_str_buffer(out));
|
|
|
|
|
|
|
|
|
|
if (!p->initreq.headers) {
|
|
|
|
|
initialize_initreq(p, &req);
|
|
|
|
|
@ -18548,7 +18548,7 @@ static char *_sip_show_peer(int type, int fd, struct mansession *s, const struct
|
|
|
|
|
print_group(fd, peer->pickupgroup, 0);
|
|
|
|
|
peer_mailboxes_to_str(&mailbox_str, peer);
|
|
|
|
|
ast_cli(fd, " MOH Suggest : %s\n", peer->mohsuggest);
|
|
|
|
|
ast_cli(fd, " Mailbox : %s\n", mailbox_str->str);
|
|
|
|
|
ast_cli(fd, " Mailbox : %s\n", ast_str_buffer(mailbox_str));
|
|
|
|
|
ast_cli(fd, " VM Extension : %s\n", peer->vmexten);
|
|
|
|
|
ast_cli(fd, " LastMsgsSent : %d/%d\n", (peer->lastmsgssent & 0x7fff0000) >> 16, peer->lastmsgssent & 0xffff);
|
|
|
|
|
ast_cli(fd, " Call limit : %d\n", peer->call_limit);
|
|
|
|
|
@ -18661,7 +18661,7 @@ static char *_sip_show_peer(int type, int fd, struct mansession *s, const struct
|
|
|
|
|
astman_append(s, "%s\r\n", ast_print_group(buffer, sizeof(buffer), peer->pickupgroup));
|
|
|
|
|
astman_append(s, "MOHSuggest: %s\r\n", peer->mohsuggest);
|
|
|
|
|
peer_mailboxes_to_str(&mailbox_str, peer);
|
|
|
|
|
astman_append(s, "VoiceMailbox: %s\r\n", mailbox_str->str);
|
|
|
|
|
astman_append(s, "VoiceMailbox: %s\r\n", ast_str_buffer(mailbox_str));
|
|
|
|
|
astman_append(s, "TransferMode: %s\r\n", transfermode2str(peer->allowtransfer));
|
|
|
|
|
astman_append(s, "LastMsgsSent: %d\r\n", peer->lastmsgssent);
|
|
|
|
|
astman_append(s, "Maxforwards: %d\r\n", peer->maxforwards);
|
|
|
|
|
@ -18891,7 +18891,7 @@ static char *sip_show_sched(struct ast_cli_entry *e, int cmd, struct ast_cli_arg
|
|
|
|
|
|
|
|
|
|
ast_cli(a->fd, "\n");
|
|
|
|
|
ast_sched_report(sched, &cbuf, &cbnames);
|
|
|
|
|
ast_cli(a->fd, "%s", cbuf->str);
|
|
|
|
|
ast_cli(a->fd, "%s", ast_str_buffer(cbuf));
|
|
|
|
|
|
|
|
|
|
return CLI_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
@ -19425,7 +19425,7 @@ static int show_channels_cb(void *__cur, void *__arg, int flags)
|
|
|
|
|
cur->subscribed == MWI_NOTIFICATION ? "--" : cur->subscribeuri,
|
|
|
|
|
cur->subscribed == MWI_NOTIFICATION ? "<none>" : ast_extension_state2str(cur->laststate),
|
|
|
|
|
subscription_type2str(cur->subscribed),
|
|
|
|
|
cur->subscribed == MWI_NOTIFICATION ? S_OR(mailbox_str->str, "<none>") : "<none>",
|
|
|
|
|
cur->subscribed == MWI_NOTIFICATION ? S_OR(ast_str_buffer(mailbox_str), "<none>") : "<none>",
|
|
|
|
|
cur->expiry
|
|
|
|
|
);
|
|
|
|
|
arg->numchans++;
|
|
|
|
|
@ -20559,7 +20559,7 @@ static int function_sippeer(struct ast_channel *chan, const char *cmd, char *dat
|
|
|
|
|
} else if (!strcasecmp(colname, "mailbox")) {
|
|
|
|
|
struct ast_str *mailbox_str = ast_str_alloca(512);
|
|
|
|
|
peer_mailboxes_to_str(&mailbox_str, peer);
|
|
|
|
|
ast_copy_string(buf, mailbox_str->str, len);
|
|
|
|
|
ast_copy_string(buf, ast_str_buffer(mailbox_str), len);
|
|
|
|
|
} else if (!strcasecmp(colname, "context")) {
|
|
|
|
|
ast_copy_string(buf, peer->context, len);
|
|
|
|
|
} else if (!strcasecmp(colname, "expire")) {
|
|
|
|
|
@ -23321,12 +23321,12 @@ static int do_magic_pickup(struct ast_channel *channel, const char *extension, c
|
|
|
|
|
|
|
|
|
|
ast_str_set(&str, 0, "%s@%s", extension, sip_cfg.notifycid == IGNORE_CONTEXT ? "PICKUPMARK" : context);
|
|
|
|
|
|
|
|
|
|
ast_debug(2, "About to call Pickup(%s)\n", str->str);
|
|
|
|
|
ast_debug(2, "About to call Pickup(%s)\n", ast_str_buffer(str));
|
|
|
|
|
|
|
|
|
|
/* There is no point in capturing the return value since pickup_exec
|
|
|
|
|
doesn't return anything meaningful unless the passed data is an empty
|
|
|
|
|
string (which in our case it will not be) */
|
|
|
|
|
pbx_exec(channel, pickup, str->str);
|
|
|
|
|
pbx_exec(channel, pickup, ast_str_buffer(str));
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
@ -26747,7 +26747,7 @@ static int handle_request_do(struct sip_request *req, struct ast_sockaddr *addr)
|
|
|
|
|
lws2sws(req->data); /* Fix multiline headers */
|
|
|
|
|
if (req->debug) {
|
|
|
|
|
ast_verbose("\n<--- SIP read from %s:%s --->\n%s\n<------------->\n",
|
|
|
|
|
sip_get_transport(req->socket.type), ast_sockaddr_stringify(addr), req->data->str);
|
|
|
|
|
sip_get_transport(req->socket.type), ast_sockaddr_stringify(addr), ast_str_buffer(req->data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (parse_request(req) == -1) { /* Bad packet, can't parse */
|
|
|
|
|
@ -26786,7 +26786,7 @@ static int handle_request_do(struct sip_request *req, struct ast_sockaddr *addr)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (p->do_history) /* This is a request or response, note what it was for */
|
|
|
|
|
append_history(p, "Rx", "%s / %s / %s", req->data->str, sip_get_header(req, "CSeq"), REQ_OFFSET_TO_STR(req, rlPart2));
|
|
|
|
|
append_history(p, "Rx", "%s / %s / %s", ast_str_buffer(req->data), sip_get_header(req, "CSeq"), REQ_OFFSET_TO_STR(req, rlPart2));
|
|
|
|
|
|
|
|
|
|
if (handle_incoming(p, req, addr, &recount, &nounlock) == -1) {
|
|
|
|
|
/* Request failed */
|
|
|
|
|
@ -27073,17 +27073,17 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only)
|
|
|
|
|
struct ast_str *mailbox_str = ast_str_alloca(512);
|
|
|
|
|
peer_mailboxes_to_str(&mailbox_str, peer);
|
|
|
|
|
/* if there is no mailbox do nothing */
|
|
|
|
|
if (ast_strlen_zero(mailbox_str->str)) {
|
|
|
|
|
if (!ast_str_strlen(mailbox_str)) {
|
|
|
|
|
ao2_unlock(peer);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
ao2_unlock(peer);
|
|
|
|
|
/* If there is no mailbox do nothing */
|
|
|
|
|
if (ast_strlen_zero(mailbox_str->str)) {
|
|
|
|
|
if (!ast_str_strlen(mailbox_str)) {
|
|
|
|
|
update_peer_lastmsgssent(peer, -1, 0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
ast_app_inboxcount(mailbox_str->str, &newmsgs, &oldmsgs);
|
|
|
|
|
ast_app_inboxcount(ast_str_buffer(mailbox_str), &newmsgs, &oldmsgs);
|
|
|
|
|
ao2_lock(peer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -29110,7 +29110,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
|
|
|
|
|
ast_str_reset(fullcontact);
|
|
|
|
|
}
|
|
|
|
|
/* Reconstruct field, because realtime separates our value at the ';' */
|
|
|
|
|
if (fullcontact->used > 0) {
|
|
|
|
|
if (ast_str_strlen(fullcontact) > 0) {
|
|
|
|
|
ast_str_append(&fullcontact, 0, ";%s", v->value);
|
|
|
|
|
} else {
|
|
|
|
|
ast_str_set(&fullcontact, 0, "%s", v->value);
|
|
|
|
|
@ -29211,7 +29211,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
|
|
|
|
|
/* XXX May need to revisit the final argument; does the realtime DB store whether
|
|
|
|
|
* the original contact was over TLS or not? XXX */
|
|
|
|
|
if (!ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) || ast_sockaddr_isnull(&peer->addr)) {
|
|
|
|
|
__set_address_from_contact(fullcontact->str, &peer->addr, 0);
|
|
|
|
|
__set_address_from_contact(ast_str_buffer(fullcontact), &peer->addr, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|