sync to darcs tree

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
This commit is contained in:
Michael Jerris 2008-01-26 19:57:55 +00:00
parent c9d1827232
commit aa1b4bb463
4 changed files with 90 additions and 121 deletions

View 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

View 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

View 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,50 +9094,61 @@ 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;
SU_DEBUG_5(("nta: no response from %s:%s;transport=%s\n", target, sq->sq_port, proto));
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;
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;
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));
}
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);
}
}
return outgoing_resolve_next(orq);
}
/** 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;
/* Don't know how to graylist but SRV records */
if (sq->sq_otype != sres_type_srv)
return;
SU_DEBUG_5(("nta: graylisting %s:%s;transport=%s\n", target, sq->sq_port, proto));
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;
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;
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 */
su_inline void outgoing_cancel_resolver(nta_outgoing_t *orq)
{
@ -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)

View 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)