New patches: [configure sun studio 64 mike@jerris.com**20080227210618] { hunk ./configure.ac 65 + +AC_DEFUN([AX_COMPILER_VENDOR], +[ +AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, + [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown + # note: don't check for gcc first since some other compilers define __GNUC__ + for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do + vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ +#if !($vencpp) + thisisanerror; +#endif +])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) + done + ]) +]) + +AX_COMPILER_VENDOR + +# Enable 64 bit build +AC_ARG_ENABLE(64, +[AC_HELP_STRING([--enable-64],[build with 64 bit support])],[enable_64="$enable_64"],[enable_64="no"]) + +if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then + if test "${enable_64}" = "yes"; then + SOFIA_CFLAGS="$SOFIA_CFLAGS -m64" + LDFLAGS="-m64 -Wl,-64" + export PKG_CONFIG_PATH=/usr/lib/64/pkgconfig + fi +fi } [func name clonflict mike@jerris.com**20080227210645] { hunk ./libsofia-sip-ua/bnf/bnf.c 852 - if (s[len] == '\0' && inet_pton(AF_INET6, s, addr) == 1) { + if (s[len] == '\0' && su_inet_pton(AF_INET6, s, addr) == 1) { hunk ./libsofia-sip-ua/bnf/bnf.c 871 - if (s[len] == '\0' && inet_pton(AF_INET, s, addr) == 1) + if (s[len] == '\0' && su_inet_pton(AF_INET, s, addr) == 1) hunk ./libsofia-sip-ua/nta/nta.c 1821 - inet_ntop(su->su_family, SU_ADDR(su), host, sizeof host); + su_inet_ntop(su->su_family, SU_ADDR(su), host, sizeof host); hunk ./libsofia-sip-ua/nta/nta.c 7535 - inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), + su_inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), hunk ./libsofia-sip-ua/nta/nta.c 9648 - inet_ntop(AF_INET6, &aaaa->aaaa_addr, addr, sizeof(addr)); + su_inet_ntop(AF_INET6, &aaaa->aaaa_addr, addr, sizeof(addr)); hunk ./libsofia-sip-ua/nta/nta.c 9731 - inet_ntop(AF_INET, &a->a_addr, addr, sizeof(addr)); + su_inet_ntop(AF_INET, &a->a_addr, addr, sizeof(addr)); hunk ./libsofia-sip-ua/nth/nth_client.c 1078 - inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), + su_inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), hunk ./libsofia-sip-ua/sresolv/sres.c 169 -int inet_pton(int af, char const *src, void *dst); +int su_inet_pton(int af, char const *src, void *dst); +#else +#define su_inet_pton inet_pton hunk ./libsofia-sip-ua/sresolv/sres.c 174 -const char *inet_ntop(int af, void const *src, char *dst, size_t size); +const char *su_inet_ntop(int af, void const *src, char *dst, size_t size); +#else +#define su_inet_ntop inet_ntop hunk ./libsofia-sip-ua/sresolv/sres.c 2426 - err = inet_pton(sa->sa_family = AF_INET6, server, &sin6->sin6_addr); + err = su_inet_pton(sa->sa_family = AF_INET6, server, &sin6->sin6_addr); hunk ./libsofia-sip-ua/sresolv/sres.c 2433 - err = inet_pton(sa->sa_family = AF_INET, server, &sin->sin_addr); + err = su_inet_pton(sa->sa_family = AF_INET, server, &sin->sin_addr); hunk ./libsofia-sip-ua/sresolv/sres.c 2521 - inet_ntop(dns->dns_addr->ss_family, SS_ADDR(dns->dns_addr), + su_inet_ntop(dns->dns_addr->ss_family, SS_ADDR(dns->dns_addr), hunk ./libsofia-sip-ua/sresolv/sres.c 2606 - inet_ntop(family, addr, ipaddr, sizeof ipaddr); + su_inet_ntop(family, addr, ipaddr, sizeof ipaddr); hunk ./libsofia-sip-ua/sresolv/sres.c 2611 - inet_ntop(family, addr, ipaddr, sizeof ipaddr); + su_inet_ntop(family, addr, ipaddr, sizeof ipaddr); hunk ./libsofia-sip-ua/sresolv/sres.c 3220 - inet_ntop(from->ss_family, SS_ADDR(from), + su_inet_ntop(from->ss_family, SS_ADDR(from), hunk ./libsofia-sip-ua/sresolv/sres.c 3284 - inet_ntop(AF_INET, in_addr, buf, sizeof(buf)); + su_inet_ntop(AF_INET, in_addr, buf, sizeof(buf)); hunk ./libsofia-sip-ua/sresolv/sres.c 3290 - inet_ntop(AF_INET6, in_addr, buf, sizeof(buf)); + su_inet_ntop(AF_INET6, in_addr, buf, sizeof(buf)); hunk ./libsofia-sip-ua/sresolv/sres.c 3417 - inet_ntop(AF_INET, &sin->sin_addr, host, sizeof host); + su_inet_ntop(AF_INET, &sin->sin_addr, host, sizeof host); hunk ./libsofia-sip-ua/sresolv/sres.c 3422 - inet_ntop(AF_INET6, &sin6->sin6_addr, host, sizeof host); + su_inet_ntop(AF_INET6, &sin6->sin6_addr, host, sizeof host); hunk ./libsofia-sip-ua/stun/stun.c 809 - inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), + su_inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), hunk ./libsofia-sip-ua/stun/stun.c 823 - inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), + su_inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), hunk ./libsofia-sip-ua/stun/stun.c 870 - inet_ntop(family, SU_ADDR(su), addr, sizeof(addr)))); + su_inet_ntop(family, SU_ADDR(su), addr, sizeof(addr)))); hunk ./libsofia-sip-ua/stun/stun.c 1699 - inet_ntop(recv.su_family, SU_ADDR(&recv), addr, sizeof(addr)), + su_inet_ntop(recv.su_family, SU_ADDR(&recv), addr, sizeof(addr)), hunk ./libsofia-sip-ua/stun/stun.c 2019 - inet_ntop(AF_INET, SU_ADDR(su), addr, sizeof(addr)))); + su_inet_ntop(AF_INET, SU_ADDR(su), addr, sizeof(addr)))); hunk ./libsofia-sip-ua/stun/stun.c 2037 - inet_ntop(af, SU_ADDR(li->li_addr), addr, sizeof(addr)))); + su_inet_ntop(af, SU_ADDR(li->li_addr), addr, sizeof(addr)))); hunk ./libsofia-sip-ua/stun/stun.c 2763 - inet_ntop(y_addr.su_family, SU_ADDR(&y_addr), addr, sizeof(addr)), + su_inet_ntop(y_addr.su_family, SU_ADDR(&y_addr), addr, sizeof(addr)), hunk ./libsofia-sip-ua/stun/stun.c 2951 - inet_ntop(sa->su_family, SU_ADDR(sa), addr, sizeof(addr)), + su_inet_ntop(sa->su_family, SU_ADDR(sa), addr, sizeof(addr)), hunk ./libsofia-sip-ua/stun/stun_common.c 225 - inet_ntop(addr->su_family, SU_ADDR(addr), ipaddr, sizeof(ipaddr)), + su_inet_ntop(addr->su_family, SU_ADDR(addr), ipaddr, sizeof(ipaddr)), hunk ./libsofia-sip-ua/stun/stun_common.c 642 - inet_ntop(to_addr->su_family, SU_ADDR(to_addr), ipaddr, sizeof(ipaddr)); + su_inet_ntop(to_addr->su_family, SU_ADDR(to_addr), ipaddr, sizeof(ipaddr)); hunk ./libsofia-sip-ua/stun/stun_mini.c 186 - inet_ntop(sin->sin_family, &sin->sin_addr, buffer, sizeof buffer); + su_inet_ntop(sin->sin_family, &sin->sin_addr, buffer, sizeof buffer); hunk ./libsofia-sip-ua/su/inet_ntop.c 48 -inet_ntop(int af, void const *src, char *dst, size_t size) +su_inet_ntop(int af, void const *src, char *dst, size_t size) hunk ./libsofia-sip-ua/su/inet_pton.c 48 -inet_pton(int af, const char * src, void * dst) +su_inet_pton(int af, const char * src, void * dst) hunk ./libsofia-sip-ua/su/sofia-sip/su.h 324 -SOFIAPUBFUN int inet_pton(int af, char const *src, void *dst); -SOFIAPUBFUN const char *inet_ntop(int af, void const *src, +SOFIAPUBFUN int su_inet_pton(int af, char const *src, void *dst); +SOFIAPUBFUN const char *su_inet_ntop(int af, void const *src, hunk ./libsofia-sip-ua/su/sofia-sip/su.h 354 +#define su_inet_pton inet_pton +#define su_inet_ntop inet_ntop hunk ./libsofia-sip-ua/su/su_localinfo.c 1599 - if (!inet_ntop(su->su_family, SU_ADDR(su), name, sizeof name)) + if (!su_inet_ntop(su->su_family, SU_ADDR(su), name, sizeof name)) hunk ./libsofia-sip-ua/tport/tport.c 2957 - inet_ntop(su->su_family, SU_ADDR(su), ipaddr + 1, sizeof(ipaddr) - 1); + su_inet_ntop(su->su_family, SU_ADDR(su), ipaddr + 1, sizeof(ipaddr) - 1); hunk ./libsofia-sip-ua/tport/tport.c 2961 - inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)); + su_inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)); hunk ./libsofia-sip-ua/tport/tport.c 2964 - inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)); + su_inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)); hunk ./libsofia-sip-ua/tport/tport.c 3952 - inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)), + su_inet_ntop(su->su_family, SU_ADDR(su), ipaddr, sizeof(ipaddr)), hunk ./libsofia-sip-ua/tport/tport.c 4436 - if (inet_pton(su->su_family, host, SU_ADDR(su)) > 0) { + if (su_inet_pton(su->su_family, host, SU_ADDR(su)) > 0) { hunk ./libsofia-sip-ua/tport/tport.c 4716 - if (inet_ntop(su->su_family, SU_ADDR(su), b, bufsize) == NULL) + if (su_inet_ntop(su->su_family, SU_ADDR(su), b, bufsize) == NULL) hunk ./libsofia-sip-ua/tport/tport_logging.c 151 - inet_ntop(su->su_family, SU_ADDR(su), name, sizeof(name)); + su_inet_ntop(su->su_family, SU_ADDR(su), name, sizeof(name)); } [max_prodceeding mike@jerris.com**20080227211149] { hunk ./libsofia-sip-ua/nta/nta.c 348 - * NTATAG_TIMER_C(), + * NTATAG_TIMER_C(), NTATAG_MAX_PROCEEDING(), hunk ./libsofia-sip-ua/nta/nta.c 887 - * Setting the parameters NTATAG_MAXSIZE(), NTATAG_UDP_MTU(), + * Setting the parameters NTATAG_MAXSIZE(), NTATAG_UDP_MTU(), NTATAG_MAX_PROCEEDING(), hunk ./libsofia-sip-ua/nta/nta.c 905 - * NTATAG_TIMER_C(), + * NTATAG_TIMER_C(), NTATAG_MAX_PROCEEDING(), hunk ./libsofia-sip-ua/nta/nta.c 938 + usize_t max_proceeding = agent->sa_max_proceeding; hunk ./libsofia-sip-ua/nta/nta.c 992 + NTATAG_MAX_PROCEEDING_REF(max_proceeding), hunk ./libsofia-sip-ua/nta/nta.c 1097 + if (max_proceeding == 0) max_proceeding = SIZE_MAX; + agent->sa_max_proceeding = max_proceeding; + hunk ./libsofia-sip-ua/nta/nta.c 1214 - * NTATAG_MERGE_482_REF(), + * NTATAG_MERGE_482_REF(), NTATAG_MAX_PROCEEDING_REF(), hunk ./libsofia-sip-ua/nta/nta.c 1263 + NTATAG_MAX_PROCEEDING(agent->sa_max_proceeding), hunk ./libsofia-sip-ua/nta/nta.c 2441 - SU_DEBUG_5(("nta: %s (%u) %s\n", - method_name, cseq, "going to a default leg")); - leg_recv(leg, msg, sip, tport); + if (method == sip_method_invite && agent->sa_in.proceeding->q_length >= agent->sa_max_proceeding) { + SU_DEBUG_5(("nta: proceeding queue full for %s (%u)\n", method_name, cseq)); + nta_msg_treply(agent, msg, SIP_503_SERVICE_UNAVAILABLE, + NTATAG_TPORT(tport), + TAG_END()); + return; + } else { + SU_DEBUG_5(("nta: %s (%u) %s\n", method_name, cseq, "going to a default leg")); + leg_recv(leg, msg, sip, tport); + } hunk ./libsofia-sip-ua/nta/nta_internal.h 147 + + /** Maximum size of proceeding queue */ + size_t sa_max_proceeding; hunk ./libsofia-sip-ua/nta/nta_tag.c 402 + +/**@def NTATAG_MAX_PROCEEDING(x) + * + * Maximum size of proceeding queue. + * + * If the size of the proceedng message queue would exceed the + * given limit, the stack will automatically respond with 503 + * Service Unavailable. + * + * @par Used with + * nua_create(), nua_set_params(), + * nta_agent_create(), nta_agent_set_params() + * + * @par Parameter type + * - #usize_t + * + * @par Values + * - Maximum acceptable size of a queue (size_t). + * + */ +tag_typedef_t ntatag_max_proceeding = USIZETAG_TYPEDEF(max_proceeding); hunk ./libsofia-sip-ua/nta/sofia-sip/nta_tag.h 157 + +NTA_DLL extern tag_typedef_t ntatag_max_proceeding; +#define NTATAG_MAX_PROCEEDING(x) ntatag_max_proceeding, tag_usize_v((x)) + +NTA_DLL extern tag_typedef_t ntatag_max_proceeding_ref; +#define NTATAG_MAX_PROCEEDING_REF(x) ntatag_max_proceeding_ref, tag_usize_vr(&(x)) hunk ./libsofia-sip-ua/nua/nua_params.c 1538 + usize_t max_proceeding = 0; hunk ./libsofia-sip-ua/nua/nua_params.c 1554 + NTATAG_MAX_PROCEEDING_REF(max_proceeding), hunk ./libsofia-sip-ua/nua/nua_params.c 1696 + NTATAG_MAX_PROCEEDING(max_proceeding), hunk ./libsofia-sip-ua/su/sofia-sip/su_tag.h 219 +#define tag_size_v(v) (tag_value_t)(v) +#define tag_size_vr(v) (tag_value_t)(v) } [doxygen ifdefs mike@jerris.com**20080227211411] { hunk ./libsofia-sip-ua/nta/nta.c 282 -extern char const NTA_DEBUG[]; +#ifdef DOXYGEN +extern char const NTA_DEBUG[]; /* dummy declaration for Doxygen */ +#endif hunk ./libsofia-sip-ua/sresolv/sres.c 556 -#if DOXYGEN_ONLY hunk ./libsofia-sip-ua/sresolv/sres.c 566 -extern SRESOLV_DEBUG; +#ifdef DOXYGEN +extern char const SRESOLV_DEBUG[]; /* dummy declaration for Doxygen */ hunk ./libsofia-sip-ua/stun/stun_internal.h 74 +#ifdef DOXYGEN hunk ./libsofia-sip-ua/stun/stun_internal.h 76 +#endif hunk ./libsofia-sip-ua/tport/tport_logging.c 55 +#ifdef DOXYGEN hunk ./libsofia-sip-ua/tport/tport_logging.c 57 +#endif hunk ./libsofia-sip-ua/tport/tport_logging.c 69 +#ifdef DOXYGEN hunk ./libsofia-sip-ua/tport/tport_logging.c 71 +#endif hunk ./libsofia-sip-ua/tport/tport_logging.c 82 +#ifdef DOXYGEN hunk ./libsofia-sip-ua/tport/tport_logging.c 84 +#endif } [msvc2008 mike@jerris.com**20080227213431] { hunk ./libsofia-sip-ua/nua/nua_register.c 1294 - nta_agent_bind_tport_update(nua->nua_nta, nua, nua_stack_tport_update); + nta_agent_bind_tport_update(nua->nua_nta, (nta_update_magic_t *)nua, nua_stack_tport_update); hunk ./libsofia-sip-ua/nua/nua_session.c 1104 + hunk ./libsofia-sip-ua/sresolv/sres.c 144 -#if !defined(IPPROTO_IPV6) +#if !defined(IPPROTO_IPV6) && (_WIN32_WINNT < 0x0600) hunk ./libsofia-sip-ua/stun/stun.c 43 +#include hunk ./libsofia-sip-ua/stun/stun_common.c 47 +#include hunk ./libsofia-sip-ua/stun/stun_mini.c 43 +#include hunk ./libsofia-sip-ua/tport/tport_internal.h 69 + +#if (_WIN32_WINNT >= 0x0600) +#ifndef HAVE_MSG_TRUNC +#define HAVE_MSG_TRUNC 1 +#endif +#endif hunk ./libsofia-sip-ua/tport/tport_type_tcp.c 320 + hunk ./libsofia-sip-ua/tport/tport_type_udp.c 241 - (void *)ai->ai_addr, ai->ai_addrlen); + (void *)ai->ai_addr, (socklen_t)ai->ai_addrlen); hunk ./win32/config.h.in 460 + +#ifndef _MSC_VER +#define vsnprintf _vsnprintf +#endif +#if _MSC_VER < 1500 hunk ./win32/config.h.in 466 +#endif hunk ./win32/sofia-sip/su_configure.h 107 -#define vsnprintf _vsnprintf +#ifndef _MSC_VER +#define vsnprintf _vsnprintf +#endif +#if _MSC_VER < 1500 +#define vsnprintf _vsnprintf +#endif } [line endings mike@jerris.com**20080227213604] { hunk ./libsofia-sip-ua/su/inet_ntop.c 82 - if (snprintf(tmp, sizeof tmp, fmt, + if (snprintf(tmp, sizeof tmp, fmt, hunk ./libsofia-sip-ua/su/su_open_c_localinfo.cpp 1 -/* - * This file is part of the Sofia-SIP package - * - * Copyright (C) 2005 Nokia Corporation. - * - * Contact: Pekka Pessi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - * - */ - -/**@ingroup su_open_c_localinfo.cpp - * - * @CFILE su_open_c_localinfo.cpp - * Functionality for choosing an access point for sockets on Symbian. - * - * @author Martti Mela - * @date Created: Fri May 18 14:31:41 2007 mela - * - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - - -su_sockaddr_t sa_global[1]; - -/* Copy IP address for the sockaddr structure. - * - * @param su pointer to allocated su_sockaddr_t structure - * - * @return 0 if successful. - */ -extern "C" int su_get_local_ip_addr(su_sockaddr_t *su) -{ - su->su_sin.sin_addr.s_addr = sa_global->su_sin.sin_addr.s_addr; - su->su_family = sa_global->su_family; - su->su_len = sa_global->su_len; - - return 0; -} - - -/* Set up the access point for the stack. Code adapted from Forum Nokia, - * http://wiki.forum.nokia.com/index.php/LocalDeviceIpAddress. - * - * @param su su_sockaddr_t structure - * @param ifindex pointer to interface index - * - * @return Connection object - */ -extern "C" void *su_localinfo_ap_set(su_sockaddr_t *su, int *ifindex) -{ - TCommDbConnPref iPref; - RSocketServ aSocketServ; - RSocket sock; - - /* Get the IAP id of the underlying interface of this RConnection */ - TUint32 iapId; - - iPref.SetDirection(ECommDbConnectionDirectionOutgoing); - iPref.SetDialogPreference(ECommDbDialogPrefPrompt); - iPref.SetBearerSet(KCommDbBearerUnknown /*PSD*/); - - aSocketServ = RSocketServ(); - aSocketServ.Connect(); - RConnection *aConnection = new RConnection(); - aConnection->Open(aSocketServ); - aConnection->Start(iPref); - - User::LeaveIfError(sock.Open(aSocketServ, KAfInet, KSockStream, - KProtocolInetTcp)); - - User::LeaveIfError(aConnection->GetIntSetting(_L("IAP\\Id"), iapId)); - - /* Get IP information from the socket */ - TSoInetInterfaceInfo ifinfo; - TPckg ifinfopkg(ifinfo); - - TSoInetIfQuery ifquery; - TPckg ifquerypkg(ifquery); - - /* To find out which interfaces are using our current IAP, we - * must enumerate and go through all of them and make a query - * by name for each. */ - User::LeaveIfError(sock.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl)); - while(sock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, ifinfopkg) == KErrNone) { - ifquery.iName = ifinfo.iName; - TInt err = sock.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, ifquerypkg); - - /* IAP ID is index 1 of iZone */ - if(err == KErrNone && ifquery.iZone[1] == iapId) { - /* We have found an interface using the IAP we are interested in. */ - if(ifinfo.iAddress.Address() > 0) { - /* found a IPv4 address */ - su->su_sin.sin_addr.s_addr = htonl(ifinfo.iAddress.Address()); - sa_global->su_sin.sin_addr.s_addr = su->su_sin.sin_addr.s_addr; - sa_global->su_family = su->su_family = AF_INET; - sa_global->su_len = su->su_len = 28; - *ifindex = iapId; - return (void *) aConnection; - } - } - else if(err != KErrNone) - break; - } - - sock.Close(); -} - - -/* Deinitialize the access point in use. - * - * @param aconn Pointer to connection object - * - * @return 0 if successful. - */ -extern "C" int su_localinfo_ap_deinit(void *aconn) -{ - RConnection *aConnection = (RConnection *) aconn; - aConnection->Stop(); - aConnection->Close(); - delete aConnection; - return 0; -} +/* + * This file is part of the Sofia-SIP package + * + * Copyright (C) 2005 Nokia Corporation. + * + * Contact: Pekka Pessi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +/**@ingroup su_open_c_localinfo.cpp + * + * @CFILE su_open_c_localinfo.cpp + * Functionality for choosing an access point for sockets on Symbian. + * + * @author Martti Mela + * @date Created: Fri May 18 14:31:41 2007 mela + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + + +su_sockaddr_t sa_global[1]; + +/* Copy IP address for the sockaddr structure. + * + * @param su pointer to allocated su_sockaddr_t structure + * + * @return 0 if successful. + */ +extern "C" int su_get_local_ip_addr(su_sockaddr_t *su) +{ + su->su_sin.sin_addr.s_addr = sa_global->su_sin.sin_addr.s_addr; + su->su_family = sa_global->su_family; + su->su_len = sa_global->su_len; + + return 0; +} + + +/* Set up the access point for the stack. Code adapted from Forum Nokia, + * http://wiki.forum.nokia.com/index.php/LocalDeviceIpAddress. + * + * @param su su_sockaddr_t structure + * @param ifindex pointer to interface index + * + * @return Connection object + */ +extern "C" void *su_localinfo_ap_set(su_sockaddr_t *su, int *ifindex) +{ + TCommDbConnPref iPref; + RSocketServ aSocketServ; + RSocket sock; + + /* Get the IAP id of the underlying interface of this RConnection */ + TUint32 iapId; + + iPref.SetDirection(ECommDbConnectionDirectionOutgoing); + iPref.SetDialogPreference(ECommDbDialogPrefPrompt); + iPref.SetBearerSet(KCommDbBearerUnknown /*PSD*/); + + aSocketServ = RSocketServ(); + aSocketServ.Connect(); + RConnection *aConnection = new RConnection(); + aConnection->Open(aSocketServ); + aConnection->Start(iPref); + + User::LeaveIfError(sock.Open(aSocketServ, KAfInet, KSockStream, + KProtocolInetTcp)); + + User::LeaveIfError(aConnection->GetIntSetting(_L("IAP\\Id"), iapId)); + + /* Get IP information from the socket */ + TSoInetInterfaceInfo ifinfo; + TPckg ifinfopkg(ifinfo); + + TSoInetIfQuery ifquery; + TPckg ifquerypkg(ifquery); + + /* To find out which interfaces are using our current IAP, we + * must enumerate and go through all of them and make a query + * by name for each. */ + User::LeaveIfError(sock.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl)); + while(sock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, ifinfopkg) == KErrNone) { + ifquery.iName = ifinfo.iName; + TInt err = sock.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, ifquerypkg); + + /* IAP ID is index 1 of iZone */ + if(err == KErrNone && ifquery.iZone[1] == iapId) { + /* We have found an interface using the IAP we are interested in. */ + if(ifinfo.iAddress.Address() > 0) { + /* found a IPv4 address */ + su->su_sin.sin_addr.s_addr = htonl(ifinfo.iAddress.Address()); + sa_global->su_sin.sin_addr.s_addr = su->su_sin.sin_addr.s_addr; + sa_global->su_family = su->su_family = AF_INET; + sa_global->su_len = su->su_len = 28; + *ifindex = iapId; + return (void *) aConnection; + } + } + else if(err != KErrNone) + break; + } + + sock.Close(); +} + + +/* Deinitialize the access point in use. + * + * @param aconn Pointer to connection object + * + * @return 0 if successful. + */ +extern "C" int su_localinfo_ap_deinit(void *aconn) +{ + RConnection *aConnection = (RConnection *) aconn; + aConnection->Stop(); + aConnection->Close(); + delete aConnection; + return 0; +} } [dafesafe free mike@jerris.com**20080227213635] { hunk ./libsofia-sip-ua/su/su_alloc.c 944 - +#define safe_free(it) if (it) { free(it); it = NULL; } hunk ./libsofia-sip-ua/su/su_alloc.c 980 - free(b->sub_nodes[i].sua_data); + safe_free(b->sub_nodes[i].sua_data); + hunk ./libsofia-sip-ua/su/su_alloc.c 986 - free(b->sub_preload); + safe_free(b->sub_preload); hunk ./libsofia-sip-ua/su/su_alloc.c 988 - free(b->sub_stats); + safe_free(b->sub_stats); hunk ./libsofia-sip-ua/su/su_alloc.c 990 - free(b); + safe_free(b); } Context: [nua_session.c: determine INVITE overlap with re-INVITEs, too Pekka.Pessi@nokia.com**20080226180206] [test_nua.c: fixed tests Pekka.Pessi@nokia.com**20080226174552] [nua_session.c: fixed non-compiling fix on session state check Pekka.Pessi@nokia.com**20080226164000] [nua_stack.c: pass events while in shutdown if NUTAG_SHUTDOWN_EVENTS(1) has been set Pekka.Pessi@nokia.com**20080206170513] [nua: added NUTAG_SUB_EXPIRES() Pekka.Pessi@nokia.com**20080225191415] [nua: using global preferences. Added NUTAG_SHUTDOWN_EVENTS(). Pekka.Pessi@nokia.com**20080206170546] [nua_subnotref.c: fixed problems re-calculating the subscription duration upon NOTIFY Pekka.Pessi@nokia.com**20080225144939 Thanks for Colin Whittaker for reporting this problem. ] [nua_subnotref.c: do not terminate subscriptions immediately after receiving 200 OK to un-SUBSCRIBE Pekka Pessi **20080213142324] [nua_session.c: ensure correct call state Pekka.Pessi@nokia.com**20080226161940 Avoid assert() on bad input from network - crash reported by Michael Jerris. Also if calls are being terminated, reject new INVITE/UPDATE/PRACK requests with 481. ] [sdp_print.c: pt 9 is, like, g722. 19 is used by nobody, so it can be used as filler? Pekka.Pessi@nokia.com**20080226163319] [nua: initial fix for sf.net bug #1827511 Pekka.Pessi@nokia.com**20080226160937 BYE can now be challenged. ] [nua: renamed crm_deinit as crm_complete, commented nua_client_methods_t initializers Pekka.Pessi@nokia.com**20080225171031] [tport.c: tport_name_dup() now validates the input Pekka.Pessi@nokia.com**20080212192626] [test_tport.c: fixed type-punning warning. Pekka.Pessi@nokia.com**20080201151309] [tport_tls.c: cleared confused logging levels Pekka.Pessi@nokia.com**20080201151025] [tport_tls.c: restructured error logging code. Pekka.Pessi@nokia.com**20080201144142] [su_root.c: try not to segfault in su_msg_destroy() Pekka.Pessi@nokia.com**20080128143048 Reduced window for race condition in su_msg_destroy(). Patch by Michael Jerris. ] [su_alloc.c: su_free() handles NULL gracefully Pekka.Pessi@nokia.com**20080128142703 Patch by Michael Jerris. ] [nta.c, sofia-sip.nta.h: added nta_leg_get_seq(), nta_leg_get_rseq() Pekka.Pessi@nokia.com**20080124082658] [nta.c: fixed graylisting if used with IPv4/IPv6 only Pekka.Pessi@nokia.com**20080125093139] [RELEASE, configure.ac: 1.12.8devel Pekka.Pessi@nokia.com**20080123192507] [TAG 1.12.8 Pekka Pessi **20080123182552] [TAG rel-sofia-sip_1_12_8 Pekka Pessi **20080123182546] [RELEASE, configure.ac: release 1.12.8 Pekka Pessi **20080123182542] [test_nta.c: fixed memset() usage. MSG_TRUNC. Pekka.Pessi@nokia.com**20080123182239] [configure.ac: prerelease version Pekka.Pessi@nokia.com**20080117125729] [nta.c: asserting in proper place when handling queue tail Pekka.Pessi@nokia.com**20080123160558] [nta.c: ignore tags in nta_leg_by_dialog() if they are empty strings Pekka.Pessi@nokia.com**20080123160523] [soa_static.c: fixed signedness error Pekka Pessi **20080123150730] [nta.c: added NTATAG_GRAYLIST(). Pekka.Pessi@nokia.com**20080122185944 Use NTATAG_GRAYLIST() as ttl value for sres_set_cached_srv_priority(). ] [sres: added ttl parameter to sres_set_cached_srv_priority() and sres_cache_set_srv_priority(). Pekka.Pessi@nokia.com**20080122185738] [test_soa.c: testing hold with inactive, offered mode and setting remote activity flags while in hold Pekka.Pessi@nokia.com**20080122163544] [sip_util.c: updated sip_response_terminates_dialog() as per RFC 5057. Pekka.Pessi@nokia.com**20080122161504 Changes handling of 423 in case of SUBSCRIBE. ] [soa_static.c: soa_sdp_mode_set() now includes wanted media state in offer Pekka.Pessi@nokia.com**20080121190808 The wanted media state is based on original user SDP and SOATAG_HOLD() content. Removed soa_sdp_mode_set_is_needed(), using dry-run parameter instead. ] [soa.c: using session state in soa_set_activity() Pekka.Pessi@nokia.com**20080121190635 The media mode bits are set using (local) session description instead of remote offer/answer when O/A has been completed. ] [soa_static.c: cleaned inactive hold, added tests Pekka Pessi **20080117164046] [nta.c: NetModule hack re-prioritizing SRV records Pekka.Pessi@nokia.com**20080111171112 Original hack by Stefan Leuenberger . The hack reprioritizes the SRV records used with transaction in case a server refuses connection or it does not answer. ] [su_addrinfo.c: if su_getaddrinfo() service is NULL, try both with "0" and NULL Pekka.Pessi@nokia.com**20080111142846] [soa_tag.c: documented SOATAG_HOLD() inactive mode Pekka.Pessi@nokia.com**20080111141518] [Using # in SOATAG_HOLD to set media as inactive instead of sendonly Bernhard Suttner **20080111141201] [test_100rel.c: added test for redirect after 100rel response. Pekka.Pessi@nokia.com**20080123181816] [nua: terminate dialog when redirected and re-establish it with new request Pekka.Pessi@nokia.com**20080123180855] [torture_sip.c: added tests for accessing other extra headers beside P-Asserted-Identity/P-Preferred-Identity Pekka.Pessi@nokia.com**20080123171109] [nta.c: now using RFC3261-compliant dialog-matching Pekka.Pessi@nokia.com**20080123160111] [test_tport.c: using blocking sockets in test_incomplete() Pekka Pessi **20080123151336] [torture_su.c: set blocking on Pekka Pessi **20080123151300] [win32 project files: fixed slash direction Pekka Pessi **20080123151114] [test_nta.c: fixed receiving with sink socket Pekka.Pessi@nokia.com**20080123144750] [sip_extra.c, sip_parser.c: updated documentation Pekka.Pessi@nokia.com**20080123115611] [RELEASE: updated. Pekka.Pessi@nokia.com**20080122190429] [docs/Makefile.am, docs/conformance.docs: fixed links to RFC 5057. Pekka.Pessi@nokia.com**20080122175159] [nua/test_refer.c: run test_challenge_refer() only if we use proxy Pekka.Pessi@nokia.com**20080122174902 Test case is now more deterministic, too. ] [nta.c: fixed memory corruption in case sending ACK failed Pekka.Pessi@nokia.com**20080122172741 Thanks for Fabio Margarido for reporting this problem. ] [test_auth_digest.c: testing empty realm Pekka.Pessi@nokia.com**20080122163416] [conformance.docs: added RFC 5057 (sipping-dialogusage) Pekka.Pessi@nokia.com**20080122163401] [nua_stack.c: return specific error phrases from nua_client_init_request() Pekka.Pessi@nokia.com**20080121192031 As suggested by Jerry Richards. ] [nua_subnotref.c: fixed REFER re-try case Pekka.Pessi@nokia.com**20080121190911 REFER trashed its dialog when it got retried if there was no other dialog usages. ] [nua: removed asserts() on hairy dialog/request handling cases Pekka.Pessi@nokia.com**20080121180049] [TLS debug cleanup, 2/2. Stefan Knoblich**20080121174504 Silence openssl messages, part 2 of 2. Changed to TPORT_DEBUG=1 (thanks MikeJ). This one converts all ERR_print_errors() calls ] [stun.c: default log level to the same as SU_DEBUG define Pekka.Pessi@nokia.com**20080121171639 Patch by Michael Jerris ] [sres.c: default log level to the same as SU_DEBUG define Pekka.Pessi@nokia.com**20080121171519 Patch by Michael Jerris ] [su_global_log.c: disable warning on SU_DEBUG[] (Doxygen-only variable) Pekka.Pessi@nokia.com**20080121171425 Patch from Michael Jerris. ] [tport: build fixes from Freeswitch Pekka.Pessi@nokia.com**20080121170538] [TLS debug cleanup Stefan Knoblich**20080121153950] [nua: Added NUA_ERROR_AT() macro Pekka.Pessi@nokia.com**20080118160610 Made internally generated 900 (and 904) response phrases unique as suggested by Jerry Richards. ] [nua_stack.c: removed noisy debug message from nua_client_request_sendmsg() Pekka Pessi **20080117164235] [Makefile.am: added hide_emails.sh to dist Pekka Pessi **20080117164154] [autogen.sh: use automake 1.9 unless otherwise specified Pekka Pessi **20080117144848] [libsofia-sip-ua/docs/Doxyfile.aliases: added @NEW_1_12_8 and @VERSION_1_12_8 Pekka.Pessi@nokia.com**20080117125518] [RELEASE: added new features and bug fixes since 1.12.7 Pekka.Pessi@nokia.com**20080117125321] [AUTHORS: updated Pekka.Pessi@nokia.com**20080117125301] [su_alloc.c: marked new features for release 1.12.8. Pekka.Pessi@nokia.com**20080117125233] [sofia-sip/htable2.h: marked new features for release 1.12.8 Pekka.Pessi@nokia.com**20080117125203] [sofia-sip/su_wait.h, su_port.h, su_root.c: documented new functions and types for 1.12.8 Pekka.Pessi@nokia.com**20080117125132] [sres.c, sres_cache.c: documented sres_set_cached_srv_priority(), sres_cache_set_srv_priority() Pekka.Pessi@nokia.com**20080117124810] [nua: fix sf.net bug #1867753 (avoid duplicating initial route set) Pekka.Pessi@nokia.com**20080116182047] [su.h: IPv6 fix for Vista SDK Pekka.Pessi@nokia.com**20080114115917 Patch by Michael Jerris ] [tport_internal.h: grammar in doc Pekka.Pessi@nokia.com**20080111171933] [Makefile.am: fixed dist target Pekka.Pessi@nokia.com**20080111171519] [sres.c, sres_cache.c: NetModule hack for re-prioritizing SRV records Pekka.Pessi@nokia.com**20080111171223 Original hack by Stefan Leuenberger . The hack reprioritizes the SRV records used with transaction in case a server refuses connection or it does not answer. New functions sres_cache_set_srv_priority() and sres_set_cached_srv_priority(). ] [Makefile.am: added tests to DIST_SUBDIRS Pekka.Pessi@nokia.com**20080111143023] [test_htable2.c: define struct before using it in prototypes Pekka Pessi **20071120030507] [nua_notifier.c: allow notifier handle to be shut down if SUBSCRIBE has been accpeted but no NOTIFY has been sent Pekka.Pessi@nokia.com**20080104215408] [nua_notifier.c: fix problem handing expiration time if NOTIFY is sent before SUBSCRIBE has been responded Pekka.Pessi@nokia.com**20080104215320] [nua_subnotref.c: accept NOTIFY without Event header Pekka.Pessi@nokia.com**20080104215100] [nua/outbound.c: reduce logging Pekka.Pessi@nokia.com**20080104203258] [nua_session.c: do not clear soa when an overlapping INVITE is received Pekka.Pessi@nokia.com**20080104203122 ] [nta.c: follow more closely RFC 3261 request matching rules Pekka.Pessi@nokia.com**20080104202701] [nta.c: fixed request merging with RFC 2543 proxies Pekka.Pessi@nokia.com**20080104182035 Updated matching of PRACKs with outstanding 100rel, too. ] [test_nta.c: added check for request merging (with both 3261 and 2543 proxies) Pekka.Pessi@nokia.com**20080104181901] [tport_type_udp.c: made IP_ADD_MEMBERSHIP as portable Pekka Pessi **20071119200109] [tport_type_udp.c: when binding to multicast address, join to the group, too. Pekka.Pessi@nokia.com**20080103170839 Use "canonic" IP address (from host-part of the SIP URI) to specify interface. ] [sac-su2.m4: checking for IP_ADD_MEMBERSHIP and IP_MULTICAST_LOOP Pekka.Pessi@nokia.com**20080103160211] [nta.c: calculate next timeout only after completing current timeout Pekka.Pessi@nokia.com**20080103131904 Thanks to Mike Jerris for reporting this problem. ] [m4/sac-su2.m4: checks for SO_RCVBUFFORCE and SO_SNDBUFFORCE Pekka.Pessi@nokia.com**20080103121147] [tport_type_udp.c: using SO_RCVBUFFORCE and SO_SNDBUFFORCE to set rmem/wmem on udp sockets Pekka.Pessi@nokia.com**20080103121127 Referring reader to Linux sysctls to TPTAG_UDP_RMEM and TPTAG_UDP_WMEM documentation. ] [stun.c: try to avoid using stun handle after returning from discovery callback Pekka.Pessi@nokia.com**20071220131337 Crash reported and partial patch by Daniele Rondina. ] [check_sofia.c: pass xml result file as optional parameter to check_sofia Pekka.Pessi@nokia.com**20071213141534] [libsofia-sip-ua/docs/hide_emails.sh: moved to scripts/ subdir Pekka.Pessi@nokia.com**20071213141504] [nua_session.c: avoid NULL nua_session_state_t pointer in nua_update_client_report Pekka Pessi **20071130140314 Thanks to Fabio Margarido for reporting this problem. ] [Makefile.am, configure.ac: added subdir tests for Check-based module tests Pekka.Pessi@nokia.com**20071129180525] [nua: moved test_nua contents in ltlibraries Pekka.Pessi@nokia.com**20071129180344] [rules/sofia.am: defining INTERNAL_INCLUDES so it can be used from any subdir Pekka.Pessi@nokia.com**20071129172110 utils/Makefile.am, libsofia-sip-ua/nua/Makefile.am: using INCLUDES from sofia.am ] [tport: collecting statistics Pekka Pessi **20071129171740] [tport.h, tport.c: updated tport_create() docs Pekka.Pessi@nokia.com**20071127004934] [nua_stack.c: more logging on bad authentication Pekka.Pessi@nokia.com**20071122145913] [test_su.c: removed calls of deprecated (and unimplemented) functions su_clone_pause()/su_clone_resume() Pekka.Pessi@nokia.com**20071128151507] [nua: moved message passing into nua_stack.c. Recfactored reference counting. Pekka.Pessi@nokia.com**20071127002305 This seems to fix the memory leak within 1.12.7. ] [configure.ac: defining HAVE_SOFIA_HTTP Pekka Pessi **20071127001541] [sofia-sip/su_wait.h: added su_msg_new(), su_msg_send_to(), su_msg_deinitializer() Pekka.Pessi@nokia.com**20071126221227 Reduce overhead from message passing. ] [test_basic_call.c: fixed --no-proxy tests Pekka.Pessi@nokia.com**20071126220835] [test_proxy.c: removed memory leaks Pekka.Pessi@nokia.com**20071126220816] [nta: added nta_msg_is_internal(). Pekka.Pessi@nokia.com**20071122150133] [nta.c: always use tport from NTATAG_TPORT() (even if it is bad) Pekka.Pessi@nokia.com**20071122143621 Add tests, too. ] [nta.c: nta_outgoing_*create() now uses NTATAG_TPORT() even if NTATAG_DEFAULT_PROXY() is set Daniele Rondina **20071121161604] [test_htable2.c: removed conversion warning Pekka.Pessi@nokia.com**20071127184341 Conversion of size_t to isize_t when compiled wihout --disable-size-compat. ] [nta: added nta_sip_is_internal(). Pekka.Pessi@nokia.com**20071122143945] [test_nta.c: refactored client side tests Pekka.Pessi@nokia.com**20071122134214] [test_nta.c: removed dead code Pekka.Pessi@nokia.com**20071121164642] [test_tport.c: skipping tests on TLS if send fails. Pekka Pessi **20071121121040] [tport.c: fixed EXPENSIVE unresolved bug. Pekka.Pessi@nokia.com**20071120175354] [tport: tport_name_is_resolved() now uses host_is_ip_address() Pekka.Pessi@nokia.com**20071120170919] [test_register.c: fixed authentication caching issue Pekka Pessi **20071120164706] [nua_register.c: silenced warning with URL_INIT_AS() on Sun CC Pekka Pessi **20071120164634] [su_tagarg.h: call va_copy() before calling tl_vlist() Pekka Pessi **20071120113208 Looks like Solaris on amd64 is not happy with normal va_start()/va_end() use of va_lists. Thanks for Michael Jerris for reporting the problem. ] [su_alloc.c: silenced warnings on Sun CC Pekka Pessi **20071119170006] [nua_register.c: sf.net bug #1816647: Outbound contact does not make it to dialogs Pekka.Pessi@nokia.com**20071116173400 Now use Contact from first registration instead of Contact generated from transport. ] [test_register.c, test_proxy.c: use realm "test-proxy" during normal tests Pekka.Pessi@nokia.com**20071116172955] [sofia-sip/su_alloc.h, su_alloc.c: added su_home_lock(), su_home_trylock(), su_home_unlock() Pekka.Pessi@nokia.com**20071116161709 Added test in torture_su_alloc.c. Using in su_pthread_port.c. ] [nua/test_proxy.[hc], nua/test_register.c: test support of multiple realms. Pekka.Pessi@nokia.com**20071116152900] [auth_client.c: allow multiple challenges in auc_credentials() or auc_all_credentials() Pekka.Pessi@nokia.com**20071116152758] [Added #include Youness Alaoui **20071116113851] [htable2.h: fixed usize_t/size_t confusion Pekka.Pessi@nokia.com**20071115134038] [sofia-sip/htable2.h: fixed HTABLE_PROTOS2() Pekka.Pessi@nokia.com**20071107125808] [nua_notifier.c: updated nua_i_subscribe, nua_notify() and nua_r_notify documentation Pekka.Pessi@nokia.com**20071025171545] [su_alloc.c: fixed su_home_init() (not initializing pointer to mutexes) Pekka.Pessi@nokia.com**20071023144517] [configure.ac, RELEASE: opened tree for development Pekka.Pessi@nokia.com**20071017151315] [libsofia-sip-ua/su/Makefile.am: fixed problem with automake 1.9 Pekka Pessi **20071017150112] [TAG 1.12.7 Pekka Pessi **20071017124315] [TAG rel-sofia-sip-1_12_7 Pekka Pessi **20071017124311] [nua.docs: replace reference to nua_cli.c with sofsip_cli Pekka Pessi **20071017105011] [nua: Open C fixes Pekka Pessi **20071016120746] [open_c: included in the dist Pekka.Pessi@nokia.com**20071015122713] [configure.ac, RELEASE: version 1.12.7 Pekka.Pessi@nokia.com**20071015080322] [TAG Release candidate 2 for 1.12.7 Pekka Pessi **20071012183842] [test_sip_events.c: checking some nua_i_notifier/nua_i_subscriber events Pekka Pessi **20071012183831] [nea_server.c: avoid raporting un-SUBSCRIBE twice Pekka Pessi **20071012183802] [sip_basic.c: removed dead code Pekka Pessi **20071012173958] [Fixed various tests on win32. Pekka Pessi **20071012173951] [test_class.h: fixed test_auth_class, test_numeric_class declaration Pekka Pessi **20071012173906] [nta_internal.h, nua_params.c: fixed NTATAG_UDP_MTU() type Pekka Pessi **20071012173815] [tstdef.h: silenced warnings on TEST_M() Pekka Pessi **20071012173743] [url.h: silenced warning on URL_INIT_AS() Pekka Pessi **20071012173725] [win32/check.cmd: added option -a to relevant tests. Pekka Pessi **20071012173700 Optionally check Release build. ] [win32/build_sources.cmd: added extra headers to sip_tag.c and sip_parser_table.c Pekka Pessi **20071012173342] [win32: added missing files from Makefile.am, .dsp, vproj Pekka Pessi **20071012173252] [win32/tests/torture_su_root: fixed include paths Pekka Pessi **20071012173219] [win32/utils/stunc.dsp: fixed include paths Pekka Pessi **20071012173202] [Makefile.am: fixed ordering of SUBDIRS Pekka Pessi **20071012124217] [htable.h, htable2.h: freeing old hash table after resize. Pekka.Pessi@nokia.com**20071102142310 Ensuring that resized hash table has enough slots for existing entries. ] [su_clone_start(): fixed spurious release of a pthreaded port Pekka.Pessi@nokia.com**20071011162528] [TAG release candidate 1 for 1.12.7 Pekka Pessi **20071011181651] Patch bundle hash: 3a5c5b6cfe2533d09dc072c5bb3b3e5466518bde