BIND 10 trac826, updated. 08ce09d858c9aeeca6b4c55af2b0b2ecf022530b [trac826] checkpoint (up to libdns++, VS 2010)

BIND 10 source code commits bind10-changes at lists.isc.org
Mon May 2 09:02:26 UTC 2011


The branch, trac826 has been updated
       via  08ce09d858c9aeeca6b4c55af2b0b2ecf022530b (commit)
       via  a2773527b71bdfc7fd171e3e1b70f0174f5192d5 (commit)
      from  9e183cb0529aeb9f0674b5727affa223d8fc9db5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 08ce09d858c9aeeca6b4c55af2b0b2ecf022530b
Author: Francis Dupont <fdupont at isc.org>
Date:   Mon May 2 11:00:58 2011 +0200

    [trac826] checkpoint (up to libdns++, VS 2010)

commit a2773527b71bdfc7fd171e3e1b70f0174f5192d5
Author: Francis Dupont <fdupont at isc.org>
Date:   Sun May 1 16:53:04 2011 +0200

    [trac826] Windows build skeleton.

-----------------------------------------------------------------------

Summary of changes:
 WIN32-NOTES                                        |   79 +++
 ext/coroutine/coroutine.h                          |   23 +-
 src/lib/asiodns/dns_service.cc                     |    8 +-
 src/lib/asiodns/io_fetch.cc                        |    9 +-
 src/lib/asiodns/tcp_server.cc                      |    9 +-
 src/lib/asiodns/tests/dns_server_unittest.cc       |   24 +-
 src/lib/asiodns/tests/io_fetch_unittest.cc         |   23 +-
 src/lib/asiodns/udp_server.cc                      |   13 +-
 src/lib/asiolink/interval_timer.cc                 |    4 +
 src/lib/asiolink/io_address.cc                     |    6 +-
 src/lib/asiolink/io_address.h                      |    2 +
 src/lib/asiolink/io_asio_socket.h                  |    2 +
 src/lib/asiolink/io_endpoint.cc                    |    5 +
 src/lib/asiolink/io_endpoint.h                     |    2 +
 src/lib/asiolink/io_message.h                      |    2 +
 src/lib/asiolink/io_service.cc                     |    8 +-
 src/lib/asiolink/io_socket.cc                      |    2 +
 src/lib/asiolink/io_socket.h                       |    2 +
 src/lib/asiolink/tcp_socket.h                      |    4 +-
 src/lib/asiolink/tests/io_endpoint_unittest.cc     |    1 +
 src/lib/asiolink/tests/io_socket_unittest.cc       |    4 +
 src/lib/asiolink/tests/tcp_endpoint_unittest.cc    |    2 +
 src/lib/asiolink/tests/tcp_socket_unittest.cc      |    6 +
 src/lib/asiolink/tests/udp_endpoint_unittest.cc    |    2 +
 src/lib/asiolink/tests/udp_socket_unittest.cc      |    6 +
 src/lib/asiolink/udp_socket.h                      |    2 +
 AUTHORS => src/lib/bench/NO_PORT_ON_WINDOWS        |    0 
 src/lib/cache/message_cache.cc                     |    2 +
 src/lib/cache/message_entry.cc                     |    3 +
 src/lib/cache/rrset_cache.cc                       |    1 +
 src/lib/cache/rrset_entry.cc                       |    2 +
 src/lib/cache/tests/message_entry_unittest.cc      |    3 +
 src/lib/cache/tests/negative_cache_unittest.cc     |   10 +-
 src/lib/cache/tests/rrset_entry_unittest.cc        |   13 +
 AUTHORS => src/lib/cc/PARTIAL_PORT_ON_WINDOWS      |    0 
 src/lib/cc/session.cc                              |    4 +
 src/lib/cc/session_config.h.win32                  |    2 +
 .../lib/cc/tests/PARTIAL_PORT_ON_WINDOWS           |    0 
 src/lib/cc/tests/session_unittests_config.h.win32  |    2 +
 src/lib/config/ccsession.cc                        |    4 +
 .../config/tests/data_def_unittests_config.h.win32 |   15 +
 src/lib/config/tests/fake_session.cc               |   12 +-
 src/lib/datasrc/data_source.h                      |    2 +
 src/lib/datasrc/rbtree.h                           |    2 +-
 src/lib/datasrc/tests/cache_unittest.cc            |    6 +
 src/lib/datasrc/tests/memory_datasrc_unittest.cc   |    8 +-
 src/lib/datasrc/tests/rbtree_unittest.cc           |    3 +
 src/lib/dns/edns.cc                                |    2 +
 src/lib/dns/edns.h                                 |    4 +-
 src/lib/dns/gen-rdatacode.py.win32                 |  295 +++++++++++
 src/lib/dns/masterload.cc                          |    3 +
 src/lib/dns/message.cc                             |    3 +
 src/lib/dns/message.h                              |    4 +-
 src/lib/dns/name.cc                                |    7 +
 src/lib/dns/name.h                                 |   14 +-
 src/lib/dns/python/pydnspp_common.cc               |    1 +
 src/lib/dns/rcode.h                                |    2 +
 src/lib/dns/rdata.cc                               |    8 +-
 src/lib/dns/rdata/in_1/a_1.cc                      |   13 +-
 src/lib/dns/rdata/in_1/aaaa_28.cc                  |   13 +-
 src/lib/dns/rrclass-placeholder.h                  |    2 +
 src/lib/dns/rrparamregistry-placeholder.cc         |    6 +-
 src/lib/dns/tests/edns_unittest.cc                 |    3 +
 src/lib/dns/tests/message_unittest.cc              |    4 +
 src/lib/dns/tests/name_unittest.cc                 |    3 +
 src/lib/dns/tests/rdata_tsig_unittest.cc           |    2 +-
 src/lib/dns/tests/testdata/gen-wiredata.py.win32   |  541 ++++++++++++++++++++
 src/lib/dns/tsig.cc                                |   22 +
 src/lib/dns/tsig.h                                 |    4 +-
 src/lib/dns/tsigerror.cc                           |    3 +
 src/lib/dns/tsigerror.h                            |    2 +-
 src/lib/log/compiler/message.cc                    |    2 +
 src/lib/log/logger_levels.h                        |    2 +
 src/lib/nsas/address_entry.h                       |    1 +
 src/lib/nsas/asiolink.h                            |    2 +
 src/lib/nsas/glue_hints.cc                         |    7 +
 src/lib/nsas/hash.cc                               |    2 +
 src/lib/nsas/nameserver_address_store.cc           |    5 +
 src/lib/nsas/nameserver_entry.cc                   |    7 +-
 src/lib/nsas/tests/hash_table_unittest.cc          |    6 +-
 .../tests/nameserver_address_store_unittest.cc     |    9 +-
 src/lib/nsas/tests/nameserver_address_unittest.cc  |    5 +
 src/lib/nsas/tests/nameserver_entry_unittest.cc    |    5 +
 src/lib/nsas/tests/zone_entry_unittest.cc          |    5 +
 src/lib/nsas/zone_entry.cc                         |    5 +
 src/lib/python/bind10_config.py.win32              |   23 +
 src/lib/resolve/recursive_query.cc                 |   49 ++-
 src/lib/resolve/resolve.cc                         |    7 +
 src/lib/resolve/resolver_callback.cc               |    7 +
 src/lib/resolve/tests/recursive_query_unittest.cc  |   79 +++-
 .../resolve/tests/recursive_query_unittest_2.cc    |   17 +-
 src/lib/resolve/tests/resolve_unittest.cc          |    7 +
 .../resolve/tests/resolver_callback_unittest.cc    |    6 +
 src/lib/resolve/tests/run_unittests.cc             |   14 +
 src/lib/server_common/portconfig.cc                |    2 +
 src/lib/server_common/tests/portconfig_unittest.cc |    7 +
 src/lib/testutils/srv_test.cc                      |    5 +
 src/lib/util/encode/base_n.cc                      |   12 +-
 AUTHORS => src/lib/util/io/NO_PORT_ON_WINDOWS      |    0 
 src/lib/util/random/qid_gen.cc                     |   12 +
 src/lib/util/random/random_number_generator.h      |    2 +-
 src/lib/util/tests/base32hex_unittest.cc           |    2 +-
 src/lib/util/tests/base64_unittest.cc              |    2 +-
 src/lib/util/time_utilities.cc                     |   19 +
 .../lib/util/unittests/PARTIAL_PORT_ON_WINDOWS     |    0 
 AUTHORS => src/lib/xfr/NO_PORT_ON_WINDOWS          |    0 
 src/lib/xfr/xfrout_client.cc                       |    3 +
 win32build/BINDInstall/BINDInstall.cpp             |   11 +
 win32build/BINDInstall/stdafx.cpp                  |    8 +
 win32build/BINDInstall/stdafx.h                    |   15 +
 win32build/BINDInstall/targetver.h                 |    8 +
 win32build/VS2008/stdint.h                         |   20 +
 win32build/VS2010/BINDInstall/BINDInstall.vcxproj  |   89 ++++
 .../VS2010/BINDInstall/BINDInstall.vcxproj.filters |   33 ++
 .../VS2010/BINDInstall/BINDInstall.vcxproj.user    |    3 +
 win32build/VS2010/bind10.sln                       |  128 +++++
 .../VS2010/libcryptolink/libcryptolink.vcxproj     |   89 ++++
 .../libcryptolink/libcryptolink.vcxproj.filters    |   33 ++
 .../libcryptolink/libcryptolink.vcxproj.user       |    3 +
 .../libcryptolink_tests.vcxproj                    |   95 ++++
 .../libcryptolink_tests.vcxproj.filters            |   25 +
 .../libcryptolink_tests.vcxproj.user               |    3 +
 win32build/VS2010/libdns++/libdns++.vcxproj        |  141 +++++
 .../VS2010/libdns++/libdns++.vcxproj.filters       |  153 ++++++
 win32build/VS2010/libdns++/libdns++.vcxproj.user   |    3 +
 .../VS2010/libdns++_python/libdns++_python.vcxproj |  110 ++++
 .../libdns++_python.vcxproj.filters                |   30 ++
 .../libdns++_python/libdns++_python.vcxproj.user   |    3 +
 .../VS2010/libdns++_tests/libdns++_tests.vcxproj   |  271 ++++++++++
 .../libdns++_tests/libdns++_tests.vcxproj.filters  |  147 ++++++
 .../libdns++_tests/libdns++_tests.vcxproj.user     |    3 +
 .../VS2010/libexceptions/libexceptions.vcxproj     |   87 ++++
 .../libexceptions/libexceptions.vcxproj.filters    |   27 +
 .../libexceptions/libexceptions.vcxproj.user       |    3 +
 .../libexceptions_tests.vcxproj                    |   95 ++++
 .../libexceptions_tests.vcxproj.filters            |   25 +
 .../libexceptions_tests.vcxproj.user               |    3 +
 win32build/VS2010/libutil/libutil.vcxproj          |  108 ++++
 win32build/VS2010/libutil/libutil.vcxproj.filters  |   90 ++++
 win32build/VS2010/libutil/libutil.vcxproj.user     |    3 +
 .../VS2010/libutil_tests/libutil_tests.vcxproj     |  106 ++++
 .../libutil_tests/libutil_tests.vcxproj.filters    |   58 +++
 .../libutil_tests/libutil_tests.vcxproj.user       |    3 +
 .../libutil_unittests/libutil_unittests.vcxproj    |   88 ++++
 .../libutil_unittests.vcxproj.filters              |   30 ++
 .../libutil_unittests.vcxproj.user                 |    3 +
 win32build/config.h                                |   73 +++
 win32build/dllmain.cc                              |   18 +
 win32build/getopt.cc                               |   79 +++
 win32build/getopt.h                                |    4 +
 150 files changed, 3887 insertions(+), 83 deletions(-)
 create mode 100644 WIN32-NOTES
 copy AUTHORS => src/lib/bench/NO_PORT_ON_WINDOWS (100%)
 copy AUTHORS => src/lib/cc/PARTIAL_PORT_ON_WINDOWS (100%)
 create mode 100644 src/lib/cc/session_config.h.win32
 copy AUTHORS => src/lib/cc/tests/PARTIAL_PORT_ON_WINDOWS (100%)
 create mode 100644 src/lib/cc/tests/session_unittests_config.h.win32
 create mode 100644 src/lib/config/tests/data_def_unittests_config.h.win32
 create mode 100755 src/lib/dns/gen-rdatacode.py.win32
 create mode 100644 src/lib/dns/tests/testdata/gen-wiredata.py.win32
 create mode 100644 src/lib/python/bind10_config.py.win32
 copy AUTHORS => src/lib/util/io/NO_PORT_ON_WINDOWS (100%)
 copy AUTHORS => src/lib/util/unittests/PARTIAL_PORT_ON_WINDOWS (100%)
 copy AUTHORS => src/lib/xfr/NO_PORT_ON_WINDOWS (100%)
 create mode 100755 win32build/BINDInstall/BINDInstall.cpp
 create mode 100755 win32build/BINDInstall/stdafx.cpp
 create mode 100755 win32build/BINDInstall/stdafx.h
 create mode 100755 win32build/BINDInstall/targetver.h
 create mode 100644 win32build/VS2008/stdint.h
 create mode 100755 win32build/VS2010/BINDInstall/BINDInstall.vcxproj
 create mode 100755 win32build/VS2010/BINDInstall/BINDInstall.vcxproj.filters
 create mode 100755 win32build/VS2010/BINDInstall/BINDInstall.vcxproj.user
 create mode 100755 win32build/VS2010/bind10.sln
 create mode 100755 win32build/VS2010/libcryptolink/libcryptolink.vcxproj
 create mode 100755 win32build/VS2010/libcryptolink/libcryptolink.vcxproj.filters
 create mode 100755 win32build/VS2010/libcryptolink/libcryptolink.vcxproj.user
 create mode 100755 win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj
 create mode 100755 win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.filters
 create mode 100755 win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.user
 create mode 100755 win32build/VS2010/libdns++/libdns++.vcxproj
 create mode 100755 win32build/VS2010/libdns++/libdns++.vcxproj.filters
 create mode 100755 win32build/VS2010/libdns++/libdns++.vcxproj.user
 create mode 100755 win32build/VS2010/libdns++_python/libdns++_python.vcxproj
 create mode 100755 win32build/VS2010/libdns++_python/libdns++_python.vcxproj.filters
 create mode 100755 win32build/VS2010/libdns++_python/libdns++_python.vcxproj.user
 create mode 100755 win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj
 create mode 100755 win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.filters
 create mode 100755 win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.user
 create mode 100755 win32build/VS2010/libexceptions/libexceptions.vcxproj
 create mode 100755 win32build/VS2010/libexceptions/libexceptions.vcxproj.filters
 create mode 100755 win32build/VS2010/libexceptions/libexceptions.vcxproj.user
 create mode 100755 win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj
 create mode 100755 win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.filters
 create mode 100755 win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.user
 create mode 100755 win32build/VS2010/libutil/libutil.vcxproj
 create mode 100755 win32build/VS2010/libutil/libutil.vcxproj.filters
 create mode 100755 win32build/VS2010/libutil/libutil.vcxproj.user
 create mode 100755 win32build/VS2010/libutil_tests/libutil_tests.vcxproj
 create mode 100755 win32build/VS2010/libutil_tests/libutil_tests.vcxproj.filters
 create mode 100755 win32build/VS2010/libutil_tests/libutil_tests.vcxproj.user
 create mode 100755 win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj
 create mode 100755 win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.filters
 create mode 100755 win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.user
 create mode 100644 win32build/config.h
 create mode 100644 win32build/dllmain.cc
 create mode 100644 win32build/getopt.cc
 create mode 100644 win32build/getopt.h

-----------------------------------------------------------------------
diff --git a/WIN32-NOTES b/WIN32-NOTES
new file mode 100644
index 0000000..3d6b556
--- /dev/null
+++ b/WIN32-NOTES
@@ -0,0 +1,79 @@
+What is needed:
+
+ - full IPv6 support (so at least Vista or Server 2008)
+
+ - POSIX (aka Unix) environment for tar/git/etc (I use cygwin)
+
+ - Visual Studio C++ (version 2010 tested)
+
+ - python >= 3.1 (I got Cpython 3.2 MSI from python.org,
+  note the pre-built python can give C++ runtime issue with
+  an incompatible Visual Studio)
+
+ - perl (the Windows native one, not yet used)
+
+ - sqlite3 >= 3.3.9 (got the 3.7.5 prebuilds, not yet used)
+
+ - splite3 python DSO (included in the MSI, not yet used)
+
+ - cmakefile (got the 2.8.4 .exe, can be used but see below)
+
+ - google test (aka gtest, got the 1.5.0 sources)
+
+ - boost >= 1.35 (got the 1.44 (newer is empty?) setup)
+
+ - setproctitle python module (in theory)
+
+ - botan 1.8.x
+
+ - log4cplus (in the future)
+
+How to compile google test:
+ - remove the /MD -> /MT line in the CMakeLists.txt, use cmake
+
+ - *or* open the solution gtest-md in msvc (please note the rights
+  of files in this directory must be fixed before)
+
+ - please remember the same Visual Studio version must be used
+  for gtest and bind10
+
+ - msvc gives the gtestd.lib (in place of gtest.lib) for the debug version
+
+Where I put things (hardwired paths):
+ - <home>\bind10.trac826 for bind10
+  (wired in dns tests preprocessor defines)
+
+ - <home>\gtest\include
+
+ - <home>\gtest\md10\{Debug,Release} gtest{d,}.lib and vc100.pdb
+
+ - "C:\\Program Files\boost\boost_1_44" (it seems only the include
+  is required now)
+
+ - C:\\Python32 (update your PATH, same for perl)
+
+ - C:\\sqlite3 (not yet needed)
+
+How to compile:
+ - open win32build\VS2010\bind10.sln file with Visual Studio 2010
+
+ - fix the paths
+
+ - build
+
+ - both Debug and Release versions of iscexc_tests\*\run_unittests.exe
+  should run
+
+ - only the Release version of/so iscdns_tests\Release\run_unittests.exe
+  runs
+
+Random notes (for me):
+ - getopt() is *not* standard (got working getopt.{h,cc})
+ - inet_pton() requires >= Vista/2008
+ - nanosleep() (supported?)
+ - forget lcov/pycoverage
+ - TODO: find the real cause of asio/boost wanting pthreads
+ - is asio part of boost?
+ - use select(): no kqueue / *poll
+ - cmake?
+
diff --git a/ext/coroutine/coroutine.h b/ext/coroutine/coroutine.h
index 985888b..4ddda48 100644
--- a/ext/coroutine/coroutine.h
+++ b/ext/coroutine/coroutine.h
@@ -104,11 +104,11 @@ private:
     } \
     else case 0:
 
-#define CORO_YIELD \
-  for (_coro_value = __LINE__;;) \
+#define CORO_YIELD_IMPL(n)       \
+  for (_coro_value = (n);;) \
     if (_coro_value == 0) \
     { \
-      case __LINE__: ; \
+      case (n): ; \
       break; \
     } \
     else \
@@ -121,13 +121,22 @@ private:
               goto bail_out_of_coroutine; \
             else case 0:
 
-#define CORO_FORK \
-  for (_coro_value = -__LINE__;; _coro_value = __LINE__) \
-    if (_coro_value == __LINE__) \
+#define CORO_FORK_IMPL(n)                      \
+  for (_coro_value = -(n);; _coro_value = (n)) \
+    if (_coro_value == (n)) \
     { \
-      case -__LINE__: ; \
+      case -(n): ; \
       break; \
     } \
     else
+
+#if defined(_MSC_VER)
+# define CORO_YIELD CORO_YIELD_IMPL(__COUNTER__ + 1)
+# define CORO_FORK CORO_FORK_IMPL(__COUNTER__ + 1)
+#else // defined(_MSC_VER)
+# define CORO_YIELD CORO_YIELD_IMPL(__LINE__)
+# define CORO_FORK CORO_FORK_IMPL(__LINE__)
+#endif // defined(_MSC_VER)
+
 #endif // COROUTINE_HPP
 
diff --git a/src/lib/asiodns/dns_service.cc b/src/lib/asiodns/dns_service.cc
index 94510fe..c76df21 100644
--- a/src/lib/asiodns/dns_service.cc
+++ b/src/lib/asiodns/dns_service.cc
@@ -12,14 +12,18 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 
 #include <boost/lexical_cast.hpp>
 
-#include <config.h>
-
 #include <log/dummylog.h>
 
 #include <asio.hpp>
diff --git a/src/lib/asiodns/io_fetch.cc b/src/lib/asiodns/io_fetch.cc
index 8f57d8e..d24233e 100644
--- a/src/lib/asiodns/io_fetch.cc
+++ b/src/lib/asiodns/io_fetch.cc
@@ -13,11 +13,16 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
+#include <stdint.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
+#include <unistd.h>             // for some IPC/network system calls
 #include <netinet/in.h>
-#include <stdint.h>
 #include <sys/socket.h>
-#include <unistd.h>             // for some IPC/network system calls
+#endif
 
 #include <boost/bind.hpp>
 #include <boost/scoped_ptr.hpp>
diff --git a/src/lib/asiodns/tcp_server.cc b/src/lib/asiodns/tcp_server.cc
index f91eb32..0c53f21 100644
--- a/src/lib/asiodns/tcp_server.cc
+++ b/src/lib/asiodns/tcp_server.cc
@@ -13,10 +13,15 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
+#include <stdint.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 #include <errno.h>
 
 #include <boost/shared_array.hpp>
@@ -64,13 +69,15 @@ TCPServer::TCPServer(io_service& io_service,
     if (addr.is_v6()) {
         acceptor_->set_option(ip::v6_only(true));
     }
+#ifndef _WIN32
     acceptor_->set_option(tcp::acceptor::reuse_address(true));
+#endif
     acceptor_->bind(endpoint);
     acceptor_->listen();
 }
 
 void
-TCPServer::operator()(error_code ec, size_t length) {
+TCPServer::operator()(asio::error_code ec, size_t length) {
     /// Because the coroutine reentry block is implemented as
     /// a switch statement, inline variable declarations are not
     /// permitted.  Certain variables used below can be declared here.
diff --git a/src/lib/asiodns/tests/dns_server_unittest.cc b/src/lib/asiodns/tests/dns_server_unittest.cc
index 1ef3192..c782ddb 100644
--- a/src/lib/asiodns/tests/dns_server_unittest.cc
+++ b/src/lib/asiodns/tests/dns_server_unittest.cc
@@ -13,6 +13,7 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
+#include <stdint.h>
 #include <gtest/gtest.h>
 
 #include <asio.hpp>
@@ -24,7 +25,9 @@
 #include <asiodns/dns_lookup.h>
 #include <string>
 #include <csignal>
+#ifndef _WIN32
 #include <unistd.h> //for alarm
+#endif
 
 #include <boost/shared_ptr.hpp>
 #include <boost/bind.hpp>
@@ -353,6 +356,15 @@ class DNSServerTest : public::testing::Test {
             // Since thread hasn't been introduced into the tool box, using signal
             // to make sure run function will eventually return even server stop
             // failed
+#ifdef _WIN32
+            UINT_PTR id = 1;
+            SetTimer(NULL, id, io_service_time_out * 1000,
+                     DNSServerTest::stopIOService);
+            service.run();
+            service.reset();
+            //cancel scheduled alarm
+            KillTimer(NULL, id);
+#else
             void (*prev_handler)(int) = std::signal(SIGALRM, DNSServerTest::stopIOService);
             alarm(io_service_time_out);
             service.run();
@@ -360,10 +372,20 @@ class DNSServerTest : public::testing::Test {
             //cancel scheduled alarm
             alarm(0);
             std::signal(SIGALRM, prev_handler);
+#endif
         }
 
 
-        static void stopIOService(int _no_use_parameter) {
+#ifdef _WIN32
+        static void CALLBACK stopIOService(
+            HWND _no_use_hwnd,
+            UINT _no_use_umsg,
+            UINT_PTR _no_use_idevent,
+            DWORD _no_use_dwtime)
+#else
+        static void stopIOService(int _no_use_parameter)
+#endif
+        {
             io_service_is_time_out = true;
             service.stop();
         }
diff --git a/src/lib/asiodns/tests/io_fetch_unittest.cc b/src/lib/asiodns/tests/io_fetch_unittest.cc
index 2464b6d..42afe07 100644
--- a/src/lib/asiodns/tests/io_fetch_unittest.cc
+++ b/src/lib/asiodns/tests/io_fetch_unittest.cc
@@ -12,6 +12,8 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include <algorithm>
 #include <cstdlib>
 #include <string>
@@ -165,9 +167,12 @@ public:
     ///        mangled qid response has been sent, a second packet will be
     ///        sent with the correct QID.
     /// \param length Amount of data received.
-    void udpReceiveHandler(udp::endpoint* remote, udp::socket* socket,
-                    error_code ec = error_code(), size_t length = 0,
-                    bool bad_qid = false, bool second_send = false) {
+    void udpReceiveHandler(udp::endpoint* remote,
+                    udp::socket* socket,
+                    asio::error_code ec = asio::error_code(),
+                    size_t length = 0,
+                    bool bad_qid = false,
+                    bool second_send = false) {
         if (debug_) {
             cout << "udpReceiveHandler(): error = " << ec.value() <<
                     ", length = " << length << endl;
@@ -215,7 +220,8 @@ public:
     ///
     /// \param socket Socket on which data will be received
     /// \param ec Boost error code, value should be zero.
-    void tcpAcceptHandler(tcp::socket* socket, error_code ec = error_code())
+  void tcpAcceptHandler(tcp::socket* socket,
+                        asio::error_code ec = asio::error_code())
     {
         if (debug_) {
             cout << "tcpAcceptHandler(): error = " << ec.value() << endl;
@@ -254,7 +260,8 @@ public:
     /// \param ec ASIO error code, completion code of asynchronous I/O issued
     ///        by the "server" to receive data.
     /// \param length Amount of data received.
-    void tcpReceiveHandler(tcp::socket* socket, error_code ec = error_code(),
+    void tcpReceiveHandler(tcp::socket* socket,
+                           asio::error_code ec = asio::error_code(),
                            size_t length = 0)
     {
         if (debug_) {
@@ -382,8 +389,10 @@ public:
     ///        pass back to the send method.
     /// \param ec Boost error code, value should be zero.
     /// \param length Number of bytes sent.
-    void tcpSendHandler(size_t expected, tcp::socket* socket,
-                        error_code ec = error_code(), size_t length = 0)
+    void tcpSendHandler(size_t expected,
+                        tcp::socket* socket,
+                        asio::error_code ec = asio::error_code(),
+                        size_t length = 0)
     {
         if (debug_) {
             cout << "tcpSendHandler(): error = " << ec.value() <<
diff --git a/src/lib/asiodns/udp_server.cc b/src/lib/asiodns/udp_server.cc
index f103e5a..29b7b31 100644
--- a/src/lib/asiodns/udp_server.cc
+++ b/src/lib/asiodns/udp_server.cc
@@ -12,15 +12,20 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+#include <stdint.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 #include <errno.h>
 
 #include <boost/shared_array.hpp>
 
-#include <config.h>
-
 #include <log/dummylog.h>
 
 #include <asio.hpp>
@@ -68,7 +73,9 @@ struct UDPServer::Data {
         // otherwise ASIO will bind to both
         udp proto = addr.is_v4() ? udp::v4() : udp::v6();
         socket_.reset(new udp::socket(io_service, proto));
+#ifndef _WIN32
         socket_->set_option(socket_base::reuse_address(true));
+#endif
         if (addr.is_v6()) {
             socket_->set_option(asio::ip::v6_only(true));
         }
@@ -170,7 +177,7 @@ UDPServer::UDPServer(io_service& io_service, const ip::address& addr,
 /// The function operator is implemented with the "stackless coroutine"
 /// pattern; see internal/coroutine.h for details.
 void
-UDPServer::operator()(error_code ec, size_t length) {
+UDPServer::operator()(asio::error_code ec, size_t length) {
     /// Because the coroutine reentry block is implemented as
     /// a switch statement, inline variable declarations are not
     /// permitted.  Certain variables used below can be declared here.
diff --git a/src/lib/asiolink/interval_timer.cc b/src/lib/asiolink/interval_timer.cc
index 0ed06eb..0af05b5 100644
--- a/src/lib/asiolink/interval_timer.cc
+++ b/src/lib/asiolink/interval_timer.cc
@@ -14,9 +14,13 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <unistd.h>             // for some IPC/network system calls
 #include <sys/socket.h>
 #include <netinet/in.h>
+#endif
 
 #include <boost/bind.hpp>
 
diff --git a/src/lib/asiolink/io_address.cc b/src/lib/asiolink/io_address.cc
index 7f7a6fc..5c3dfa8 100644
--- a/src/lib/asiolink/io_address.cc
+++ b/src/lib/asiolink/io_address.cc
@@ -14,9 +14,13 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <unistd.h>             // for some IPC/network system calls
 #include <sys/socket.h>
 #include <netinet/in.h>
+#endif
 
 #include <asio.hpp>
 
@@ -37,7 +41,7 @@ namespace asiolink {
 // XXX: we cannot simply construct the address in the initialization list,
 // because we'd like to throw our own exception on failure.
 IOAddress::IOAddress(const string& address_str) {
-    error_code err;
+    asio::error_code err;
     asio_address_ = ip::address::from_string(address_str, err);
     if (err) {
         isc_throw(IOError, "Failed to convert string to address '"
diff --git a/src/lib/asiolink/io_address.h b/src/lib/asiolink/io_address.h
index 655b727..0e119b6 100644
--- a/src/lib/asiolink/io_address.h
+++ b/src/lib/asiolink/io_address.h
@@ -18,7 +18,9 @@
 // IMPORTANT NOTE: only very few ASIO headers files can be included in
 // this file.  In particular, asio.hpp should never be included here.
 // See the description of the namespace below.
+#ifndef _WIN32
 #include <unistd.h>             // for some network system calls
+#endif
 #include <asio/ip/address.hpp>
 
 #include <functional>
diff --git a/src/lib/asiolink/io_asio_socket.h b/src/lib/asiolink/io_asio_socket.h
index 864708c..10fce0e 100644
--- a/src/lib/asiolink/io_asio_socket.h
+++ b/src/lib/asiolink/io_asio_socket.h
@@ -18,7 +18,9 @@
 // IMPORTANT NOTE: only very few ASIO headers files can be included in
 // this file.  In particular, asio.hpp should never be included here.
 // See the description of the namespace below.
+#ifndef _WIN32
 #include <unistd.h>             // for some network system calls
+#endif
 
 #include <functional>
 #include <string>
diff --git a/src/lib/asiolink/io_endpoint.cc b/src/lib/asiolink/io_endpoint.cc
index 63830a5..4d020c5 100644
--- a/src/lib/asiolink/io_endpoint.cc
+++ b/src/lib/asiolink/io_endpoint.cc
@@ -13,10 +13,15 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
+#include <stdint.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <unistd.h>             // for some IPC/network system calls
 #include <sys/socket.h>
 #include <netinet/in.h>
+#endif
 
 #include <asio.hpp>
 
diff --git a/src/lib/asiolink/io_endpoint.h b/src/lib/asiolink/io_endpoint.h
index 756fa3b..5a3be84 100644
--- a/src/lib/asiolink/io_endpoint.h
+++ b/src/lib/asiolink/io_endpoint.h
@@ -18,7 +18,9 @@
 // IMPORTANT NOTE: only very few ASIO headers files can be included in
 // this file.  In particular, asio.hpp should never be included here.
 // See the description of the namespace below.
+#ifndef _WIN32
 #include <unistd.h>             // for some network system calls
+#endif
 
 #include <functional>
 #include <string>
diff --git a/src/lib/asiolink/io_message.h b/src/lib/asiolink/io_message.h
index 81f6da1..ea2a255 100644
--- a/src/lib/asiolink/io_message.h
+++ b/src/lib/asiolink/io_message.h
@@ -18,7 +18,9 @@
 // IMPORTANT NOTE: only very few ASIO headers files can be included in
 // this file.  In particular, asio.hpp should never be included here.
 // See the description of the namespace below.
+#ifndef _WIN32
 #include <unistd.h>             // for some network system calls
+#endif
 
 #include <functional>
 #include <string>
diff --git a/src/lib/asiolink/io_service.cc b/src/lib/asiolink/io_service.cc
index 70cc18b..e7b9f8e 100644
--- a/src/lib/asiolink/io_service.cc
+++ b/src/lib/asiolink/io_service.cc
@@ -12,11 +12,15 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
-
-#include <config.h>
+#endif
 
 #include <asio.hpp>
 #include <asiolink/io_service.h>
diff --git a/src/lib/asiolink/io_socket.cc b/src/lib/asiolink/io_socket.cc
index e1498dc..2e31003 100644
--- a/src/lib/asiolink/io_socket.cc
+++ b/src/lib/asiolink/io_socket.cc
@@ -12,6 +12,8 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include "io_socket.h"
 
 #include <asio.hpp>
diff --git a/src/lib/asiolink/io_socket.h b/src/lib/asiolink/io_socket.h
index ab6479c..2f51895 100644
--- a/src/lib/asiolink/io_socket.h
+++ b/src/lib/asiolink/io_socket.h
@@ -18,7 +18,9 @@
 // IMPORTANT NOTE: only very few ASIO headers files can be included in
 // this file.  In particular, asio.hpp should never be included here.
 // See the description of the namespace below.
+#ifndef _WIN32
 #include <unistd.h>             // for some network system calls
+#endif
 
 #include <functional>
 #include <string>
diff --git a/src/lib/asiolink/tcp_socket.h b/src/lib/asiolink/tcp_socket.h
index c8876c8..2f4a45b 100644
--- a/src/lib/asiolink/tcp_socket.h
+++ b/src/lib/asiolink/tcp_socket.h
@@ -20,9 +20,11 @@
 #endif
 
 #include <log/dummylog.h>
+#ifndef _WIN32
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 
 #include <algorithm>
 #include <cassert>
@@ -384,7 +386,7 @@ TCPSocket<C>::processReceivedData(const void* staging, size_t length,
 
         // Still need data in the output packet.  Copy what we can from the
         // staging buffer to the output buffer.
-        size_t copy_amount = std::min(expected - outbuff->getLength(), data_length);
+        size_t copy_amount = min(expected - outbuff->getLength(), data_length);
         outbuff->writeData(data, copy_amount);
     }
 
diff --git a/src/lib/asiolink/tests/io_endpoint_unittest.cc b/src/lib/asiolink/tests/io_endpoint_unittest.cc
index ce21fde..666c35b 100644
--- a/src/lib/asiolink/tests/io_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/io_endpoint_unittest.cc
@@ -13,6 +13,7 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
+#include <stdint.h>
 #include <gtest/gtest.h>
 
 #include <asiolink/io_endpoint.h>
diff --git a/src/lib/asiolink/tests/io_socket_unittest.cc b/src/lib/asiolink/tests/io_socket_unittest.cc
index 15afc17..fdda1e4 100644
--- a/src/lib/asiolink/tests/io_socket_unittest.cc
+++ b/src/lib/asiolink/tests/io_socket_unittest.cc
@@ -15,7 +15,11 @@
 #include <config.h>
 #include <gtest/gtest.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
+#endif
 
 #include <asio.hpp>
 #include <asiolink/io_socket.h>
diff --git a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
index 6988082..43d7dff 100644
--- a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
@@ -14,6 +14,8 @@
 
 #include <config.h>
 
+#include <stdint.h>
+
 #include <string>
 
 #include <gtest/gtest.h>
diff --git a/src/lib/asiolink/tests/tcp_socket_unittest.cc b/src/lib/asiolink/tests/tcp_socket_unittest.cc
index 538cf48..fce4a22 100644
--- a/src/lib/asiolink/tests/tcp_socket_unittest.cc
+++ b/src/lib/asiolink/tests/tcp_socket_unittest.cc
@@ -18,12 +18,18 @@
 /// receive-close sequence and checking that the asynchronous notifications
 /// work.
 
+#include <config.h>
+
 #include <string>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#endif
 
 #include <algorithm>
 #include <cstdlib>
diff --git a/src/lib/asiolink/tests/udp_endpoint_unittest.cc b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
index 03de6b8..c0271c0 100644
--- a/src/lib/asiolink/tests/udp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
@@ -14,6 +14,8 @@
 
 #include <config.h>
 
+#include <stdint.h>
+
 #include <string>
 
 #include <gtest/gtest.h>
diff --git a/src/lib/asiolink/tests/udp_socket_unittest.cc b/src/lib/asiolink/tests/udp_socket_unittest.cc
index 1ab1a09..acf13de 100644
--- a/src/lib/asiolink/tests/udp_socket_unittest.cc
+++ b/src/lib/asiolink/tests/udp_socket_unittest.cc
@@ -18,12 +18,18 @@
 /// receive-close sequence and checking that the asynchronous notifications
 /// work.
 
+#include <config.h>
+
 #include <string>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#endif
 
 #include <algorithm>
 #include <cstdlib>
diff --git a/src/lib/asiolink/udp_socket.h b/src/lib/asiolink/udp_socket.h
index c061fba..0063744 100644
--- a/src/lib/asiolink/udp_socket.h
+++ b/src/lib/asiolink/udp_socket.h
@@ -20,9 +20,11 @@
 #endif
 
 #include <log/dummylog.h>
+#ifndef _WIN32
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 
 #include <cstddef>
 
diff --git a/src/lib/bench/NO_PORT_ON_WINDOWS b/src/lib/bench/NO_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/cache/message_cache.cc b/src/lib/cache/message_cache.cc
index 0464f87..408dda5 100644
--- a/src/lib/cache/message_cache.cc
+++ b/src/lib/cache/message_cache.cc
@@ -14,6 +14,8 @@
 
 #include <config.h>
 
+#include <time.h>
+
 #include <nsas/nsas_entry_compare.h>
 #include <nsas/hash_table.h>
 #include <nsas/hash_deleter.h>
diff --git a/src/lib/cache/message_entry.cc b/src/lib/cache/message_entry.cc
index de4ea89..850c7e5 100644
--- a/src/lib/cache/message_entry.cc
+++ b/src/lib/cache/message_entry.cc
@@ -15,12 +15,15 @@
 #include <config.h>
 
 #include <limits>
+#include <ctime>
 #include <dns/message.h>
 #include <nsas/nsas_entry.h>
 #include "message_entry.h"
 #include "message_utility.h"
 #include "rrset_cache.h"
 
+#undef max
+
 using namespace isc::dns;
 using namespace std;
 
diff --git a/src/lib/cache/rrset_cache.cc b/src/lib/cache/rrset_cache.cc
index f538320..9652fae 100644
--- a/src/lib/cache/rrset_cache.cc
+++ b/src/lib/cache/rrset_cache.cc
@@ -14,6 +14,7 @@
 
 #include <config.h>
 
+#include <ctime>
 #include <string>
 #include "rrset_cache.h"
 #include <nsas/nsas_entry_compare.h>
diff --git a/src/lib/cache/rrset_entry.cc b/src/lib/cache/rrset_entry.cc
index c829956..a17d28a 100644
--- a/src/lib/cache/rrset_entry.cc
+++ b/src/lib/cache/rrset_entry.cc
@@ -14,6 +14,8 @@
 
 #include <config.h>
 
+#include <time.h>
+
 #include <dns/message.h>
 #include <nsas/nsas_entry.h>
 #include <nsas/fetchable.h>
diff --git a/src/lib/cache/tests/message_entry_unittest.cc b/src/lib/cache/tests/message_entry_unittest.cc
index d9709ed..8bd315a 100644
--- a/src/lib/cache/tests/message_entry_unittest.cc
+++ b/src/lib/cache/tests/message_entry_unittest.cc
@@ -12,6 +12,7 @@
 
 #include <config.h>
 #include <string>
+#include <time.h>
 #include <gtest/gtest.h>
 #include <dns/tests/unittest_util.h>
 #include <dns/message.h>
@@ -27,6 +28,8 @@ using namespace isc;
 using namespace isc::dns;
 using namespace std;
 
+#undef max
+
 static uint32_t MAX_UINT32 = numeric_limits<uint32_t>::max();
 
 namespace {
diff --git a/src/lib/cache/tests/negative_cache_unittest.cc b/src/lib/cache/tests/negative_cache_unittest.cc
index 56d777d..cd817aa 100644
--- a/src/lib/cache/tests/negative_cache_unittest.cc
+++ b/src/lib/cache/tests/negative_cache_unittest.cc
@@ -77,7 +77,11 @@ TEST_F(NegativeCacheTest, testNXDOMAIN){
     const RRTTL& soa_ttl = rrset_ptr->getTTL();
     EXPECT_EQ(soa_ttl.getValue(), 172800);
 
-    sleep(1);
+#ifdef _WIN32
+	Sleep(1000);
+#else
+	sleep(1);
+#endif
 
     // Query nonexist.example.com again
     Message msg_nxdomain2(Message::PARSE);
@@ -197,7 +201,11 @@ TEST_F(NegativeCacheTest, testNoerrorNodata){
     messageFromFile(msg_nodata2, "message_nodata_with_soa.wire");
     msg_nodata2.makeResponse();
 
+#ifdef _WIN32
+	Sleep(1000);
+#else
     sleep(1);
+#endif
 
     EXPECT_TRUE(cache->lookup(example_dot_com, RRType::MX(), RRClass::IN(), msg_nodata2));
 
diff --git a/src/lib/cache/tests/rrset_entry_unittest.cc b/src/lib/cache/tests/rrset_entry_unittest.cc
index c7c3c6e..6fc93d2 100644
--- a/src/lib/cache/tests/rrset_entry_unittest.cc
+++ b/src/lib/cache/tests/rrset_entry_unittest.cc
@@ -14,6 +14,7 @@
 
 #include <config.h>
 #include <string>
+#include <time.h>
 #include <gtest/gtest.h>
 #include <cache/cache_entry_key.h>
 #include <cache/rrset_entry.h>
@@ -81,7 +82,11 @@ TEST_F(RRsetEntryTest, constructor) {
 
 TEST_F(RRsetEntryTest, updateTTL) {
     uint32_t ttl = rrset_entry.getTTL();
+#ifdef _WIN32
+	Sleep(1000);
+#else
     sleep(1);
+#endif
     // The TTL should be decreased
     EXPECT_TRUE(rrset_entry.getTTL() < ttl);
 }
@@ -89,10 +94,18 @@ TEST_F(RRsetEntryTest, updateTTL) {
 TEST_F(RRsetEntryTest, TTLExpire) {
     RRset exp_rrset(name, RRClass::IN(), RRType::A(), RRTTL(1));
     RRsetEntry rrset_entry(exp_rrset, RRSET_TRUST_ANSWER_AA);
+#ifdef _WIN32
+	Sleep(1000);
+#else
     sleep(1);
+#endif
     uint32_t ttl = rrset_entry.getTTL();
     EXPECT_LT(ttl, 1);
+#ifdef _WIN32
+	Sleep(1000);
+#else
     sleep(1);
+#endif
     ttl = rrset_entry.getTTL();
     EXPECT_LT(ttl, 1);
 }
diff --git a/src/lib/cc/PARTIAL_PORT_ON_WINDOWS b/src/lib/cc/PARTIAL_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/cc/session.cc b/src/lib/cc/session.cc
index e911a86..2586375 100644
--- a/src/lib/cc/session.cc
+++ b/src/lib/cc/session.cc
@@ -23,7 +23,9 @@
 // A middle term solution is to generalize our local wrapper interface
 // (currently only available for the auth server), where all such portability
 // issues are hidden, and to have other modules use the wrapper.
+#ifndef _WIN32
 #include <unistd.h>             // for some IPC/network system calls
+#endif
 #include <asio.hpp>
 #include <asio/error_code.hpp>
 #include <asio/deadline_timer.hpp>
@@ -34,7 +36,9 @@
 #include <iostream>
 #include <sstream>
 
+#ifndef _WIN32
 #include <sys/un.h>
+#endif
 
 #include <boost/bind.hpp>
 #include <boost/optional.hpp>
diff --git a/src/lib/cc/session_config.h.win32 b/src/lib/cc/session_config.h.win32
new file mode 100644
index 0000000..2a8ce71
--- /dev/null
+++ b/src/lib/cc/session_config.h.win32
@@ -0,0 +1,2 @@
+#define BIND10_MSGQ_SOCKET_FILE "/Temp/bind10-devel/msgq_socket"
+
diff --git a/src/lib/cc/tests/PARTIAL_PORT_ON_WINDOWS b/src/lib/cc/tests/PARTIAL_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/cc/tests/session_unittests_config.h.win32 b/src/lib/cc/tests/session_unittests_config.h.win32
new file mode 100644
index 0000000..fb1f281
--- /dev/null
+++ b/src/lib/cc/tests/session_unittests_config.h.win32
@@ -0,0 +1,2 @@
+#define BIND10_TEST_SOCKET_FILE "./test_socket.sock"
+
diff --git a/src/lib/config/ccsession.cc b/src/lib/config/ccsession.cc
index 69621a4..77e9002 100644
--- a/src/lib/config/ccsession.cc
+++ b/src/lib/config/ccsession.cc
@@ -23,7 +23,11 @@
 #include <stdexcept>
 #include <stdlib.h>
 #include <string.h>
+#ifdef _WIN32
+#include <time.h>
+#else
 #include <sys/time.h>
+#endif
 
 #include <iostream>
 #include <fstream>
diff --git a/src/lib/config/tests/data_def_unittests_config.h.win32 b/src/lib/config/tests/data_def_unittests_config.h.win32
new file mode 100644
index 0000000..6ab34b9
--- /dev/null
+++ b/src/lib/config/tests/data_def_unittests_config.h.win32
@@ -0,0 +1,15 @@
+// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")   
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+// #define TEST_DATA_PATH "@abs_srcdir@/testdata"
diff --git a/src/lib/config/tests/fake_session.cc b/src/lib/config/tests/fake_session.cc
index 5f79d48..44bca53 100644
--- a/src/lib/config/tests/fake_session.cc
+++ b/src/lib/config/tests/fake_session.cc
@@ -32,9 +32,13 @@ using namespace std;
 using namespace isc::cc;
 using namespace isc::data;
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#endif
 
 // ok i want these in cc/data 
 bool
@@ -52,14 +56,16 @@ listContains(ConstElementPtr list, ConstElementPtr el) {
 
 void
 listRemove(ElementPtr list, ConstElementPtr el) {
-    int i = 0;
+    int i = -1;
     BOOST_FOREACH(ConstElementPtr s_el, list->listValue()) {
         if (*el == *s_el) {
-            list->remove(i);
-            return;
+            i = 0;
         }
         i++;
     }
+    if (i >= 0) {
+        list->remove(i);
+    }
 }
 // endwant
 
diff --git a/src/lib/datasrc/data_source.h b/src/lib/datasrc/data_source.h
index ff695da..4337b1b 100644
--- a/src/lib/datasrc/data_source.h
+++ b/src/lib/datasrc/data_source.h
@@ -27,6 +27,8 @@
 #include <dns/rrclass.h>
 #include <cc/data.h>
 
+#undef ERROR
+
 namespace isc {
 
 namespace dns {
diff --git a/src/lib/datasrc/rbtree.h b/src/lib/datasrc/rbtree.h
index 03a6967..65d19a6 100644
--- a/src/lib/datasrc/rbtree.h
+++ b/src/lib/datasrc/rbtree.h
@@ -535,7 +535,7 @@ private:
     // The max label count for one domain name is Name::MAX_LABELS (128).
     // Since each node in rbtree stores at least one label, it's also equal
     // to the possible maximum level.
-    const static int RBT_MAX_LEVEL = isc::dns::Name::MAX_LABELS;
+    const static int RBT_MAX_LEVEL = NAME_MAX_LABELS;
 
     int node_count_;
     const RBNode<T>* nodes_[RBT_MAX_LEVEL];
diff --git a/src/lib/datasrc/tests/cache_unittest.cc b/src/lib/datasrc/tests/cache_unittest.cc
index 96beae0..ad4f69d 100644
--- a/src/lib/datasrc/tests/cache_unittest.cc
+++ b/src/lib/datasrc/tests/cache_unittest.cc
@@ -12,6 +12,8 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include <stdexcept>
 
 #include <dns/name.h>
@@ -210,7 +212,11 @@ TEST_F(CacheTest, expire) {
     aaaa->addRdata(in::AAAA("2001:db8:3:bb::5"));
     cache.addPositive(aaaa, 0, 2);
 
+#ifdef _WIN32
+	Sleep(3000);
+#else
     sleep(3);
+#endif
 
     RRsetPtr r;
     uint32_t f;
diff --git a/src/lib/datasrc/tests/memory_datasrc_unittest.cc b/src/lib/datasrc/tests/memory_datasrc_unittest.cc
index 83fbb58..89c03ab 100644
--- a/src/lib/datasrc/tests/memory_datasrc_unittest.cc
+++ b/src/lib/datasrc/tests/memory_datasrc_unittest.cc
@@ -858,7 +858,7 @@ TEST_F(MemoryZoneTest, nestedEmptyWildcard) {
             NULL
         };
 
-        for (const char** name(names); *name != NULL; ++ name) {
+        for (const char** name = names; *name != NULL; ++ name) {
             SCOPED_TRACE(string("Node ") + *name);
             findTest(Name(*name), RRType::A(), Zone::NXRRSET);
         }
@@ -876,7 +876,7 @@ TEST_F(MemoryZoneTest, nestedEmptyWildcard) {
     {
         SCOPED_TRACE("Asking directly for A on parent nodes");
 
-        for (const char** name(names); *name != NULL; ++ name) {
+        for (const char** name = names; *name != NULL; ++ name) {
             SCOPED_TRACE(string("Node ") + *name);
             findTest(Name(*name), RRType::A(), Zone::NXRRSET);
         }
@@ -885,7 +885,7 @@ TEST_F(MemoryZoneTest, nestedEmptyWildcard) {
     {
         SCOPED_TRACE("Asking for ANY on parent nodes");
 
-        for (const char** name(names); *name != NULL; ++ name) {
+        for (const char** name = names; *name != NULL; ++ name) {
             SCOPED_TRACE(string("Node ") + *name);
 
             RRsetList target;
@@ -927,7 +927,7 @@ MemoryZoneTest::doCancelWildcardTest() {
             NULL
         };
 
-        for (const char** name(names); *name != NULL; ++ name) {
+        for (const char** name = names; *name != NULL; ++ name) {
             SCOPED_TRACE(string("Node ") + *name);
 
             findTest(Name(*name), RRType::A(), Zone::SUCCESS, false, rr_wild_,
diff --git a/src/lib/datasrc/tests/rbtree_unittest.cc b/src/lib/datasrc/tests/rbtree_unittest.cc
index b26a22b..ef6d8db 100644
--- a/src/lib/datasrc/tests/rbtree_unittest.cc
+++ b/src/lib/datasrc/tests/rbtree_unittest.cc
@@ -34,7 +34,10 @@ using namespace isc::datasrc;
 
 // XXX: some compilers cannot find class static constants used in
 // EXPECT_xxx macros, for which we need an explicit empty definition.
+/// put the right #ifdef here
+#ifndef _MSC_VER
 const size_t Name::MAX_LABELS;
+#endif
 
 /* The initial structure of rbtree
  *
diff --git a/src/lib/dns/edns.cc b/src/lib/dns/edns.cc
index 5405dab..8975f57 100644
--- a/src/lib/dns/edns.cc
+++ b/src/lib/dns/edns.cc
@@ -41,6 +41,8 @@ using namespace isc::util;
 namespace isc {
 namespace dns {
 
+const uint8_t EDNS::SUPPORTED_VERSION = 0;
+
 namespace {
 // This diagram shows the wire-format representation of the TTL field of
 // OPT RR and its relationship with implementation specific parameters.
diff --git a/src/lib/dns/edns.h b/src/lib/dns/edns.h
index 5731b95..b0ab09f 100644
--- a/src/lib/dns/edns.h
+++ b/src/lib/dns/edns.h
@@ -362,13 +362,15 @@ private:
 
 public:
     /// \brief The highest EDNS version this implementation supports.
-    static const uint8_t SUPPORTED_VERSION = 0;
+    static const uint8_t SUPPORTED_VERSION; // = 0
 private:
     // We may eventually want to migrate to pimpl, especially when we support
     // EDNS options.  In this initial implementation, we keep it simple.
     const uint8_t version_;
     uint16_t udp_size_;
     bool dnssec_aware_;
+    // silence MSVC warning C4512: assignment operator could not be generated
+    EDNS& operator= (EDNS const&);
 };
 
 /// \brief Create a new \c EDNS object from a set of RR parameters, also
diff --git a/src/lib/dns/gen-rdatacode.py.win32 b/src/lib/dns/gen-rdatacode.py.win32
new file mode 100755
index 0000000..cc5e2a7
--- /dev/null
+++ b/src/lib/dns/gen-rdatacode.py.win32
@@ -0,0 +1,295 @@
+#!/usr/bin/python
+
+# Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""\
+This is a supplemental script to (half) auto-generate DNS Rdata related
+classes and constants.
+"""
+
+import os
+from os.path import getmtime
+import re
+import sys
+
+re_typecode = re.compile('([\da-z]+)_(\d+)')
+classcode2txt = {}
+typecode2txt = {}
+typeandclass = []
+generic_code = 65536            # something larger than any code value
+rdata_declarations = ''
+class_definitions = ''
+classdir_mtime = 0
+rdatadef_mtime = 0
+rdatahdr_mtime = 0
+heading_txt = '''///////////////
+///////////////
+///////////////   THIS FILE IS AUTOMATICALLY GENERATED BY gen-rdatacode.py.
+///////////////   DO NOT EDIT!
+///////////////
+///////////////
+
+'''
+
+def import_classdef(class_txt, file):
+    content = ''
+    rdata_source = open(file, 'r')
+    for line in rdata_source.readlines():
+        if re.match('// BEGIN_ISC_NAMESPACE', line):
+            content += 'namespace isc {\n'
+            content += 'namespace dns {\n'
+            continue
+        if re.match('// BEGIN_RDATA_NAMESPACE', line):
+            content += 'namespace rdata {\n'
+            content += 'namespace ' + class_txt + ' {\n'
+            continue
+        if re.match('// END_ISC_NAMESPACE', line):
+            content += '} // end of namespace "dns"\n'
+            content += '} // end of namespace "isc"\n'
+            continue
+        if re.match('// END_RDATA_NAMESPACE', line):
+            content += '} // end of namespace "' + class_txt +'"\n'
+            content += '} // end of namespace "rdata"\n'
+            continue
+        content += line
+    rdata_source.close()
+    return content
+
+def import_classheader(class_txt, type_txt, type_code, file):
+    type_utxt = type_txt.upper()
+    class_utxt = class_txt.upper()
+
+    # for each CLASS_n/TYPE_m.h
+    rdata_header = open(file, 'r')
+    content = ''
+    guard_macro = '__' + class_txt.upper() + '_' + type_txt.upper()
+    guard_macro += '_' + type_code + '_H'
+    for line in rdata_header.readlines():
+        if re.match('// BEGIN_HEADER_GUARD', line):
+            content += '#ifndef ' + guard_macro + '\n'
+            content += '#define ' + guard_macro + ' 1\n'
+            continue
+        if re.match('// END_HEADER_GUARD', line):
+            content += '#endif // ' + guard_macro + '\n'
+            continue
+        if re.match('// BEGIN_ISC_NAMESPACE', line):
+            content += 'namespace isc {\n'
+            content += 'namespace util {\n'
+            content += '''
+class InputBuffer;
+class OutputBuffer;\n'''
+            content += '}\n\n'
+            content += 'namespace dns {\n'
+            continue
+        if re.match('// BEGIN_RDATA_NAMESPACE', line):
+            content += 'namespace rdata {\n'
+            content += 'namespace ' + class_txt + ' {\n'
+            continue
+        if re.match('// END_ISC_NAMESPACE', line):
+            content += '} // end of namespace "dns"\n'
+            content += '} // end of namespace "isc"\n'
+            continue
+        if re.match('// END_RDATA_NAMESPACE', line):
+            content += '} // end of namespace "' + class_txt +'"\n'
+            content += '} // end of namespace "rdata"\n'
+            continue
+        if re.match('// Local Variables:', line):
+            break
+        content += line
+        if re.match('// BEGIN_COMMON_DECLARATIONS', line):
+            content += '''
+class AbstractMessageRenderer;\n\n'''
+        if re.match('\s+// BEGIN_COMMON_MEMBERS$', line):
+            content += '''
+    explicit ''' + type_utxt + '''(const std::string& type_str);
+    ''' + type_utxt + '''(isc::util::InputBuffer& buffer, size_t rdata_len);
+    ''' + type_utxt + '''(const ''' + type_utxt + '''& other);
+    virtual std::string toText() const;
+    virtual void toWire(isc::util::OutputBuffer& buffer) const;
+    virtual void toWire(AbstractMessageRenderer& renderer) const;
+    virtual int compare(const Rdata& other) const;\n\n'''
+    rdata_header.close()
+    return content
+
+def import_definitions(classcode2txt, typecode2txt, typeandclass):
+    global rdata_declarations
+    global class_definitions
+    global classdir_mtime
+    global rdatadef_mtime
+    global rdatahdr_mtime
+
+    if classdir_mtime < getmtime('./rdata'):
+        classdir_mtime = getmtime('./rdata')
+
+    for dir in list(os.listdir('./rdata')):
+        classdir = './rdata' + os.sep + dir
+        m = re_typecode.match(dir)
+        if os.path.isdir(classdir) and (m != None or dir == 'generic'):
+            if dir == 'generic':
+                class_txt = 'generic'
+                class_code = generic_code
+            else:
+                class_txt = m.group(1)
+                class_code = m.group(2)
+                if not class_code in classcode2txt:
+                    classcode2txt[class_code] = class_txt
+            for file in list(os.listdir(classdir)):
+                file = classdir + os.sep + file
+                m = re_typecode.match(os.path.split(file)[1])
+                if m != None:
+                    type_txt = m.group(1)
+                    type_code = m.group(2)
+                    if not type_code in typecode2txt:
+                        typecode2txt[type_code] = type_txt
+                    if re.search('\cc$', file):
+                        if rdatadef_mtime < getmtime(file):
+                            rdatadef_mtime = getmtime(file)
+                        class_definitions += import_classdef(class_txt, file)
+                    elif re.search('\h$', file):
+                        if rdatahdr_mtime < getmtime(file):
+                            rdatahdr_mtime = getmtime(file)
+                        rdata_declarations += import_classheader(class_txt,
+                                                                 type_txt,
+                                                                 type_code,
+                                                                 file)
+                        typeandclass.append((type_txt, int(type_code),
+                                             (class_txt, class_txt),
+                                             int(class_code)))
+                        if class_txt == 'generic':
+                            typeandclass.append((type_txt, int(type_code),
+                                                 (class_txt, 'in'), 1))
+
+def need_generate(file, mtime):
+    '''Check if we need to generate the specified file.
+
+    To avoid unnecessary compilation, we skip (re)generating the file when
+    the file already exists and newer than the base file.
+    '''
+    if os.path.exists(file) and getmtime(file) > mtime:
+        return False
+    return True
+
+def generate_rdatadef(file, basemtime):
+    if not need_generate(file, basemtime):
+        print('skip generating ' + file);
+        return
+    rdata_deffile = open(file, 'w')
+    rdata_deffile.write(heading_txt)
+    rdata_deffile.write(class_definitions)
+    rdata_deffile.close()
+
+def generate_rdatahdr(file, declarations, basemtime):
+    if not need_generate(file, basemtime):
+        print('skip generating ' + file);
+        return
+    declarations += '''
+// Local Variables:
+// mode: c++
+// End:
+'''
+    rdata_header = open(file, 'w')
+    rdata_header.write(heading_txt)
+    rdata_header.write(declarations)
+    rdata_header.close()
+
+def generate_typeclasscode(fileprefix, basemtime, code2txt, type_or_class):
+    placeholder = './' + fileprefix + '-placeholder.h'
+    outputfile = './' + fileprefix + '.h'
+    upper_key = type_or_class.upper() # TYPE or CLASS
+    lower_key = 'rr' + type_or_class.lower() # rrtype or rrclass
+    cap_key = type_or_class           # Type or Class
+
+    if not need_generate(outputfile, basemtime) and getmtime(outputfile) > getmtime(placeholder):
+        print('skip generating ' + outputfile)
+        return
+
+    declarationtxt = ''
+    deftxt = ''
+    for code in code2txt.keys():
+        codetxt = code2txt[code].upper()
+        declarationtxt += ' ' * 4 + 'static const RR' + cap_key + '& ' + codetxt + '();\n'
+        deftxt += '''inline const RR''' + cap_key + '''&
+RR''' + cap_key + '''::''' + codetxt + '''() {
+    static RR''' + cap_key + ''' ''' + lower_key + '''(''' + code + ''');
+    return (''' + lower_key + ''');
+}\n
+'''
+    header_temp = open(placeholder, 'r')
+    header_out = open(outputfile, 'w')
+    header_out.write(heading_txt)
+    for line in header_temp.readlines():
+        header_out.write(line)
+        if re.match('\s+// BEGIN_WELL_KNOWN_' + upper_key + '_DECLARATIONS$', line):
+            header_out.write(declarationtxt)
+        if re.match('// BEGIN_WELL_KNOWN_' + upper_key + '_DEFINITIONS$', line):
+            header_out.write('\n' + deftxt)
+    header_out.close()
+    header_temp.close()
+
+def generate_rrparam(fileprefix, basemtime):
+    placeholder = './' + fileprefix + '-placeholder.cc'
+    outputfile = './' + fileprefix + '.cc'
+    if not need_generate(outputfile, basemtime) and getmtime(outputfile) > getmtime(placeholder):
+        print('skip generating ' + outputfile)
+        return
+
+    # sort by class, then by type
+    typeandclassparams = ''
+    typeandclass.sort(key = lambda x: (x[3], x[1]))
+    for param in typeandclass:
+        # for rrparamregistry.cc
+        # each param is a tuple of (type_txt, type_code, class_tuple,
+        #                           class_code)
+        (type_txt, type_code, class_tuple, class_code) = param
+        type_utxt = type_txt.upper()
+        class_txt = class_tuple[0]
+        class_utxt = class_tuple[1].upper()
+        indent = ' ' * 8
+        typeandclassparams += indent
+        if class_tuple[1] != 'generic':
+            typeandclassparams += 'add("' + type_utxt + '", '
+            typeandclassparams += str(type_code) + ', "' + class_utxt
+            typeandclassparams += '", ' + str(class_code)
+            typeandclassparams += ', RdataFactoryPtr(new RdataFactory<'
+            typeandclassparams += class_txt + '::' + type_utxt + '>()));\n'
+        else:
+            typeandclassparams += 'add("' + type_utxt + '", ' + str(type_code)
+            typeandclassparams += ', RdataFactoryPtr(new RdataFactory<'
+            typeandclassparams += class_txt + '::' + type_utxt + '>()));\n'
+
+    rrparam_temp = open(placeholder, 'r')
+    rrparam_out = open(outputfile, 'w')
+    rrparam_out.write(heading_txt)
+    for line in rrparam_temp.readlines():
+        rrparam_out.write(line)
+        if re.match('\s+// BEGIN_WELL_KNOWN_PARAMS', line):
+            rrparam_out.write(typeandclassparams)
+    rrparam_temp.close()
+    rrparam_out.close()
+
+if __name__ == "__main__":
+    try:
+        import_definitions(classcode2txt, typecode2txt, typeandclass)
+        generate_rdatadef('./rdataclass.cc', rdatadef_mtime)
+        generate_rdatahdr('./rdataclass.h', rdata_declarations,
+                          rdatahdr_mtime)
+        generate_typeclasscode('rrtype', rdatahdr_mtime, typecode2txt, 'Type')
+        generate_typeclasscode('rrclass', classdir_mtime,
+                               classcode2txt, 'Class')
+        generate_rrparam('rrparamregistry', rdatahdr_mtime)
+    except:
+        sys.stderr.write('Code generation failed due to exception: %s\n' %
+                         sys.exc_info()[1])
+        exit(1)
diff --git a/src/lib/dns/masterload.cc b/src/lib/dns/masterload.cc
index 5f7d5a0..d5eb3ca 100644
--- a/src/lib/dns/masterload.cc
+++ b/src/lib/dns/masterload.cc
@@ -42,6 +42,9 @@ masterLoad(const char* const filename, const Name& origin,
 {
     ifstream ifs;
 
+    if (filename == NULL) {
+        isc_throw(MasterLoadError, "Invalid NULL master file");
+    }
     ifs.open(filename, ios_base::in);
     if (ifs.fail()) {
         isc_throw(MasterLoadError, "Failed to open master file: " << filename);
diff --git a/src/lib/dns/message.cc b/src/lib/dns/message.cc
index d1025d1..279259c 100644
--- a/src/lib/dns/message.cc
+++ b/src/lib/dns/message.cc
@@ -49,6 +49,9 @@ using namespace isc::util;
 namespace isc {
 namespace dns {
 
+const uint16_t Message::DEFAULT_MAX_UDPSIZE = 512;
+const uint16_t Message::DEFAULT_MAX_EDNS0_UDPSIZE = 4096;
+
 namespace {
 // protocol constants
 const size_t HEADERLEN = 12;
diff --git a/src/lib/dns/message.h b/src/lib/dns/message.h
index 5601299..2608d99 100644
--- a/src/lib/dns/message.h
+++ b/src/lib/dns/message.h
@@ -545,10 +545,10 @@ public:
     /// truncation.
     ///
     /// With EDNS the maximum size can be increased per message.
-    static const uint16_t DEFAULT_MAX_UDPSIZE = 512;
+    static const uint16_t DEFAULT_MAX_UDPSIZE; // = 512
 
     /// \brief The default maximum size of UDP DNS messages we can handle
-    static const uint16_t DEFAULT_MAX_EDNS0_UDPSIZE = 4096;
+    static const uint16_t DEFAULT_MAX_EDNS0_UDPSIZE; // = 4096
     //@}
 
 private:
diff --git a/src/lib/dns/name.cc b/src/lib/dns/name.cc
index 4cd0b2b..9e5e3b9 100644
--- a/src/lib/dns/name.cc
+++ b/src/lib/dns/name.cc
@@ -32,6 +32,13 @@ using isc::dns::NameComparisonResult;
 namespace isc {
 namespace dns {
 
+const size_t Name:: MAX_WIRE = 255;
+const size_t Name:: MAX_LABELS = NAME_MAX_LABELS; // 128
+const size_t Name:: MAX_LABELLEN = 63;
+const uint16_t Name:: MAX_COMPRESS_POINTER = 0x3fff;
+const uint16_t Name:: COMPRESS_POINTER_MARK8 = 0xc0;
+const uint16_t Name:: COMPRESS_POINTER_MARK16 = 0xc000;
+
 namespace {
 ///
 /// These are shortcut arrays for efficient character conversion.
diff --git a/src/lib/dns/name.h b/src/lib/dns/name.h
index 4ff7fe5..f892539 100644
--- a/src/lib/dns/name.h
+++ b/src/lib/dns/name.h
@@ -632,27 +632,29 @@ public:
     ///
     //@{
     /// \brief Max allowable length of domain names.
-    static const size_t MAX_WIRE = 255;
+    static const size_t MAX_WIRE; // = 255
 
     /// \brief Max allowable labels of domain names.
     ///
     /// This is <code>ceil(MAX_WIRE / 2)</code>, and is equal to the number of
     /// labels of name "a.a.a.a....a." (127 "a"'s and trailing dot).
-    static const size_t MAX_LABELS = 128;
+    /// The #define should be removed when constant propagation will be fixed
+#define NAME_MAX_LABELS 128
+    static const size_t MAX_LABELS; // = 128
 
     /// \brief Max allowable length of labels of a domain name.
-    static const size_t MAX_LABELLEN = 63;
+    static const size_t MAX_LABELLEN; // = 63
 
     /// \brief Max possible pointer value for name compression.
     ///
     /// This is the highest number of 14-bit unsigned integer.  Name compression
     /// pointers are identified as a 2-byte value starting with the upper two
     /// bit being 11.
-    static const uint16_t MAX_COMPRESS_POINTER = 0x3fff;
+    static const uint16_t MAX_COMPRESS_POINTER; // = 0x3fff
     /// \brief A 8-bit masked value indicating a start of compression pointer.
-    static const uint16_t COMPRESS_POINTER_MARK8 = 0xc0;
+    static const uint16_t COMPRESS_POINTER_MARK8; // = 0xc0
     /// \brief A 16-bit masked value indicating a start of compression pointer.
-    static const uint16_t COMPRESS_POINTER_MARK16 = 0xc000;
+    static const uint16_t COMPRESS_POINTER_MARK16; // = 0xc000
     //@}
 
     ///
diff --git a/src/lib/dns/python/pydnspp_common.cc b/src/lib/dns/python/pydnspp_common.cc
index 6c26367..85641be 100644
--- a/src/lib/dns/python/pydnspp_common.cc
+++ b/src/lib/dns/python/pydnspp_common.cc
@@ -13,6 +13,7 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <Python.h>
+#include <stdint.h>
 #include <pydnspp_common.h>
 
 int
diff --git a/src/lib/dns/rcode.h b/src/lib/dns/rcode.h
index 0c63285..e58ee6b 100644
--- a/src/lib/dns/rcode.h
+++ b/src/lib/dns/rcode.h
@@ -21,6 +21,8 @@
 #ifndef __RCODE_H
 #define __RCODE_H 1
 
+#undef NOERROR
+
 namespace isc {
 namespace dns {
 
diff --git a/src/lib/dns/rdata.cc b/src/lib/dns/rdata.cc
index 27496a2..7018433 100644
--- a/src/lib/dns/rdata.cc
+++ b/src/lib/dns/rdata.cc
@@ -112,7 +112,9 @@ Generic::Generic(isc::util::InputBuffer& buffer, size_t rdata_len) {
     }
 
     vector<uint8_t> data(rdata_len);
-    buffer.readData(&data[0], rdata_len);
+    if (rdata_len > 0) {
+        buffer.readData(&data[0], rdata_len);
+    }
 
     impl_ = new GenericImpl(data);
 }
@@ -242,8 +244,8 @@ compare_internal(const GenericImpl& lhs, const GenericImpl& rhs) {
     size_t len = (this_len < other_len) ? this_len : other_len;
     int cmp;
 
-    if ((cmp = memcmp(&lhs.data_[0], &rhs.data_[0], len))
-        != 0) {
+    if ((this_len > 0) && (other_len > 0) &&
+        ((cmp = memcmp(&lhs.data_[0], &rhs.data_[0], len)) != 0)) {
         return (cmp);
     } else {
         return ((this_len == other_len) ? 0 :
diff --git a/src/lib/dns/rdata/in_1/a_1.cc b/src/lib/dns/rdata/in_1/a_1.cc
index fa46f90..d82e921 100644
--- a/src/lib/dns/rdata/in_1/a_1.cc
+++ b/src/lib/dns/rdata/in_1/a_1.cc
@@ -17,8 +17,12 @@
 
 #include <string>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <arpa/inet.h> // XXX: for inet_pton/ntop(), not exist in C++ standards
 #include <sys/socket.h> // for AF_INET/AF_INET6
+#endif
 
 #include <exceptions/exceptions.h>
 
@@ -78,7 +82,14 @@ string
 A::toText() const {
     char addr_string[sizeof("255.255.255.255")];
 
-    if (inet_ntop(AF_INET, &addr_, addr_string, sizeof(addr_string)) == NULL) {
+#ifdef _WIN32
+#define DECONST (void *)
+#else
+#define DECONST
+#endif
+
+    if (inet_ntop(AF_INET, DECONST &addr_,
+                  addr_string, sizeof(addr_string)) == NULL) {
         isc_throw(Unexpected,
                   "Failed to convert IN/A RDATA to textual IPv4 address");
     }
diff --git a/src/lib/dns/rdata/in_1/aaaa_28.cc b/src/lib/dns/rdata/in_1/aaaa_28.cc
index e9fc122..62cea47 100644
--- a/src/lib/dns/rdata/in_1/aaaa_28.cc
+++ b/src/lib/dns/rdata/in_1/aaaa_28.cc
@@ -17,8 +17,12 @@
 
 #include <string>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
 #include <arpa/inet.h> // XXX: for inet_pton/ntop(), not exist in C++ standards
 #include <sys/socket.h> // for AF_INET/AF_INET6
+#endif
 
 #include <exceptions/exceptions.h>
 
@@ -75,7 +79,14 @@ string
 AAAA::toText() const {
     char addr_string[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
 
-    if (inet_ntop(AF_INET6, &addr_, addr_string, sizeof(addr_string)) == NULL) {
+#ifdef _WIN32
+#define DECONST (void *)
+#else
+#define DECONST
+#endif
+
+    if (inet_ntop(AF_INET6, DECONST &addr_,
+                  addr_string, sizeof(addr_string)) == NULL) {
         isc_throw(Unexpected,
                   "Failed to convert IN/AAAA RDATA to textual IPv6 address");
     }
diff --git a/src/lib/dns/rrclass-placeholder.h b/src/lib/dns/rrclass-placeholder.h
index ae3ff6f..8be3faf 100644
--- a/src/lib/dns/rrclass-placeholder.h
+++ b/src/lib/dns/rrclass-placeholder.h
@@ -22,6 +22,8 @@
 
 #include <exceptions/exceptions.h>
 
+#undef IN
+
 namespace isc {
 namespace util {
 class InputBuffer;
diff --git a/src/lib/dns/rrparamregistry-placeholder.cc b/src/lib/dns/rrparamregistry-placeholder.cc
index 5058ca3..62a9e34 100644
--- a/src/lib/dns/rrparamregistry-placeholder.cc
+++ b/src/lib/dns/rrparamregistry-placeholder.cc
@@ -77,7 +77,7 @@ struct RRTypeParam {
     static size_t UNKNOWN_MAXLEN();
 };
 
-typedef shared_ptr<RRTypeParam> RRTypeParamPtr;
+typedef boost::shared_ptr<RRTypeParam> RRTypeParamPtr;
 typedef map<string, RRTypeParamPtr, CIStringLess> StrRRTypeMap;
 typedef map<uint16_t, RRTypeParamPtr> CodeRRTypeMap;
 
@@ -119,7 +119,7 @@ struct RRClassParam {
     static size_t UNKNOWN_MAXLEN();
 };
 
-typedef shared_ptr<RRClassParam> RRClassParamPtr;
+typedef boost::shared_ptr<RRClassParam> RRClassParamPtr;
 typedef map<string, RRClassParamPtr, CIStringLess> StrRRClassMap;
 typedef map<uint16_t, RRClassParamPtr> CodeRRClassMap;
 
@@ -342,7 +342,7 @@ addParam(const string& code_string, uint16_t code, MC& codemap, MS& stringmap)
         return (false);
     }
 
-    typedef shared_ptr<PT> ParamPtr;
+    typedef boost::shared_ptr<PT> ParamPtr;
     typedef pair<string, ParamPtr> StrParamPair;
     typedef pair<uint16_t, ParamPtr> CodeParamPair;
     ParamPtr param = ParamPtr(new PT(code_string, code));
diff --git a/src/lib/dns/tests/edns_unittest.cc b/src/lib/dns/tests/edns_unittest.cc
index 26cc01c..055027e 100644
--- a/src/lib/dns/tests/edns_unittest.cc
+++ b/src/lib/dns/tests/edns_unittest.cc
@@ -38,7 +38,10 @@ using namespace isc::dns;
 using namespace isc::util;
 using namespace isc::dns::rdata;
 
+/// put the right #ifdef here
+#ifndef _MSC_VER
 const uint8_t EDNS::SUPPORTED_VERSION;
+#endif
 
 namespace {
 class EDNSTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/message_unittest.cc b/src/lib/dns/tests/message_unittest.cc
index 4031e4f..5aad474 100644
--- a/src/lib/dns/tests/message_unittest.cc
+++ b/src/lib/dns/tests/message_unittest.cc
@@ -50,7 +50,11 @@ using namespace isc::dns::rdata;
 // class, at which point we'll also revise the tests including more cases.
 //
 
+/// put the right #ifdef here
+#ifndef _MSC_VER
 const uint16_t Message::DEFAULT_MAX_UDPSIZE;
+#endif
+
 const Name test_name("test.example.com");
 
 namespace {
diff --git a/src/lib/dns/tests/name_unittest.cc b/src/lib/dns/tests/name_unittest.cc
index 6434229..78d9daa 100644
--- a/src/lib/dns/tests/name_unittest.cc
+++ b/src/lib/dns/tests/name_unittest.cc
@@ -37,8 +37,11 @@ using namespace isc::util;
 // XXX: these are defined as class static constants, but some compilers
 // seemingly cannot find the symbols when used in the EXPECT_xxx macros.
 //
+/// put the right #ifdef here
+#ifndef _MSC_VER
 const size_t Name::MAX_WIRE;
 const size_t Name::MAX_LABELS;
+#endif
 
 namespace {
 class NameTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/rdata_tsig_unittest.cc b/src/lib/dns/tests/rdata_tsig_unittest.cc
index 76f91a6..c8ee8ac 100644
--- a/src/lib/dns/tests/rdata_tsig_unittest.cc
+++ b/src/lib/dns/tests/rdata_tsig_unittest.cc
@@ -230,7 +230,7 @@ TEST_F(Rdata_TSIG_Test, createFromParams) {
                   any::TSIG(Name("hmac-sha1"), 1286779327, 300, 12,
                             fake_data, 16020, 18, 6, fake_data2)));
 
-    EXPECT_THROW(any::TSIG(Name("hmac-sha256"), 1LLU << 48, 300, 12,
+    EXPECT_THROW(any::TSIG(Name("hmac-sha256"), 1ULL << 48, 300, 12,
                            fake_data, 16020, 18, 6, fake_data2),
                  isc::OutOfRange);
     EXPECT_THROW(any::TSIG(Name("hmac-sha256"), 0, 300, 0, fake_data, 16020,
diff --git a/src/lib/dns/tests/testdata/gen-wiredata.py.win32 b/src/lib/dns/tests/testdata/gen-wiredata.py.win32
new file mode 100644
index 0000000..53d8de0
--- /dev/null
+++ b/src/lib/dns/tests/testdata/gen-wiredata.py.win32
@@ -0,0 +1,541 @@
+#!/usr/bin/python
+
+# Copyright (C) 2010  Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import configparser, re, time, sys
+from datetime import datetime
+from optparse import OptionParser
+
+re_hex = re.compile(r'^0x[0-9a-fA-F]+')
+re_decimal = re.compile(r'^\d+$')
+re_string = re.compile(r"\'(.*)\'$")
+
+dnssec_timefmt = '%Y%m%d%H%M%S'
+
+dict_qr = { 'query' : 0, 'response' : 1 }
+dict_opcode = { 'query' : 0, 'iquery' : 1, 'status' : 2, 'notify' : 4,
+                'update' : 5 }
+rdict_opcode = dict([(dict_opcode[k], k.upper()) for k in dict_opcode.keys()])
+dict_rcode = { 'noerror' : 0, 'formerr' : 1, 'servfail' : 2, 'nxdomain' : 3,
+               'notimp' : 4, 'refused' : 5, 'yxdomain' : 6, 'yxrrset' : 7,
+               'nxrrset' : 8, 'notauth' : 9, 'notzone' : 10 }
+rdict_rcode = dict([(dict_rcode[k], k.upper()) for k in dict_rcode.keys()])
+dict_rrtype = { 'none' : 0, 'a' : 1, 'ns' : 2, 'md' : 3, 'mf' : 4, 'cname' : 5,
+                'soa' : 6, 'mb' : 7, 'mg' : 8, 'mr' : 9, 'null' : 10,
+                'wks' : 11, 'ptr' : 12, 'hinfo' : 13, 'minfo' : 14, 'mx' : 15,
+                'txt' : 16, 'rp' : 17, 'afsdb' : 18, 'x25' : 19, 'isdn' : 20,
+                'rt' : 21, 'nsap' : 22, 'nsap_tr' : 23, 'sig' : 24, 'key' : 25,
+                'px' : 26, 'gpos' : 27, 'aaaa' : 28, 'loc' : 29, 'nxt' : 30,
+                'srv' : 33, 'naptr' : 35, 'kx' : 36, 'cert' : 37, 'a6' : 38,
+                'dname' : 39, 'opt' : 41, 'apl' : 42, 'ds' : 43, 'sshfp' : 44,
+                'ipseckey' : 45, 'rrsig' : 46, 'nsec' : 47, 'dnskey' : 48,
+                'dhcid' : 49, 'nsec3' : 50, 'nsec3param' : 51, 'hip' : 55,
+                'spf' : 99, 'unspec' : 103, 'tkey' : 249, 'tsig' : 250,
+                'dlv' : 32769, 'ixfr' : 251, 'axfr' : 252, 'mailb' : 253,
+                'maila' : 254, 'any' : 255 }
+rdict_rrtype = dict([(dict_rrtype[k], k.upper()) for k in dict_rrtype.keys()])
+dict_rrclass = { 'in' : 1, 'ch' : 3, 'hs' : 4, 'any' : 255 }
+rdict_rrclass = dict([(dict_rrclass[k], k.upper()) for k in \
+                          dict_rrclass.keys()])
+dict_algorithm = { 'rsamd5' : 1, 'dh' : 2, 'dsa' : 3, 'ecc' : 4,
+                   'rsasha1' : 5 }
+dict_nsec3_algorithm = { 'reserved' : 0, 'sha1' : 1 }
+rdict_algorithm = dict([(dict_algorithm[k], k.upper()) for k in \
+                            dict_algorithm.keys()])
+rdict_nsec3_algorithm = dict([(dict_nsec3_algorithm[k], k.upper()) for k in \
+                                  dict_nsec3_algorithm.keys()])
+
+header_xtables = { 'qr' : dict_qr, 'opcode' : dict_opcode,
+                   'rcode' : dict_rcode }
+question_xtables = { 'rrtype' : dict_rrtype, 'rrclass' : dict_rrclass }
+rrsig_xtables = { 'algorithm' : dict_algorithm }
+
+def parse_value(value, xtable = {}):
+    if re.search(re_hex, value):
+        return int(value, 16)
+    if re.search(re_decimal, value):
+        return int(value)
+    m = re.match(re_string, value)
+    if m:
+        return m.group(1)
+    lovalue = value.lower()
+    if lovalue in xtable:
+        return xtable[lovalue]
+    return value
+
+def code_totext(code, dict):
+    if code in dict.keys():
+        return dict[code] + '(' + str(code) + ')'
+    return str(code)
+
+def encode_name(name, absolute=True):
+    # make sure the name is dot-terminated.  duplicate dots will be ignored
+    # below.
+    name += '.'
+    labels = name.split('.')
+    wire = ''
+    for l in labels:
+        if len(l) > 4 and l[0:4] == 'ptr=':
+            # special meta-syntax for compression pointer
+            wire += '%04x' % (0xc000 | int(l[4:]))
+            break
+        if absolute or len(l) > 0:
+            wire += '%02x' % len(l)
+            wire += ''.join(['%02x' % ord(ch) for ch in l])
+        if len(l) == 0:
+            break
+    return wire
+
+def encode_string(name, len=None):
+    if type(name) is int and len is not None:
+        return '%0.*x' % (len * 2, name)
+    return ''.join(['%02x' % ord(ch) for ch in name])
+
+def count_namelabels(name):
+    if name == '.':             # special case
+        return 0
+    m = re.match('^(.*)\.$', name)
+    if m:
+        name = m.group(1)
+    return len(name.split('.'))
+
+def get_config(config, section, configobj, xtables = {}):
+    try:
+        for field in config.options(section):
+            value = config.get(section, field)
+            if field in xtables.keys():
+                xtable = xtables[field]
+            else:
+                xtable = {}
+            configobj.__dict__[field] = parse_value(value, xtable)
+    except configparser.NoSectionError:
+        return False
+    return True
+
+def print_header(f, input_file):
+    f.write('''###
+### This data file was auto-generated from ''' + input_file + '''
+###
+''')
+
+class Name:
+    name = 'example.com'
+    pointer = None                # no compression by default
+    def dump(self, f):
+        name = self.name
+        if self.pointer is not None:
+            if len(name) > 0 and name[-1] != '.':
+                name += '.'
+            name += 'ptr=%d' % self.pointer
+        name_wire = encode_name(name)
+        f.write('\n# DNS Name: %s' % self.name)
+        if self.pointer is not None:
+            f.write(' + compression pointer: %d' % self.pointer)
+        f.write('\n')
+        f.write('%s' % name_wire)
+        f.write('\n')
+
+class DNSHeader:
+    id = 0x1035
+    (qr, aa, tc, rd, ra, ad, cd) = 0, 0, 0, 0, 0, 0, 0
+    mbz = 0
+    rcode = 0                   # noerror
+    opcode = 0                  # query
+    (qdcount, ancount, nscount, arcount) = 1, 0, 0, 0
+    def dump(self, f):
+        f.write('\n# Header Section\n')
+        f.write('# ID=' + str(self.id))
+        f.write(' QR=' + ('Response' if self.qr else 'Query'))
+        f.write(' Opcode=' + code_totext(self.opcode, rdict_opcode))
+        f.write(' Rcode=' + code_totext(self.rcode, rdict_rcode))
+        f.write('%s' % (' AA' if self.aa else ''))
+        f.write('%s' % (' TC' if self.tc else ''))
+        f.write('%s' % (' RD' if self.rd else ''))
+        f.write('%s' % (' AD' if self.ad else ''))
+        f.write('%s' % (' CD' if self.cd else ''))
+        f.write('\n')
+        f.write('%04x ' % self.id)
+        flag_and_code = 0
+        flag_and_code |= (self.qr << 15 | self.opcode << 14 | self.aa << 10 |
+                          self.tc << 9 | self.rd << 8 | self.ra << 7 |
+                          self.mbz << 6 | self.ad << 5 | self.cd << 4 |
+                          self.rcode)
+        f.write('%04x\n' % flag_and_code)
+        f.write('# QDCNT=%d, ANCNT=%d, NSCNT=%d, ARCNT=%d\n' %
+                (self.qdcount, self.ancount, self.nscount, self.arcount))
+        f.write('%04x %04x %04x %04x\n' % (self.qdcount, self.ancount,
+                                           self.nscount, self.arcount))
+
+class DNSQuestion:
+    name = 'example.com.'
+    rrtype = parse_value('A', dict_rrtype)
+    rrclass = parse_value('IN', dict_rrclass)
+    def dump(self, f):
+        f.write('\n# Question Section\n')
+        f.write('# QNAME=%s QTYPE=%s QCLASS=%s\n' %
+                (self.name,
+                 code_totext(self.rrtype, rdict_rrtype),
+                 code_totext(self.rrclass, rdict_rrclass)))
+        f.write(encode_name(self.name))
+        f.write(' %04x %04x\n' % (self.rrtype, self.rrclass))
+
+class EDNS:
+    name = '.'
+    udpsize = 4096
+    extrcode = 0
+    version = 0
+    do = 0
+    mbz = 0
+    rdlen = 0
+    def dump(self, f):
+        f.write('\n# EDNS OPT RR\n')
+        f.write('# NAME=%s TYPE=%s UDPSize=%d ExtRcode=%s Version=%s DO=%d\n' %
+                (self.name, code_totext(dict_rrtype['opt'], rdict_rrtype),
+                 self.udpsize, self.extrcode, self.version,
+                 1 if self.do else 0))
+        
+        code_vers = (self.extrcode << 8) | (self.version & 0x00ff)
+        extflags = (self.do << 15) | (self.mbz & 0x8000)
+        f.write('%s %04x %04x %04x %04x\n' %
+                (encode_name(self.name), dict_rrtype['opt'], self.udpsize,
+                 code_vers, extflags))
+        f.write('# RDLEN=%d\n' % self.rdlen)
+        f.write('%04x\n' % self.rdlen)
+
+class SOA:
+    # this currently doesn't support name compression within the RDATA.
+    rdlen = -1                  # auto-calculate
+    mname = 'ns.example.com'
+    rname = 'root.example.com'
+    serial = 2010012601
+    refresh = 3600
+    retry = 300
+    expire = 3600000
+    minimum = 1200
+    def dump(self, f):
+        mname_wire = encode_name(self.mname)
+        rname_wire = encode_name(self.rname)
+        rdlen = self.rdlen
+        if rdlen < 0:
+            rdlen = int(20 + len(mname_wire) / 2 + len(str(rname_wire)) / 2)
+        f.write('\n# SOA RDATA (RDLEN=%d)\n' % rdlen)
+        f.write('%04x\n' % rdlen);
+        f.write('# NNAME=%s RNAME=%s\n' % (self.mname, self.rname))
+        f.write('%s %s\n' % (mname_wire, rname_wire))
+        f.write('# SERIAL(%d) REFRESH(%d) RETRY(%d) EXPIRE(%d) MINIMUM(%d)\n' %
+                (self.serial, self.refresh, self.retry, self.expire,
+                 self.minimum))
+        f.write('%08x %08x %08x %08x %08x\n' % (self.serial, self.refresh,
+                                                self.retry, self.expire,
+                                                self.minimum))
+
+class TXT:
+    rdlen = -1                  # auto-calculate
+    nstring = 1                 # number of character-strings
+    stringlen = -1              # default string length, auto-calculate
+    string = 'Test String'      # default string
+    def dump(self, f):
+        stringlen_list = []
+        string_list = []
+        wirestring_list = []
+        for i in range(0, self.nstring):
+            key_string = 'string' + str(i)
+            if key_string in self.__dict__:
+                string_list.append(self.__dict__[key_string])
+            else:
+                string_list.append(self.string)
+            wirestring_list.append(encode_string(string_list[-1]))
+            key_stringlen = 'stringlen' + str(i)
+            if key_stringlen in self.__dict__:
+                stringlen_list.append(self.__dict__[key_stringlen])
+            else:
+                stringlen_list.append(self.stringlen)
+            if stringlen_list[-1] < 0:
+                stringlen_list[-1] = int(len(wirestring_list[-1]) / 2)
+        rdlen = self.rdlen
+        if rdlen < 0:
+            rdlen = int(len(''.join(wirestring_list)) / 2) + self.nstring
+        f.write('\n# TXT RDATA (RDLEN=%d)\n' % rdlen)
+        f.write('%04x\n' % rdlen);
+        for i in range(0, self.nstring):
+            f.write('# String Len=%d, String=\"%s\"\n' %
+                    (stringlen_list[i], string_list[i]))
+            f.write('%02x%s%s\n' % (stringlen_list[i],
+                                    ' ' if len(wirestring_list[i]) > 0 else '',
+                                    wirestring_list[i]))
+
+class RP:
+    '''Implements rendering RP RDATA in the wire format.
+    Configurable parameters are as follows:
+    - rdlen: 16-bit RDATA length.  If omitted, the accurate value is auto
+      calculated and used; if negative, the RDLEN field will be omitted from
+      the output data.
+    - mailbox: The mailbox field.
+    - text: The text field.
+    All of these parameters have the default values and can be omitted.
+    '''
+    rdlen = None                # auto-calculate
+    mailbox = 'root.example.com'
+    text = 'rp-text.example.com'
+    def dump(self, f):
+        mailbox_wire = encode_name(self.mailbox)
+        text_wire = encode_name(self.text)
+        if self.rdlen is None:
+            self.rdlen = (len(mailbox_wire) + len(text_wire)) / 2
+        else:
+            self.rdlen = int(self.rdlen)
+        if self.rdlen >= 0:
+            f.write('\n# RP RDATA (RDLEN=%d)\n' % self.rdlen)
+            f.write('%04x\n' % self.rdlen)
+        else:
+            f.write('\n# RP RDATA (RDLEN omitted)\n')
+        f.write('# MAILBOX=%s TEXT=%s\n' % (self.mailbox, self.text))
+        f.write('%s %s\n' % (mailbox_wire, text_wire))
+
+class NSECBASE:
+    '''Implements rendering NSEC/NSEC3 type bitmaps commonly used for
+    these RRs.  The NSEC and NSEC3 classes will be inherited from this
+    class.'''
+    nbitmap = 1                 # number of bitmaps
+    block = 0
+    maplen = None              # default bitmap length, auto-calculate
+    bitmap = '040000000003'     # an arbtrarily chosen bitmap sample
+    def dump(self, f):
+        # first, construct the bitmpa data
+        block_list = []
+        maplen_list = []
+        bitmap_list = []
+        for i in range(0, self.nbitmap):
+            key_bitmap = 'bitmap' + str(i)
+            if key_bitmap in self.__dict__:
+                bitmap_list.append(self.__dict__[key_bitmap])
+            else:
+                bitmap_list.append(self.bitmap)
+            key_maplen = 'maplen' + str(i)
+            if key_maplen in self.__dict__:
+                maplen_list.append(self.__dict__[key_maplen])
+            else:
+                maplen_list.append(self.maplen)
+            if maplen_list[-1] is None: # calculate it if not specified
+                maplen_list[-1] = int(len(bitmap_list[-1]) / 2)
+            key_block = 'block' + str(i)
+            if key_block in self.__dict__:
+               block_list.append(self.__dict__[key_block])
+            else:
+                block_list.append(self.block)
+
+        # dump RR-type specific part (NSEC or NSEC3)
+        self.dump_fixedpart(f, 2 * self.nbitmap + \
+                                int(len(''.join(bitmap_list)) / 2))
+
+        # dump the bitmap
+        for i in range(0, self.nbitmap):
+            f.write('# Bitmap: Block=%d, Length=%d\n' %
+                    (block_list[i], maplen_list[i]))
+            f.write('%02x %02x %s\n' %
+                    (block_list[i], maplen_list[i], bitmap_list[i]))
+
+class NSEC(NSECBASE):
+    rdlen = None                # auto-calculate
+    nextname = 'next.example.com'
+    def dump_fixedpart(self, f, bitmap_totallen):
+        name_wire = encode_name(self.nextname)
+        if self.rdlen is None:
+            # if rdlen needs to be calculated, it must be based on the bitmap
+            # length, because the configured maplen can be fake.
+            self.rdlen = int(len(name_wire) / 2) + bitmap_totallen
+        f.write('\n# NSEC RDATA (RDLEN=%d)\n' % self.rdlen)
+        f.write('%04x\n' % self.rdlen);
+        f.write('# Next Name=%s (%d bytes)\n' % (self.nextname,
+                                                 int(len(name_wire) / 2)))
+        f.write('%s\n' % name_wire)
+
+class NSEC3(NSECBASE):
+    rdlen = None                # auto-calculate
+    hashalg = 1                 # SHA-1
+    optout = False              # opt-out flag
+    mbz = 0                     # other flag fields (none defined yet)
+    iterations = 1
+    saltlen = 5
+    salt = 's' * saltlen
+    hashlen = 20
+    hash = 'h' * hashlen
+    def dump_fixedpart(self, f, bitmap_totallen):
+        if self.rdlen is None:
+            # if rdlen needs to be calculated, it must be based on the bitmap
+            # length, because the configured maplen can be fake.
+            self.rdlen = 4 + 1 + len(self.salt) + 1 + len(self.hash) \
+                + bitmap_totallen
+        f.write('\n# NSEC3 RDATA (RDLEN=%d)\n' % self.rdlen)
+        f.write('%04x\n' % self.rdlen)
+        optout_val = 1 if self.optout else 0
+        f.write('# Hash Alg=%s, Opt-Out=%d, Other Flags=%0x, Iterations=%d\n' %
+                (code_totext(self.hashalg, rdict_nsec3_algorithm),
+                 optout_val, self.mbz, self.iterations))
+        f.write('%02x %02x %04x\n' %
+                (self.hashalg, (self.mbz << 1) | optout_val, self.iterations))
+        f.write("# Salt Len=%d, Salt='%s'\n" % (self.saltlen, self.salt))
+        f.write('%02x%s%s\n' % (self.saltlen,
+                                ' ' if len(self.salt) > 0 else '',
+                                encode_string(self.salt)))
+        f.write("# Hash Len=%d, Hash='%s'\n" % (self.hashlen, self.hash))
+        f.write('%02x%s%s\n' % (self.hashlen,
+                                ' ' if len(self.hash) > 0 else '',
+                                encode_string(self.hash)))
+
+class RRSIG:
+    rdlen = -1                  # auto-calculate
+    covered = 1                 # A
+    algorithm = 5               # RSA-SHA1
+    labels = -1                 # auto-calculate (#labels of signer)
+    originalttl = 3600
+    expiration = int(time.mktime(datetime.strptime('20100131120000',
+                                                   dnssec_timefmt).timetuple()))
+    inception = int(time.mktime(datetime.strptime('20100101120000',
+                                                  dnssec_timefmt).timetuple()))
+    tag = 0x1035
+    signer = 'example.com'
+    signature = 0x123456789abcdef123456789abcdef
+    def dump(self, f):
+        name_wire = encode_name(self.signer)
+        sig_wire = '%x' % self.signature 
+        rdlen = self.rdlen
+        if rdlen < 0:
+            rdlen = int(18 + len(name_wire) / 2 + len(str(sig_wire)) / 2)
+        labels = self.labels
+        if labels < 0:
+            labels = count_namelabels(self.signer)
+        f.write('\n# RRSIG RDATA (RDLEN=%d)\n' % rdlen)
+        f.write('%04x\n' % rdlen);
+        f.write('# Covered=%s Algorithm=%s Labels=%d OrigTTL=%d\n' %
+                (code_totext(self.covered, rdict_rrtype),
+                 code_totext(self.algorithm, rdict_algorithm), labels,
+                 self.originalttl))
+        f.write('%04x %02x %02x %08x\n' % (self.covered, self.algorithm,
+                                           labels, self.originalttl))
+        f.write('# Expiration=%s, Inception=%s\n' %
+                (str(self.expiration), str(self.inception)))
+        f.write('%08x %08x\n' % (self.expiration, self.inception))
+        f.write('# Tag=%d Signer=%s and Signature\n' % (self.tag, self.signer))
+        f.write('%04x %s %s\n' % (self.tag, name_wire, sig_wire))
+
+class TSIG:
+    rdlen = None                # auto-calculate
+    algorithm = 'hmac-sha256'
+    time_signed = 1286978795    # arbitrarily chosen default
+    fudge = 300
+    mac_size = None             # use a common value for the algorithm
+    mac = None                  # use 'x' * mac_size
+    original_id = 2845          # arbitrarily chosen default
+    error = 0
+    other_len = None         # 6 if error is BADTIME; otherwise 0
+    other_data = None        # use time_signed + fudge + 1 for BADTIME
+    dict_macsize = { 'hmac-md5' : 16, 'hmac-sha1' : 20, 'hmac-sha256' : 32 }
+    def dump(self, f):
+        if str(self.algorithm) == 'hmac-md5':
+            name_wire = encode_name('hmac-md5.sig-alg.reg.int')
+        else:
+            name_wire = encode_name(self.algorithm)
+        rdlen = self.rdlen
+        mac_size = self.mac_size
+        if mac_size is None:
+            if self.algorithm in self.dict_macsize.keys():
+                mac_size = self.dict_macsize[self.algorithm]
+            else:
+                raise RuntimeError('TSIG Mac Size cannot be determined')
+        mac = encode_string('x' * mac_size) if self.mac is None else \
+            encode_string(self.mac, mac_size)
+        other_len = self.other_len
+        if other_len is None:
+            # 18 = BADTIME
+            other_len = 6 if self.error == 18 else 0
+        other_data = self.other_data
+        if other_data is None:
+            other_data = '%012x' % (self.time_signed + self.fudge + 1) \
+                if self.error == 18 else ''
+        else:
+            other_data = encode_string(self.other_data, other_len)
+        if rdlen is None:
+            rdlen = int(len(name_wire) / 2 + 16 + len(mac) / 2 + \
+                            len(other_data) / 2)
+        f.write('\n# TSIG RDATA (RDLEN=%d)\n' % rdlen)
+        f.write('%04x\n' % rdlen);
+        f.write('# Algorithm=%s Time-Signed=%d Fudge=%d\n' %
+                (self.algorithm, self.time_signed, self.fudge))
+        f.write('%s %012x %04x\n' % (name_wire, self.time_signed, self.fudge))
+        f.write('# MAC Size=%d MAC=(see hex)\n' % mac_size)
+        f.write('%04x%s\n' % (mac_size, ' ' + mac if len(mac) > 0 else ''))
+        f.write('# Original-ID=%d Error=%d\n' % (self.original_id, self.error))
+        f.write('%04x %04x\n' %  (self.original_id, self.error))
+        f.write('# Other-Len=%d Other-Data=(see hex)\n' % other_len)
+        f.write('%04x%s\n' % (other_len,
+                              ' ' + other_data if len(other_data) > 0 else ''))
+
+def get_config_param(section):
+    config_param = {'name' : (Name, {}),
+                    'header' : (DNSHeader, header_xtables),
+                    'question' : (DNSQuestion, question_xtables),
+                    'edns' : (EDNS, {}), 'soa' : (SOA, {}), 'txt' : (TXT, {}),
+                    'rp' : (RP, {}), 'rrsig' : (RRSIG, {}),
+                    'nsec' : (NSEC, {}), 'nsec3' : (NSEC3, {}),
+                    'tsig' : (TSIG, {}) }
+    s = section
+    m = re.match('^([^:]+)/\d+$', section)
+    if m:
+        s = m.group(1)
+    return config_param[s]
+
+usage = '''usage: %prog [options] input_file'''
+
+if __name__ == "__main__":
+    parser = OptionParser(usage=usage)
+    parser.add_option('-o', '--output', action='store', dest='output',
+                      default=None, metavar='FILE',
+                      help='output file name [default: prefix of input_file]')
+    (options, args) = parser.parse_args()
+
+    if len(args) == 0:
+        parser.error('input file is missing')
+    configfile = args[0]
+
+    outputfile = options.output
+    if not outputfile:
+        m = re.match('(.*)\.[^.]+$', configfile)
+        if m:
+            outputfile = m.group(1)
+        else:
+            raise ValueError('output file is not specified and input file is not in the form of "output_file.suffix"')
+
+    config = configparser.SafeConfigParser()
+    config.read(configfile)
+
+    output = open(outputfile, 'w')
+
+    print_header(output, configfile)
+
+    # First try the 'custom' mode; if it fails assume the standard mode.
+    try:
+        sections = config.get('custom', 'sections').split(':')
+    except configparser.NoSectionError:
+        sections = ['header', 'question', 'edns']
+
+    for s in sections:
+        section_param = get_config_param(s)
+        (obj, xtables) = (section_param[0](), section_param[1])
+        if get_config(config, s, obj, xtables):
+            obj.dump(output)
+
+    output.close()
diff --git a/src/lib/dns/tsig.cc b/src/lib/dns/tsig.cc
index 48ac5e0..982f3ea 100644
--- a/src/lib/dns/tsig.cc
+++ b/src/lib/dns/tsig.cc
@@ -12,7 +12,11 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifndef _WIN32
 #include <sys/time.h>
+#endif
 
 #include <stdint.h>
 
@@ -42,6 +46,9 @@ using namespace isc::dns::rdata;
 namespace isc {
 namespace dns {
 
+const uint32_t TSIGRecord::TSIG_TTL = 0;
+const uint16_t TSIGContext::DEFAULT_FUDGE = 300;
+
 // Borrowed from dnssectime.cc.  This trick should be unified somewhere.
 namespace tsig {
 namespace detail {
@@ -57,10 +64,25 @@ gettimeofdayWrapper() {
         return (gettimeFunction());
     }
 
+#ifdef _WIN32
+    SYSTEMTIME epoch = { 1970, 1, 4, 1, 0, 0, 0, 0 };
+    FILETIME temp;
+    SystemTimeToFileTime(&epoch, &temp);
+    ULARGE_INTEGER t;
+    t.LowPart = temp.dwLowDateTime;
+    t.HighPart = temp.dwHighDateTime;
+    FILETIME now;
+    GetSystemTimeAsFileTime(&now);
+    ULARGE_INTEGER n;
+    n.LowPart = now.dwLowDateTime;
+    n.HighPart = now.dwHighDateTime;
+    return (static_cast<int64_t>((n.QuadPart - t.QuadPart) / 10000000));
+#else
     struct timeval now;
     gettimeofday(&now, NULL);
 
     return (static_cast<int64_t>(now.tv_sec));
+#endif
 }
 }
 
diff --git a/src/lib/dns/tsig.h b/src/lib/dns/tsig.h
index 55ab41e..93c5da5 100644
--- a/src/lib/dns/tsig.h
+++ b/src/lib/dns/tsig.h
@@ -80,7 +80,7 @@ public:
     static const RRClass& getClass();
 
     /// The TTL value to be used in TSIG RRs.
-    static const uint32_t TSIG_TTL = 0;
+    static const uint32_t TSIG_TTL; // = 0
     //@}
 
 private:
@@ -285,7 +285,7 @@ public:
     ///
     /// Right now fudge is not tunable, and all TSIGs generated by this API
     /// will have this value of fudge.
-    static const uint16_t DEFAULT_FUDGE = 300;
+    static const uint16_t DEFAULT_FUDGE; // = 300
     //@}
 
 private:
diff --git a/src/lib/dns/tsigerror.cc b/src/lib/dns/tsigerror.cc
index e63c9ab..226ee9f 100644
--- a/src/lib/dns/tsigerror.cc
+++ b/src/lib/dns/tsigerror.cc
@@ -24,6 +24,9 @@
 
 namespace isc {
 namespace dns {
+
+const int TSIGError::MAX_RCODE_FOR_TSIGERROR = 15;
+
 namespace {
 const char* const tsigerror_text[] = {
     "BADSIG",
diff --git a/src/lib/dns/tsigerror.h b/src/lib/dns/tsigerror.h
index 4463daf..3a2b1c9 100644
--- a/src/lib/dns/tsigerror.h
+++ b/src/lib/dns/tsigerror.h
@@ -188,7 +188,7 @@ public:
 private:
     // This is internally used to specify the maximum possible RCODE value
     // that can be convertible to TSIGErrors.
-    static const int MAX_RCODE_FOR_TSIGERROR = 15;
+    static const int MAX_RCODE_FOR_TSIGERROR; // = 15
 
     uint16_t code_;
 };
diff --git a/src/lib/log/compiler/message.cc b/src/lib/log/compiler/message.cc
index ef4bafd..992ecbf 100644
--- a/src/lib/log/compiler/message.cc
+++ b/src/lib/log/compiler/message.cc
@@ -23,7 +23,9 @@
 #include <getopt.h>
 #include <string.h>
 #include <time.h>
+#ifndef _WIN32
 #include <unistd.h>
+#endif
 
 #include <util/filename.h>
 #include <util/strutil.h>
diff --git a/src/lib/log/logger_levels.h b/src/lib/log/logger_levels.h
index 2f123e8..907e25b 100644
--- a/src/lib/log/logger_levels.h
+++ b/src/lib/log/logger_levels.h
@@ -26,6 +26,8 @@ namespace log {
 /// N.B. The order of the levels - DEBUG less than INFO less that WARN etc. is
 /// implicitly assumed in several implementations.  They must not be changed.
 
+#undef ERROR
+
 typedef enum {
     DEFAULT = 0,    // Default to logging level of the parent
     DEBUG = 1,
diff --git a/src/lib/nsas/address_entry.h b/src/lib/nsas/address_entry.h
index 8698017..6286815 100644
--- a/src/lib/nsas/address_entry.h
+++ b/src/lib/nsas/address_entry.h
@@ -20,6 +20,7 @@
 /// Lightweight class that couples an address with a RTT and provides some
 /// convenience methods for accessing and updating the information.
 
+#include <time.h>
 #include <stdint.h>
 #include <asiolink/io_address.h>
 
diff --git a/src/lib/nsas/asiolink.h b/src/lib/nsas/asiolink.h
index d95868f..a7b8c4f 100644
--- a/src/lib/nsas/asiolink.h
+++ b/src/lib/nsas/asiolink.h
@@ -16,6 +16,8 @@
 #define __ASIOLINK_H
 
 #include <string>
+#ifndef _WIN32
 #include <sys/socket.h>
+#endif
 
 #endif // __ASIOLINK_H
diff --git a/src/lib/nsas/glue_hints.cc b/src/lib/nsas/glue_hints.cc
index 02c27ee..8c61293 100644
--- a/src/lib/nsas/glue_hints.cc
+++ b/src/lib/nsas/glue_hints.cc
@@ -12,6 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include "glue_hints.h"
 
 #include <stdlib.h>
diff --git a/src/lib/nsas/hash.cc b/src/lib/nsas/hash.cc
index dbd8eec..7f82a38 100644
--- a/src/lib/nsas/hash.cc
+++ b/src/lib/nsas/hash.cc
@@ -60,6 +60,8 @@ if advised of the possibility of such damage.
 
 #include <config.h>
 
+#include <time.h>
+
 #include "hash.h"
 
 using namespace std;
diff --git a/src/lib/nsas/nameserver_address_store.cc b/src/lib/nsas/nameserver_address_store.cc
index 3cef38d..2f08af7 100644
--- a/src/lib/nsas/nameserver_address_store.cc
+++ b/src/lib/nsas/nameserver_address_store.cc
@@ -14,6 +14,11 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <boost/shared_ptr.hpp>
 #include <boost/foreach.hpp>
 #include <boost/bind.hpp>
diff --git a/src/lib/nsas/nameserver_entry.cc b/src/lib/nsas/nameserver_entry.cc
index 4035f79..5ae4625 100644
--- a/src/lib/nsas/nameserver_entry.cc
+++ b/src/lib/nsas/nameserver_entry.cc
@@ -22,9 +22,12 @@
 #include <boost/foreach.hpp>
 
 #include <ctype.h>
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
 #include <strings.h>
-
-#include <config.h>
+#endif
 
 #include <exceptions/exceptions.h>
 #include <dns/name.h>
diff --git a/src/lib/nsas/tests/hash_table_unittest.cc b/src/lib/nsas/tests/hash_table_unittest.cc
index 7ba25b5..283d66e 100644
--- a/src/lib/nsas/tests/hash_table_unittest.cc
+++ b/src/lib/nsas/tests/hash_table_unittest.cc
@@ -180,8 +180,8 @@ TEST_F(HashTableTest, GetTest) {
     EXPECT_TRUE(value.get() == NULL);
 }
 
-shared_ptr<TestEntry>
-pass(shared_ptr<TestEntry> value) {
+boost::shared_ptr<TestEntry>
+pass(boost::shared_ptr<TestEntry> value) {
     return (value);
 }
 
@@ -190,7 +190,7 @@ TEST_F(HashTableTest, GetOrAddTest) {
     EXPECT_TRUE(table_.add(dummy1_, dummy1_->hashKey()));
 
     // Check it looks it up
-    std::pair<bool, shared_ptr<TestEntry> > result = table_.getOrAdd(
+    std::pair<bool, boost::shared_ptr<TestEntry> > result = table_.getOrAdd(
         dummy1_->hashKey(), boost::bind(pass, dummy3_));
     EXPECT_FALSE(result.first);
     EXPECT_EQ(dummy1_.get(), result.second.get());
diff --git a/src/lib/nsas/tests/nameserver_address_store_unittest.cc b/src/lib/nsas/tests/nameserver_address_store_unittest.cc
index abbac1d..69ad330 100644
--- a/src/lib/nsas/tests/nameserver_address_store_unittest.cc
+++ b/src/lib/nsas/tests/nameserver_address_store_unittest.cc
@@ -16,6 +16,13 @@
 ///
 /// This file contains tests for the nameserver address store as a whole.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <algorithm>
 #include <cassert>
 #include <string.h>
@@ -26,8 +33,6 @@
 #include <boost/shared_ptr.hpp>
 #include <gtest/gtest.h>
 
-#include <config.h>
-
 #include <dns/rdataclass.h>
 #include <dns/rrclass.h>
 #include <dns/rrset.h>
diff --git a/src/lib/nsas/tests/nameserver_address_unittest.cc b/src/lib/nsas/tests/nameserver_address_unittest.cc
index 1b211e9..063d450 100644
--- a/src/lib/nsas/tests/nameserver_address_unittest.cc
+++ b/src/lib/nsas/tests/nameserver_address_unittest.cc
@@ -14,6 +14,11 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <gtest/gtest.h>
 
 #include <dns/name.h>
diff --git a/src/lib/nsas/tests/nameserver_entry_unittest.cc b/src/lib/nsas/tests/nameserver_entry_unittest.cc
index 3435d26..c179c21 100644
--- a/src/lib/nsas/tests/nameserver_entry_unittest.cc
+++ b/src/lib/nsas/tests/nameserver_entry_unittest.cc
@@ -22,6 +22,11 @@
 #include <boost/shared_ptr.hpp>
 #include <gtest/gtest.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <dns/rdata.h>
 #include <dns/rrset.h>
 #include <dns/rrclass.h>
diff --git a/src/lib/nsas/tests/zone_entry_unittest.cc b/src/lib/nsas/tests/zone_entry_unittest.cc
index 1982299..1cf1cb0 100644
--- a/src/lib/nsas/tests/zone_entry_unittest.cc
+++ b/src/lib/nsas/tests/zone_entry_unittest.cc
@@ -20,6 +20,11 @@
 #include <boost/lexical_cast.hpp>
 #include <cmath>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <dns/rrclass.h>
 #include <dns/rdataclass.h>
 
diff --git a/src/lib/nsas/zone_entry.cc b/src/lib/nsas/zone_entry.cc
index 1c5df03..53e89dd 100644
--- a/src/lib/nsas/zone_entry.cc
+++ b/src/lib/nsas/zone_entry.cc
@@ -16,6 +16,11 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include "zone_entry.h"
 #include "address_request_callback.h"
 #include "nameserver_entry.h"
diff --git a/src/lib/python/bind10_config.py.win32 b/src/lib/python/bind10_config.py.win32
new file mode 100644
index 0000000..9238483
--- /dev/null
+++ b/src/lib/python/bind10_config.py.win32
@@ -0,0 +1,23 @@
+# Copyright (C) 2010  Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+# This is a base-level module intended to provide configure-time
+# variables to python scripts and libraries.
+import os
+
+BIND10_MSGQ_SOCKET_FILE = os.path.join("c:/Temp",
+                                       "bind10-devel",
+                                       "msgq_socket").replace("${prefix}",
+                                                              "/Temp")
diff --git a/src/lib/resolve/recursive_query.cc b/src/lib/resolve/recursive_query.cc
index 34411ee..0ae7bd3 100644
--- a/src/lib/resolve/recursive_query.cc
+++ b/src/lib/resolve/recursive_query.cc
@@ -12,16 +12,21 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
 #include <netinet/in.h>
-#include <stdlib.h>
 #include <sys/socket.h>
 #include <unistd.h>             // for some IPC/network system calls
+#endif
+#include <stdlib.h>
 
 #include <boost/lexical_cast.hpp>
 #include <boost/bind.hpp>
 
-#include <config.h>
-
 #include <log/dummylog.h>
 
 #include <dns/question.h>
@@ -132,6 +137,28 @@ RecursiveQuery::RecursiveQuery(DNSService& dns_service,
 {
 }
 
+#ifdef _WIN32
+static void
+win32_gettimeofday(struct timeval *tv)
+{
+    SYSTEMTIME epoch = { 1970, 1, 4, 1, 0, 0, 0, 0 };
+    FILETIME temp;
+    SystemTimeToFileTime(&epoch, &temp);
+    ULARGE_INTEGER t;
+    t.LowPart = temp.dwLowDateTime;
+    t.HighPart = temp.dwHighDateTime;
+    FILETIME now;
+    GetSystemTimeAsFileTime(&now);
+    ULARGE_INTEGER n;
+    n.LowPart = now.dwLowDateTime;
+    n.HighPart = now.dwHighDateTime;
+    n.QuadPart -= t.QuadPart;
+    tv->tv_sec = n.QuadPart / 10000000;
+    n.QuadPart -= tv->tv_sec * 10000000;
+    tv->tv_usec = n.QuadPart / 10;
+}
+#endif
+
 // Set the test server - only used for unit testing.
 void
 RecursiveQuery::setTestServer(const std::string& address, uint16_t port) {
@@ -327,7 +354,11 @@ private:
         // We need to keep track of the Address, so that we can update
         // the RTT
         current_ns_address = address;
+#ifdef _WIN32
+	win32_gettimeofday(&current_ns_qsent_time);
+#else
         gettimeofday(&current_ns_qsent_time, NULL);
+#endif
         ++outstanding_events_;
         if (test_server_.second != 0) {
             IOFetch query(protocol_, io_, question_,
@@ -355,7 +386,11 @@ private:
         if (test_server_.second != 0) {
             dlog("Sending upstream query (" + question_.toText() +
                  ") to test server at " + test_server_.first);
+#ifdef _WIN32
+	    win32_gettimeofday(&current_ns_qsent_time);
+#else
             gettimeofday(&current_ns_qsent_time, NULL);
+#endif
             ++outstanding_events_;
             IOFetch query(protocol, io_, question_,
                 test_server_.first,
@@ -368,7 +403,11 @@ private:
             dlog("Sending upstream query (" + question_.toText() +
                 ") to " + upstream_->at(serverIndex).first);
             ++outstanding_events_;
+#ifdef _WIN32
+	    win32_gettimeofday(&current_ns_qsent_time);
+#else
             gettimeofday(&current_ns_qsent_time, NULL);
+#endif
             IOFetch query(protocol, io_, question_,
                 upstream_->at(serverIndex).first,
                 upstream_->at(serverIndex).second, buffer_, this,
@@ -686,7 +725,11 @@ public:
 
             // Update the NSAS with the time it took
             struct timeval cur_time;
+#ifdef _WIN32
+	    win32_gettimeofday(&cur_time);
+#else
             gettimeofday(&cur_time, NULL);
+#endif
             uint32_t rtt = 0;
 
             // Only calculate RTT if it is positive
diff --git a/src/lib/resolve/resolve.cc b/src/lib/resolve/resolve.cc
index f741121..4e5614a 100644
--- a/src/lib/resolve/resolve.cc
+++ b/src/lib/resolve/resolve.cc
@@ -12,6 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <resolve/resolve.h>
 
 #include <dns/message.h>
diff --git a/src/lib/resolve/resolver_callback.cc b/src/lib/resolve/resolver_callback.cc
index c0db55e..389ae5a 100644
--- a/src/lib/resolve/resolver_callback.cc
+++ b/src/lib/resolve/resolver_callback.cc
@@ -12,6 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <resolve/resolver_callback.h>
 
 namespace isc {
diff --git a/src/lib/resolve/tests/recursive_query_unittest.cc b/src/lib/resolve/tests/recursive_query_unittest.cc
index 04a7803..fcfe293 100644
--- a/src/lib/resolve/tests/recursive_query_unittest.cc
+++ b/src/lib/resolve/tests/recursive_query_unittest.cc
@@ -14,8 +14,14 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#include <time.h>
+#else
 #include <sys/socket.h>
 #include <sys/time.h>
+#endif
 
 #include <string.h>
 
@@ -130,9 +136,15 @@ protected:
         if (res_ != NULL) {
             freeaddrinfo(res_);
         }
+#ifdef _WIN32
+        if (sock_ != INVALID_SOCKET) {
+            closesocket(sock_);
+        }
+#else
         if (sock_ != -1) {
             close(sock_);
         }
+#endif
         delete dns_service_;
         delete callback_;
         delete io_service_;
@@ -143,11 +155,20 @@ protected:
         res_ = resolveAddress(family, IPPROTO_UDP, false);
 
         sock_ = socket(res_->ai_family, res_->ai_socktype, res_->ai_protocol);
+#ifdef _WIN32
+        if (sock_ == INVALID_SOCKET) {
+            isc_throw(IOError, "failed to open test socket");
+        }
+        const int cc = sendto(sock_,
+                              (const char *) test_data, sizeof(test_data), 0,
+                              res_->ai_addr, res_->ai_addrlen);
+#else
         if (sock_ < 0) {
             isc_throw(IOError, "failed to open test socket");
         }
         const int cc = sendto(sock_, test_data, sizeof(test_data), 0,
                               res_->ai_addr, res_->ai_addrlen);
+#endif
         if (cc != sizeof(test_data)) {
             isc_throw(IOError, "unexpected sendto result: " << cc);
         }
@@ -159,13 +180,24 @@ protected:
         res_ = resolveAddress(family, IPPROTO_TCP, false);
 
         sock_ = socket(res_->ai_family, res_->ai_socktype, res_->ai_protocol);
+#ifdef _WIN32
+        if (sock_ == INVALID_SOCKET) {
+            isc_throw(IOError, "failed to open test socket");
+        }
+#else
         if (sock_ < 0) {
             isc_throw(IOError, "failed to open test socket");
         }
+#endif
         if (connect(sock_, res_->ai_addr, res_->ai_addrlen) < 0) {
             isc_throw(IOError, "failed to connect to the test server");
         }
+#ifdef _WIN32
+        const int cc = send(sock_, (const char *) test_data,
+                            sizeof(test_data), 0);
+#else
         const int cc = send(sock_, test_data, sizeof(test_data), 0);
+#endif
         if (cc != sizeof(test_data)) {
             isc_throw(IOError, "unexpected send result: " << cc);
         }
@@ -179,6 +211,15 @@ protected:
         res_ = resolveAddress(family, IPPROTO_UDP, true);
 
         sock_ = socket(res_->ai_family, res_->ai_socktype, res_->ai_protocol);
+#ifdef _WIN32
+        if (sock_ == INVALID_SOCKET) {
+            isc_throw(IOError, "failed to open test socket");
+        }
+
+        if (::bind(sock_, res_->ai_addr, res_->ai_addrlen) < 0) {
+            isc_throw(IOError, "bind failed: " << strerror(WSAGetLastError()));
+        }
+#else
         if (sock_ < 0) {
             isc_throw(IOError, "failed to open test socket");
         }
@@ -186,6 +227,7 @@ protected:
         if (bind(sock_, res_->ai_addr, res_->ai_addrlen) < 0) {
             isc_throw(IOError, "bind failed: " << strerror(errno));
         }
+#endif
 
         // The IO service queue should have a RecursiveQuery object scheduled
         // to run at this point.  This call will cause it to begin an
@@ -203,6 +245,19 @@ protected:
         // we add an ad hoc timeout.
         const struct timeval timeo = { 10, 0 };
         int recv_options = 0;
+#ifdef _WIN32
+        if (setsockopt(sock_, SOL_SOCKET, SO_RCVTIMEO,
+                       (const char *) &timeo, sizeof(timeo))) {
+                isc_throw(IOError,
+                          "set RCVTIMEO failed: " <<
+                          strerror(WSAGetLastError()));
+        }
+        const int ret = recv(sock_, (char *) buffer, size, recv_options);
+        if (ret < 0) {
+            isc_throw(IOError,
+                      "recvfrom failed: " << strerror(WSAGetLastError()));
+        }
+#else
         if (setsockopt(sock_, SOL_SOCKET, SO_RCVTIMEO, &timeo,
                        sizeof(timeo))) {
             if (errno == ENOPROTOOPT) {
@@ -220,6 +275,7 @@ protected:
         if (ret < 0) {
             isc_throw(IOError, "recvfrom failed: " << strerror(errno));
         }
+#endif
         
         // Pass the message size back via the size parameter
         size = ret;
@@ -537,9 +593,9 @@ TEST_F(RecursiveQueryTest, v4TCPOnly) {
 
 vector<pair<string, uint16_t> >
 singleAddress(const string &address, uint16_t port) {
-    vector<pair<string, uint16_t> > result;
-    result.push_back(pair<string, uint16_t>(address, port));
-    return (result);
+    vector<pair<string, uint16_t> > result_;
+    result_.push_back(pair<string, uint16_t>(address, port));
+    return (result_);
 }
 
 TEST_F(RecursiveQueryTest, recursiveSetupV4) {
@@ -606,12 +662,21 @@ createTestSocket()
 {
     struct addrinfo* res_ = resolveAddress(AF_INET, IPPROTO_UDP, true);
     int sock_ = socket(res_->ai_family, res_->ai_socktype, res_->ai_protocol);
+#ifdef _WIN32
+    if (sock_ == INVALID_SOCKET) {
+        isc_throw(IOError, "failed to open test socket");
+    }
+    if (::bind(sock_, res_->ai_addr, res_->ai_addrlen) < 0) {
+        isc_throw(IOError, "failed to bind test socket");
+    }
+#else
     if (sock_ < 0) {
         isc_throw(IOError, "failed to open test socket");
     }
     if (bind(sock_, res_->ai_addr, res_->ai_addrlen) < 0) {
         isc_throw(IOError, "failed to bind test socket");
     }
+#endif
     return sock_;
 }
 
@@ -619,6 +684,13 @@ int
 setSocketTimeout(int sock_, size_t tv_sec, size_t tv_usec) {
     const struct timeval timeo = { tv_sec, tv_usec };
     int recv_options = 0;
+#ifdef _WIN32
+    if (setsockopt(sock_, SOL_SOCKET, SO_RCVTIMEO,
+                   (const char *) &timeo, sizeof(timeo))) {
+        isc_throw(IOError,
+                  "set RCVTIMEO failed: " << strerror(WSAGetLastError()));
+    }
+#else
     if (setsockopt(sock_, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof(timeo))) {
         if (errno == ENOPROTOOPT) { // see RecursiveQueryTest::recvUDP()
             recv_options = MSG_DONTWAIT;
@@ -626,6 +698,7 @@ setSocketTimeout(int sock_, size_t tv_sec, size_t tv_usec) {
             isc_throw(IOError, "set RCVTIMEO failed: " << strerror(errno));
         }
     }
+#endif
     return recv_options;
 }
 
diff --git a/src/lib/resolve/tests/recursive_query_unittest_2.cc b/src/lib/resolve/tests/recursive_query_unittest_2.cc
index 3e62336..bdbaac5 100644
--- a/src/lib/resolve/tests/recursive_query_unittest_2.cc
+++ b/src/lib/resolve/tests/recursive_query_unittest_2.cc
@@ -12,6 +12,8 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include <algorithm>
 #include <cstdlib>
 #include <iomanip>
@@ -275,7 +277,8 @@ public:
     /// \param ec ASIO error code, completion code of asynchronous I/O issued
     ///        by the "server" to receive data.
     /// \param length Amount of data received.
-    void udpReceiveHandler(error_code ec = error_code(), size_t length = 0) {
+    void udpReceiveHandler(asio::error_code ec = asio::error_code(),
+                           size_t length = 0) {
         if (debug_) {
             cout << "udpReceiveHandler(): error = " << ec.value() <<
                     ", length = " << length << ", last state = " << last_ <<
@@ -368,7 +371,8 @@ public:
     ///
     /// \param ec Completion error code of the send.
     /// \param length Actual number of bytes sent.
-    void udpSendHandler(error_code ec = error_code(), size_t length = 0) {
+    void udpSendHandler(asio::error_code ec = asio::error_code(),
+                        size_t length = 0) {
         if (debug_) {
             cout << "udpSendHandler(): error = " << ec.value() <<
                     ", length = " << length << endl;
@@ -392,7 +396,8 @@ public:
     ///
     /// \param socket Socket on which data will be received
     /// \param ec Boost error code, value should be zero.
-    void tcpAcceptHandler(error_code ec = error_code(), size_t length = 0) {
+    void tcpAcceptHandler(asio::error_code ec = asio::error_code(),
+                          size_t length = 0) {
         if (debug_) {
             cout << "tcpAcceptHandler(): error = " << ec.value() <<
                     ", length = " << length << endl;
@@ -419,7 +424,8 @@ public:
     /// \param ec ASIO error code, completion code of asynchronous I/O issued
     ///        by the "server" to receive data.
     /// \param length Amount of data received.
-    void tcpReceiveHandler(error_code ec = error_code(), size_t length = 0) {
+    void tcpReceiveHandler(asio::error_code ec = asio::error_code(),
+                           size_t length = 0) {
         if (debug_) {
             cout << "tcpReceiveHandler(): error = " << ec.value() <<
                     ", length = " << length <<
@@ -506,7 +512,8 @@ public:
     /// \param expected_length Number of bytes that were expected to have been sent.
     /// \param ec Boost error code, value should be zero.
     /// \param length Number of bytes sent.
-    void tcpSendHandler(size_t expected_length = 0, error_code ec = error_code(),
+    void tcpSendHandler(size_t expected_length = 0,
+                        asio::error_code ec = asio::error_code(),
                         size_t length = 0)
     {
         if (debug_) {
diff --git a/src/lib/resolve/tests/resolve_unittest.cc b/src/lib/resolve/tests/resolve_unittest.cc
index 85d264d..653353a 100644
--- a/src/lib/resolve/tests/resolve_unittest.cc
+++ b/src/lib/resolve/tests/resolve_unittest.cc
@@ -12,6 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <iostream>
 #include <gtest/gtest.h>
 
diff --git a/src/lib/resolve/tests/resolver_callback_unittest.cc b/src/lib/resolve/tests/resolver_callback_unittest.cc
index e94f13d..b3f6cc5 100644
--- a/src/lib/resolve/tests/resolver_callback_unittest.cc
+++ b/src/lib/resolve/tests/resolver_callback_unittest.cc
@@ -12,6 +12,12 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <winsock2.h>
+#endif
+
 #include <gtest/gtest.h>
 #include <asiodns/dns_server.h>
 #include <resolve/resolver_callback.h>
diff --git a/src/lib/resolve/tests/run_unittests.cc b/src/lib/resolve/tests/run_unittests.cc
index f80e167..771d546 100644
--- a/src/lib/resolve/tests/run_unittests.cc
+++ b/src/lib/resolve/tests/run_unittests.cc
@@ -12,6 +12,12 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <winsock2.h>
+#endif
+
 #include <gtest/gtest.h>
 
 #include <dns/tests/unittest_util.h>
@@ -20,5 +26,13 @@ int
 main(int argc, char* argv[]) {
     ::testing::InitGoogleTest(&argc, argv);
 
+#ifdef _WIN32
+	WSADATA wsaData;
+	WSAStartup(MAKEWORD(2,2), &wsaData);
+	int ret = RUN_ALL_TESTS();
+	WSACleanup();
+	return (ret);
+#else
     return (RUN_ALL_TESTS());
+#endif
 }
diff --git a/src/lib/server_common/portconfig.cc b/src/lib/server_common/portconfig.cc
index 7b2b3dd..ac41f83 100644
--- a/src/lib/server_common/portconfig.cc
+++ b/src/lib/server_common/portconfig.cc
@@ -12,6 +12,8 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include <server_common/portconfig.h>
 
 #include <asiolink/io_address.h>
diff --git a/src/lib/server_common/tests/portconfig_unittest.cc b/src/lib/server_common/tests/portconfig_unittest.cc
index 65963eb..0c77c9b 100644
--- a/src/lib/server_common/tests/portconfig_unittest.cc
+++ b/src/lib/server_common/tests/portconfig_unittest.cc
@@ -12,6 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#endif
+
 #include <server_common/portconfig.h>
 
 #include <cc/data.h>
diff --git a/src/lib/testutils/srv_test.cc b/src/lib/testutils/srv_test.cc
index 1d79d71..f82be89 100644
--- a/src/lib/testutils/srv_test.cc
+++ b/src/lib/testutils/srv_test.cc
@@ -14,7 +14,12 @@
 
 #include <config.h>
 
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
 #include <netinet/in.h>
+#endif
 
 #include <dns/message.h>
 #include <dns/rcode.h>
diff --git a/src/lib/util/encode/base_n.cc b/src/lib/util/encode/base_n.cc
index e79f11d..c86e4af 100644
--- a/src/lib/util/encode/base_n.cc
+++ b/src/lib/util/encode/base_n.cc
@@ -108,7 +108,7 @@ class EncodeNormalizer : public iterator<input_iterator_tag, uint8_t> {
 public:
     EncodeNormalizer(const vector<uint8_t>::const_iterator& base,
                      const vector<uint8_t>::const_iterator& base_end) :
-        base_(base), base_end_(base_end), in_pad_(false)
+        base_(base), base_end_(base_end), in_pad_(base == base_end)
     {}
     EncodeNormalizer& operator++() {
         if (!in_pad_) {
@@ -138,7 +138,7 @@ private:
 // DecodeNormalizer is an input iterator intended to be used as a filter
 // between the encoded baseX stream and binary_from_baseXX.
 // A DecodeNormalizer object is configured with three string iterators
-// (base, base_beinpad, and base_beginpad), specifying the head of the string,
+// (base, base_beginpad, and base_end), specifying the head of the string,
 // the beginning position of baseX padding (when there's padding), and
 // end of the string, respectively.  It internally iterators over the original
 // stream, and return each character of the encoded string via its dereference
@@ -159,11 +159,11 @@ public:
                      const string::const_iterator& base_end) :
         base_zero_code_(base_zero_code),
         base_(base), base_beginpad_(base_beginpad), base_end_(base_end),
-        in_pad_(false)
+        in_pad_(base == base_beginpad)
     {}
     DecodeNormalizer& operator++() {
         ++base_;
-        while (base_ != base_end_ && isspace(*base_)) {
+        while (base_ != base_end_ && isspace((int)*base_ & 0xff)) {
             ++base_;
         }
         if (base_ == base_beginpad_) {
@@ -172,6 +172,8 @@ public:
         return (*this);
     }
     const char& operator*() const {
+        if (base_ == base_end_)
+            isc_throw(BadValue, "end of input");
         if (in_pad_ && *base_ == BASE_PADDING_CHAR) {
             return (base_zero_code_);
         } else {
@@ -268,7 +270,7 @@ BaseNTransformer<BitsPerChunk, BaseZeroCode, Encoder, Decoder>::decode(
                 isc_throw(BadValue, "Too many " << algorithm
                           << " padding characters: " << input);
             }
-        } else if (!isspace(ch)) {
+        } else if (!isspace((int)ch & 0xff)) {
             break;
         }
         ++srit;
diff --git a/src/lib/util/io/NO_PORT_ON_WINDOWS b/src/lib/util/io/NO_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/util/random/qid_gen.cc b/src/lib/util/random/qid_gen.cc
index 43041ad..3efe4d6 100644
--- a/src/lib/util/random/qid_gen.cc
+++ b/src/lib/util/random/qid_gen.cc
@@ -18,9 +18,15 @@
 // (and other parts where we need randomness, perhaps another thing
 // for a general libutil?)
 
+#include <config.h>
+
 #include <util/random/qid_gen.h>
 
+#ifdef _WIN32
+#include <time.h>
+#else
 #include <sys/time.h>
+#endif
 
 namespace isc {
 namespace util {
@@ -41,9 +47,15 @@ QidGenerator::QidGenerator() : dist_(0, 65535),
 
 void
 QidGenerator::seed() {
+#ifdef _WIN32
+    FILETIME now;
+    GetSystemTimeAsFileTime(&now);
+    generator_.seed(now.dwLowDateTime + now.dwHighDateTime);
+#else
     struct timeval tv;
     gettimeofday(&tv, 0);
     generator_.seed((tv.tv_sec * 1000000) + tv.tv_usec);
+#endif
 }
 
 uint16_t
diff --git a/src/lib/util/random/random_number_generator.h b/src/lib/util/random/random_number_generator.h
index 485ea7a..43f4179 100644
--- a/src/lib/util/random/random_number_generator.h
+++ b/src/lib/util/random/random_number_generator.h
@@ -60,7 +60,7 @@ public:
     /// \param min The minimum number in the range
     /// \param max The maximum number in the range
     UniformRandomIntegerGenerator(int min, int max):
-        min_(std::min(min, max)), max_(std::max(min, max)),
+        min_(min(min, max)), max_(max(min, max)),
         dist_(min_, max_), generator_(rng_, dist_)
     {
         // To preserve the restriction of the underlying uniform_int class (and
diff --git a/src/lib/util/tests/base32hex_unittest.cc b/src/lib/util/tests/base32hex_unittest.cc
index bf79627..ea04a63 100644
--- a/src/lib/util/tests/base32hex_unittest.cc
+++ b/src/lib/util/tests/base32hex_unittest.cc
@@ -66,7 +66,7 @@ decodeCheck(const string& input_string, vector<uint8_t>& output,
             const string& expected)
 {
     decodeBase32Hex(input_string, output);
-    EXPECT_EQ(expected, string(&output[0], &output[0] + output.size()));
+    EXPECT_EQ(expected, string(output.begin(), output.end()));
 }
 
 TEST_F(Base32HexTest, decode) {
diff --git a/src/lib/util/tests/base64_unittest.cc b/src/lib/util/tests/base64_unittest.cc
index c2b2785..2e3d1f2 100644
--- a/src/lib/util/tests/base64_unittest.cc
+++ b/src/lib/util/tests/base64_unittest.cc
@@ -52,7 +52,7 @@ decodeCheck(const string& input_string, vector<uint8_t>& output,
             const string& expected)
 {
     decodeBase64(input_string, output);
-    EXPECT_EQ(expected, string(&output[0], &output[0] + output.size()));
+    EXPECT_EQ(expected, string(output.begin(), output.end()));
 }
 
 TEST_F(Base64Test, decode) {
diff --git a/src/lib/util/time_utilities.cc b/src/lib/util/time_utilities.cc
index 229800d..646caf0 100644
--- a/src/lib/util/time_utilities.cc
+++ b/src/lib/util/time_utilities.cc
@@ -12,9 +12,13 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <config.h>
+
 #include <stdint.h>
 
+#ifndef _WIN32
 #include <sys/time.h>
+#endif
 
 #include <string>
 #include <iomanip>
@@ -120,10 +124,25 @@ gettimeofdayWrapper() {
         return (gettimeFunction());
     }
 
+#ifdef _WIN32
+    SYSTEMTIME epoch = { 1970, 1, 4, 1, 0, 0, 0, 0 };
+    FILETIME temp;
+    SystemTimeToFileTime(&epoch, &temp);
+    ULARGE_INTEGER t;
+    t.LowPart = temp.dwLowDateTime;
+    t.HighPart = temp.dwHighDateTime;
+    FILETIME now;
+    GetSystemTimeAsFileTime(&now);
+    ULARGE_INTEGER n;
+    n.LowPart = now.dwLowDateTime;
+    n.HighPart = now.dwHighDateTime;
+    return (static_cast<int64_t>((n.QuadPart - t.QuadPart) / 10000000));
+#else
     struct timeval now;
     gettimeofday(&now, NULL);
 
     return (static_cast<int64_t>(now.tv_sec));
+#endif
 }
 }
 
diff --git a/src/lib/util/unittests/PARTIAL_PORT_ON_WINDOWS b/src/lib/util/unittests/PARTIAL_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/xfr/NO_PORT_ON_WINDOWS b/src/lib/xfr/NO_PORT_ON_WINDOWS
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/xfr/xfrout_client.cc b/src/lib/xfr/xfrout_client.cc
index 6ab905b..7f83048 100644
--- a/src/lib/xfr/xfrout_client.cc
+++ b/src/lib/xfr/xfrout_client.cc
@@ -17,7 +17,10 @@
 #include <iostream>
 
 // for some IPC/network system calls in asio/detail/pipe_select_interrupter.hpp
+#ifndef _WIN32
 #include <unistd.h>
+#endif
+#include <config.h>
 #include <asio.hpp>
 
 #include <util/io/fd_share.h>
diff --git a/win32build/BINDInstall/BINDInstall.cpp b/win32build/BINDInstall/BINDInstall.cpp
new file mode 100755
index 0000000..cbb562b
--- /dev/null
+++ b/win32build/BINDInstall/BINDInstall.cpp
@@ -0,0 +1,11 @@
+// BINDInstall.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+
+
+int _tmain(int argc, _TCHAR* argv[])
+{
+	return 0;
+}
+
diff --git a/win32build/BINDInstall/stdafx.cpp b/win32build/BINDInstall/stdafx.cpp
new file mode 100755
index 0000000..4acff63
--- /dev/null
+++ b/win32build/BINDInstall/stdafx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// BINDInstall.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/win32build/BINDInstall/stdafx.h b/win32build/BINDInstall/stdafx.h
new file mode 100755
index 0000000..47a0d02
--- /dev/null
+++ b/win32build/BINDInstall/stdafx.h
@@ -0,0 +1,15 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#include <stdio.h>
+#include <tchar.h>
+
+
+
+// TODO: reference additional headers your program requires here
diff --git a/win32build/BINDInstall/targetver.h b/win32build/BINDInstall/targetver.h
new file mode 100755
index 0000000..90e767b
--- /dev/null
+++ b/win32build/BINDInstall/targetver.h
@@ -0,0 +1,8 @@
+#pragma once
+
+// Including SDKDDKVer.h defines the highest available Windows platform.
+
+// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
+// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
+
+#include <SDKDDKVer.h>
diff --git a/win32build/VS2008/stdint.h b/win32build/VS2008/stdint.h
new file mode 100644
index 0000000..325dbc3
--- /dev/null
+++ b/win32build/VS2008/stdint.h
@@ -0,0 +1,20 @@
+/* C99 needed include... */
+
+typedef char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+typedef short int_least16_t;
+
+#ifdef _WIN64
+typedef unsigned long long uintptr_t;
+#else
+typedef unsigned int uintptr_t;
+#endif
+
+#define UINT32_MAX 0xffffffff
diff --git a/win32build/VS2010/BINDInstall/BINDInstall.vcxproj b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj
new file mode 100755
index 0000000..924a07f
--- /dev/null
+++ b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{41B1A417-2276-422A-A054-2691F6E40A54}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>BINDInstall</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\BINDInstall\stdafx.h" />
+    <ClInclude Include="..\..\BINDInstall\targetver.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\BINDInstall\BINDInstall.cpp" />
+    <ClCompile Include="..\..\BINDInstall\stdafx.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.filters b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.filters
new file mode 100755
index 0000000..fee86cc
--- /dev/null
+++ b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.filters
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\BINDInstall\stdafx.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\BINDInstall\targetver.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\BINDInstall\BINDInstall.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\BINDInstall\stdafx.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.user b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/BINDInstall/BINDInstall.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/bind10.sln b/win32build/VS2010/bind10.sln
new file mode 100755
index 0000000..f534e7a
--- /dev/null
+++ b/win32build/VS2010/bind10.sln
@@ -0,0 +1,128 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BINDInstall", "BINDInstall\BINDInstall.vcxproj", "{41B1A417-2276-422A-A054-2691F6E40A54}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+		{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2} = {DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896} = {13215E3E-E75D-463D-A0EF-93A1C9A20896}
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+		{8412D26C-6C2B-4FCC-ABB4-E9509E833951} = {8412D26C-6C2B-4FCC-ABB4-E9509E833951}
+		{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7} = {2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}
+		{13D541BC-8365-42F7-840F-A117CA0413DD} = {13D541BC-8365-42F7-840F-A117CA0413DD}
+		{65B0B6D2-94CE-4A21-85E7-A047C79044F9} = {65B0B6D2-94CE-4A21-85E7-A047C79044F9}
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3} = {F6E728D3-A0B2-40F6-9B91-7D4474D778F3}
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD} = {2844FDFB-A0A1-4FA4-A654-15D69CC717DD}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libexceptions", "libexceptions\libexceptions.vcxproj", "{7D04222B-643C-446C-A2B8-93AF74A86246}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libutil", "libutil\libutil.vcxproj", "{8F120666-1A69-4506-8546-0F665E80FFB7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcryptolink", "libcryptolink\libcryptolink.vcxproj", "{13215E3E-E75D-463D-A0EF-93A1C9A20896}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdns++", "libdns++\libdns++.vcxproj", "{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896} = {13215E3E-E75D-463D-A0EF-93A1C9A20896}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libexceptions_tests", "libexceptions_tests\libexceptions_tests.vcxproj", "{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libutil_tests", "libutil_tests\libutil_tests.vcxproj", "{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libutil_unittests", "libutil_unittests\libutil_unittests.vcxproj", "{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcryptolink_tests", "libcryptolink_tests\libcryptolink_tests.vcxproj", "{8412D26C-6C2B-4FCC-ABB4-E9509E833951}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896} = {13215E3E-E75D-463D-A0EF-93A1C9A20896}
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdns++_tests", "libdns++_tests\libdns++_tests.vcxproj", "{65B0B6D2-94CE-4A21-85E7-A047C79044F9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896} = {13215E3E-E75D-463D-A0EF-93A1C9A20896}
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3} = {F6E728D3-A0B2-40F6-9B91-7D4474D778F3}
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD} = {2844FDFB-A0A1-4FA4-A654-15D69CC717DD}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdns++_python", "libdns++_python\libdns++_python.vcxproj", "{13D541BC-8365-42F7-840F-A117CA0413DD}"
+	ProjectSection(ProjectDependencies) = postProject
+		{7D04222B-643C-446C-A2B8-93AF74A86246} = {7D04222B-643C-446C-A2B8-93AF74A86246}
+		{8F120666-1A69-4506-8546-0F665E80FFB7} = {8F120666-1A69-4506-8546-0F665E80FFB7}
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3} = {F6E728D3-A0B2-40F6-9B91-7D4474D778F3}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{41B1A417-2276-422A-A054-2691F6E40A54}.Debug|Win32.ActiveCfg = Debug|Win32
+		{41B1A417-2276-422A-A054-2691F6E40A54}.Debug|Win32.Build.0 = Debug|Win32
+		{41B1A417-2276-422A-A054-2691F6E40A54}.Release|Win32.ActiveCfg = Release|Win32
+		{41B1A417-2276-422A-A054-2691F6E40A54}.Release|Win32.Build.0 = Release|Win32
+		{7D04222B-643C-446C-A2B8-93AF74A86246}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7D04222B-643C-446C-A2B8-93AF74A86246}.Debug|Win32.Build.0 = Debug|Win32
+		{7D04222B-643C-446C-A2B8-93AF74A86246}.Release|Win32.ActiveCfg = Release|Win32
+		{7D04222B-643C-446C-A2B8-93AF74A86246}.Release|Win32.Build.0 = Release|Win32
+		{8F120666-1A69-4506-8546-0F665E80FFB7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8F120666-1A69-4506-8546-0F665E80FFB7}.Debug|Win32.Build.0 = Debug|Win32
+		{8F120666-1A69-4506-8546-0F665E80FFB7}.Release|Win32.ActiveCfg = Release|Win32
+		{8F120666-1A69-4506-8546-0F665E80FFB7}.Release|Win32.Build.0 = Release|Win32
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896}.Debug|Win32.ActiveCfg = Debug|Win32
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896}.Debug|Win32.Build.0 = Debug|Win32
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896}.Release|Win32.ActiveCfg = Release|Win32
+		{13215E3E-E75D-463D-A0EF-93A1C9A20896}.Release|Win32.Build.0 = Release|Win32
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}.Debug|Win32.Build.0 = Debug|Win32
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}.Release|Win32.ActiveCfg = Release|Win32
+		{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}.Release|Win32.Build.0 = Release|Win32
+		{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}.Debug|Win32.Build.0 = Debug|Win32
+		{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}.Release|Win32.ActiveCfg = Release|Win32
+		{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}.Release|Win32.Build.0 = Release|Win32
+		{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}.Debug|Win32.Build.0 = Debug|Win32
+		{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}.Release|Win32.ActiveCfg = Release|Win32
+		{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}.Release|Win32.Build.0 = Release|Win32
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}.Debug|Win32.Build.0 = Debug|Win32
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}.Release|Win32.ActiveCfg = Release|Win32
+		{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}.Release|Win32.Build.0 = Release|Win32
+		{8412D26C-6C2B-4FCC-ABB4-E9509E833951}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8412D26C-6C2B-4FCC-ABB4-E9509E833951}.Debug|Win32.Build.0 = Debug|Win32
+		{8412D26C-6C2B-4FCC-ABB4-E9509E833951}.Release|Win32.ActiveCfg = Release|Win32
+		{8412D26C-6C2B-4FCC-ABB4-E9509E833951}.Release|Win32.Build.0 = Release|Win32
+		{65B0B6D2-94CE-4A21-85E7-A047C79044F9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{65B0B6D2-94CE-4A21-85E7-A047C79044F9}.Debug|Win32.Build.0 = Debug|Win32
+		{65B0B6D2-94CE-4A21-85E7-A047C79044F9}.Release|Win32.ActiveCfg = Release|Win32
+		{65B0B6D2-94CE-4A21-85E7-A047C79044F9}.Release|Win32.Build.0 = Release|Win32
+		{13D541BC-8365-42F7-840F-A117CA0413DD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{13D541BC-8365-42F7-840F-A117CA0413DD}.Debug|Win32.Build.0 = Debug|Win32
+		{13D541BC-8365-42F7-840F-A117CA0413DD}.Release|Win32.ActiveCfg = Release|Win32
+		{13D541BC-8365-42F7-840F-A117CA0413DD}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win32build/VS2010/libcryptolink/libcryptolink.vcxproj b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj
new file mode 100755
index 0000000..7b63a6c
--- /dev/null
+++ b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\cryptolink\cryptolink.h" />
+    <ClInclude Include="..\..\..\src\lib\cryptolink\crypto_hmac.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\cryptolink.cc" />
+    <ClCompile Include="..\..\..\src\lib\cryptolink\crypto_hmac.cc" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{13215E3E-E75D-463D-A0EF-93A1C9A20896}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libcryptolink</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\cryptolink;..\..\..\..\botan\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\cryptolink;..\..\..\..\botan\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.filters b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.filters
new file mode 100755
index 0000000..c4bb69a
--- /dev/null
+++ b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.filters
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\cryptolink\crypto_hmac.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\cryptolink\cryptolink.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\crypto_hmac.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\cryptolink.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.user b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libcryptolink/libcryptolink.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj
new file mode 100755
index 0000000..f8f5e35
--- /dev/null
+++ b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{8412D26C-6C2B-4FCC-ABB4-E9509E833951}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libcryptolink_tests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libcryptolink.lib;gtestd.lib;botan.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Debug;..\libutil\Debug;..\libcryptolink\Debug;..\..\..\..\gtest\md10\Debug;..\..\..\..\botan\md10\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libcryptolink.lib;gtest.lib;botan.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Release;..\libutil\Release;..\libcryptolink\Release;..\..\..\..\gtest\md10\Release;..\..\..\..\botan\md10\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\tests\crypto_unittests.cc" />
+    <ClCompile Include="..\..\..\src\lib\cryptolink\tests\run_unittests.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.filters b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.filters
new file mode 100755
index 0000000..c64ed2b
--- /dev/null
+++ b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.filters
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\tests\crypto_unittests.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\cryptolink\tests\run_unittests.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.user b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libcryptolink_tests/libcryptolink_tests.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++/libdns++.vcxproj b/win32build/VS2010/libdns++/libdns++.vcxproj
new file mode 100755
index 0000000..1724b71
--- /dev/null
+++ b/win32build/VS2010/libdns++/libdns++.vcxproj
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\edns.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\exceptions.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\masterload.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\message.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\messagerenderer.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\name.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\opcode.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\question.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rcode.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rdata.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rdataclass.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rdatafields.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rdata\generic\detail\nsec_bitmap.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrclass.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrparamregistry.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrset.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrsetlist.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrttl.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\rrtype.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\tsig.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\tsigerror.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\tsigkey.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\edns.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\exceptions.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\masterload.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\message.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\messagerenderer.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\name.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\opcode.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\question.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rcode.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rdata.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rdataclass.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rdatafields.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rdata\generic\detail\nsec_bitmap.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrclass.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrparamregistry.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrset.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrsetlist.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrttl.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\rrtype.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tsig.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tsigerror.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tsigkey.cc" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{F6E728D3-A0B2-40F6-9B91-7D4474D778F3}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libdns</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\util;..\..\..\src\lib\dns;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\dns
+copy gen-rdatacode.py.win32 gen-rdatacode.py
+python gen-rdatacode.py
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\util;..\..\..\src\lib\dns;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\dns
+copy gen-rdatacode.py.win32 gen-rdatacode.py
+python gen-rdatacode.py
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++/libdns++.vcxproj.filters b/win32build/VS2010/libdns++/libdns++.vcxproj.filters
new file mode 100755
index 0000000..ee5ca1d
--- /dev/null
+++ b/win32build/VS2010/libdns++/libdns++.vcxproj.filters
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\edns.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\exceptions.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\masterload.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\message.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\messagerenderer.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\name.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\opcode.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\question.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rcode.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rdata.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rdatafields.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrparamregistry.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrset.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrsetlist.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrttl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\tsig.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\tsigerror.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\tsigkey.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rdata\generic\detail\nsec_bitmap.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rdataclass.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrclass.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\rrtype.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\rdata\generic\detail\nsec_bitmap.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\edns.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\exceptions.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\masterload.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\message.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\messagerenderer.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\name.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\opcode.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\question.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rcode.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rdata.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rdatafields.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrclass.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrset.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrsetlist.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrttl.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrtype.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tsig.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tsigerror.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tsigkey.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rdataclass.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\rrparamregistry.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++/libdns++.vcxproj.user b/win32build/VS2010/libdns++/libdns++.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libdns++/libdns++.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_python/libdns++_python.vcxproj b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj
new file mode 100755
index 0000000..5e12add
--- /dev/null
+++ b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{13D541BC-8365-42F7-840F-A117CA0413DD}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libdns_python</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>pydnspp</TargetName>
+    <TargetExt>.pyd</TargetExt>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>pydnspp</TargetName>
+    <TargetExt>.pyd</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBDNS_PYTHON_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns\python;C:\Program Files\boost\boost_1_44;C:\Python32\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>$(OutDir)pydnspp.pyd</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libdns++.lib;python3.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Debug;..\libutil\Debug;..\libdns++\Debug;C:\Python32\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\python
+copy bind10_config.py.win32 bind10_config.py
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBDNS_PYTHON_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns\python;C:\Program Files\boost\boost_1_44;C:\Python32\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)pydnspp.pyd</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libdns++.lib;python3.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Release;..\libutil\Release;..\libdns++\Release;C:\Python32\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\python
+copy bind10_config.py.win32 bind10_config.py
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\python\pydnspp_common.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\python\pydnspp.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\python\pydnspp_common.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.filters b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.filters
new file mode 100755
index 0000000..604933c
--- /dev/null
+++ b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\python\pydnspp_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\python\pydnspp.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\python\pydnspp_common.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.user b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libdns++_python/libdns++_python.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj
new file mode 100755
index 0000000..f6240f2
--- /dev/null
+++ b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{65B0B6D2-94CE-4A21-85E7-A047C79044F9}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libdns_tests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;TEST_DATA_SRCDIR="c:/cygwin/home/fdupont/bind10.trac826/src/lib/dns/tests/testdata";TEST_DATA_BUILDDIR="c:/cygwin/home/fdupont/bind10.trac826/src/lib/dns/tests/testdata";_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns;..\..\..\src\lib\util;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libutil_unittests.lib;libcryptolink.lib;libdns++.lib;gtestd.lib;botan.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Debug;..\libutil\Debug;..\libutil_unittests\Debug;..\libcryptolink\Debug;..\libdns++\Debug;..\..\..\..\gtest\md10\Debug;..\..\..\..\botan\md10\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\dns\tests\testdata
+copy gen-wiredata.py.win32 gen-wiredata.py
+python gen-wiredata.py -o edns_toWire1.wire edns_toWire1.spec
+python gen-wiredata.py -o edns_toWire2.wire edns_toWire2.spec
+python gen-wiredata.py -o edns_toWire3.wire edns_toWire3.spec
+python gen-wiredata.py -o edns_toWire4.wire edns_toWire4.spec
+python gen-wiredata.py -o message_fromWire10.wire message_fromWire10.spec
+python gen-wiredata.py -o message_fromWire11.wire message_fromWire11.spec
+python gen-wiredata.py -o name_toWire5.wire name_toWire5.spec
+python gen-wiredata.py -o name_toWire6.wire name_toWire6.spec
+python gen-wiredata.py -o rdatafields1.wire rdatafields1.spec
+python gen-wiredata.py -o rdatafields2.wire rdatafields2.spec
+python gen-wiredata.py -o rdatafields3.wire rdatafields3.spec
+python gen-wiredata.py -o rdatafields4.wire rdatafields4.spec
+python gen-wiredata.py -o rdatafields5.wire rdatafields5.spec
+python gen-wiredata.py -o rdatafields6.wire rdatafields6.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire10.wire rdata_nsec3_fromWire10.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire11.wire rdata_nsec3_fromWire11.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire12.wire rdata_nsec3_fromWire12.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire13.wire rdata_nsec3_fromWire13.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire14.wire rdata_nsec3_fromWire14.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire15.wire rdata_nsec3_fromWire15.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire1.wire rdata_nsec3_fromWire1.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire2.wire rdata_nsec3_fromWire2.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire4.wire rdata_nsec3_fromWire4.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire5.wire rdata_nsec3_fromWire5.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire6.wire rdata_nsec3_fromWire6.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire7.wire rdata_nsec3_fromWire7.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire8.wire rdata_nsec3_fromWire8.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire9.wire rdata_nsec3_fromWire9.spec
+python gen-wiredata.py -o rdata_nsec_fromWire10.wire rdata_nsec_fromWire10.spec
+python gen-wiredata.py -o rdata_nsec_fromWire4.wire rdata_nsec_fromWire4.spec
+python gen-wiredata.py -o rdata_nsec_fromWire5.wire rdata_nsec_fromWire5.spec
+python gen-wiredata.py -o rdata_nsec_fromWire6.wire rdata_nsec_fromWire6.spec
+python gen-wiredata.py -o rdata_nsec_fromWire7.wire rdata_nsec_fromWire7.spec
+python gen-wiredata.py -o rdata_nsec_fromWire8.wire rdata_nsec_fromWire8.spec
+python gen-wiredata.py -o rdata_nsec_fromWire9.wire rdata_nsec_fromWire9.spec
+python gen-wiredata.py -o rdata_rp_fromWire1.wire rdata_rp_fromWire1.spec
+python gen-wiredata.py -o rdata_rp_fromWire2.wire rdata_rp_fromWire2.spec
+python gen-wiredata.py -o rdata_rp_fromWire3.wire rdata_rp_fromWire3.spec
+python gen-wiredata.py -o rdata_rp_fromWire4.wire rdata_rp_fromWire4.spec
+python gen-wiredata.py -o rdata_rp_fromWire5.wire rdata_rp_fromWire5.spec
+python gen-wiredata.py -o rdata_rp_fromWire6.wire rdata_rp_fromWire6.spec
+python gen-wiredata.py -o rdata_rp_toWire1.wire rdata_rp_toWire1.spec
+python gen-wiredata.py -o rdata_rp_toWire2.wire rdata_rp_toWire2.spec
+python gen-wiredata.py -o rdata_rrsig_fromWire2.wire rdata_rrsig_fromWire2.spec
+python gen-wiredata.py -o rdata_soa_toWireUncompressed.wire rdata_soa_toWireUncompressed.spec
+python gen-wiredata.py -o rdata_tsig_fromWire1.wire rdata_tsig_fromWire1.spec
+python gen-wiredata.py -o rdata_tsig_fromWire2.wire rdata_tsig_fromWire2.spec
+python gen-wiredata.py -o rdata_tsig_fromWire3.wire rdata_tsig_fromWire3.spec
+python gen-wiredata.py -o rdata_tsig_fromWire4.wire rdata_tsig_fromWire4.spec
+python gen-wiredata.py -o rdata_tsig_fromWire5.wire rdata_tsig_fromWire5.spec
+python gen-wiredata.py -o rdata_tsig_fromWire6.wire rdata_tsig_fromWire6.spec
+python gen-wiredata.py -o rdata_tsig_fromWire7.wire rdata_tsig_fromWire7.spec
+python gen-wiredata.py -o rdata_tsig_fromWire8.wire rdata_tsig_fromWire8.spec
+python gen-wiredata.py -o rdata_tsig_fromWire9.wire rdata_tsig_fromWire9.spec
+python gen-wiredata.py -o rdata_tsig_toWire1.wire rdata_tsig_toWire1.spec
+python gen-wiredata.py -o rdata_tsig_toWire2.wire rdata_tsig_toWire2.spec
+python gen-wiredata.py -o rdata_tsig_toWire3.wire rdata_tsig_toWire3.spec
+python gen-wiredata.py -o rdata_tsig_toWire4.wire rdata_tsig_toWire4.spec
+python gen-wiredata.py -o rdata_tsig_toWire5.wire rdata_tsig_toWire5.spec
+python gen-wiredata.py -o rdata_txt_fromWire2.wire rdata_txt_fromWire2.spec
+python gen-wiredata.py -o rdata_txt_fromWire3.wire rdata_txt_fromWire3.spec
+python gen-wiredata.py -o rdata_txt_fromWire4.wire rdata_txt_fromWire4.spec
+python gen-wiredata.py -o rdata_txt_fromWire5.wire rdata_txt_fromWire5.spec
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;TEST_DATA_SRCDIR="c:/cygwin/home/fdupont/bind10.trac826/src/lib/dns/tests/testdata";TEST_DATA_BUILDDIR="c:/cygwin/home/fdupont/bind10.trac826/src/lib/dns/tests/testdata";NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns;..\..\..\src\lib\util;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;libutil_unittests.lib;libcryptolink.lib;libdns++.lib;gtest.lib;botan.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Release;..\libutil\Release;..\libutil_unittests\Release;..\libcryptolink\Release;..\libdns++\Release;..\..\..\..\gtest\md10\Release;..\..\..\..\botan\md10\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <PreBuildEvent>
+      <Command>cd ..\..\..\src\lib\dns\tests\testdata
+copy gen-wiredata.py.win32 gen-wiredata.py
+python gen-wiredata.py -o edns_toWire1.wire edns_toWire1.spec
+python gen-wiredata.py -o edns_toWire2.wire edns_toWire2.spec
+python gen-wiredata.py -o edns_toWire3.wire edns_toWire3.spec
+python gen-wiredata.py -o edns_toWire4.wire edns_toWire4.spec
+python gen-wiredata.py -o message_fromWire10.wire message_fromWire10.spec
+python gen-wiredata.py -o message_fromWire11.wire message_fromWire11.spec
+python gen-wiredata.py -o name_toWire5.wire name_toWire5.spec
+python gen-wiredata.py -o name_toWire6.wire name_toWire6.spec
+python gen-wiredata.py -o rdatafields1.wire rdatafields1.spec
+python gen-wiredata.py -o rdatafields2.wire rdatafields2.spec
+python gen-wiredata.py -o rdatafields3.wire rdatafields3.spec
+python gen-wiredata.py -o rdatafields4.wire rdatafields4.spec
+python gen-wiredata.py -o rdatafields5.wire rdatafields5.spec
+python gen-wiredata.py -o rdatafields6.wire rdatafields6.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire10.wire rdata_nsec3_fromWire10.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire11.wire rdata_nsec3_fromWire11.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire12.wire rdata_nsec3_fromWire12.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire13.wire rdata_nsec3_fromWire13.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire14.wire rdata_nsec3_fromWire14.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire15.wire rdata_nsec3_fromWire15.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire1.wire rdata_nsec3_fromWire1.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire2.wire rdata_nsec3_fromWire2.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire4.wire rdata_nsec3_fromWire4.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire5.wire rdata_nsec3_fromWire5.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire6.wire rdata_nsec3_fromWire6.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire7.wire rdata_nsec3_fromWire7.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire8.wire rdata_nsec3_fromWire8.spec
+python gen-wiredata.py -o rdata_nsec3_fromWire9.wire rdata_nsec3_fromWire9.spec
+python gen-wiredata.py -o rdata_nsec_fromWire10.wire rdata_nsec_fromWire10.spec
+python gen-wiredata.py -o rdata_nsec_fromWire4.wire rdata_nsec_fromWire4.spec
+python gen-wiredata.py -o rdata_nsec_fromWire5.wire rdata_nsec_fromWire5.spec
+python gen-wiredata.py -o rdata_nsec_fromWire6.wire rdata_nsec_fromWire6.spec
+python gen-wiredata.py -o rdata_nsec_fromWire7.wire rdata_nsec_fromWire7.spec
+python gen-wiredata.py -o rdata_nsec_fromWire8.wire rdata_nsec_fromWire8.spec
+python gen-wiredata.py -o rdata_nsec_fromWire9.wire rdata_nsec_fromWire9.spec
+python gen-wiredata.py -o rdata_rp_fromWire1.wire rdata_rp_fromWire1.spec
+python gen-wiredata.py -o rdata_rp_fromWire2.wire rdata_rp_fromWire2.spec
+python gen-wiredata.py -o rdata_rp_fromWire3.wire rdata_rp_fromWire3.spec
+python gen-wiredata.py -o rdata_rp_fromWire4.wire rdata_rp_fromWire4.spec
+python gen-wiredata.py -o rdata_rp_fromWire5.wire rdata_rp_fromWire5.spec
+python gen-wiredata.py -o rdata_rp_fromWire6.wire rdata_rp_fromWire6.spec
+python gen-wiredata.py -o rdata_rp_toWire1.wire rdata_rp_toWire1.spec
+python gen-wiredata.py -o rdata_rp_toWire2.wire rdata_rp_toWire2.spec
+python gen-wiredata.py -o rdata_rrsig_fromWire2.wire rdata_rrsig_fromWire2.spec
+python gen-wiredata.py -o rdata_soa_toWireUncompressed.wire rdata_soa_toWireUncompressed.spec
+python gen-wiredata.py -o rdata_tsig_fromWire1.wire rdata_tsig_fromWire1.spec
+python gen-wiredata.py -o rdata_tsig_fromWire2.wire rdata_tsig_fromWire2.spec
+python gen-wiredata.py -o rdata_tsig_fromWire3.wire rdata_tsig_fromWire3.spec
+python gen-wiredata.py -o rdata_tsig_fromWire4.wire rdata_tsig_fromWire4.spec
+python gen-wiredata.py -o rdata_tsig_fromWire5.wire rdata_tsig_fromWire5.spec
+python gen-wiredata.py -o rdata_tsig_fromWire6.wire rdata_tsig_fromWire6.spec
+python gen-wiredata.py -o rdata_tsig_fromWire7.wire rdata_tsig_fromWire7.spec
+python gen-wiredata.py -o rdata_tsig_fromWire8.wire rdata_tsig_fromWire8.spec
+python gen-wiredata.py -o rdata_tsig_fromWire9.wire rdata_tsig_fromWire9.spec
+python gen-wiredata.py -o rdata_tsig_toWire1.wire rdata_tsig_toWire1.spec
+python gen-wiredata.py -o rdata_tsig_toWire2.wire rdata_tsig_toWire2.spec
+python gen-wiredata.py -o rdata_tsig_toWire3.wire rdata_tsig_toWire3.spec
+python gen-wiredata.py -o rdata_tsig_toWire4.wire rdata_tsig_toWire4.spec
+python gen-wiredata.py -o rdata_tsig_toWire5.wire rdata_tsig_toWire5.spec
+python gen-wiredata.py -o rdata_txt_fromWire2.wire rdata_txt_fromWire2.spec
+python gen-wiredata.py -o rdata_txt_fromWire3.wire rdata_txt_fromWire3.spec
+python gen-wiredata.py -o rdata_txt_fromWire4.wire rdata_txt_fromWire4.spec
+python gen-wiredata.py -o rdata_txt_fromWire5.wire rdata_txt_fromWire5.spec
+</Command>
+    </PreBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\tests\rdata_unittest.h" />
+    <ClInclude Include="..\..\..\src\lib\dns\tests\unittest_util.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\edns_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\masterload_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\messagerenderer_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\message_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\name_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\opcode_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\question_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rcode_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdatafields_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_cname_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_dname_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_dnskey_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ds_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_in_aaaa_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_in_a_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_mx_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec3param_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec3_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsecbitmap_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ns_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_opt_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ptr_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_rp_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_rrsig_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_soa_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_tsig_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_txt_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrclass_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrparamregistry_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrsetlist_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrset_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrttl_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrtype_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\run_unittests.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsigerror_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsigkey_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsig_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\dns\tests\unittest_util.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.filters b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.filters
new file mode 100755
index 0000000..7e08eef
--- /dev/null
+++ b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.filters
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\dns\tests\rdata_unittest.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\dns\tests\unittest_util.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\edns_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\masterload_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\message_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\messagerenderer_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\name_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\opcode_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\question_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rcode_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_cname_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_dname_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_dnskey_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ds_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_in_a_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_in_aaaa_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_mx_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ns_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec3_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec3param_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsec_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_nsecbitmap_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_opt_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_ptr_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_rp_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_rrsig_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_soa_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_tsig_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_txt_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdata_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rdatafields_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrclass_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrparamregistry_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrset_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrsetlist_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrttl_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\rrtype_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\run_unittests.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsig_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsigerror_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\tsigkey_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\dns\tests\unittest_util.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.user b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libdns++_tests/libdns++_tests.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions/libexceptions.vcxproj b/win32build/VS2010/libexceptions/libexceptions.vcxproj
new file mode 100755
index 0000000..87a28e4
--- /dev/null
+++ b/win32build/VS2010/libexceptions/libexceptions.vcxproj
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\exceptions\exceptions.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\exceptions\exceptions.cc" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{7D04222B-643C-446C-A2B8-93AF74A86246}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libexceptions</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions/libexceptions.vcxproj.filters b/win32build/VS2010/libexceptions/libexceptions.vcxproj.filters
new file mode 100755
index 0000000..0b01678
--- /dev/null
+++ b/win32build/VS2010/libexceptions/libexceptions.vcxproj.filters
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\exceptions\exceptions.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\exceptions\exceptions.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions/libexceptions.vcxproj.user b/win32build/VS2010/libexceptions/libexceptions.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libexceptions/libexceptions.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj
new file mode 100755
index 0000000..3232fc9
--- /dev/null
+++ b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{DCF4ED2E-FFD1-4432-AFEF-8D6EC96B79A2}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libexceptions_tests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns;..\..\..\..\gtest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Debug;..\..\..\..\gtest\md10\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\dns;..\..\..\..\gtest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Release;..\..\..\..\gtest\md10\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\exceptions\tests\exceptions_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\exceptions\tests\run_unittests.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.filters b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.filters
new file mode 100755
index 0000000..5257163
--- /dev/null
+++ b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.filters
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\exceptions\tests\exceptions_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\exceptions\tests\run_unittests.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.user b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libexceptions_tests/libexceptions_tests.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil/libutil.vcxproj b/win32build/VS2010/libutil/libutil.vcxproj
new file mode 100755
index 0000000..ff17a83
--- /dev/null
+++ b/win32build/VS2010/libutil/libutil.vcxproj
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\util\buffer.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\base16_from_binary.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\base32hex.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\base32hex_from_binary.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\base64.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\binary_from_base16.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\binary_from_base32hex.h" />
+    <ClInclude Include="..\..\..\src\lib\util\encode\hex.h" />
+    <ClInclude Include="..\..\..\src\lib\util\filename.h" />
+    <ClInclude Include="..\..\..\src\lib\util\hash\sha1.h" />
+    <ClInclude Include="..\..\..\src\lib\util\io_utilities.h" />
+    <ClInclude Include="..\..\..\src\lib\util\locks.h" />
+    <ClInclude Include="..\..\..\src\lib\util\lru_list.h" />
+    <ClInclude Include="..\..\..\src\lib\util\random\qid_gen.h" />
+    <ClInclude Include="..\..\..\src\lib\util\random\random_number_generator.h" />
+    <ClInclude Include="..\..\..\src\lib\util\strutil.h" />
+    <ClInclude Include="..\..\..\src\lib\util\time_utilities.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\encode\base_n.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\filename.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\hash\sha1.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\random\qid_gen.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\strutil.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\time_utilities.cc" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{8F120666-1A69-4506-8546-0F665E80FFB7}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libutil</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\exceptions;..\..\..\src\lib\util;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\exceptions;..\..\..\src\lib\util;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil/libutil.vcxproj.filters b/win32build/VS2010/libutil/libutil.vcxproj.filters
new file mode 100755
index 0000000..9e63f62
--- /dev/null
+++ b/win32build/VS2010/libutil/libutil.vcxproj.filters
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\util\buffer.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\filename.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\io_utilities.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\locks.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\lru_list.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\strutil.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\time_utilities.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\base16_from_binary.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\base32hex.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\base32hex_from_binary.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\base64.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\binary_from_base16.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\binary_from_base32hex.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\encode\hex.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\hash\sha1.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\random\qid_gen.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\random\random_number_generator.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\random\qid_gen.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\hash\sha1.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\encode\base_n.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\filename.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\strutil.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\time_utilities.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil/libutil.vcxproj.user b/win32build/VS2010/libutil/libutil.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libutil/libutil.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_tests/libutil_tests.vcxproj b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj
new file mode 100755
index 0000000..f1b064c
--- /dev/null
+++ b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2C518972-FF5F-4D33-9D3E-5BCC6357EDD7}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libutil_tests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <TargetName>run_unittests</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\exceptions;..\..\..\src\lib\utils;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Debug;..\libutil\Debug;..\..\..\..\gtest\md10\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..;..\..\..\src\lib;..\..\..\src\lib\exceptions;..\..\..\src\lib\utils;..\..\..\..\gtest\include;C:\Program Files\boost\boost_1_44;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)run_unittests$(TargetExt)</OutputFile>
+      <AdditionalDependencies>libexceptions.lib;libutil.lib;gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\libexceptions\Release;..\libutil\Release;..\..\..\..\gtest\md10\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\tests\base32hex_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\base64_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\buffer_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\filename_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\hex_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\io_utilities_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\lru_list_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\qid_gen_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\random_number_generator_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\run_unittests.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\sha1_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\strutil_unittest.cc" />
+    <ClCompile Include="..\..\..\src\lib\util\tests\time_utilities_unittest.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.filters b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.filters
new file mode 100755
index 0000000..106631b
--- /dev/null
+++ b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.filters
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\tests\base32hex_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\base64_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\buffer_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\filename_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\hex_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\io_utilities_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\lru_list_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\qid_gen_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\random_number_generator_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\run_unittests.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\sha1_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\strutil_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\lib\util\tests\time_utilities_unittest.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.user b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libutil_tests/libutil_tests.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj
new file mode 100755
index 0000000..dc592aa
--- /dev/null
+++ b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\util\unittests\newhook.h" />
+    <ClInclude Include="..\..\..\src\lib\util\unittests\resolver.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\unittests\newhook.cc" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2844FDFB-A0A1-4FA4-A654-15D69CC717DD}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>libutil_unittests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\..\src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\..\src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.filters b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.filters
new file mode 100755
index 0000000..a51d95d
--- /dev/null
+++ b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\lib\util\unittests\newhook.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\lib\util\unittests\resolver.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\lib\util\unittests\newhook.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.user b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.user
new file mode 100755
index 0000000..695b5c7
--- /dev/null
+++ b/win32build/VS2010/libutil_unittests/libutil_unittests.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file
diff --git a/win32build/config.h b/win32build/config.h
new file mode 100644
index 0000000..f74005e
--- /dev/null
+++ b/win32build/config.h
@@ -0,0 +1,73 @@
+/* config.h for WIN32 */
+
+/* Define to 1 if sockaddr has a sa_len member, and corresponding sin_len and
+   sun_len */
+/* #undef HAVE_SA_LEN */
+
+/* Need boost sunstudio workaround */
+/* #undef NEED_SUNPRO_WORKAROUND */
+
+/* Name of package */
+#define PACKAGE "bind10-devel"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "bind10-dev at isc.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "bind10-devel"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "bind10-devel 20110322"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "bind10-devel"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "20110322"
+
+/* Use boost threads */
+/* #undef USE_BOOST_THREADS */
+
+/* Version number of package */
+#define VERSION "20110322"
+
+/* Additional things */
+
+/* At least Vista */
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600
+#endif
+
+/* WIN32 specials */
+
+#define strncasecmp _strnicmp
+#define unlink _unlink
+#define getpid() _getpid()
+#define random() rand()
+#define srandom() srand()
+typedef unsigned int uid_t;
+
+/* Prevent inclusion of winsock.h in windows.h */
+#ifndef _WINSOCKAPI_
+#define _WINSOCKAPI_
+#define _RESTORE_WSA_
+#endif
+
+/*
+ * Make the number of available sockets large
+ * The number of sockets needed can get large and memory's cheap
+ * This must be defined before winsock2.h gets included as the
+ * macro is used there.
+ */
+
+#define FD_SETSIZE 16384
+#include <windows.h>
+
+/* Restore _WINSOCKAPI_ */
+#ifdef _RESTORE_WSA_
+#undef _WINSOCKAPI_
+#endif
diff --git a/win32build/dllmain.cc b/win32build/dllmain.cc
new file mode 100644
index 0000000..359227d
--- /dev/null
+++ b/win32build/dllmain.cc
@@ -0,0 +1,18 @@
+#include <windows.h>
+
+__declspec(dllexport) BOOL WINAPI
+DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpvReserved)
+{
+    hModule = hModule;
+    lpvReserved = lpvReserved;
+    
+    switch (ul_reason_for_call) { 
+    case DLL_PROCESS_ATTACH:
+    case DLL_THREAD_ATTACH: 
+    case DLL_THREAD_DETACH: 
+    case DLL_PROCESS_DETACH: 
+    default:
+        break;
+    }
+    return (TRUE);
+}
diff --git a/win32build/getopt.cc b/win32build/getopt.cc
new file mode 100644
index 0000000..fa46d4d
--- /dev/null
+++ b/win32build/getopt.cc
@@ -0,0 +1,79 @@
+/* ::[[ @(#) getopt.c 1.5 89/03/11 05:40:23 ]]:: */
+#ifndef LINT
+static const char Id[] = "$Id: getopt.c,v 1.2 2002/11/22 22:06:46 tom Exp $";
+#endif
+
+/*
+ * Here's something you've all been waiting for:  the AT&T public domain
+ * source for getopt(3).  It is the code which was given out at the 1985
+ * UNIFORUM conference in Dallas.  I obtained it by electronic mail
+ * directly from AT&T.  The people there assure me that it is indeed
+ * in the public domain.
+ *
+ * There is no manual page.  That is because the one they gave out at
+ * UNIFORUM was slightly different from the current System V Release 2
+ * manual page.  The difference apparently involved a note about the
+ * famous rules 5 and 6, recommending using white space between an option
+ * and its first argument, and not grouping options that have arguments.
+ * Getopt itself is currently lenient about both of these things White
+ * space is allowed, but not mandatory, and the last option in a group can
+ * have an argument.  That particular version of the man page evidently
+ * has no official existence, and my source at AT&T did not send a copy.
+ * The current SVR2 man page reflects the actual behavor of this getopt.
+ * However, I am not about to post a copy of anything licensed by AT&T.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#define ERR(szz,czz) if(opterr){fprintf(stderr,"%s%s%c\n",argv[0],szz,czz);}
+
+int opterr = 1;
+int optind = 1;
+int optopt;
+char *optarg;
+
+int
+getopt(int argc, char * const argv[], const char *opts)
+{
+    static int sp = 1;
+    register int c;
+    register const char *cp;
+
+    if (sp == 1) {
+	if (optind >= argc ||
+	    argv[optind][0] != '-' || argv[optind][1] == '\0')
+	    return (EOF);
+	else if (strcmp(argv[optind], "--") == 0) {
+	    optind++;
+	    return (EOF);
+	}
+    }
+    optopt = c = argv[optind][sp];
+    if (c == ':' || (cp = strchr(opts, c)) == NULL) {
+	ERR(": illegal option -- ", c);
+	if (argv[optind][++sp] == '\0') {
+	    optind++;
+	    sp = 1;
+	}
+	return ('?');
+    }
+    if (*++cp == ':') {
+	if (argv[optind][sp + 1] != '\0')
+	    optarg = &argv[optind++][sp + 1];
+	else if (++optind >= argc) {
+	    ERR(": option requires an argument -- ", c);
+	    sp = 1;
+	    return ('?');
+	} else
+	    optarg = argv[optind++];
+	sp = 1;
+    } else {
+	if (argv[optind][++sp] == '\0') {
+	    sp = 1;
+	    optind++;
+	}
+	optarg = NULL;
+    }
+    return (c);
+}
diff --git a/win32build/getopt.h b/win32build/getopt.h
new file mode 100644
index 0000000..e70e5a7
--- /dev/null
+++ b/win32build/getopt.h
@@ -0,0 +1,4 @@
+extern char *optarg;
+extern int optind, opterr;
+
+int getopt (int argc, char * const argv[], const char *options);




More information about the bind10-changes mailing list