]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
See changelog.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 25 Jan 2007 12:39:51 +0000 (12:39 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 25 Jan 2007 12:39:51 +0000 (12:39 +0000)
git-svn-id: file:///svn/unbound/trunk@33 be551aaa-1e26-0410-a405-d3ace91eadb9

configure.ac
daemon/unbound.c
doc/Changelog
services/listen_dnsport.c [new file with mode: 0644]
services/listen_dnsport.h [new file with mode: 0644]
util/log.c
util/log.h
util/netevent.c
util/netevent.h

index 76f0dd298aecd4662e3cd498ab10211b08d44382..8f8d6a0b50b77ee90bec4de59c5cc7fb25d697ba 100644 (file)
@@ -192,7 +192,7 @@ AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname],
 AC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT])
 
 # check for libevent
-AC_ARG_WITH(ssl, AC_HELP_STRING([--with-libevent=pathname],
+AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname],
                                     [set path to libevent  (will check /usr/local /usr/lib /usr/pkg /usr/sfw /usr)]),[
         ],[
             withval="yes"
@@ -221,6 +221,7 @@ AC_ARG_WITH(ssl, AC_HELP_STRING([--with-libevent=pathname],
        AC_SUBST(RUNTIME_PATH)
     fi
 AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT])
+AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later
 
 # check to see if libraries are needed for these functions.
 AC_CHECK_LIB(socket, socket)
index 04ae109b32d4dc9970b5e7484d1f811d635c2030..669880d237053052b2c32bab5d05b66a24d4c5b3 100644 (file)
@@ -3,7 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  *
  */
 
 
 #include "config.h"
 #include "util/log.h"
+#include "util/netevent.h"
+
+/** print usage.
+ * @param argv: the argv passed to main().
+ */
+static void usage()
+{
+       printf("usage: unbound [options]\n");
+       printf("\tstart unbound daemon DNS resolver.\n");
+       printf("\t-h\tthis help\n");
+       printf("\t-v\tverbose (multiple times increase verbosity)\n");
+       printf("Version %s\n", PACKAGE_VERSION);
+       printf("BSD licensed, see LICENSE file in source package.\n");
+       printf("Report bugs to %s.\n", PACKAGE_BUGREPORT);
+}
+
+extern int optind;
+extern char* optarg;
 
 /**
  * main program. Set options given commandline arguments.
 int 
 main(int argc, char* argv[])
 {
-       if(argc != 1) {
-               printf("usage: %s\n", argv[0]);
-               printf("\tstart unbound daemon DNS resolver.\n");
+       struct comm_base *base = 0;
+       int c;
+
+       log_init();
+       /* parse the options */
+       while( (c=getopt(argc, argv, "hv")) != -1) {
+               switch(c) {
+               case 'v':
+                       verbosity ++;
+                       break;
+               case '?':
+               case 'h':
+               default:
+                       usage();
+                       return 1;
+               }
+       }
+       argc -= optind;
+       argv += optind;
+
+       if(argc != 0) {
+               usage();
                return 1;
        }
-       log_init();
+
        log_info("Start of %s.", PACKAGE_STRING);
 
+       base = comm_base_create();
+       if(!base)
+               fatal_exit("could not create commbase");
+
+       comm_base_delete(base);
        return 0;
 }
index e842e148927f1e65949db7a7d35fd8ae49002d8f..a792750d44ea84823d3de15c76b96297ee1d6943 100644 (file)
@@ -1,5 +1,10 @@
 25  January 2007: Wouter
        - fixed lint so it may work on BSD.
+       - put license into header of every file.
+       - created verbosity flag.
+       - fixed libevent configure flag.
+       - detects event_base_free() in new libevent 1.2 version.
+       - getopt in daemon. fatal_exit() and verbose() logging funcs.
 
 24  January 2007: Wouter
        - cleaned up configure.ac.
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
new file mode 100644 (file)
index 0000000..d802504
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * services/listen_dnsport.c - listen on port 53 for incoming DNS queries.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file has functions to get queries from clients.
+ */
+
+#include "services/listen_dnsport.h"
+
diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h
new file mode 100644 (file)
index 0000000..940180c
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * services/listen_dnsport.h - listen on port 53 for incoming DNS queries.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file has functions to get queries from clients.
+ */
+
+#ifndef LISTEN_DNSPORT_H
+#define LISTEN_DNSPORT_H
+
+#include "config.h"
+struct comm_base;
+
+/**
+ * Listening for queries structure.
+ * Contains list of query-listen sockets.
+ */
+struct listen_dnsport {
+       /** Base for select calls */
+       struct comm_base* base;
+};
+
+/**
+ * Getaddrinfo, create socket, bind and listen to zero or more 
+ * interfaces for IP4 and/or IP6, for UDP and/or TCP.
+ * On the given port number. It creates the listening sockets.
+ * @param base: the comm_base that provides event functionality.
+ * @param num_ifs: number of interfaces to listen on. Can be 0,
+ *     for default all ifs.
+ * @param ifs: array of strings with interface specs, IP addresses.
+ * @param port: the port number to bind to.
+ * @param do_ip4: listen to ip4 queries.
+ * @param do_ip6: listen to ip6 queries.
+ * @param do_udp: listen to udp queries.
+ * @param do_tcp: listen to tcp queries.
+ * @return: the malloced listening structure, ready for use.
+ */
+struct listen_dnsport* listen_create(struct comm_base* base,
+       int num_ifs, const char* ifs[], int port,
+       int do_ip4, int do_ip6, int do_udp, int do_tcp);
+
+/**
+ * delete the listening structure
+ */
+void listen_delete(struct listen_dnsport* listen);
+
+#endif /* LISTEN_DNSPORT_H */
index 3c20045bfabfc17ba3b4f264bc9c445a5efaa124..f0fabb691ad9b3d8b155d66708f56a57848431ed 100644 (file)
@@ -3,8 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
- *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 /**
  * \file
@@ -17,6 +43,8 @@
 #include <time.h>
 #endif
 
+enum verbosity_value verbosity = 3;
+
 void
 log_init()
 {
@@ -57,3 +85,33 @@ log_err(const char *format, ...)
        log_vmsg("error", format, args);
        va_end(args);
 }
+
+/**
+ * implementation of fatal_exit
+ * @param format: format string printf-style.
+ */
+void
+fatal_exit(const char *format, ...)
+{
+        va_list args;
+       va_start(args, format);
+       log_vmsg("fatal error", format, args);
+       va_end(args);
+       exit(1);
+}
+
+/**
+ * implementation of verbose
+ * @param level: verbose level for the message.
+ * @param format: format string printf-style.
+ */
+void
+verbose(enum verbosity_value level, const char* format, ...)
+{
+        va_list args;
+       va_start(args, format);
+       if(verbosity >= level)
+               log_vmsg("note", format, args);
+       va_end(args);
+}
+
index bffe11286f318efc473f662519896e4f0ab94c01..1c3c5405b5359fb578a31607e92d3374775f2f28 100644 (file)
@@ -3,8 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
- *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
 /**
 #include <stdarg.h>
 #endif
 
+/**
+ * verbosity value:
+ */
+enum verbosity_value {
+ /** 0 - no verbose messages */
+       NO_VERBOSE = 0,
+ /** 1 - operational information */
+       VERB_OPS,
+ /** 2 - query level information */
+       VERB_DETAIL,
+ /** 3 - algorithm level information */
+       VERB_ALGO
+};
+
+/** The global verbosity setting */
+extern enum verbosity_value verbosity;
+
+/**
+ * log a verbose message, pass the level for this message.
+ * It has printf formatted arguments. No trailing newline is needed.
+ * @param level: verbosity level for this message, compared to global 
+ *     verbosity setting.
+ * @param format: printf-style format string. Arguments follow.
+ */
+void verbose(enum verbosity_value level, 
+       const char* format, ...) ATTR_FORMAT(printf, 2, 3);
+
 /**
  * call this to initialize logging services.
  */
@@ -40,6 +93,13 @@ void log_info(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
  */
 void log_err(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
 
+/**
+ * Log fatal error message, and exit the current process.
+ * Pass printf formatted arguments. No trailing newline is needed.
+ * @param format: printf-style format string. Arguments follow.
+ */
+void fatal_exit(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
+
 /**
  * va_list argument version of log_info.
  * @param type: string to designate type of message (info, error).
index 953da312a1d40e02c1695af8829aac1f96f4f27d..b96d345509082b902018be032faa2996a526c671 100644 (file)
@@ -3,8 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
- *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
 /**
@@ -91,13 +117,17 @@ comm_base_create()
                free(b);
                return NULL;
        }
+       verbose(VERB_ALGO, "libevent uses %s method.", event_get_method());
        return b;
 }
 
 void 
 comm_base_delete(struct comm_base* b)
 {
-       /* No way to delete event_base! leaks. */
+#ifdef HAVE_EVENT_BASE_FREE
+       /* only libevent 1.2+ has it */
+       event_base_free(b->eb->base);
+#endif /* HAVE_EVENT_BASE_FREE */
        b->eb->base = NULL;
        free(b->eb);
        free(b);
index 42906f809ecde0e440ddffad13b61d4169296c13..e9774fa9cd0603bd6505cf71e8bc0848ab8ff987 100644 (file)
@@ -3,8 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
- *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
 /**