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:
parent
c9d1827232
commit
aa1b4bb463
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue