Skip to content

Commit

Permalink
Use a helper macro
Browse files Browse the repository at this point in the history
  • Loading branch information
sauwming committed Jan 30, 2024
1 parent 453cf03 commit c8e4587
Showing 1 changed file with 28 additions and 134 deletions.
162 changes: 28 additions & 134 deletions pjsip/src/pjsua-lib/pjsua_pres.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,18 @@ pjsua_buddy_get_dlg_event_info( pjsua_buddy_id buddy_id,
pjsua_buddy *buddy;
pj_status_t status;

#define COPY_TO_BUF(status, field) \
if (status.field.slen > 0) { \
if (total + status.field.slen < sizeof(info->buf_)) { \
info->field.ptr = info->buf_ + total; \
pj_strncpy(&info->field, &status.field, status.field.slen); \
total += info->field.slen; \
} else { \
PJ_LOG(4, (THIS_FILE, "Insufficient buffer when copying %s", \
#field)); \
} \
}

PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), PJ_EINVAL);

pj_bzero(info, sizeof(pjsua_buddy_dlg_event_info));
Expand All @@ -349,142 +361,24 @@ pjsua_buddy_get_dlg_event_info( pjsua_buddy_id buddy_id,
pj_strncpy(&info->uri, &buddy->uri, sizeof(info->buf_)-total);
total += info->uri.slen;

if (buddy->dlg_ev_status.info[0].dialog_info_state.slen > 0 &&
total < sizeof(info->buf_))
{
info->dialog_info_state.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_info_state,
&buddy->dlg_ev_status.info[0].dialog_info_state,
buddy->dlg_ev_status.info[0].dialog_info_state.slen);
total += info->dialog_info_state.slen;
}

if (buddy->dlg_ev_status.info[0].dialog_info_entity.slen > 0 &&
total < sizeof(info->buf_))
{
info->dialog_info_entity.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_info_entity,
&buddy->dlg_ev_status.info[0].dialog_info_entity,
buddy->dlg_ev_status.info[0].dialog_info_entity.slen);
total += info->dialog_info_entity.slen;
}
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_info_state);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_info_entity);

if (buddy->dlg_ev_status.info[0].dialog_node) {
if (total < sizeof(info->buf_)) {
info->dialog_id.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_id,
&buddy->dlg_ev_status.info[0].dialog_id,
sizeof(info->buf_)-total);
total += info->dialog_id.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_call_id.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_call_id,
&buddy->dlg_ev_status.info[0].dialog_call_id,
sizeof(info->buf_)-total);
total += info->dialog_call_id.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_remote_tag.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_remote_tag,
&buddy->dlg_ev_status.info[0].dialog_remote_tag,
sizeof(info->buf_)-total);
total += info->dialog_remote_tag.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_local_tag.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_local_tag,
&buddy->dlg_ev_status.info[0].dialog_local_tag,
sizeof(info->buf_)-total);
total += info->dialog_local_tag.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_direction.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_direction,
&buddy->dlg_ev_status.info[0].dialog_direction,
sizeof(info->buf_)-total);
total += info->dialog_direction.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_state.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_state,
&buddy->dlg_ev_status.info[0].dialog_state,
buddy->dlg_ev_status.info[0].dialog_state.slen);
total += info->dialog_state.slen;
}

if (total < sizeof(info->buf_)) {
info->dialog_duration.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_duration,
&buddy->dlg_ev_status.info[0].dialog_duration,
buddy->dlg_ev_status.info[0].dialog_duration.slen);
total += info->dialog_duration.slen;
}

if (buddy->dlg_ev_status.info[0].local_identity.slen > 0 &&
total < sizeof(info->buf_))
{
info->local_identity.ptr = info->buf_ + total;
pj_strncpy(&info->local_identity,
&buddy->dlg_ev_status.info[0].local_identity,
buddy->dlg_ev_status.info[0].local_identity.slen);
total += info->local_identity.slen;
}

if (buddy->dlg_ev_status.info[0].local_identity_display.slen > 0 &&
total < sizeof(info->buf_))
{
info->local_identity_display.ptr = info->buf_ + total;
pj_strncpy(&info->local_identity_display,
&buddy->dlg_ev_status.info[0].local_identity_display,
buddy->dlg_ev_status.info[0].local_identity_display.slen);
total += info->local_identity_display.slen;
}

if (buddy->dlg_ev_status.info[0].local_target_uri.slen > 0 &&
total < sizeof(info->buf_))
{
info->local_target_uri.ptr = info->buf_ + total;
pj_strncpy(&info->local_target_uri,
&buddy->dlg_ev_status.info[0].local_target_uri,
buddy->dlg_ev_status.info[0].local_target_uri.slen);
total += info->local_target_uri.slen;
}

if (buddy->dlg_ev_status.info[0].remote_identity.slen > 0 &&
total < sizeof(info->buf_))
{
info->remote_identity.ptr = info->buf_ + total;
pj_strncpy(&info->remote_identity,
&buddy->dlg_ev_status.info[0].remote_identity,
buddy->dlg_ev_status.info[0].remote_identity.slen);
total += info->remote_identity.slen;
}

if (buddy->dlg_ev_status.info[0].remote_identity_display.slen > 0 &&
total < sizeof(info->buf_))
{
info->remote_identity_display.ptr = info->buf_ + total;
pj_strncpy(&info->remote_identity_display,
&buddy->dlg_ev_status.info[0].remote_identity_display,
buddy->dlg_ev_status.info[0].remote_identity_display.slen);
total += info->remote_identity_display.slen;
}

if (buddy->dlg_ev_status.info[0].remote_target_uri.slen > 0 &&
total < sizeof(info->buf_))
{
info->remote_target_uri.ptr = info->buf_ + total;
pj_strncpy(&info->remote_target_uri,
&buddy->dlg_ev_status.info[0].remote_target_uri,
buddy->dlg_ev_status.info[0].remote_target_uri.slen);
total += info->remote_target_uri.slen;
}
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_id);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_call_id);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_remote_tag);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_local_tag);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_direction);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_state);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_duration);

COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_identity);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_identity_display);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_target_uri);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_identity);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_identity_display);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_target_uri);
}

/* subscription state and termination reason */
Expand Down

0 comments on commit c8e4587

Please sign in to comment.