nta_update_magic_t *sa_update_magic;
nta_update_tport_f *sa_update_tport;
+ nta_error_magic_t *sa_error_magic;
+ nta_error_tport_f *sa_error_tport;
+
su_time_t sa_now; /**< Timestamp in microsecond resolution. */
uint32_t sa_next; /**< Timestamp for next agent_timer. */
uint32_t sa_millisec; /**< Timestamp in milliseconds. */
"nta_agent: tport: %s%s%s\n",
remote ? remote : "", remote ? ": " : "",
su_strerror(errcode));
+
+ if (agent->sa_error_tport) {
+ agent->sa_error_tport(agent->sa_error_magic, agent, tport);
+ }
}
/** Handle updated transport addresses */
return 0;
}
+/** Bind transport error callback */
+int nta_agent_bind_tport_error(nta_agent_t *agent,
+ nta_error_magic_t *magic,
+ nta_error_tport_f *callback)
+{
+ if (!agent)
+ return su_seterrno(EFAULT), -1;
+ agent->sa_error_magic = magic;
+ agent->sa_error_tport = callback;
+ return 0;
+}
+
/** Check if public transport binding is in progress */
int nta_agent_tport_is_updating(nta_agent_t *agent)
{
#endif
typedef NTA_UPDATE_MAGIC_T nta_update_magic_t;
+#ifndef NTA_ERROR_MAGIC_T
+#define NTA_ERROR_MAGIC_T void
+#endif
+typedef NTA_ERROR_MAGIC_T nta_error_magic_t;
+
struct sigcomp_compartment;
struct sigcomp_udvm;
typedef void nta_update_tport_f(nta_update_magic_t *, nta_agent_t *);
+typedef void nta_error_tport_f(nta_error_magic_t *, nta_agent_t *, tport_t *);
+
SOFIAPUBFUN
int nta_agent_bind_tport_update(nta_agent_t *agent,
nta_update_magic_t *magic,
nta_update_tport_f *);
+SOFIAPUBFUN
+int nta_agent_bind_tport_error(nta_agent_t *agent,
+ nta_error_magic_t *magic,
+ nta_error_tport_f *callback);
+
SOFIA_END_DECLS
#endif /* !defined NTA_TPORT_H */
#include <sofia-sip/sip_status.h>
#define NTA_UPDATE_MAGIC_T struct nua_s
+#define NTA_ERROR_MAGIC_T struct nua_s
#include "nua_stack.h"
#endif
static void nua_stack_tport_update(nua_t *nua, nta_agent_t *nta);
+static void nua_stack_tport_error(nua_t *nua, nta_agent_t *nta, tport_t *tport);
static int nua_registration_add_contact_and_route(nua_handle_t *nh,
nua_registration_t *nr,
msg_t *msg,
}
nta_agent_bind_tport_update(nua->nua_nta, (nta_update_magic_t *)nua, nua_stack_tport_update);
+ nta_agent_bind_tport_error(nua->nua_nta, (nta_error_magic_t *)nua, nua_stack_tport_error);
return 0;
}
return 0;
}
+static
+void nua_stack_tport_error(nua_t *nua, nta_agent_t *nta, tport_t *tport)
+{
+ return;
+}
+
static
void nua_stack_tport_update(nua_t *nua, nta_agent_t *nta)
{