Author: mikej Date: Thu Apr 19 15:17:12 2007 New Revision: 4975 Modified: freeswitch/trunk/libs/sofia-sip/RELEASE freeswitch/trunk/libs/sofia-sip/configure.ac freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/string0.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_register.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c freeswitch/trunk/libs/sofia-sip/m4/sac-su2.m4 Log: sync with sofia darcs tree Modified: freeswitch/trunk/libs/sofia-sip/RELEASE ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE Thu Apr 19 15:17:12 2007 @@ -74,6 +74,10 @@ Bugs fixed in this release -------------------------- +- Fixed nua failing to refresh publication with re-PUBLISH. + Problem reported by Jan van den Bosch. +- Fixed encoding of c= lines without IN address. + Problem reported by Saurav Sahu. - Fixed status code sent to network and returned to the client if there was an internal error while responding to a request. The problem was reported by Michael Jerris and Joshua Engelbrecht. Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Thu Apr 19 15:17:12 2007 @@ -229,7 +229,6 @@ AC_HEADER_TIME AC_TYPE_SIZE_T -AC_STRUCT_SIN6 AC_SYS_SA_LEN ### checks for library functions Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am Thu Apr 19 15:17:12 2007 @@ -71,7 +71,7 @@ MSG_PARSER_AWK = ${srcdir}/../msg/msg_parser.awk -AWK_HTTP_AWK = ${AWK} -f ${MSG_PARSER_AWK} module=http +AWK_HTTP_AWK = LC_ALL=C ${AWK} -f ${MSG_PARSER_AWK} module=http SS_HTTP_H = ${srcdir}/sofia-sip/http.h @@ -79,15 +79,15 @@ sofia-sip/http_protos.h: ${srcdir}/sofia-sip/http_protos.h.in @-mkdir sofia-sip 2>/dev/null || true - ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_HTTP_H} + ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/http_protos.h.in ${SS_HTTP_H} sofia-sip/http_tag.h: ${srcdir}/sofia-sip/http_tag.h.in @-mkdir sofia-sip 2>/dev/null || true - ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_HTTP_H} + ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/http_tag.h.in ${SS_HTTP_H} http_tag.c: ${srcdir}/http_tag.c.in - ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_HTTP_H} + ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/http_tag.c.in ${SS_HTTP_H} http_parser_table.c: ${srcdir}/http_parser_table.c.in - ${AWK_HTTP_AWK} PT=$@ TEMPLATE=${srcdir}/$@.in \ + ${AWK_HTTP_AWK} PT=$@ TEMPLATE=${srcdir}/http_parser_table.c.in \ MC_HASH_SIZE=127 ${SS_HTTP_H} Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/string0.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/string0.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/string0.h Thu Apr 19 15:17:12 2007 @@ -28,11 +28,11 @@ /**@file sofia-sip/string0.h * - * @brief String comparison functions accepting NULL pointers - * - * This module contains string comparison functions that can be called - * with NULL pointer as argument. + * @brief Extra string function. * + * String comparison functions accepting NULL pointers: str0cmp(), + * str0ncmp(), str0casecmp(), str0ncasecmp(). Also includes span functions + * testing at most @a n bytes: strncspn(), strnspn(). */ #ifndef SU_CONFIG_H Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am Thu Apr 19 15:17:12 2007 @@ -85,7 +85,7 @@ MSG_PARSER_AWK = $(srcdir)/msg_parser.awk -AWK_MSG_AWK = $(AWK) -f $(MSG_PARSER_AWK) +AWK_MSG_AWK = LC_ALL=C $(AWK) -f $(MSG_PARSER_AWK) ${GENERATED_HC}: ${MSG_PARSER_AWK} @@ -95,12 +95,12 @@ test_protos.h: ${srcdir}/test_protos.h.in $(AWK_MSG_AWK) module=msg_test NO_MIDDLE=1 NO_LAST=1 \ - PR=$@ TEMPLATE=$(srcdir)/$@.in ${TEST_CLASS_H} + PR=$@ TEMPLATE=${srcdir}/test_protos.h.in ${TEST_CLASS_H} test_table.c: ${srcdir}/test_table.c.in $(AWK_MSG_AWK) module=msg_test prefix=msg \ MC_HASH_SIZE=127 multipart=msg_multipart \ - PT=$@ TEMPLATE=$(srcdir)/$@.in ${TEST_CLASS_H} + PT=$@ TEMPLATE=${srcdir}/test_table.c.in ${TEST_CLASS_H} SS_MIME_H = ${srcdir}/sofia-sip/msg_mime.h @@ -110,14 +110,17 @@ sofia-sip/msg_protos.h: ${srcdir}/sofia-sip/msg_protos.h.in @-mkdir sofia-sip 2>/dev/null || true $(AWK_MSG_AWK) module=msg NO_FIRST=1 NO_MIDDLE=1 \ - PR=$@ TEMPLATE=$(srcdir)/$@.in ${SS_MIME_H} + PR=$@ TEMPLATE=${srcdir}/sofia-sip/msg_protos.h.in \ + ${SS_MIME_H} sofia-sip/msg_mime_protos.h: ${srcdir}/sofia-sip/msg_mime_protos.h.in @-mkdir sofia-sip 2>/dev/null || true $(AWK_MSG_AWK) module=msg NO_FIRST=1 NO_LAST=1 \ - PR=$@ TEMPLATE=$(srcdir)/$@.in ${SS_MIME_H} + PR=$@ TEMPLATE=${srcdir}/sofia-sip/msg_mime_protos.h.in \ + ${SS_MIME_H} msg_mime_table.c: ${srcdir}/msg_mime_table.c.in $(AWK_MSG_AWK) module=msg_multipart \ tprefix=msg prefix=mp MC_HASH_SIZE=127 \ - PT=$@ TEMPLATE=$(srcdir)/$@.in ${SS_MIME_H} + PT=$@ TEMPLATE=${srcdir}/msg_mime_table.c.in \ + ${SS_MIME_H} Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk Thu Apr 19 15:17:12 2007 @@ -201,7 +201,7 @@ } else { # Remove line with #version# - gsub(/\n[^\n]*#version#[^\n]*\n/, "\n", p); + gsub(/\n[^#\n]*#version#[^\n]*/, "", p); } print p > PR; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c Thu Apr 19 15:17:12 2007 @@ -236,6 +236,9 @@ static int nua_publish_client_request(nua_client_request_t *cr, msg_t *, sip_t *, tagi_t const *tags); +static int nua_publish_client_check_restart(nua_client_request_t *cr, + int status, char const *phrase, + sip_t const *sip); static int nua_publish_client_response(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip); @@ -251,7 +254,7 @@ nua_publish_client_template, nua_publish_client_init, nua_publish_client_request, - /* nua_publish_client_check_restart */ NULL, + nua_publish_client_check_restart, nua_publish_client_response, /* nua_publish_client_preliminary */ NULL }; @@ -348,6 +351,34 @@ TAG_NEXT(tags)); } +static int nua_publish_client_check_restart(nua_client_request_t *cr, + int status, char const *phrase, + sip_t const *sip) +{ + char const *restarting = NULL; + + if (cr->cr_terminating || !cr->cr_usage) + ; + else if (status == 412) + restarting = phrase; + else if (200 <= status && status < 300 && + sip->sip_expires && sip->sip_expires->ex_delta == 0) + restarting = "Immediate re-PUBLISH"; + + if (restarting) { + struct publish_usage *pu = nua_dialog_usage_private(cr->cr_usage); + + if (pu) { + pu->pu_published = 0; + su_free(cr->cr_owner->nh_home, pu->pu_etag), pu->pu_etag = NULL; + if (nua_client_restart(cr, 100, restarting)) + return 0; + } + } + + return nua_base_client_check_restart(cr, status, phrase, sip); +} + static int nua_publish_client_response(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip) @@ -364,15 +395,7 @@ if (pu->pu_etag) su_free(nh->nh_home, pu->pu_etag), pu->pu_etag = NULL; - if (status == 412) { - if (nua_client_restart(cr, 100, phrase)) - return 0; - } - else if (status < 300) { - if (ex && ex->ex_delta == 0 && - nua_client_restart(cr, 100, "Trying re-PUBLISH")) - return 0; - + if (status < 300) { pu->pu_published = 1; pu->pu_etag = sip_etag_dup(nh->nh_home, sip->sip_etag); @@ -384,6 +407,8 @@ else SET_STATUS1(NUA_INTERNAL_ERROR); } + else + nua_dialog_usage_set_refresh(du, ex->ex_delta); } } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_register.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_register.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_register.c Thu Apr 19 15:17:12 2007 @@ -763,6 +763,10 @@ run_c_until(ctx, -1, save_until_final_response); TEST_1(e = c->events->head); TEST_E(e->data->e_event, nua_r_unregister); + if (e->data->e_status == 100) { + TEST_1(e = e->next); + TEST_E(e->data->e_event, nua_r_unregister); + } TEST(e->data->e_status, 200); TEST_1(sip = sip_object(e->data->e_msg)); TEST_1(!sip->sip_contact); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c Thu Apr 19 15:17:12 2007 @@ -243,6 +243,8 @@ return 0; } +char const *test_etag = "tagtag"; + int respond_with_etag(CONDITION_PARAMS) { msg_t *with = nua_current_request(nua); @@ -256,18 +258,18 @@ char const *etag; case nua_i_publish: etag = sip->sip_if_match ? sip->sip_if_match->g_value : NULL; - if (sip->sip_if_match && (etag == NULL || strcmp(etag, "tagtag"))) { + if (sip->sip_if_match && (etag == NULL || strcmp(etag, test_etag))) { RESPOND(ep, call, nh, SIP_412_PRECONDITION_FAILED, NUTAG_WITH(with), TAG_END()); } else { - RESPOND(ep, call, nh, SIP_200_OK, - NUTAG_WITH(with), - SIPTAG_ETAG_STR("tagtag"), - SIPTAG_EXPIRES_STR("3600"), - SIPTAG_EXPIRES(sip->sip_expires), /* overrides 3600 */ - TAG_END()); + RESPOND(ep, call, nh, SIP_200_OK, + NUTAG_WITH(with), + SIPTAG_ETAG_STR(test_etag), + SIPTAG_EXPIRES_STR("3600"), + SIPTAG_EXPIRES(sip->sip_expires), /* overrides 3600 */ + TAG_END()); } return 1; default: @@ -398,6 +400,7 @@ SIPTAG_EVENT_STR("presence"), SIPTAG_CONTENT_TYPE_STR("text/urllist"), SIPTAG_PAYLOAD_STR("sip:example.com\n"), + SIPTAG_EXPIRES_STR("5"), TAG_END()); run_ab_until(ctx, -1, save_until_final_response, -1, respond_with_etag); @@ -409,7 +412,7 @@ TEST(e->data->e_status, 200); TEST_1(sip = sip_object(e->data->e_msg)); TEST_1(sip->sip_etag); - TEST_S(sip->sip_etag->g_string, "tagtag"); + TEST_S(sip->sip_etag->g_string, test_etag); TEST_1(!e->next); /* @@ -424,6 +427,41 @@ free_events_in_list(ctx, b->events); nua_handle_destroy(b_call->nh), b_call->nh = NULL; + if (!ctx->expensive && 0) + goto skip_republish; + + run_ab_until(ctx, -1, save_until_final_response, -1, respond_with_etag); + + /* Client events: nua_r_publish + */ + TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_r_publish); + TEST(e->data->e_status, 200); + TEST_1(sip = sip_object(e->data->e_msg)); + TEST_1(sip->sip_etag); + TEST_S(sip->sip_etag->g_string, test_etag); + TEST_1(!e->next); + + free_events_in_list(ctx, a->events); + + /* + Server events: + nua_i_publish + */ + TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_i_publish); + TEST(e->data->e_status, 100); + TEST_1(sip = sip_object(e->data->e_msg)); + TEST_1(sip = sip_object(e->data->e_msg)); + TEST_1(sip->sip_if_match); + TEST_S(sip->sip_if_match->g_string, "tagtag"); + TEST_1(!sip->sip_content_type); + TEST_1(!sip->sip_payload); + TEST_1(!e->next); + + free_events_in_list(ctx, b->events); + nua_handle_destroy(b_call->nh), b_call->nh = NULL; + + skip_republish: + UNPUBLISH(a, a_call, a_call->nh, TAG_END()); run_ab_until(ctx, -1, save_until_final_response, -1, respond_with_etag); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c Thu Apr 19 15:17:12 2007 @@ -405,7 +405,13 @@ return; } - sdp_printf(p, "%s%s%s", nettype, addrtype, c->c_address); + if (nettype && addrtype) + sdp_printf(p, "%s%s%s", nettype, addrtype, c->c_address); + else if (nettype) + sdp_printf(p, "%s%s%s", nettype, c->c_address); + else + sdp_printf(p, "%s", c->c_address); + if (c->c_mcast || c->c_ttl) { sdp_printf(p, "/%u", c->c_ttl); if (c->c_groups > 1) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c Thu Apr 19 15:17:12 2007 @@ -474,7 +474,7 @@ "o=- 2353687640 2353687640 IN IP4 128.3.4.5\r\n" "s=marketing\r\n" "e=john.jones.3@chinet.net\r\n" - "c= TN RFC2543 +1-201-406-4090\r\n" + "c=TN RFC2543 +1-201-406-4090\r\n" "t=2353687640 0\r\n" "m=audio 1 voice -\r\n" ; @@ -496,6 +496,8 @@ su_home_t *home = su_home_create(); sdp_parser_t *parser; sdp_session_t *sdp; + sdp_printer_t *printer; + char const *m; BEGIN(); @@ -504,6 +506,11 @@ TEST_1((parser = sdp_parse(home, pint_msg, sizeof(pint_msg) - 1, sdp_f_anynet))); TEST_1((sdp = sdp_session(parser))); + TEST_1((printer = sdp_print(home, sdp, NULL, -1, 0))); + TEST_1((m = sdp_message(printer))); + TEST_S(m, pint_msg); + TEST(sdp_message_size(printer), sizeof(pint_msg) - 1); + TEST_1((parser = sdp_parse(home, pint_torture_msg, sizeof(pint_torture_msg) - 1, sdp_f_anynet))); TEST_1((sdp = sdp_session(parser))); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Makefile.am Thu Apr 19 15:17:12 2007 @@ -106,7 +106,7 @@ MSG_PARSER_AWK = $(srcdir)/../msg/msg_parser.awk -AWK_SIP_AWK = $(AWK) -f $(MSG_PARSER_AWK) module=sip +AWK_SIP_AWK = LC_ALL=C $(AWK) -f $(MSG_PARSER_AWK) module=sip SS_SIP_H = ${srcdir}/sofia-sip/sip.h @@ -116,23 +116,27 @@ sofia-sip/sip_hclasses.h: ${srcdir}/sofia-sip/sip_hclasses.h.in @-mkdir sofia-sip 2>/dev/null || true - ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_SIP_H} + ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/sip_hclasses.h.in \ + ${SS_SIP_H} sofia-sip/sip_protos.h: ${srcdir}/sofia-sip/sip_protos.h.in @-mkdir sofia-sip 2>/dev/null || true - ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_SIP_H} + ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/sip_protos.h.in \ + ${SS_SIP_H} sofia-sip/sip_tag.h: ${srcdir}/sofia-sip/sip_tag.h.in @-mkdir sofia-sip 2>/dev/null || true - ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_SIP_H} + ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/sip_tag.h.in \ + ${SS_SIP_H} sip_tag.c: ${srcdir}/sip_tag.c.in ${EXTRA} - ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/$@.in ${SS_SIP_H} ${EXTRA} + ${AWK_SIP_AWK} PR=$@ TEMPLATE=${srcdir}/sip_tag.c.in \ + ${SS_SIP_H} ${EXTRA} # Note: sip_bad_mask is used by nta to weed out bad messages sip_parser_table.c: ${srcdir}/sip_parser_table.c.in ${EXTRA} sip_bad_mask - ${AWK_SIP_AWK} PT=$@ TEMPLATE=${srcdir}/$@.in \ + ${AWK_SIP_AWK} PT=$@ TEMPLATE=${srcdir}/sip_parser_table.c.in \ FLAGFILE=${srcdir}/sip_bad_mask \ MC_HASH_SIZE=127 MC_SHORT_SIZE=26 \ ${SS_SIP_H} ${EXTRA} @@ -144,4 +148,4 @@ PACKAGE_VERSION="${PACKAGE_VERSION}" \ TEMPLATE1=${srcdir}/sofia-sip/sip_hclasses.h.in \ TEMPLATE2=${srcdir}/sofia-sip/sip_protos.h.in \ - TEMPLATE=${srcdir}/$@.in ${EXTRA} + TEMPLATE=${srcdir}/sofia-sip/sip_extra.h.in ${EXTRA} Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c Thu Apr 19 15:17:12 2007 @@ -773,13 +773,15 @@ static int tcp_test(tp_test_t *tt) { + BEGIN(); + +#ifndef WIN32 /* Windows seems to be buffering too much */ + msg_t *msg = NULL; int i; tport_t *tp, *tp0; char ident[16]; - BEGIN(); - /* Create a large message, just to force queueing in sending end */ TEST(new_test_msg(tt, &msg, "tcp-0", 1, 16 * 64 * 1024), 0); test_create_md5(tt, msg); @@ -856,6 +858,8 @@ tport_decref(&tp0); +#endif + END(); } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c Thu Apr 19 15:17:12 2007 @@ -266,10 +266,6 @@ msg = self->tp_msg; ai = msg_addrinfo(msg); - - if (!ai) - return -1; - from = (su_sockaddr_t *)ai->ai_addr, fromlen = (socklen_t)(ai->ai_addrlen); n = su_vrecv(self->tp_socket, iovec, veclen, 0, from, &fromlen); Modified: freeswitch/trunk/libs/sofia-sip/m4/sac-su2.m4 ============================================================================== --- freeswitch/trunk/libs/sofia-sip/m4/sac-su2.m4 (original) +++ freeswitch/trunk/libs/sofia-sip/m4/sac-su2.m4 Thu Apr 19 15:17:12 2007 @@ -196,13 +196,18 @@ [Define to 1 if you have sa_len in struct sockaddr]) fi -AC_REQUIRE([AC_STRUCT_SIN6]) +AC_ARG_ENABLE([ip6], +[ --disable-ip6 disable IPv6 functionality [[enabled]]],,enable_ip6=yes) + +if ! test no$enable_ip6 = nono ; then +AC_STRUCT_SIN6 case $ac_cv_sin6 in yes) SAC_SU_DEFINE(SU_HAVE_IN6, 1, [ Define to 1 if you have struct sockaddr_in6]) ;; no) ;; *) AC_MSG_ERROR([Inconsistent struct sockaddr_sin6 test]) ;; esac +fi AC_CHECK_HEADERS([unistd.h sys/time.h])