static const char* print_tpsel_info(const pjsip_tpselector *sel)
{
    static char tpsel_info_buf[80];
    if (!sel) return "(null)";
    if (sel->type==PJSIP_TPSELECTOR_LISTENER)
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "listener[%s], reuse=%d", sel->u.listener->obj_name,
			 !sel->disable_connection_reuse);
    else if (sel->type==PJSIP_TPSELECTOR_TRANSPORT)
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "transport[%s], reuse=%d", sel->u.transport->info,
			 !sel->disable_connection_reuse);
    else
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "unknown[%p], reuse=%d", sel->u.ptr,
			 !sel->disable_connection_reuse);
    return tpsel_info_buf;
}
static const char* print_tpsel_info(const pjsip_tpselector *sel)
{
    static char tpsel_info_buf[80];
    if (!sel) return "(null)";
    if (sel->type==PJSIP_TPSELECTOR_LISTENER)
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "listener[%s], reuse=%d", sel->u.listener->obj_name,
			 !sel->disable_connection_reuse);
    else if (sel->type==PJSIP_TPSELECTOR_TRANSPORT)
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "transport[%s], reuse=%d", sel->u.transport->info,
			 !sel->disable_connection_reuse);
    else
	pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
			 "unknown[%p], reuse=%d", sel->u.ptr,
			 !sel->disable_connection_reuse);
    return tpsel_info_buf;
}