]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
sync to darcs tree
authorMichael Jerris <mike@jerris.com>
Sat, 26 Jan 2008 19:57:55 +0000 (19:57 +0000)
committerMichael Jerris <mike@jerris.com>
Sat, 26 Jan 2008 19:57:55 +0000 (19:57 +0000)
Thu Jan 17 07:57:29 EST 2008  Pekka.Pessi@nokia.com
  * configure.ac: prerelease version

Wed Jan 23 13:22:39 EST 2008  Pekka.Pessi@nokia.com
  * test_nta.c: fixed memset() usage. MSG_TRUNC.

Wed Jan 23 13:25:42 EST 2008  Pekka Pessi <Pekka.Pessi@nokia.com>
  * RELEASE, configure.ac: release 1.12.8

Wed Jan 23 13:25:46 EST 2008  Pekka Pessi <Pekka.Pessi@nokia.com>
  tagged rel-sofia-sip_1_12_8

Wed Jan 23 13:25:52 EST 2008  Pekka Pessi <Pekka.Pessi@nokia.com>
  tagged 1.12.8

Wed Jan 23 14:25:07 EST 2008  Pekka.Pessi@nokia.com
  * RELEASE, configure.ac: 1.12.8devel

Fri Jan 25 04:31:39 EST 2008  Pekka.Pessi@nokia.com
  * nta.c: fixed graylisting if used with IPv4/IPv6 only

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7372 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/RELEASE
libs/sofia-sip/configure.ac
libs/sofia-sip/libsofia-sip-ua/nta/nta.c
libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c

index f514c261d86343b0ae81e7a3063f749b41d8a331..611367c1e3da69de18546abe360cb05b0b62fb30 100644 (file)
@@ -5,31 +5,26 @@ Release notes for current version of Sofia-SIP
 Changes since last release
 --------------------------
 
-Beside bugfixes, a server graylisting was added to nta and a few
-improvements in event handling were made in nua interface.
+<changes since last written in freshmeat.net "Changes:" style;
+ and in less than 10 lines, written in 3rd person English, with
+ complete sentences />
 
-A check-based test program was added, too.
+Bugs in blaa and foo have been fixed. The stack now supports
+use of foobar...
 
 API/ABI changes and versioning
 ------------------------------
 
-New features in API are marked with Doxytag macro @NEW_1_12_8 or
-@VERSION_1_12_8.
+<see previous release notes at
+ http://sofia-sip.sourceforge.net/relnotes/ for examples ;
+ - should include all changes to public headers, and 
+   other important information to developers; 
+ - and should be updated _continuously_! />
+
+**template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X.
 
 libsofia-sip-ua:
-- Added nta_sip_is_internal(), nta_msg_is_internal() function in
-  <sofia-sip/nta.h>. Deprecating nta_is_internal_msg().
-- Added su_msg_new(), su_msg_send_to() and su_msg_deinitializer() for more 
-  robust and light-weight message passing in <sofia-sip/su_wait.h>
-- Added su_home_lock(), su_home_trylock(), and su_home_unlock() in
-  <sofia-sip/su_alloc.h>
-- Added type-neutral template macros for hash tables HTABLE2_DECLARE2(), HTABLE2_PROTOS2(),
-  and HTABLE2_BODIES2().
-- Added sres_cache_set_srv_priority() in <sofia-resolv/sres_cache.h> and 
-  sres_set_cached_srv_priority() <sofia-resolv/sres.h> for graylisting
-  SRV records for inresponsive servers.
-- nua_create()/nta_agent_create()/tport_bind() now joins to multicast group
-  if "maddr" parameter is specified
+- **template**: Added foobar() function (sofia-sip/foobar.h).
 - This release is ABI/API compatible with applications linked against 
   any 1.12.x release. However, applications built against this release won't 
   work against an older library. The ABI has been tested with the nua module 
@@ -43,74 +38,32 @@ libsofia-sip-ua-glib:
 Contributors to this release
 ----------------------------
 
-- Bernhard Suttner contributed patch to soa for using a=inactive attribute
-  with call hold
-- Stefan Leuenberger from Netmodule contributed the hack for changing
-  priority of SRV records if a SIP server was inresponsive
-- Daniele Rondina contributed patches fixing crash in STUN discovery cleanup
-  and for transport handling with nta_outgoing_*create()
-- Youness Alaoui sent a iPhone build fix
-- Michael Jerris and Stefan Knoblich from Freeswitch project reported
-  numerous bugs and contributed fixes
-  
+<list of people who contributed to _this_ release
+ - update as people's patches are added, or when you commit stuff
+ - current development team members (see AUTHORS) may be omitted,
+   or listed at the end of the contribur list (depending on the scope 
+   of the work done since the last release)
+ - name of the contributor should be enough (email addresses in AUTHORS),
+   plus a _brief_ description of what was contributed
+ - roughly sorted by number of patches accepted
+/> 
+
+- **template**: First Surname (patch to nua/soa/msg)
+
 See the AUTHORS file in the distribution package.
 
 Notes on new features
 ---------------------
 
-SIP Server Graylisting
-----------------------
-
-The hack contributed by Stefan Leuenberger from Netmodule changes the
-priority of SRV records which are used when SIP URI is resolved.
-
-If your domain has multiple servers, you can define separate SRV records for
-them. If any of them becomes unresponsive, a SIP request sent to it times
-out or gets rejected because of network error and Sofia SIP automatically
-retries with another server. However, as Sofia SIP does not keep track of
-failed servers with the next request it may again try first the failed
-server. The graylisting repriotizes the SRV records so that the priority of
-the failed server gets reduced and it won't be tried again until all other
-servers have failed, too. Note that the SIP URI resolver may get confused
-when using this kind of repriotizing if a single SRV record corresponds to
-multiple servers or servers with multiple addresses.
-
-You can disable the reprioritizing hack by including tag NTATAG_GREYLIST(0)
-with nua_create(), nua_set_params(), nta_agent_create() or
-nta_agent_set_params().
+<information about major new features
+ - new/changed/removed functionality
+ - links to further documentation
+ - section may be omitted for minor releases
+/> 
 
 Bugs fixed in this release
 --------------------------
 
-* Fixed su_home_init not initializing suh_lock.
-* Fixed memory leak when increasing hash table size
-* Fixed problems with multiple authentication challenges. 
-* Fixed sf.net bug #1816647: Outbound contact does not make it to dialogs.
-* Fixed problem with tagargs, amd64 and Sun CC.
-* Fixed nta_outgoing_*create() not using NTATAG_TPORT() if
-  NTATAG_DEFAULT_PROXY() was set. 
-* Fixed memory leak from nua operations.
-* Fixed crash when INVITE destroyed session before UPDATE or PRACK completed
-* Fixed crash in stun when destroying stun context during discovery callback
-* Fixed nta timer interval calculation ignoring some transactions
-* Fixed request merging when client is RFC 2543 proxy
-* Fixed request matching and merging if To/From URI does not match
-* Fixed problem with soa and overlapping INVITEs
-* Fixed handling of RFC 2848 subscriptions (without Event header)
-* Fixed problems with expiration time calculations if NOTIFY is sent before
-  SUBSCRIBE has been responded
-* Fixed su_getaddrinfo() with ephemeral (NULL or "0") service
-* Fixed IPv6 build with Vista SDK
-* Fixed sf.net bug #1867753 (avoid duplicating initial route set
-* Fixed SCTP receive
-* Using tport_log and su_llog() when logging TLS warnings and errors
-* Removed asserts on hairy dialog shutdown cases.
-* Using remote activity mode derived from O/A result rather than mode based on remote
-  offer
-* Fixed mode in SDP offer while on hold
-* Fixed handling of REFER in nua when it gets redirected or challenged
-* Fixed memory corruption when sending of ACK request failed.
-
 < notable bugs fixed in this release
  - check the sf.net bug tracker; see closed bugs,
    sorted by closing date
index 46ae8e66217f2fca6843d54b271b63d13fb60b06..7a9a603f76d34ebd9442c994174d035942591bd5 100644 (file)
@@ -11,7 +11,7 @@ dnl information on the package
 dnl ---------------------------
 
 dnl update both the version for AC_INIT and the LIBSOFIA_SIP_UA_MAJOR_MINOR
-AC_INIT([sofia-sip], [1.12.7devel])
+AC_INIT([sofia-sip], [1.12.8devel])
 AC_CONFIG_SRCDIR([libsofia-sip-ua/sip/sofia-sip/sip.h])
 AC_SUBST(VER_LIBSOFIA_SIP_UA_MAJOR_MINOR, [1.12])
 dnl Includedir specific to this sofia version
index 3107ca88b640448a2a8e2c49ce33133bb337d975..9af20568e30643d7bcd29a2dd4bc086d04bea1cc 100644 (file)
@@ -8846,12 +8846,14 @@ struct sipdns_query
   uint16_t sq_type;            /* query type */
   uint16_t sq_priority;                /* priority or preference  */
   uint16_t sq_weight;          /* preference or weight */
+  uint16_t sq_grayish;         /* candidate for graylisting */
 };
 
 static int outgoing_resolve_next(nta_outgoing_t *orq);
 static int outgoing_resolving(nta_outgoing_t *orq);
 static int outgoing_resolving_error(nta_outgoing_t *, 
                                    int status, char const *phrase);
+static void outgoing_graylist(nta_outgoing_t *orq, struct sipdns_query *sq);
 static int outgoing_query_naptr(nta_outgoing_t *orq, char const *domain);
 static void outgoing_answer_naptr(sres_context_t *orq, sres_query_t *q,
                                  sres_record_t *answers[]);
@@ -9092,48 +9094,59 @@ outgoing_try_another(nta_outgoing_t *orq)
 
     /* find latest A/AAAA record */
     sq = sr->sr_head;
-    if (!sq || (sr->sr_a_aaaa1 != sr->sr_a_aaaa2 && sq->sq_type == sr->sr_a_aaaa1))
-       sq = sr->sr_done;       
-    
-    if (sq && sq->sq_otype == sres_type_srv) {
-      char const *target = sq->sq_domain, *proto = sq->sq_proto;
-      unsigned prio = sq->sq_priority, maxprio = prio;
+    if (sq && sq->sq_type == sr->sr_a_aaaa2 && sr->sr_a_aaaa1 != sr->sr_a_aaaa2) {
+      sq->sq_grayish = 1;
+    }
+    else {
+      outgoing_graylist(orq, sr->sr_done);
+    }
+  }
 
-      SU_DEBUG_5(("nta: no response from %s:%s;transport=%s\n", target, sq->sq_port, proto));
+  return outgoing_resolve_next(orq);
+}
 
-      for (sq = sr->sr_head; sq; sq = sq->sq_next) 
-       if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio)
-         maxprio = sq->sq_priority;
+/** Graylist SRV records */
+static void outgoing_graylist(nta_outgoing_t *orq, struct sipdns_query *sq)
+{
+  struct sipdns_resolver *sr = orq->orq_resolver;
+  char const *target = sq->sq_domain, *proto = sq->sq_proto;
+  unsigned prio = sq->sq_priority, maxprio = prio;
 
-      for (sq = sr->sr_done; sq; sq = sq->sq_next)
-       if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio)
-         maxprio = sq->sq_priority;
+  /* Don't know how to graylist but SRV records */
+  if (sq->sq_otype != sres_type_srv)
+    return;                    
 
-      for (sq = sr->sr_done; sq; sq = sq->sq_next) {
-       int modified;
+  SU_DEBUG_5(("nta: graylisting %s:%s;transport=%s\n", target, sq->sq_port, proto));
 
-       if (sq->sq_type != sres_type_srv || strcmp(proto, sq->sq_proto))
-         continue;
+  for (sq = sr->sr_head; sq; sq = sq->sq_next) 
+    if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio)
+      maxprio = sq->sq_priority;
 
-       /* modify the SRV record(s) corresponding to the latest A/AAAA record */
-       modified = sres_set_cached_srv_priority(
-         orq->orq_agent->sa_resolver, 
-         sq->sq_domain, 
-         target,
-         sq->sq_port[0] ? (uint16_t)strtoul(sq->sq_port, NULL, 10) : 0,
-         orq->orq_agent->sa_graylist,
-         maxprio + 1);
-
-       if (modified >= 0)
-         SU_DEBUG_3(("nta: reduced priority of %d %s SRV records (increase value to %u)\n",
-                     modified, sq->sq_domain, maxprio + 1));
-       else
-         SU_DEBUG_3(("nta: failed to reduce %s SRV priority\n", sq->sq_domain));
-      }
-    }
-  }
+  for (sq = sr->sr_done; sq; sq = sq->sq_next)
+    if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio)
+      maxprio = sq->sq_priority;
+  
+  for (sq = sr->sr_done; sq; sq = sq->sq_next) {
+    int modified;
 
-  return outgoing_resolve_next(orq);
+    if (sq->sq_type != sres_type_srv || strcmp(proto, sq->sq_proto))
+      continue;
+
+    /* modify the SRV record(s) corresponding to the latest A/AAAA record */
+    modified = sres_set_cached_srv_priority(
+      orq->orq_agent->sa_resolver, 
+      sq->sq_domain, 
+      target,
+      sq->sq_port[0] ? (uint16_t)strtoul(sq->sq_port, NULL, 10) : 0,
+      orq->orq_agent->sa_graylist,
+      maxprio + 1);
+
+    if (modified >= 0)
+      SU_DEBUG_3(("nta: reduced priority of %d %s SRV records (increase value to %u)\n",
+                 modified, sq->sq_domain, maxprio + 1));
+    else
+      SU_DEBUG_3(("nta: failed to reduce %s SRV priority\n", sq->sq_domain));
+  }
 }
 
 /** Cancel resolver query */
@@ -9765,6 +9778,9 @@ outgoing_query_results(nta_outgoing_t *orq,
   }
   else {
     sq->sq_next = sr->sr_done, sr->sr_done = sq;
+
+    if (rlen == 0 && sq->sq_grayish)
+      outgoing_graylist(orq, sq);
   }
 
   if (rlen > 1) 
index 0cc7fe4d8a5b4193c645badb5f9ed473e9db18e7..4ee13d7f6daa9eec8e4b61cef27457f212ad0496 100644 (file)
@@ -2256,11 +2256,15 @@ int test_dialog(agent_t *ag)
   END();
 }
 
+#ifndef MSG_TRUNC
+#define MSG_TRUNC 0
+#endif
+
 static ssize_t recv_udp(agent_t *ag, void *b, size_t size)
 {
   ssize_t n;
 
-  memset(b, size, 0);
+  memset(b, 0, size);
   
   for (;;) {
     su_root_step(ag->ag_root, 10L);
@@ -2305,10 +2309,6 @@ int test_merging(agent_t *ag)
   su_sockaddr_t *su = ag->ag_su_nta;
   socklen_t sulen = ag->ag_su_nta_len;
 
-#ifndef MSG_TRUNC
-#define MSG_TRUNC 0
-#endif
-
   /* Empty sink socket */
   su_setblocking(ag->ag_sink_socket, 0);
   while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)