]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
wire in tport error callback to nua_stack_tport_error
authorAnthony Minessale <anthm@freeswitch.org>
Sat, 26 Jan 2013 23:31:41 +0000 (17:31 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 1 Apr 2013 02:27:22 +0000 (21:27 -0500)
libs/sofia-sip/libsofia-sip-ua/nta/nta.c
libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tport.h
libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c

index 37b0922c7adf57d5be862fd94218bbbbec7216a3..56a3c59b36c7fd6e47f35003c8d74656960730cd 100644 (file)
@@ -149,6 +149,9 @@ struct nta_agent_s
   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. */
@@ -2720,6 +2723,10 @@ void agent_tp_error(nta_agent_t *agent,
          "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 */
@@ -11783,6 +11790,18 @@ int nta_agent_bind_tport_update(nta_agent_t *agent,
   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)
 {
index 17261bf1817c19c9c2002a2523f526e2f2b2af00..6dafbb55a009022728cbeb366dd347551ecc22be 100644 (file)
@@ -54,6 +54,11 @@ typedef TPORT_T tport_t;
 #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;
 
@@ -77,11 +82,18 @@ SOFIAPUBFUN void nta_compartment_decref(struct sigcomp_compartment **);
 
 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 */
index c28389c0c3dc9dbfd20d25349e23e5dbc91622b6..84e1d41fa95101fa56d1e8eadbc0946b676266f5 100644 (file)
@@ -49,6 +49,7 @@
 #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"
 
@@ -1138,6 +1139,7 @@ static int nua_register_usage_shutdown(nua_handle_t *nh,
 #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,
@@ -1372,6 +1374,7 @@ nua_stack_init_registrations(nua_t *nua)
   }
 
   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;
 }
@@ -1476,6 +1479,12 @@ int nua_registration_from_via(nua_registration_t **list,
   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)
 {