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;
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,
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;
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);
}
}
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)
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);
}
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) ?
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 */
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 */
*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
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",
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;
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");
}
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);
}
} 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);
}
} 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);
}
} 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");
}
} 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));
}
}
/* 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 */
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 */
}
}
- add_content(&req, out->str);
+ add_content(&req, ast_str_buffer(out));
if (!p->initreq.headers) {
initialize_initreq(p, &req);
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);
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);
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;
}
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++;
} 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")) {
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;
}
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 */
}
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 */
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);
}
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);
/* 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);
}
}