[ros-ros-comm] 02/02: Restored original patches from Jochen
Leopold Palomo-Avellaneda
leo at alaxarxa.net
Fri Jun 10 07:14:52 UTC 2016
This is an automated email from the git hooks/post-receive script.
lepalom-guest pushed a commit to branch master
in repository ros-ros-comm.
commit 2140cccabaab723af97e4895bc575438180f4b62
Author: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
Date: Fri Jun 10 09:05:34 2016 +0200
Restored original patches from Jochen
I have restored almost all the original patches from Jochen. I did a
mistake uploading a new version from upstream dropping the original authorship.
All the patches are restored except one that I needed to modify to adapt
a new Soname jump.
---
debian/patches/0001-Add-CMakeLists.txt.patch | 4 +-
.../patches/0003-Add-default-ROS_MASTER_URI.patch | 4 +-
.../0004-Fix-executable-not-elf-or-script.patch | 4 +-
debian/patches/0005-Add-defaults-to-roswtf.patch | 4 +-
...06-Fix-confusing-copyright-messages-dates.patch | 8 +-
.../0007-Adapting-code-to-a-headers-move.patch | 540 ---
.../0007-move-heaers-to-include-xmlrpcpp.patch | 3676 ++++++++++++++++++++
debian/patches/series | 3 +-
8 files changed, 3690 insertions(+), 553 deletions(-)
diff --git a/debian/patches/0001-Add-CMakeLists.txt.patch b/debian/patches/0001-Add-CMakeLists.txt.patch
index 5ba804e..f8e7270 100644
--- a/debian/patches/0001-Add-CMakeLists.txt.patch
+++ b/debian/patches/0001-Add-CMakeLists.txt.patch
@@ -1,5 +1,5 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 08:16:43 +0200
+From: Jochen Sprickerhof <git at jochen.sprickerhof.de>
+Date: Mon, 8 Dec 2014 20:02:55 +0100
Subject: Add CMakeLists.txt
---
diff --git a/debian/patches/0003-Add-default-ROS_MASTER_URI.patch b/debian/patches/0003-Add-default-ROS_MASTER_URI.patch
index cb98a9b..1870c70 100644
--- a/debian/patches/0003-Add-default-ROS_MASTER_URI.patch
+++ b/debian/patches/0003-Add-default-ROS_MASTER_URI.patch
@@ -1,5 +1,5 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 08:25:47 +0200
+From: Jochen Sprickerhof <git at jochen.sprickerhof.de>
+Date: Fri, 12 Dec 2014 09:52:19 +0100
Subject: Add default ROS_MASTER_URI
---
diff --git a/debian/patches/0004-Fix-executable-not-elf-or-script.patch b/debian/patches/0004-Fix-executable-not-elf-or-script.patch
index 5b8982b..657a297 100644
--- a/debian/patches/0004-Fix-executable-not-elf-or-script.patch
+++ b/debian/patches/0004-Fix-executable-not-elf-or-script.patch
@@ -1,5 +1,5 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 08:26:15 +0200
+From: Leopold Palomo-Avellaneda <leo at alaxarxa.net>
+Date: Wed, 4 Feb 2015 09:30:17 +0100
Subject: Fix executable not elf or script
---
diff --git a/debian/patches/0005-Add-defaults-to-roswtf.patch b/debian/patches/0005-Add-defaults-to-roswtf.patch
index 497f61c..d194bd6 100644
--- a/debian/patches/0005-Add-defaults-to-roswtf.patch
+++ b/debian/patches/0005-Add-defaults-to-roswtf.patch
@@ -1,5 +1,5 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 08:26:42 +0200
+From: Jochen Sprickerhof <git at jochen.sprickerhof.de>
+Date: Sun, 15 Nov 2015 21:18:11 +0100
Subject: Add defaults to roswtf
---
diff --git a/debian/patches/0006-Fix-confusing-copyright-messages-dates.patch b/debian/patches/0006-Fix-confusing-copyright-messages-dates.patch
index 9f8c250..84a2119 100644
--- a/debian/patches/0006-Fix-confusing-copyright-messages-dates.patch
+++ b/debian/patches/0006-Fix-confusing-copyright-messages-dates.patch
@@ -1,7 +1,9 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 08:27:13 +0200
-Subject: Fix confusing copyright messages dates
+From: Debian Science Maintainers
+ <debian-science-maintainers at lists.alioth.debian.org>
+Date: Thu, 7 Apr 2016 11:09:19 +0200
+Subject: Fix confusing copyright messages/dates
+Should be upstreamed.
---
test/test_roscpp/test/src/latching_publisher.cpp | 2 +-
test/test_roscpp/test/src/timer_callbacks.cpp | 2 +-
diff --git a/debian/patches/0007-Adapting-code-to-a-headers-move.patch b/debian/patches/0007-Adapting-code-to-a-headers-move.patch
deleted file mode 100644
index c5af8f1..0000000
--- a/debian/patches/0007-Adapting-code-to-a-headers-move.patch
+++ /dev/null
@@ -1,540 +0,0 @@
-From: Leopold Palomo-Avellaneda <leopold.palomo at upc.edu>
-Date: Fri, 20 May 2016 15:54:51 +0200
-Subject: Adapting code to a headers move
-
----
- clients/roscpp/include/ros/master.h | 2 +-
- clients/roscpp/include/ros/node_handle.h | 2 +-
- clients/roscpp/include/ros/param.h | 2 +-
- clients/roscpp/include/ros/publication.h | 2 +-
- clients/roscpp/include/ros/service_publication.h | 2 +-
- clients/roscpp/include/ros/subscription.h | 2 +-
- clients/roscpp/include/ros/topic_manager.h | 2 +-
- clients/roscpp/include/ros/xmlrpc_manager.h | 2 +-
- clients/roscpp/src/libros/init.cpp | 2 +-
- clients/roscpp/src/libros/master.cpp | 2 +-
- clients/roscpp/src/libros/node_handle.cpp | 2 +-
- clients/roscpp/src/libros/service_manager.cpp | 2 +-
- clients/roscpp/src/libros/topic_manager.cpp | 2 +-
- test/test_roscpp/test/src/check_master.cpp | 2 +-
- tools/rosbag/src/recorder.cpp | 2 +-
- utilities/xmlrpcpp/CMakeLists.txt | 3 +--
- utilities/xmlrpcpp/src/XmlRpcClient.cpp | 6 +++---
- utilities/xmlrpcpp/src/XmlRpcDispatch.cpp | 6 +++---
- utilities/xmlrpcpp/src/XmlRpcServer.cpp | 12 ++++++------
- utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp | 6 +++---
- utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp | 4 ++--
- utilities/xmlrpcpp/src/XmlRpcSocket.cpp | 4 ++--
- utilities/xmlrpcpp/src/XmlRpcSource.cpp | 6 +++---
- utilities/xmlrpcpp/src/XmlRpcUtil.cpp | 4 ++--
- utilities/xmlrpcpp/src/XmlRpcValue.cpp | 8 ++++----
- utilities/xmlrpcpp/test/FileClient.cpp | 2 +-
- utilities/xmlrpcpp/test/HelloClient.cpp | 2 +-
- utilities/xmlrpcpp/test/HelloServer.cpp | 2 +-
- utilities/xmlrpcpp/test/TestBase64Client.cpp | 2 +-
- utilities/xmlrpcpp/test/TestBase64Server.cpp | 2 +-
- utilities/xmlrpcpp/test/TestValues.cpp | 2 +-
- utilities/xmlrpcpp/test/TestValuesWin32.cpp | 2 +-
- utilities/xmlrpcpp/test/TestXml.cpp | 2 +-
- utilities/xmlrpcpp/test/Validator.cpp | 2 +-
- utilities/xmlrpcpp/test/bool_test.cpp | 2 +-
- utilities/xmlrpcpp/test/port_zero_server.cpp | 2 +-
- 36 files changed, 55 insertions(+), 56 deletions(-)
-
-diff --git a/clients/roscpp/include/ros/master.h b/clients/roscpp/include/ros/master.h
-index 9eefdf3..6cabd01 100644
---- a/clients/roscpp/include/ros/master.h
-+++ b/clients/roscpp/include/ros/master.h
-@@ -29,7 +29,7 @@
- #define ROSCPP_MASTER_H
-
- #include "forwards.h"
--#include "XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
- #include "common.h"
-
- namespace ros
-diff --git a/clients/roscpp/include/ros/node_handle.h b/clients/roscpp/include/ros/node_handle.h
-index 4f4c1df..6380114 100644
---- a/clients/roscpp/include/ros/node_handle.h
-+++ b/clients/roscpp/include/ros/node_handle.h
-@@ -48,7 +48,7 @@
-
- #include <boost/bind.hpp>
-
--#include <XmlRpcValue.h>
-+#include <xmlrpcpp/XmlRpcValue.h>
-
- namespace ros
- {
-diff --git a/clients/roscpp/include/ros/param.h b/clients/roscpp/include/ros/param.h
-index cfa7521..699f212 100644
---- a/clients/roscpp/include/ros/param.h
-+++ b/clients/roscpp/include/ros/param.h
-@@ -30,7 +30,7 @@
-
- #include "forwards.h"
- #include "common.h"
--#include "XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
-
- #include <vector>
- #include <map>
-diff --git a/clients/roscpp/include/ros/publication.h b/clients/roscpp/include/ros/publication.h
-index 5183e08..1ea2187 100644
---- a/clients/roscpp/include/ros/publication.h
-+++ b/clients/roscpp/include/ros/publication.h
-@@ -31,7 +31,7 @@
- #include "ros/forwards.h"
- #include "ros/advertise_options.h"
- #include "common.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <boost/thread/mutex.hpp>
-
-diff --git a/clients/roscpp/include/ros/service_publication.h b/clients/roscpp/include/ros/service_publication.h
-index bd44c34..ff4f8b4 100644
---- a/clients/roscpp/include/ros/service_publication.h
-+++ b/clients/roscpp/include/ros/service_publication.h
-@@ -30,7 +30,7 @@
-
- #include "ros/service_callback_helper.h"
- #include "common.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <boost/thread/mutex.hpp>
-
-diff --git a/clients/roscpp/include/ros/subscription.h b/clients/roscpp/include/ros/subscription.h
-index 7da3219..ed726a3 100644
---- a/clients/roscpp/include/ros/subscription.h
-+++ b/clients/roscpp/include/ros/subscription.h
-@@ -35,7 +35,7 @@
- #include "ros/transport_hints.h"
- #include "ros/xmlrpc_manager.h"
- #include "ros/statistics.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <boost/thread.hpp>
- #include <boost/shared_ptr.hpp>
-diff --git a/clients/roscpp/include/ros/topic_manager.h b/clients/roscpp/include/ros/topic_manager.h
-index 5827e82..3a80f9c 100644
---- a/clients/roscpp/include/ros/topic_manager.h
-+++ b/clients/roscpp/include/ros/topic_manager.h
-@@ -33,7 +33,7 @@
- #include "ros/serialization.h"
- #include "rosout_appender.h"
-
--#include "XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
-
- #include <boost/thread/mutex.hpp>
- #include <boost/thread/recursive_mutex.hpp>
-diff --git a/clients/roscpp/include/ros/xmlrpc_manager.h b/clients/roscpp/include/ros/xmlrpc_manager.h
-index 7dc55ee..2dc5034 100644
---- a/clients/roscpp/include/ros/xmlrpc_manager.h
-+++ b/clients/roscpp/include/ros/xmlrpc_manager.h
-@@ -36,7 +36,7 @@
- #include <boost/enable_shared_from_this.hpp>
-
- #include "common.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <ros/time.h>
-
-diff --git a/clients/roscpp/src/libros/init.cpp b/clients/roscpp/src/libros/init.cpp
-index 920e665..a122bfb 100644
---- a/clients/roscpp/src/libros/init.cpp
-+++ b/clients/roscpp/src/libros/init.cpp
-@@ -48,7 +48,7 @@
- #include "ros/subscribe_options.h"
- #include "ros/transport/transport_tcp.h"
- #include "ros/internal_timer_manager.h"
--#include "XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-
- #include "roscpp/GetLoggers.h"
- #include "roscpp/SetLoggerLevel.h"
-diff --git a/clients/roscpp/src/libros/master.cpp b/clients/roscpp/src/libros/master.cpp
-index c25be66..ad63545 100644
---- a/clients/roscpp/src/libros/master.cpp
-+++ b/clients/roscpp/src/libros/master.cpp
-@@ -34,7 +34,7 @@
- #include <ros/console.h>
- #include <ros/assert.h>
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- namespace ros
- {
-diff --git a/clients/roscpp/src/libros/node_handle.cpp b/clients/roscpp/src/libros/node_handle.cpp
-index 6673d48..7dc0797 100644
---- a/clients/roscpp/src/libros/node_handle.cpp
-+++ b/clients/roscpp/src/libros/node_handle.cpp
-@@ -42,7 +42,7 @@
- #include "ros/names.h"
- #include "ros/init.h"
- #include "ros/this_node.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <boost/thread.hpp>
-
-diff --git a/clients/roscpp/src/libros/service_manager.cpp b/clients/roscpp/src/libros/service_manager.cpp
-index 09f6f3d..6542b4f 100644
---- a/clients/roscpp/src/libros/service_manager.cpp
-+++ b/clients/roscpp/src/libros/service_manager.cpp
-@@ -42,7 +42,7 @@
- #include "ros/connection.h"
- #include "ros/file_log.h"
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <ros/console.h>
-
-diff --git a/clients/roscpp/src/libros/topic_manager.cpp b/clients/roscpp/src/libros/topic_manager.cpp
-index 0142cda..c76c9bc 100644
---- a/clients/roscpp/src/libros/topic_manager.cpp
-+++ b/clients/roscpp/src/libros/topic_manager.cpp
-@@ -41,7 +41,7 @@
- #include "ros/file_log.h"
- #include "ros/subscribe_options.h"
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <ros/console.h>
-
-diff --git a/test/test_roscpp/test/src/check_master.cpp b/test/test_roscpp/test/src/check_master.cpp
-index 9b03321..4392f2b 100644
---- a/test/test_roscpp/test/src/check_master.cpp
-+++ b/test/test_roscpp/test/src/check_master.cpp
-@@ -40,7 +40,7 @@
-
- #include "ros/ros.h"
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- using namespace XmlRpc;
-
-diff --git a/tools/rosbag/src/recorder.cpp b/tools/rosbag/src/recorder.cpp
-index a6b7e26..01188a3 100644
---- a/tools/rosbag/src/recorder.cpp
-+++ b/tools/rosbag/src/recorder.cpp
-@@ -60,7 +60,7 @@
-
- #include "ros/network.h"
- #include "ros/xmlrpc_manager.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #define foreach BOOST_FOREACH
-
-diff --git a/utilities/xmlrpcpp/CMakeLists.txt b/utilities/xmlrpcpp/CMakeLists.txt
-index 673a924..79b4516 100644
---- a/utilities/xmlrpcpp/CMakeLists.txt
-+++ b/utilities/xmlrpcpp/CMakeLists.txt
-@@ -36,8 +36,7 @@ if(WIN32)
- target_link_libraries(xmlrpcpp ws2_32)
- endif()
-
--# FIXME the headers should be in a package-specific subfolder but can not be for backward compatibility
--install(DIRECTORY include/
-+install(DIRECTORY include/${PROJECT_NAME}
- DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
- FILES_MATCHING PATTERN "*.h")
-
-diff --git a/utilities/xmlrpcpp/src/XmlRpcClient.cpp b/utilities/xmlrpcpp/src/XmlRpcClient.cpp
-index 31cda22..b533059 100644
---- a/utilities/xmlrpcpp/src/XmlRpcClient.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcClient.cpp
-@@ -1,8 +1,8 @@
-
--#include "XmlRpcClient.h"
-+#include "xmlrpcpp/XmlRpcClient.h"
-
--#include "XmlRpcSocket.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <stdio.h>
- #include <stdlib.h>
-diff --git a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
-index 1d47836..e92dc5c 100644
---- a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
-@@ -1,7 +1,7 @@
-
--#include "XmlRpcDispatch.h"
--#include "XmlRpcSource.h"
--#include "XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcDispatch.h"
-+#include "xmlrpcpp/XmlRpcSource.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-
- #include <math.h>
- #include <errno.h>
-diff --git a/utilities/xmlrpcpp/src/XmlRpcServer.cpp b/utilities/xmlrpcpp/src/XmlRpcServer.cpp
-index 013c6ec..2515142 100644
---- a/utilities/xmlrpcpp/src/XmlRpcServer.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcServer.cpp
-@@ -2,12 +2,12 @@
- // added features: server can be opened on port 0 and you can read back
- // what port the OS gave you
-
--#include "XmlRpcServer.h"
--#include "XmlRpcServerConnection.h"
--#include "XmlRpcServerMethod.h"
--#include "XmlRpcSocket.h"
--#include "XmlRpcUtil.h"
--#include "XmlRpcException.h"
-+#include "xmlrpcpp/XmlRpcServer.h"
-+#include "xmlrpcpp/XmlRpcServerConnection.h"
-+#include "xmlrpcpp/XmlRpcServerMethod.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcException.h"
-
-
- using namespace XmlRpc;
-diff --git a/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp b/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
-index 76b2737..26c997f 100644
---- a/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
-@@ -1,8 +1,8 @@
-
--#include "XmlRpcServerConnection.h"
-+#include "xmlrpcpp/XmlRpcServerConnection.h"
-
--#include "XmlRpcSocket.h"
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpc.h"
- #ifndef MAKEDEPEND
- # include <stdio.h>
- # include <stdlib.h>
-diff --git a/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp b/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
-index 1616ff4..f40447c 100644
---- a/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
-@@ -1,6 +1,6 @@
-
--#include "XmlRpcServerMethod.h"
--#include "XmlRpcServer.h"
-+#include "xmlrpcpp/XmlRpcServerMethod.h"
-+#include "xmlrpcpp/XmlRpcServer.h"
-
- namespace XmlRpc {
-
-diff --git a/utilities/xmlrpcpp/src/XmlRpcSocket.cpp b/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
-index b3c694b..8173fc9 100644
---- a/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
-@@ -2,8 +2,8 @@
- // added features: server can be opened on port 0 and you can read back
- // what port the OS gave you
-
--#include "XmlRpcSocket.h"
--#include "XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-
- #ifndef MAKEDEPEND
-
-diff --git a/utilities/xmlrpcpp/src/XmlRpcSource.cpp b/utilities/xmlrpcpp/src/XmlRpcSource.cpp
-index 99203b0..4b44625 100644
---- a/utilities/xmlrpcpp/src/XmlRpcSource.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcSource.cpp
-@@ -1,7 +1,7 @@
-
--#include "XmlRpcSource.h"
--#include "XmlRpcSocket.h"
--#include "XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcSource.h"
-+#include "xmlrpcpp/XmlRpcSocket.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-
- namespace XmlRpc {
-
-diff --git a/utilities/xmlrpcpp/src/XmlRpcUtil.cpp b/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
-index 26f14b2..901ebc8 100644
---- a/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
-@@ -1,5 +1,5 @@
-
--#include "XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-
- #ifndef MAKEDEPEND
- # include <ctype.h>
-@@ -9,7 +9,7 @@
- # include <string.h>
- #endif
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- using namespace XmlRpc;
-
-diff --git a/utilities/xmlrpcpp/src/XmlRpcValue.cpp b/utilities/xmlrpcpp/src/XmlRpcValue.cpp
-index e765cfa..e6dabce 100644
---- a/utilities/xmlrpcpp/src/XmlRpcValue.cpp
-+++ b/utilities/xmlrpcpp/src/XmlRpcValue.cpp
-@@ -1,8 +1,8 @@
-
--#include "XmlRpcValue.h"
--#include "XmlRpcException.h"
--#include "XmlRpcUtil.h"
--#include "base64.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcException.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-+#include "xmlrpcpp/base64.h"
-
- #ifndef MAKEDEPEND
- # include <iostream>
-diff --git a/utilities/xmlrpcpp/test/FileClient.cpp b/utilities/xmlrpcpp/test/FileClient.cpp
-index 81d9f3e..58580f1 100644
---- a/utilities/xmlrpcpp/test/FileClient.cpp
-+++ b/utilities/xmlrpcpp/test/FileClient.cpp
-@@ -3,7 +3,7 @@
- //
- // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib on windows)
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
-diff --git a/utilities/xmlrpcpp/test/HelloClient.cpp b/utilities/xmlrpcpp/test/HelloClient.cpp
-index 576f63c..bcbf9fe 100644
---- a/utilities/xmlrpcpp/test/HelloClient.cpp
-+++ b/utilities/xmlrpcpp/test/HelloClient.cpp
-@@ -1,7 +1,7 @@
- // HelloClient.cpp : A simple xmlrpc client. Usage: HelloClient serverHost serverPort
- // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib
- // on windows)
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- #include <iostream>
- using namespace XmlRpc;
-
-diff --git a/utilities/xmlrpcpp/test/HelloServer.cpp b/utilities/xmlrpcpp/test/HelloServer.cpp
-index ff81ad8..2a03c6f 100644
---- a/utilities/xmlrpcpp/test/HelloServer.cpp
-+++ b/utilities/xmlrpcpp/test/HelloServer.cpp
-@@ -1,6 +1,6 @@
- // HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort
- //
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <iostream>
- #include <stdlib.h>
-diff --git a/utilities/xmlrpcpp/test/TestBase64Client.cpp b/utilities/xmlrpcpp/test/TestBase64Client.cpp
-index de95438..b540d91 100644
---- a/utilities/xmlrpcpp/test/TestBase64Client.cpp
-+++ b/utilities/xmlrpcpp/test/TestBase64Client.cpp
-@@ -5,7 +5,7 @@
- // Requests a png file from the specified server and saves it in outputfile.
- // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib on windows)
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
-diff --git a/utilities/xmlrpcpp/test/TestBase64Server.cpp b/utilities/xmlrpcpp/test/TestBase64Server.cpp
-index 7cb4a63..56ff3aa 100644
---- a/utilities/xmlrpcpp/test/TestBase64Server.cpp
-+++ b/utilities/xmlrpcpp/test/TestBase64Server.cpp
-@@ -11,7 +11,7 @@
- #include <stdlib.h>
-
-
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- using namespace XmlRpc;
-
-
-diff --git a/utilities/xmlrpcpp/test/TestValues.cpp b/utilities/xmlrpcpp/test/TestValues.cpp
-index e770e51..bb7b0d2 100644
---- a/utilities/xmlrpcpp/test/TestValues.cpp
-+++ b/utilities/xmlrpcpp/test/TestValues.cpp
-@@ -2,7 +2,7 @@
-
- #include <stdlib.h>
-
--#include "XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
-
-
- #include <assert.h>
-diff --git a/utilities/xmlrpcpp/test/TestValuesWin32.cpp b/utilities/xmlrpcpp/test/TestValuesWin32.cpp
-index f4cdafd..7ccd8c1 100644
---- a/utilities/xmlrpcpp/test/TestValuesWin32.cpp
-+++ b/utilities/xmlrpcpp/test/TestValuesWin32.cpp
-@@ -4,7 +4,7 @@
- #include <stdlib.h>
- #include <crtdbg.h>
-
--#include "XmlRpcValue.h"
-+#include "xmlrpcpp/XmlRpcValue.h"
-
-
- #include <assert.h>
-diff --git a/utilities/xmlrpcpp/test/TestXml.cpp b/utilities/xmlrpcpp/test/TestXml.cpp
-index 4fa707d..16ffb4a 100644
---- a/utilities/xmlrpcpp/test/TestXml.cpp
-+++ b/utilities/xmlrpcpp/test/TestXml.cpp
-@@ -11,7 +11,7 @@
- #include <assert.h>
- #include <stdlib.h>
-
--#include "XmlRpcUtil.h"
-+#include "xmlrpcpp/XmlRpcUtil.h"
-
- using namespace XmlRpc;
-
-diff --git a/utilities/xmlrpcpp/test/Validator.cpp b/utilities/xmlrpcpp/test/Validator.cpp
-index 2868a2d..83b3ca4 100644
---- a/utilities/xmlrpcpp/test/Validator.cpp
-+++ b/utilities/xmlrpcpp/test/Validator.cpp
-@@ -1,6 +1,6 @@
- // Validator.cpp : XMLRPC server based on the compliancy test at validator.xmlrpc.com.
- //
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- using namespace XmlRpc;
-
- #include <iostream>
-diff --git a/utilities/xmlrpcpp/test/bool_test.cpp b/utilities/xmlrpcpp/test/bool_test.cpp
-index db9d414..fbec414 100644
---- a/utilities/xmlrpcpp/test/bool_test.cpp
-+++ b/utilities/xmlrpcpp/test/bool_test.cpp
-@@ -1,5 +1,5 @@
- // bool_test.cpp : make sure bool variables copy around ok
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
- #include <iostream>
- #include <stdlib.h>
-
-diff --git a/utilities/xmlrpcpp/test/port_zero_server.cpp b/utilities/xmlrpcpp/test/port_zero_server.cpp
-index 0cb19d8..b60ab45 100644
---- a/utilities/xmlrpcpp/test/port_zero_server.cpp
-+++ b/utilities/xmlrpcpp/test/port_zero_server.cpp
-@@ -1,6 +1,6 @@
- // HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort
- //
--#include "XmlRpc.h"
-+#include "xmlrpcpp/XmlRpc.h"
-
- #include <iostream>
- #include <stdlib.h>
diff --git a/debian/patches/0007-move-heaers-to-include-xmlrpcpp.patch b/debian/patches/0007-move-heaers-to-include-xmlrpcpp.patch
new file mode 100644
index 0000000..510234d
--- /dev/null
+++ b/debian/patches/0007-move-heaers-to-include-xmlrpcpp.patch
@@ -0,0 +1,3676 @@
+From: Jochen Sprickerhof <git at jochen.sprickerhof.de>
+Date: Sat, 16 Jan 2016 11:56:42 +0100
+Subject: move heaers to include/xmlrpcpp
+
+---
+ clients/roscpp/include/ros/master.h | 2 +-
+ clients/roscpp/include/ros/node_handle.h | 2 +-
+ clients/roscpp/include/ros/param.h | 2 +-
+ clients/roscpp/include/ros/publication.h | 2 +-
+ clients/roscpp/include/ros/service_publication.h | 2 +-
+ clients/roscpp/include/ros/subscription.h | 2 +-
+ clients/roscpp/include/ros/topic_manager.h | 2 +-
+ clients/roscpp/include/ros/xmlrpc_manager.h | 2 +-
+ clients/roscpp/src/libros/init.cpp | 2 +-
+ clients/roscpp/src/libros/master.cpp | 2 +-
+ clients/roscpp/src/libros/node_handle.cpp | 2 +-
+ clients/roscpp/src/libros/service_manager.cpp | 2 +-
+ clients/roscpp/src/libros/topic_manager.cpp | 2 +-
+ test/test_roscpp/test/src/check_master.cpp | 2 +-
+ tools/rosbag/src/recorder.cpp | 2 +-
+ utilities/xmlrpcpp/CMakeLists.txt | 3 +-
+ utilities/xmlrpcpp/include/XmlRpc.h | 102 ------
+ utilities/xmlrpcpp/include/XmlRpcClient.h | 133 --------
+ utilities/xmlrpcpp/include/XmlRpcDecl.h | 55 ---
+ utilities/xmlrpcpp/include/XmlRpcDispatch.h | 89 -----
+ utilities/xmlrpcpp/include/XmlRpcException.h | 44 ---
+ utilities/xmlrpcpp/include/XmlRpcServer.h | 114 -------
+ .../xmlrpcpp/include/XmlRpcServerConnection.h | 103 ------
+ utilities/xmlrpcpp/include/XmlRpcServerMethod.h | 49 ---
+ utilities/xmlrpcpp/include/XmlRpcSocket.h | 80 -----
+ utilities/xmlrpcpp/include/XmlRpcSource.h | 57 ----
+ utilities/xmlrpcpp/include/XmlRpcUtil.h | 63 ----
+ utilities/xmlrpcpp/include/XmlRpcValue.h | 195 -----------
+ utilities/xmlrpcpp/include/base64.h | 380 ---------------------
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpc.h | 102 ++++++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcClient.h | 133 ++++++++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDecl.h | 55 +++
+ .../xmlrpcpp/include/xmlrpcpp/XmlRpcDispatch.h | 89 +++++
+ .../xmlrpcpp/include/xmlrpcpp/XmlRpcException.h | 44 +++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServer.h | 114 +++++++
+ .../include/xmlrpcpp/XmlRpcServerConnection.h | 103 ++++++
+ .../xmlrpcpp/include/xmlrpcpp/XmlRpcServerMethod.h | 49 +++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSocket.h | 80 +++++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSource.h | 57 ++++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcUtil.h | 63 ++++
+ utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcValue.h | 195 +++++++++++
+ utilities/xmlrpcpp/include/xmlrpcpp/base64.h | 380 +++++++++++++++++++++
+ utilities/xmlrpcpp/src/XmlRpcClient.cpp | 6 +-
+ utilities/xmlrpcpp/src/XmlRpcDispatch.cpp | 6 +-
+ utilities/xmlrpcpp/src/XmlRpcServer.cpp | 12 +-
+ utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp | 6 +-
+ utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp | 4 +-
+ utilities/xmlrpcpp/src/XmlRpcSocket.cpp | 4 +-
+ utilities/xmlrpcpp/src/XmlRpcSource.cpp | 6 +-
+ utilities/xmlrpcpp/src/XmlRpcUtil.cpp | 4 +-
+ utilities/xmlrpcpp/src/XmlRpcValue.cpp | 8 +-
+ utilities/xmlrpcpp/test/FileClient.cpp | 2 +-
+ utilities/xmlrpcpp/test/HelloClient.cpp | 2 +-
+ utilities/xmlrpcpp/test/HelloServer.cpp | 2 +-
+ utilities/xmlrpcpp/test/TestBase64Client.cpp | 2 +-
+ utilities/xmlrpcpp/test/TestBase64Server.cpp | 2 +-
+ utilities/xmlrpcpp/test/TestValues.cpp | 2 +-
+ utilities/xmlrpcpp/test/TestValuesWin32.cpp | 2 +-
+ utilities/xmlrpcpp/test/TestXml.cpp | 2 +-
+ utilities/xmlrpcpp/test/Validator.cpp | 2 +-
+ utilities/xmlrpcpp/test/bool_test.cpp | 2 +-
+ utilities/xmlrpcpp/test/port_zero_server.cpp | 2 +-
+ 62 files changed, 1519 insertions(+), 1520 deletions(-)
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpc.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcClient.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcDecl.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcDispatch.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcException.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcServer.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcServerConnection.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcServerMethod.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcSocket.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcSource.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcUtil.h
+ delete mode 100644 utilities/xmlrpcpp/include/XmlRpcValue.h
+ delete mode 100644 utilities/xmlrpcpp/include/base64.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpc.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcClient.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDecl.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDispatch.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcException.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServer.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerConnection.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerMethod.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSocket.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSource.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcUtil.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcValue.h
+ create mode 100644 utilities/xmlrpcpp/include/xmlrpcpp/base64.h
+
+diff --git a/clients/roscpp/include/ros/master.h b/clients/roscpp/include/ros/master.h
+index 9eefdf3..6cabd01 100644
+--- a/clients/roscpp/include/ros/master.h
++++ b/clients/roscpp/include/ros/master.h
+@@ -29,7 +29,7 @@
+ #define ROSCPP_MASTER_H
+
+ #include "forwards.h"
+-#include "XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcValue.h"
+ #include "common.h"
+
+ namespace ros
+diff --git a/clients/roscpp/include/ros/node_handle.h b/clients/roscpp/include/ros/node_handle.h
+index 4f4c1df..6380114 100644
+--- a/clients/roscpp/include/ros/node_handle.h
++++ b/clients/roscpp/include/ros/node_handle.h
+@@ -48,7 +48,7 @@
+
+ #include <boost/bind.hpp>
+
+-#include <XmlRpcValue.h>
++#include <xmlrpcpp/XmlRpcValue.h>
+
+ namespace ros
+ {
+diff --git a/clients/roscpp/include/ros/param.h b/clients/roscpp/include/ros/param.h
+index cfa7521..699f212 100644
+--- a/clients/roscpp/include/ros/param.h
++++ b/clients/roscpp/include/ros/param.h
+@@ -30,7 +30,7 @@
+
+ #include "forwards.h"
+ #include "common.h"
+-#include "XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcValue.h"
+
+ #include <vector>
+ #include <map>
+diff --git a/clients/roscpp/include/ros/publication.h b/clients/roscpp/include/ros/publication.h
+index 5183e08..1ea2187 100644
+--- a/clients/roscpp/include/ros/publication.h
++++ b/clients/roscpp/include/ros/publication.h
+@@ -31,7 +31,7 @@
+ #include "ros/forwards.h"
+ #include "ros/advertise_options.h"
+ #include "common.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <boost/thread/mutex.hpp>
+
+diff --git a/clients/roscpp/include/ros/service_publication.h b/clients/roscpp/include/ros/service_publication.h
+index bd44c34..ff4f8b4 100644
+--- a/clients/roscpp/include/ros/service_publication.h
++++ b/clients/roscpp/include/ros/service_publication.h
+@@ -30,7 +30,7 @@
+
+ #include "ros/service_callback_helper.h"
+ #include "common.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <boost/thread/mutex.hpp>
+
+diff --git a/clients/roscpp/include/ros/subscription.h b/clients/roscpp/include/ros/subscription.h
+index 7da3219..ed726a3 100644
+--- a/clients/roscpp/include/ros/subscription.h
++++ b/clients/roscpp/include/ros/subscription.h
+@@ -35,7 +35,7 @@
+ #include "ros/transport_hints.h"
+ #include "ros/xmlrpc_manager.h"
+ #include "ros/statistics.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <boost/thread.hpp>
+ #include <boost/shared_ptr.hpp>
+diff --git a/clients/roscpp/include/ros/topic_manager.h b/clients/roscpp/include/ros/topic_manager.h
+index 5827e82..3a80f9c 100644
+--- a/clients/roscpp/include/ros/topic_manager.h
++++ b/clients/roscpp/include/ros/topic_manager.h
+@@ -33,7 +33,7 @@
+ #include "ros/serialization.h"
+ #include "rosout_appender.h"
+
+-#include "XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcValue.h"
+
+ #include <boost/thread/mutex.hpp>
+ #include <boost/thread/recursive_mutex.hpp>
+diff --git a/clients/roscpp/include/ros/xmlrpc_manager.h b/clients/roscpp/include/ros/xmlrpc_manager.h
+index 7dc55ee..2dc5034 100644
+--- a/clients/roscpp/include/ros/xmlrpc_manager.h
++++ b/clients/roscpp/include/ros/xmlrpc_manager.h
+@@ -36,7 +36,7 @@
+ #include <boost/enable_shared_from_this.hpp>
+
+ #include "common.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <ros/time.h>
+
+diff --git a/clients/roscpp/src/libros/init.cpp b/clients/roscpp/src/libros/init.cpp
+index 920e665..a122bfb 100644
+--- a/clients/roscpp/src/libros/init.cpp
++++ b/clients/roscpp/src/libros/init.cpp
+@@ -48,7 +48,7 @@
+ #include "ros/subscribe_options.h"
+ #include "ros/transport/transport_tcp.h"
+ #include "ros/internal_timer_manager.h"
+-#include "XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
+
+ #include "roscpp/GetLoggers.h"
+ #include "roscpp/SetLoggerLevel.h"
+diff --git a/clients/roscpp/src/libros/master.cpp b/clients/roscpp/src/libros/master.cpp
+index c25be66..ad63545 100644
+--- a/clients/roscpp/src/libros/master.cpp
++++ b/clients/roscpp/src/libros/master.cpp
+@@ -34,7 +34,7 @@
+ #include <ros/console.h>
+ #include <ros/assert.h>
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ namespace ros
+ {
+diff --git a/clients/roscpp/src/libros/node_handle.cpp b/clients/roscpp/src/libros/node_handle.cpp
+index 6673d48..7dc0797 100644
+--- a/clients/roscpp/src/libros/node_handle.cpp
++++ b/clients/roscpp/src/libros/node_handle.cpp
+@@ -42,7 +42,7 @@
+ #include "ros/names.h"
+ #include "ros/init.h"
+ #include "ros/this_node.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <boost/thread.hpp>
+
+diff --git a/clients/roscpp/src/libros/service_manager.cpp b/clients/roscpp/src/libros/service_manager.cpp
+index 09f6f3d..6542b4f 100644
+--- a/clients/roscpp/src/libros/service_manager.cpp
++++ b/clients/roscpp/src/libros/service_manager.cpp
+@@ -42,7 +42,7 @@
+ #include "ros/connection.h"
+ #include "ros/file_log.h"
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <ros/console.h>
+
+diff --git a/clients/roscpp/src/libros/topic_manager.cpp b/clients/roscpp/src/libros/topic_manager.cpp
+index 0142cda..c76c9bc 100644
+--- a/clients/roscpp/src/libros/topic_manager.cpp
++++ b/clients/roscpp/src/libros/topic_manager.cpp
+@@ -41,7 +41,7 @@
+ #include "ros/file_log.h"
+ #include "ros/subscribe_options.h"
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <ros/console.h>
+
+diff --git a/test/test_roscpp/test/src/check_master.cpp b/test/test_roscpp/test/src/check_master.cpp
+index 9b03321..4392f2b 100644
+--- a/test/test_roscpp/test/src/check_master.cpp
++++ b/test/test_roscpp/test/src/check_master.cpp
+@@ -40,7 +40,7 @@
+
+ #include "ros/ros.h"
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ using namespace XmlRpc;
+
+diff --git a/tools/rosbag/src/recorder.cpp b/tools/rosbag/src/recorder.cpp
+index a6b7e26..01188a3 100644
+--- a/tools/rosbag/src/recorder.cpp
++++ b/tools/rosbag/src/recorder.cpp
+@@ -60,7 +60,7 @@
+
+ #include "ros/network.h"
+ #include "ros/xmlrpc_manager.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #define foreach BOOST_FOREACH
+
+diff --git a/utilities/xmlrpcpp/CMakeLists.txt b/utilities/xmlrpcpp/CMakeLists.txt
+index a4f6bec..286bcf9 100644
+--- a/utilities/xmlrpcpp/CMakeLists.txt
++++ b/utilities/xmlrpcpp/CMakeLists.txt
+@@ -35,8 +35,7 @@ if(WIN32)
+ target_link_libraries(xmlrpcpp ws2_32)
+ endif()
+
+-# FIXME the headers should be in a package-specific subfolder but can not be for backward compatibility
+-install(DIRECTORY include/
++install(DIRECTORY include/${PROJECT_NAME}
+ DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
+ FILES_MATCHING PATTERN "*.h")
+
+diff --git a/utilities/xmlrpcpp/include/XmlRpc.h b/utilities/xmlrpcpp/include/XmlRpc.h
+deleted file mode 100644
+index 6b00b18..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpc.h
++++ /dev/null
+@@ -1,102 +0,0 @@
+-// this file modified by Morgan Quigley on 22 April 2008 to add
+-// a std::exception-derived class
+-#ifndef _XMLRPC_H_
+-#define _XMLRPC_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-// This library is free software; you can redistribute it and/or
+-// modify it under the terms of the GNU Lesser General Public
+-// License as published by the Free Software Foundation; either
+-// version 2.1 of the License, or (at your option) any later version.
+-//
+-// This library is distributed in the hope that it will be useful,
+-// but WITHOUT ANY WARRANTY; without even the implied warranty of
+-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-// Lesser General Public License for more details.
+-//
+-// You should have received a copy of the GNU Lesser General Public
+-// License along with this library; if not, write to the Free Software
+-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+-//
+-
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcClient.h"
+-#include "XmlRpcException.h"
+-#include "XmlRpcServer.h"
+-#include "XmlRpcServerMethod.h"
+-#include "XmlRpcValue.h"
+-#include "XmlRpcUtil.h"
+-
+-#include <stdexcept>
+-
+-namespace XmlRpc {
+-
+-
+- //! An interface allowing custom handling of error message reporting.
+- class XmlRpcErrorHandler {
+- public:
+- virtual ~XmlRpcErrorHandler() { }
+-
+- //! Returns a pointer to the currently installed error handling object.
+- static XmlRpcErrorHandler* getErrorHandler()
+- { return _errorHandler; }
+-
+- //! Specifies the error handler.
+- static void setErrorHandler(XmlRpcErrorHandler* eh)
+- { _errorHandler = eh; }
+-
+- //! Report an error. Custom error handlers should define this method.
+- virtual void error(const char* msg) = 0;
+-
+- protected:
+- static XmlRpcErrorHandler* _errorHandler;
+- };
+-
+- //! An interface allowing custom handling of informational message reporting.
+- class XmlRpcLogHandler {
+- public:
+- virtual ~XmlRpcLogHandler() { }
+-
+- //! Returns a pointer to the currently installed message reporting object.
+- static XmlRpcLogHandler* getLogHandler()
+- { return _logHandler; }
+-
+- //! Specifies the message handler.
+- static void setLogHandler(XmlRpcLogHandler* lh)
+- { _logHandler = lh; }
+-
+- //! Returns the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
+- static int getVerbosity()
+- { return _verbosity; }
+-
+- //! Specify the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
+- static void setVerbosity(int v)
+- { _verbosity = v; }
+-
+- //! Output a message. Custom error handlers should define this method.
+- virtual void log(int level, const char* msg) = 0;
+-
+- protected:
+- static XmlRpcLogHandler* _logHandler;
+- static int _verbosity;
+- };
+-
+- //! Returns log message verbosity. This is short for XmlRpcLogHandler::getVerbosity()
+- int getVerbosity();
+- //! Sets log message verbosity. This is short for XmlRpcLogHandler::setVerbosity(level)
+- void setVerbosity(int level);
+-
+-
+- //! Version identifier
+- extern const char XMLRPC_VERSION[];
+-
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPC_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcClient.h b/utilities/xmlrpcpp/include/XmlRpcClient.h
+deleted file mode 100644
+index 6f47778..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcClient.h
++++ /dev/null
+@@ -1,133 +0,0 @@
+-
+-#ifndef _XMLRPCCLIENT_H_
+-#define _XMLRPCCLIENT_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcDispatch.h"
+-#include "XmlRpcSource.h"
+-#include "XmlRpcDecl.h"
+-
+-namespace XmlRpc {
+-
+- // Arguments and results are represented by XmlRpcValues
+- class XmlRpcValue;
+-
+- //! A class to send XML RPC requests to a server and return the results.
+- class XMLRPCPP_DECL XmlRpcClient : public XmlRpcSource {
+- public:
+- // Static data
+- static const char REQUEST_BEGIN[];
+- static const char REQUEST_END_METHODNAME[];
+- static const char PARAMS_TAG[];
+- static const char PARAMS_ETAG[];
+- static const char PARAM_TAG[];
+- static const char PARAM_ETAG[];
+- static const char REQUEST_END[];
+- // Result tags
+- static const char METHODRESPONSE_TAG[];
+- static const char FAULT_TAG[];
+-
+- //! Construct a client to connect to the server at the specified host:port address
+- //! @param host The name of the remote machine hosting the server
+- //! @param port The port on the remote machine where the server is listening
+- //! @param uri An optional string to be sent as the URI in the HTTP GET header
+- XmlRpcClient(const char* host, int port, const char* uri=0);
+-
+- //! Destructor
+- virtual ~XmlRpcClient();
+-
+- //! Execute the named procedure on the remote server.
+- //! @param method The name of the remote procedure to execute
+- //! @param params An array of the arguments for the method
+- //! @param result The result value to be returned to the client
+- //! @return true if the request was sent and a result received
+- //! (although the result might be a fault).
+- //!
+- //! Currently this is a synchronous (blocking) implementation (execute
+- //! does not return until it receives a response or an error). Use isFault()
+- //! to determine whether the result is a fault response.
+- bool execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result);
+-
+- bool executeNonBlock(const char* method, XmlRpcValue const& params);
+- bool executeCheckDone(XmlRpcValue& result);
+-
+- //! Returns true if the result of the last execute() was a fault response.
+- bool isFault() const { return _isFault; }
+-
+-
+- // XmlRpcSource interface implementation
+- //! Close the connection
+- virtual void close();
+-
+- //! Handle server responses. Called by the event dispatcher during execute.
+- //! @param eventType The type of event that occurred.
+- //! @see XmlRpcDispatch::EventType
+- virtual unsigned handleEvent(unsigned eventType);
+-
+- protected:
+- // Execution processing helpers
+- virtual bool doConnect();
+- virtual bool setupConnection();
+-
+- virtual bool generateRequest(const char* method, XmlRpcValue const& params);
+- virtual std::string generateHeader(std::string const& body);
+- virtual bool writeRequest();
+- virtual bool readHeader();
+- virtual bool readResponse();
+- virtual bool parseResponse(XmlRpcValue& result);
+-
+- // Possible IO states for the connection
+- enum ClientConnectionState { NO_CONNECTION, CONNECTING, WRITE_REQUEST, READ_HEADER, READ_RESPONSE, IDLE };
+- ClientConnectionState _connectionState;
+-
+- // Server location
+- std::string _host;
+- std::string _uri;
+- int _port;
+- public:
+- const std::string &getHost() { return _host; }
+- const std::string &getUri() { return _uri; }
+- int getPort() const { return _port; }
+-
+- // The xml-encoded request, http header of response, and response xml
+- std::string _request;
+- std::string _header;
+- std::string _response;
+-
+- // Number of times the client has attempted to send the request
+- int _sendAttempts;
+-
+- // Number of bytes of the request that have been written to the socket so far
+- int _bytesWritten;
+-
+- // True if we are currently executing a request. If you want to multithread,
+- // each thread should have its own client.
+- bool _executing;
+-
+- // True if the server closed the connection
+- bool _eof;
+-
+- // True if a fault response was returned by the server
+- bool _isFault;
+-
+- // Number of bytes expected in the response body (parsed from response header)
+- int _contentLength;
+-
+- // Event dispatcher
+- XmlRpcDispatch _disp;
+-
+- }; // class XmlRpcClient
+-
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPCCLIENT_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcDecl.h b/utilities/xmlrpcpp/include/XmlRpcDecl.h
+deleted file mode 100644
+index 8af174a..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcDecl.h
++++ /dev/null
+@@ -1,55 +0,0 @@
+-/*********************************************************************
+-*
+-* Software License Agreement (BSD License)
+-*
+-* Copyright (c) 2009, Willow Garage, Inc.
+-* All rights reserved.
+-*
+-* Redistribution and use in source and binary forms, with or without
+-* modification, are permitted provided that the following conditions
+-* are met:
+-*
+-* * Redistributions of source code must retain the above copyright
+-* notice, this list of conditions and the following disclaimer.
+-* * Redistributions in binary form must reproduce the above
+-* copyright notice, this list of conditions and the following
+-* disclaimer in the documentation and/or other materials provided
+-* with the distribution.
+-* * Neither the name of the Willow Garage nor the names of its
+-* contributors may be used to endorse or promote products derived
+-* from this software without specific prior written permission.
+-*
+-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+-* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+-* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+-* POSSIBILITY OF SUCH DAMAGE.
+-*
+-*********************************************************************/
+-/*
+- * Cross platform macros.
+- *
+- */
+-#ifndef XMLRPCPP_DECL_H_INCLUDED
+-#define XMLRPCPP_DECL_H_INCLUDED
+-
+-#include <ros/macros.h>
+-
+-#ifdef ROS_BUILD_SHARED_LIBS // ros is being built around shared libraries
+- #ifdef xmlrpcpp_EXPORTS // we are building a shared lib/dll
+- #define XMLRPCPP_DECL ROS_HELPER_EXPORT
+- #else // we are using shared lib/dll
+- #define XMLRPCPP_DECL ROS_HELPER_IMPORT
+- #endif
+-#else // ros is being built around static libraries
+- #define XMLRPCPP_DECL
+-#endif
+-
+-#endif /* XMLRPCPP_DECL_H_INCLUDED */
+diff --git a/utilities/xmlrpcpp/include/XmlRpcDispatch.h b/utilities/xmlrpcpp/include/XmlRpcDispatch.h
+deleted file mode 100644
+index 12b01ad..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcDispatch.h
++++ /dev/null
+@@ -1,89 +0,0 @@
+-
+-#ifndef _XMLRPCDISPATCH_H_
+-#define _XMLRPCDISPATCH_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-#ifndef MAKEDEPEND
+-# include <list>
+-#endif
+-
+-namespace XmlRpc {
+-
+- // An RPC source represents a file descriptor to monitor
+- class XmlRpcSource;
+-
+- //! An object which monitors file descriptors for events and performs
+- //! callbacks when interesting events happen.
+- class XMLRPCPP_DECL XmlRpcDispatch {
+- public:
+- //! Constructor
+- XmlRpcDispatch();
+- ~XmlRpcDispatch();
+-
+- //! Values indicating the type of events a source is interested in
+- enum EventType {
+- ReadableEvent = 1, //!< data available to read
+- WritableEvent = 2, //!< connected/data can be written without blocking
+- Exception = 4 //!< uh oh
+- };
+-
+- //! Monitor this source for the event types specified by the event mask
+- //! and call its event handler when any of the events occur.
+- //! @param source The source to monitor
+- //! @param eventMask Which event types to watch for. \see EventType
+- void addSource(XmlRpcSource* source, unsigned eventMask);
+-
+- //! Stop monitoring this source.
+- //! @param source The source to stop monitoring
+- void removeSource(XmlRpcSource* source);
+-
+- //! Modify the types of events to watch for on this source
+- void setSourceEvents(XmlRpcSource* source, unsigned eventMask);
+-
+-
+- //! Watch current set of sources and process events for the specified
+- //! duration (in ms, -1 implies wait forever, or until exit is called)
+- void work(double msTime);
+-
+- //! Exit from work routine
+- void exit();
+-
+- //! Clear all sources from the monitored sources list. Sources are closed.
+- void clear();
+-
+- // helper
+- double getTime();
+-
+- // A source to monitor and what to monitor it for
+- struct MonitoredSource {
+- MonitoredSource(XmlRpcSource* src, unsigned mask) : _src(src), _mask(mask) {}
+- XmlRpcSource* getSource() const { return _src; }
+- unsigned& getMask() { return _mask; }
+- XmlRpcSource* _src;
+- unsigned _mask;
+- };
+-
+- // A list of sources to monitor
+- typedef std::list< MonitoredSource > SourceList;
+-
+- // Sources being monitored
+- SourceList _sources;
+- protected:
+-
+- // When work should stop (-1 implies wait forever, or until exit is called)
+- double _endTime;
+-
+- bool _doClear;
+- bool _inWork;
+-
+- };
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPCDISPATCH_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcException.h b/utilities/xmlrpcpp/include/XmlRpcException.h
+deleted file mode 100644
+index bff5bf2..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcException.h
++++ /dev/null
+@@ -1,44 +0,0 @@
+-
+-#ifndef _XMLRPCEXCEPTION_H_
+-#define _XMLRPCEXCEPTION_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-
+-namespace XmlRpc {
+-
+- //! A class representing an error.
+- //! If server methods throw this exception, a fault response is returned
+- //! to the client.
+- class XMLRPCPP_DECL XmlRpcException {
+- public:
+- //! Constructor
+- //! @param message A descriptive error message
+- //! @param code An integer error code
+- XmlRpcException(const std::string& message, int code=-1) :
+- _message(message), _code(code) {}
+-
+- //! Return the error message.
+- const std::string& getMessage() const { return _message; }
+-
+- //! Return the error code.
+- int getCode() const { return _code; }
+-
+- private:
+- std::string _message;
+- int _code;
+- };
+-
+-}
+-
+-#endif // _XMLRPCEXCEPTION_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcServer.h b/utilities/xmlrpcpp/include/XmlRpcServer.h
+deleted file mode 100644
+index 035d383..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcServer.h
++++ /dev/null
+@@ -1,114 +0,0 @@
+-// this file modified by Morgan Quigley on 22 Apr 2008.
+-// added features: server can be opened on port 0 and you can read back
+-// what port the OS gave you
+-
+-#ifndef _XMLRPCSERVER_H_
+-#define _XMLRPCSERVER_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <map>
+-# include <string>
+-#endif
+-
+-#include "XmlRpcDispatch.h"
+-#include "XmlRpcSource.h"
+-#include "XmlRpcDecl.h"
+-
+-namespace XmlRpc {
+-
+-
+- // An abstract class supporting XML RPC methods
+- class XmlRpcServerMethod;
+-
+- // Class representing connections to specific clients
+- class XmlRpcServerConnection;
+-
+- // Class representing argument and result values
+- class XmlRpcValue;
+-
+-
+- //! A class to handle XML RPC requests
+- class XMLRPCPP_DECL XmlRpcServer : public XmlRpcSource {
+- public:
+- //! Create a server object.
+- XmlRpcServer();
+- //! Destructor.
+- virtual ~XmlRpcServer();
+-
+- //! Specify whether introspection is enabled or not. Default is not enabled.
+- void enableIntrospection(bool enabled=true);
+-
+- //! Add a command to the RPC server
+- void addMethod(XmlRpcServerMethod* method);
+-
+- //! Remove a command from the RPC server
+- void removeMethod(XmlRpcServerMethod* method);
+-
+- //! Remove a command from the RPC server by name
+- void removeMethod(const std::string& methodName);
+-
+- //! Look up a method by name
+- XmlRpcServerMethod* findMethod(const std::string& name) const;
+-
+- //! Create a socket, bind to the specified port, and
+- //! set it in listen mode to make it available for clients.
+- bool bindAndListen(int port, int backlog = 5);
+-
+- //! Process client requests for the specified time
+- void work(double msTime);
+-
+- //! Temporarily stop processing client requests and exit the work() method.
+- void exit();
+-
+- //! Close all connections with clients and the socket file descriptor
+- void shutdown();
+-
+- //! Introspection support
+- void listMethods(XmlRpcValue& result);
+-
+- // XmlRpcSource interface implementation
+-
+- //! Handle client connection requests
+- virtual unsigned handleEvent(unsigned eventType);
+-
+- //! Remove a connection from the dispatcher
+- virtual void removeConnection(XmlRpcServerConnection*);
+-
+- inline int get_port() { return _port; }
+-
+- XmlRpcDispatch *get_dispatch() { return &_disp; }
+-
+- protected:
+-
+- //! Accept a client connection request
+- virtual void acceptConnection();
+-
+- //! Create a new connection object for processing requests from a specific client.
+- virtual XmlRpcServerConnection* createConnection(int socket);
+-
+- // Whether the introspection API is supported by this server
+- bool _introspectionEnabled;
+-
+- // Event dispatcher
+- XmlRpcDispatch _disp;
+-
+- // Collection of methods. This could be a set keyed on method name if we wanted...
+- typedef std::map< std::string, XmlRpcServerMethod* > MethodMap;
+- MethodMap _methods;
+-
+- // system methods
+- XmlRpcServerMethod* _listMethods;
+- XmlRpcServerMethod* _methodHelp;
+-
+- int _port;
+-
+- };
+-} // namespace XmlRpc
+-
+-#endif //_XMLRPCSERVER_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcServerConnection.h b/utilities/xmlrpcpp/include/XmlRpcServerConnection.h
+deleted file mode 100644
+index f5c224d..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcServerConnection.h
++++ /dev/null
+@@ -1,103 +0,0 @@
+-#ifndef _XMLRPCSERVERCONNECTION_H_
+-#define _XMLRPCSERVERCONNECTION_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcValue.h"
+-#include "XmlRpcSource.h"
+-#include "XmlRpcDecl.h"
+-
+-namespace XmlRpc {
+-
+-
+- // The server waits for client connections and provides methods
+- class XmlRpcServer;
+- class XmlRpcServerMethod;
+-
+- //! A class to handle XML RPC requests from a particular client
+- class XMLRPCPP_DECL XmlRpcServerConnection : public XmlRpcSource {
+- public:
+- // Static data
+- static const char METHODNAME_TAG[];
+- static const char PARAMS_TAG[];
+- static const char PARAMS_ETAG[];
+- static const char PARAM_TAG[];
+- static const char PARAM_ETAG[];
+-
+- static const std::string SYSTEM_MULTICALL;
+- static const std::string METHODNAME;
+- static const std::string PARAMS;
+-
+- static const std::string FAULTCODE;
+- static const std::string FAULTSTRING;
+-
+- //! Constructor
+- XmlRpcServerConnection(int fd, XmlRpcServer* server, bool deleteOnClose = false);
+- //! Destructor
+- virtual ~XmlRpcServerConnection();
+-
+- // XmlRpcSource interface implementation
+- //! Handle IO on the client connection socket.
+- //! @param eventType Type of IO event that occurred. @see XmlRpcDispatch::EventType.
+- virtual unsigned handleEvent(unsigned eventType);
+-
+- protected:
+-
+- bool readHeader();
+- bool readRequest();
+- bool writeResponse();
+-
+- // Parses the request, runs the method, generates the response xml.
+- virtual void executeRequest();
+-
+- // Parse the methodName and parameters from the request.
+- std::string parseRequest(XmlRpcValue& params);
+-
+- // Execute a named method with the specified params.
+- bool executeMethod(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
+-
+- // Execute multiple calls and return the results in an array.
+- bool executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
+-
+- // Construct a response from the result XML.
+- void generateResponse(std::string const& resultXml);
+- void generateFaultResponse(std::string const& msg, int errorCode = -1);
+- std::string generateHeader(std::string const& body);
+-
+-
+- // The XmlRpc server that accepted this connection
+- XmlRpcServer* _server;
+-
+- // Possible IO states for the connection
+- enum ServerConnectionState { READ_HEADER, READ_REQUEST, WRITE_RESPONSE };
+- ServerConnectionState _connectionState;
+-
+- // Request headers
+- std::string _header;
+-
+- // Number of bytes expected in the request body (parsed from header)
+- int _contentLength;
+-
+- // Request body
+- std::string _request;
+-
+- // Response
+- std::string _response;
+-
+- // Number of bytes of the response written so far
+- int _bytesWritten;
+-
+- // Whether to keep the current client connection open for further requests
+- bool _keepAlive;
+- };
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPCSERVERCONNECTION_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcServerMethod.h b/utilities/xmlrpcpp/include/XmlRpcServerMethod.h
+deleted file mode 100644
+index 7b7ddca..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcServerMethod.h
++++ /dev/null
+@@ -1,49 +0,0 @@
+-
+-#ifndef _XMLRPCSERVERMETHOD_H_
+-#define _XMLRPCSERVERMETHOD_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-namespace XmlRpc {
+-
+- // Representation of a parameter or result value
+- class XmlRpcValue;
+-
+- // The XmlRpcServer processes client requests to call RPCs
+- class XmlRpcServer;
+-
+- //! Abstract class representing a single RPC method
+- class XMLRPCPP_DECL XmlRpcServerMethod {
+- public:
+- //! Constructor
+- XmlRpcServerMethod(std::string const& name, XmlRpcServer* server = 0);
+- //! Destructor
+- virtual ~XmlRpcServerMethod();
+-
+- //! Returns the name of the method
+- std::string& name() { return _name; }
+-
+- //! Execute the method. Subclasses must provide a definition for this method.
+- virtual void execute(XmlRpcValue& params, XmlRpcValue& result) = 0;
+-
+- //! Returns a help string for the method.
+- //! Subclasses should define this method if introspection is being used.
+- virtual std::string help() { return std::string(); }
+-
+- protected:
+- std::string _name;
+- XmlRpcServer* _server;
+- };
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPCSERVERMETHOD_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcSocket.h b/utilities/xmlrpcpp/include/XmlRpcSocket.h
+deleted file mode 100644
+index 711a520..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcSocket.h
++++ /dev/null
+@@ -1,80 +0,0 @@
+-// this file modified by Morgan Quigley on 22 Apr 2008.
+-// added features: server can be opened on port 0 and you can read back
+-// what port the OS gave you
+-
+-#ifndef _XMLRPCSOCKET_H_
+-#define _XMLRPCSOCKET_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-namespace XmlRpc {
+-
+- //! A platform-independent socket API.
+- class XMLRPCPP_DECL XmlRpcSocket {
+- public:
+-
+- static bool s_use_ipv6_;
+-
+- //! Creates a stream (TCP) socket. Returns -1 on failure.
+- static int socket();
+-
+- //! Closes a socket.
+- static void close(int socket);
+-
+-
+- //! Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure.
+- static bool setNonBlocking(int socket);
+-
+- //! Read text from the specified socket. Returns false on error.
+- static bool nbRead(int socket, std::string& s, bool *eof);
+-
+- //! Write text to the specified socket. Returns false on error.
+- static bool nbWrite(int socket, std::string& s, int *bytesSoFar);
+-
+-
+- // The next four methods are appropriate for servers.
+-
+- //! Allow the port the specified socket is bound to to be re-bound immediately so
+- //! server re-starts are not delayed. Returns false on failure.
+- static bool setReuseAddr(int socket);
+-
+- //! Bind to a specified port
+- static bool bind(int socket, int port);
+-
+- static int get_port(int socket);
+-
+- //! Set socket in listen mode
+- static bool listen(int socket, int backlog);
+-
+- //! Accept a client connection request
+- static int accept(int socket);
+-
+-
+-
+- //! Connect a socket to a server (from a client)
+- static bool connect(int socket, std::string& host, int port);
+-
+-
+- //! Returns last errno
+- static int getError();
+-
+- //! Returns message corresponding to last error
+- static std::string getErrorMsg();
+-
+- //! Returns message corresponding to error
+- static std::string getErrorMsg(int error);
+- };
+-
+-} // namespace XmlRpc
+-
+-#endif
+diff --git a/utilities/xmlrpcpp/include/XmlRpcSource.h b/utilities/xmlrpcpp/include/XmlRpcSource.h
+deleted file mode 100644
+index f82ccb1..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcSource.h
++++ /dev/null
+@@ -1,57 +0,0 @@
+-
+-#ifndef _XMLRPCSOURCE_H_
+-#define _XMLRPCSOURCE_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-namespace XmlRpc {
+-
+- //! An RPC source represents a file descriptor to monitor
+- class XMLRPCPP_DECL XmlRpcSource {
+- public:
+- //! Constructor
+- //! @param fd The socket file descriptor to monitor.
+- //! @param deleteOnClose If true, the object deletes itself when close is called.
+- XmlRpcSource(int fd = -1, bool deleteOnClose = false);
+-
+- //! Destructor
+- virtual ~XmlRpcSource();
+-
+- //! Return the file descriptor being monitored.
+- int getfd() const { return _fd; }
+- //! Specify the file descriptor to monitor.
+- void setfd(int fd) { _fd = fd; }
+-
+- //! Return whether the file descriptor should be kept open if it is no longer monitored.
+- bool getKeepOpen() const { return _keepOpen; }
+- //! Specify whether the file descriptor should be kept open if it is no longer monitored.
+- void setKeepOpen(bool b=true) { _keepOpen = b; }
+-
+- //! Close the owned fd. If deleteOnClose was specified at construction, the object is deleted.
+- virtual void close();
+-
+- //! Return true to continue monitoring this source
+- virtual unsigned handleEvent(unsigned eventType) = 0;
+-
+- private:
+-
+- // Socket. This should really be a SOCKET (an alias for unsigned int*) on windows...
+- int _fd;
+-
+- // In the server, a new source (XmlRpcServerConnection) is created
+- // for each connected client. When each connection is closed, the
+- // corresponding source object is deleted.
+- bool _deleteOnClose;
+-
+- // In the client, keep connections open if you intend to make multiple calls.
+- bool _keepOpen;
+- };
+-} // namespace XmlRpc
+-
+-#endif //_XMLRPCSOURCE_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcUtil.h b/utilities/xmlrpcpp/include/XmlRpcUtil.h
+deleted file mode 100644
+index 78627f4..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcUtil.h
++++ /dev/null
+@@ -1,63 +0,0 @@
+-#ifndef _XMLRPCUTIL_H_
+-#define _XMLRPCUTIL_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#ifndef MAKEDEPEND
+-# include <string>
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-#if defined(_MSC_VER)
+-# define snprintf _snprintf_s
+-# define vsnprintf _vsnprintf_s
+-# define strcasecmp _stricmp
+-# define strncasecmp _strnicmp
+-#elif defined(__BORLANDC__)
+-# define strcasecmp stricmp
+-# define strncasecmp strnicmp
+-#endif
+-
+-namespace XmlRpc {
+-
+- //! Utilities for XML parsing, encoding, and decoding and message handlers.
+- class XMLRPCPP_DECL XmlRpcUtil {
+- public:
+- // hokey xml parsing
+- //! Returns contents between <tag> and </tag>, updates offset to char after </tag>
+- static std::string parseTag(const char* tag, std::string const& xml, int* offset);
+-
+- //! Returns true if the tag is found and updates offset to the char after the tag
+- static bool findTag(const char* tag, std::string const& xml, int* offset);
+-
+- //! Returns the next tag and updates offset to the char after the tag, or empty string
+- //! if the next non-whitespace character is not '<'
+- static std::string getNextTag(std::string const& xml, int* offset);
+-
+- //! Returns true if the tag is found at the specified offset (modulo any whitespace)
+- //! and updates offset to the char after the tag
+- static bool nextTagIs(const char* tag, std::string const& xml, int* offset);
+-
+-
+- //! Convert raw text to encoded xml.
+- static std::string xmlEncode(const std::string& raw);
+-
+- //! Convert encoded xml to raw text
+- static std::string xmlDecode(const std::string& encoded);
+-
+-
+- //! Dump messages somewhere
+- static void log(int level, const char* fmt, ...);
+-
+- //! Dump error messages somewhere
+- static void error(const char* fmt, ...);
+-
+- };
+-} // namespace XmlRpc
+-
+-#endif // _XMLRPCUTIL_H_
+diff --git a/utilities/xmlrpcpp/include/XmlRpcValue.h b/utilities/xmlrpcpp/include/XmlRpcValue.h
+deleted file mode 100644
+index fe6cb8c..0000000
+--- a/utilities/xmlrpcpp/include/XmlRpcValue.h
++++ /dev/null
+@@ -1,195 +0,0 @@
+-
+-#ifndef _XMLRPCVALUE_H_
+-#define _XMLRPCVALUE_H_
+-//
+-// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
+-//
+-#if defined(_MSC_VER)
+-# pragma warning(disable:4786) // identifier was truncated in debug info
+-#endif
+-
+-#include "XmlRpcDecl.h"
+-
+-#ifndef MAKEDEPEND
+-# include <map>
+-# include <string>
+-# include <vector>
+-# include <time.h>
+-#endif
+-
+-namespace XmlRpc {
+-
+- //! RPC method arguments and results are represented by Values
+- // should probably refcount them...
+- class XMLRPCPP_DECL XmlRpcValue {
+- public:
+-
+-
+- enum Type {
+- TypeInvalid,
+- TypeBoolean,
+- TypeInt,
+- TypeDouble,
+- TypeString,
+- TypeDateTime,
+- TypeBase64,
+- TypeArray,
+- TypeStruct
+- };
+-
+- // Non-primitive types
+- typedef std::vector<char> BinaryData;
+- typedef std::vector<XmlRpcValue> ValueArray;
+- typedef std::map<std::string, XmlRpcValue> ValueStruct;
+- typedef ValueStruct::iterator iterator;
+-
+-
+- //! Constructors
+- XmlRpcValue() : _type(TypeInvalid) { _value.asBinary = 0; }
+- XmlRpcValue(bool value) : _type(TypeBoolean) { _value.asBool = value; }
+- XmlRpcValue(int value) : _type(TypeInt) { _value.asInt = value; }
+- XmlRpcValue(double value) : _type(TypeDouble) { _value.asDouble = value; }
+-
+- XmlRpcValue(std::string const& value) : _type(TypeString)
+- { _value.asString = new std::string(value); }
+-
+- XmlRpcValue(const char* value) : _type(TypeString)
+- { _value.asString = new std::string(value); }
+-
+- XmlRpcValue(struct tm* value) : _type(TypeDateTime)
+- { _value.asTime = new struct tm(*value); }
+-
+-
+- XmlRpcValue(void* value, int nBytes) : _type(TypeBase64)
+- {
+- _value.asBinary = new BinaryData((char*)value, ((char*)value)+nBytes);
+- }
+-
+- //! Construct from xml, beginning at *offset chars into the string, updates offset
+- XmlRpcValue(std::string const& xml, int* offset) : _type(TypeInvalid)
+- { if ( ! fromXml(xml,offset)) _type = TypeInvalid; }
+-
+- //! Copy
+- XmlRpcValue(XmlRpcValue const& rhs) : _type(TypeInvalid) { *this = rhs; }
+-
+- //! Destructor (make virtual if you want to subclass)
+- /*virtual*/ ~XmlRpcValue() { invalidate(); }
+-
+- //! Erase the current value
+- void clear() { invalidate(); }
+-
+- // Operators
+- XmlRpcValue& operator=(XmlRpcValue const& rhs);
+- XmlRpcValue& operator=(int const& rhs) { return operator=(XmlRpcValue(rhs)); }
+- XmlRpcValue& operator=(double const& rhs) { return operator=(XmlRpcValue(rhs)); }
+- XmlRpcValue& operator=(const char* rhs) { return operator=(XmlRpcValue(std::string(rhs))); }
+-
+- bool operator==(XmlRpcValue const& other) const;
+- bool operator!=(XmlRpcValue const& other) const;
+-
+- operator bool&() { assertTypeOrInvalid(TypeBoolean); return _value.asBool; }
+- operator int&() { assertTypeOrInvalid(TypeInt); return _value.asInt; }
+- operator double&() { assertTypeOrInvalid(TypeDouble); return _value.asDouble; }
+- operator std::string&() { assertTypeOrInvalid(TypeString); return *_value.asString; }
+- operator BinaryData&() { assertTypeOrInvalid(TypeBase64); return *_value.asBinary; }
+- operator struct tm&() { assertTypeOrInvalid(TypeDateTime); return *_value.asTime; }
+-
+- XmlRpcValue const& operator[](int i) const { assertArray(i+1); return _value.asArray->at(i); }
+- XmlRpcValue& operator[](int i) { assertArray(i+1); return _value.asArray->at(i); }
+-
+- XmlRpcValue& operator[](std::string const& k) { assertStruct(); return (*_value.asStruct)[k]; }
+- XmlRpcValue& operator[](const char* k) { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; }
+-
+- iterator begin() {assertStruct(); return (*_value.asStruct).begin(); }
+- iterator end() {assertStruct(); return (*_value.asStruct).end(); }
+-
+- // Accessors
+- //! Return true if the value has been set to something.
+- bool valid() const { return _type != TypeInvalid; }
+-
+- //! Return the type of the value stored. \see Type.
+- Type const &getType() const { return _type; }
+-
+- //! Return the size for string, base64, array, and struct values.
+- int size() const;
+-
+- //! Specify the size for array values. Array values will grow beyond this size if needed.
+- void setSize(int size) { assertArray(size); }
+-
+- //! Check for the existence of a struct member by name.
+- bool hasMember(const std::string& name) const;
+-
+- //! Decode xml. Destroys any existing value.
+- bool fromXml(std::string const& valueXml, int* offset);
+-
+- //! Encode the Value in xml
+- std::string toXml() const;
+-
+- //! Write the value (no xml encoding)
+- std::ostream& write(std::ostream& os) const;
+-
+- // Formatting
+- //! Return the format used to write double values.
+- static std::string const& getDoubleFormat() { return _doubleFormat; }
+-
+- //! Specify the format used to write double values.
+- static void setDoubleFormat(const char* f) { _doubleFormat = f; }
+-
+-
+- protected:
+- // Clean up
+- void invalidate();
+-
+- // Type checking
+- void assertTypeOrInvalid(Type t);
+- void assertArray(int size) const;
+- void assertArray(int size);
+- void assertStruct();
+-
+- // XML decoding
+- bool boolFromXml(std::string const& valueXml, int* offset);
+- bool intFromXml(std::string const& valueXml, int* offset);
+- bool doubleFromXml(std::string const& valueXml, int* offset);
+- bool stringFromXml(std::string const& valueXml, int* offset);
+- bool timeFromXml(std::string const& valueXml, int* offset);
+- bool binaryFromXml(std::string const& valueXml, int* offset);
+- bool arrayFromXml(std::string const& valueXml, int* offset);
+- bool structFromXml(std::string const& valueXml, int* offset);
+-
+- // XML encoding
+- std::string boolToXml() const;
+- std::string intToXml() const;
+- std::string doubleToXml() const;
+- std::string stringToXml() const;
+- std::string timeToXml() const;
+- std::string binaryToXml() const;
+- std::string arrayToXml() const;
+- std::string structToXml() const;
+-
+- // Format strings
+- static std::string _doubleFormat;
+-
+- // Type tag and values
+- Type _type;
+-
+- // At some point I will split off Arrays and Structs into
+- // separate ref-counted objects for more efficient copying.
+- union {
+- bool asBool;
+- int asInt;
+- double asDouble;
+- struct tm* asTime;
+- std::string* asString;
+- BinaryData* asBinary;
+- ValueArray* asArray;
+- ValueStruct* asStruct;
+- } _value;
+-
+- };
+-} // namespace XmlRpc
+-
+-
+-std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v);
+-
+-
+-#endif // _XMLRPCVALUE_H_
+diff --git a/utilities/xmlrpcpp/include/base64.h b/utilities/xmlrpcpp/include/base64.h
+deleted file mode 100644
+index c239403..0000000
+--- a/utilities/xmlrpcpp/include/base64.h
++++ /dev/null
+@@ -1,380 +0,0 @@
+-
+-
+-// base64.hpp
+-// Autor Konstantin Pilipchuk
+-// mailto:lostd at ukr.net
+-//
+-//
+-
+-#if !defined(__BASE64_H_INCLUDED__)
+-#define __BASE64_H_INCLUDED__ 1
+-
+-#ifndef MAKEDEPEND
+-# include <iterator>
+-#endif
+-
+-#include <ios>
+-
+-static
+-int _base64Chars[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+- 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
+- '0','1','2','3','4','5','6','7','8','9',
+- '+','/' };
+-
+-
+-#define _0000_0011 0x03
+-#define _1111_1100 0xFC
+-#define _1111_0000 0xF0
+-#define _0011_0000 0x30
+-#define _0011_1100 0x3C
+-#define _0000_1111 0x0F
+-#define _1100_0000 0xC0
+-#define _0011_1111 0x3F
+-
+-#define _EQUAL_CHAR (-1)
+-#define _UNKNOWN_CHAR (-2)
+-
+-#define _IOS_FAILBIT std::ios_base::failbit
+-#define _IOS_EOFBIT std::ios_base::eofbit
+-#define _IOS_BADBIT std::ios_base::badbit
+-#define _IOS_GOODBIT std::ios_base::goodbit
+-
+-// TEMPLATE CLASS base64_put
+-template<class _E = char, class _Tr = std::char_traits<_E> >
+-class base64
+-{
+-public:
+-
+- typedef unsigned char byte_t;
+- typedef _E char_type;
+- typedef _Tr traits_type;
+-
+- // base64 requires max line length <= 72 characters
+- // you can fill end of line
+- // it may be crlf, crlfsp, noline or other class like it
+-
+-
+- struct crlf
+- {
+- template<class _OI>
+- _OI operator()(_OI _To) const{
+- *_To = _Tr::to_char_type('\r'); ++_To;
+- *_To = _Tr::to_char_type('\n'); ++_To;
+-
+- return (_To);
+- }
+- };
+-
+-
+- struct crlfsp
+- {
+- template<class _OI>
+- _OI operator()(_OI _To) const{
+- *_To = _Tr::to_char_type('\r'); ++_To;
+- *_To = _Tr::to_char_type('\n'); ++_To;
+- *_To = _Tr::to_char_type(' '); ++_To;
+-
+- return (_To);
+- }
+- };
+-
+- struct noline
+- {
+- template<class _OI>
+- _OI operator()(_OI _To) const{
+- return (_To);
+- }
+- };
+-
+- struct three2four
+- {
+- void zero()
+- {
+- _data[0] = 0;
+- _data[1] = 0;
+- _data[2] = 0;
+- }
+-
+- byte_t get_0() const
+- {
+- return _data[0];
+- }
+- byte_t get_1() const
+- {
+- return _data[1];
+- }
+- byte_t get_2() const
+- {
+- return _data[2];
+- }
+-
+- void set_0(byte_t _ch)
+- {
+- _data[0] = _ch;
+- }
+-
+- void set_1(byte_t _ch)
+- {
+- _data[1] = _ch;
+- }
+-
+- void set_2(byte_t _ch)
+- {
+- _data[2] = _ch;
+- }
+-
+- // 0000 0000 1111 1111 2222 2222
+- // xxxx xxxx xxxx xxxx xxxx xxxx
+- // 0000 0011 1111 2222 2233 3333
+-
+- int b64_0() const {return (_data[0] & _1111_1100) >> 2;}
+- int b64_1() const {return ((_data[0] & _0000_0011) << 4) + ((_data[1] & _1111_0000)>>4);}
+- int b64_2() const {return ((_data[1] & _0000_1111) << 2) + ((_data[2] & _1100_0000)>>6);}
+- int b64_3() const {return (_data[2] & _0011_1111);}
+-
+- void b64_0(int _ch) {_data[0] = ((_ch & _0011_1111) << 2) | (_0000_0011 & _data[0]);}
+-
+- void b64_1(int _ch) {
+- _data[0] = ((_ch & _0011_0000) >> 4) | (_1111_1100 & _data[0]);
+- _data[1] = ((_ch & _0000_1111) << 4) | (_0000_1111 & _data[1]); }
+-
+- void b64_2(int _ch) {
+- _data[1] = ((_ch & _0011_1100) >> 2) | (_1111_0000 & _data[1]);
+- _data[2] = ((_ch & _0000_0011) << 6) | (_0011_1111 & _data[2]); }
+-
+- void b64_3(int _ch){
+- _data[2] = (_ch & _0011_1111) | (_1100_0000 & _data[2]);}
+-
+- private:
+- byte_t _data[3];
+-
+- };
+-
+-
+-
+-
+- template<class _II, class _OI, class _State, class _Endline>
+- _II put(_II _First, _II _Last, _OI _To, _State&, _Endline) const
+- {
+- three2four _3to4;
+- int line_octets = 0;
+-
+- while(_First != _Last)
+- {
+- _3to4.zero();
+-
+- _3to4.set_0(*_First);
+- _First++;
+-
+- if(_First == _Last)
+- {
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+- *_To = _Tr::to_char_type('='); ++_To;
+- *_To = _Tr::to_char_type('='); ++_To;
+- goto __end;
+- }
+-
+- _3to4.set_1(*_First);
+- _First++;
+-
+- if(_First == _Last)
+- {
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
+- *_To = _Tr::to_char_type('='); ++_To;
+- goto __end;
+- }
+-
+- _3to4.set_2(*_First);
+- _First++;
+-
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
+- *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_3()]); ++_To;
+-
+- if(line_octets == 17)
+- {
+- //_To = _Endl(_To);
+- *_To = '\n'; ++_To;
+- line_octets = 0;
+- }
+- else
+- ++line_octets;
+- }
+-
+- __end: ;
+-
+- return (_First);
+-
+- }
+-
+-
+- template<class _II, class _OI, class _State>
+- _II get(_II _First, _II _Last, _OI _To, _State& _St) const
+- {
+- three2four _3to4;
+- int _Char;
+-
+- while(_First != _Last)
+- {
+-
+- // Take octet
+- _3to4.zero();
+-
+- // -- 0 --
+- // Search next valid char...
+- while((_Char = _getCharType(*_First)) < 0 && _Char == _UNKNOWN_CHAR)
+- {
+- if(++_First == _Last)
+- {
+- _St |= _IOS_FAILBIT|_IOS_EOFBIT; return _First; // unexpected EOF
+- }
+- }
+-
+- if(_Char == _EQUAL_CHAR){
+- // Error! First character in octet can't be '='
+- _St |= _IOS_FAILBIT;
+- return _First;
+- }
+- else
+- _3to4.b64_0(_Char);
+-
+-
+- // -- 1 --
+- // Search next valid char...
+- while(++_First != _Last)
+- if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+- break;
+-
+- if(_First == _Last) {
+- _St |= _IOS_FAILBIT|_IOS_EOFBIT; // unexpected EOF
+- return _First;
+- }
+-
+- if(_Char == _EQUAL_CHAR){
+- // Error! Second character in octet can't be '='
+- _St |= _IOS_FAILBIT;
+- return _First;
+- }
+- else
+- _3to4.b64_1(_Char);
+-
+-
+- // -- 2 --
+- // Search next valid char...
+- while(++_First != _Last)
+- if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+- break;
+-
+- if(_First == _Last) {
+- // Error! Unexpected EOF. Must be '=' or base64 character
+- _St |= _IOS_FAILBIT|_IOS_EOFBIT;
+- return _First;
+- }
+-
+- if(_Char == _EQUAL_CHAR){
+- // OK!
+- _3to4.b64_2(0);
+- _3to4.b64_3(0);
+-
+- // chek for EOF
+- if(++_First == _Last)
+- {
+- // Error! Unexpected EOF. Must be '='. Ignore it.
+- //_St |= _IOS_BADBIT|_IOS_EOFBIT;
+- _St |= _IOS_EOFBIT;
+- }
+- else
+- if(_getCharType(*_First) != _EQUAL_CHAR)
+- {
+- // Error! Must be '='. Ignore it.
+- //_St |= _IOS_BADBIT;
+- }
+- else
+- ++_First; // Skip '='
+-
+- // write 1 byte to output
+- *_To = (byte_t) _3to4.get_0();
+- return _First;
+- }
+- else
+- _3to4.b64_2(_Char);
+-
+-
+- // -- 3 --
+- // Search next valid char...
+- while(++_First != _Last)
+- if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+- break;
+-
+- if(_First == _Last) {
+- // Unexpected EOF. It's error. But ignore it.
+- //_St |= _IOS_FAILBIT|_IOS_EOFBIT;
+- _St |= _IOS_EOFBIT;
+-
+- return _First;
+- }
+-
+- if(_Char == _EQUAL_CHAR)
+- {
+- // OK!
+- _3to4.b64_3(0);
+-
+- // write to output 2 bytes
+- *_To = (byte_t) _3to4.get_0();
+- *_To = (byte_t) _3to4.get_1();
+-
+- ++_First; // set position to next character
+-
+- return _First;
+- }
+- else
+- _3to4.b64_3(_Char);
+-
+-
+- // write to output 3 bytes
+- *_To = (byte_t) _3to4.get_0();
+- *_To = (byte_t) _3to4.get_1();
+- *_To = (byte_t) _3to4.get_2();
+-
+- ++_First;
+-
+-
+- } // while(_First != _Last)
+-
+- return (_First);
+- }
+-
+-protected:
+-
+- int _getCharType(int _Ch) const
+- {
+- if(_base64Chars[62] == _Ch)
+- return 62;
+-
+- if(_base64Chars[63] == _Ch)
+- return 63;
+-
+- if((_base64Chars[0] <= _Ch) && (_base64Chars[25] >= _Ch))
+- return _Ch - _base64Chars[0];
+-
+- if((_base64Chars[26] <= _Ch) && (_base64Chars[51] >= _Ch))
+- return _Ch - _base64Chars[26] + 26;
+-
+- if((_base64Chars[52] <= _Ch) && (_base64Chars[61] >= _Ch))
+- return _Ch - _base64Chars[52] + 52;
+-
+- if(_Ch == _Tr::to_int_type('='))
+- return _EQUAL_CHAR;
+-
+- return _UNKNOWN_CHAR;
+- }
+-
+-
+-};
+-
+-
+-#endif
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpc.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpc.h
+new file mode 100644
+index 0000000..9fd626a
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpc.h
+@@ -0,0 +1,102 @@
++// this file modified by Morgan Quigley on 22 April 2008 to add
++// a std::exception-derived class
++#ifndef _XMLRPC_H_
++#define _XMLRPC_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Lesser General Public
++// License as published by the Free Software Foundation; either
++// version 2.1 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Lesser General Public License for more details.
++//
++// You should have received a copy of the GNU Lesser General Public
++// License along with this library; if not, write to the Free Software
++// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++//
++
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcClient.h"
++#include "xmlrpcpp/XmlRpcException.h"
++#include "xmlrpcpp/XmlRpcServer.h"
++#include "xmlrpcpp/XmlRpcServerMethod.h"
++#include "xmlrpcpp/XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
++
++#include <stdexcept>
++
++namespace XmlRpc {
++
++
++ //! An interface allowing custom handling of error message reporting.
++ class XmlRpcErrorHandler {
++ public:
++ virtual ~XmlRpcErrorHandler() { }
++
++ //! Returns a pointer to the currently installed error handling object.
++ static XmlRpcErrorHandler* getErrorHandler()
++ { return _errorHandler; }
++
++ //! Specifies the error handler.
++ static void setErrorHandler(XmlRpcErrorHandler* eh)
++ { _errorHandler = eh; }
++
++ //! Report an error. Custom error handlers should define this method.
++ virtual void error(const char* msg) = 0;
++
++ protected:
++ static XmlRpcErrorHandler* _errorHandler;
++ };
++
++ //! An interface allowing custom handling of informational message reporting.
++ class XmlRpcLogHandler {
++ public:
++ virtual ~XmlRpcLogHandler() { }
++
++ //! Returns a pointer to the currently installed message reporting object.
++ static XmlRpcLogHandler* getLogHandler()
++ { return _logHandler; }
++
++ //! Specifies the message handler.
++ static void setLogHandler(XmlRpcLogHandler* lh)
++ { _logHandler = lh; }
++
++ //! Returns the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
++ static int getVerbosity()
++ { return _verbosity; }
++
++ //! Specify the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
++ static void setVerbosity(int v)
++ { _verbosity = v; }
++
++ //! Output a message. Custom error handlers should define this method.
++ virtual void log(int level, const char* msg) = 0;
++
++ protected:
++ static XmlRpcLogHandler* _logHandler;
++ static int _verbosity;
++ };
++
++ //! Returns log message verbosity. This is short for XmlRpcLogHandler::getVerbosity()
++ int getVerbosity();
++ //! Sets log message verbosity. This is short for XmlRpcLogHandler::setVerbosity(level)
++ void setVerbosity(int level);
++
++
++ //! Version identifier
++ extern const char XMLRPC_VERSION[];
++
++} // namespace XmlRpc
++
++#endif // _XMLRPC_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcClient.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcClient.h
+new file mode 100644
+index 0000000..2154b39
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcClient.h
+@@ -0,0 +1,133 @@
++
++#ifndef _XMLRPCCLIENT_H_
++#define _XMLRPCCLIENT_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcDispatch.h"
++#include "xmlrpcpp/XmlRpcSource.h"
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++namespace XmlRpc {
++
++ // Arguments and results are represented by XmlRpcValues
++ class XmlRpcValue;
++
++ //! A class to send XML RPC requests to a server and return the results.
++ class XMLRPCPP_DECL XmlRpcClient : public XmlRpcSource {
++ public:
++ // Static data
++ static const char REQUEST_BEGIN[];
++ static const char REQUEST_END_METHODNAME[];
++ static const char PARAMS_TAG[];
++ static const char PARAMS_ETAG[];
++ static const char PARAM_TAG[];
++ static const char PARAM_ETAG[];
++ static const char REQUEST_END[];
++ // Result tags
++ static const char METHODRESPONSE_TAG[];
++ static const char FAULT_TAG[];
++
++ //! Construct a client to connect to the server at the specified host:port address
++ //! @param host The name of the remote machine hosting the server
++ //! @param port The port on the remote machine where the server is listening
++ //! @param uri An optional string to be sent as the URI in the HTTP GET header
++ XmlRpcClient(const char* host, int port, const char* uri=0);
++
++ //! Destructor
++ virtual ~XmlRpcClient();
++
++ //! Execute the named procedure on the remote server.
++ //! @param method The name of the remote procedure to execute
++ //! @param params An array of the arguments for the method
++ //! @param result The result value to be returned to the client
++ //! @return true if the request was sent and a result received
++ //! (although the result might be a fault).
++ //!
++ //! Currently this is a synchronous (blocking) implementation (execute
++ //! does not return until it receives a response or an error). Use isFault()
++ //! to determine whether the result is a fault response.
++ bool execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result);
++
++ bool executeNonBlock(const char* method, XmlRpcValue const& params);
++ bool executeCheckDone(XmlRpcValue& result);
++
++ //! Returns true if the result of the last execute() was a fault response.
++ bool isFault() const { return _isFault; }
++
++
++ // XmlRpcSource interface implementation
++ //! Close the connection
++ virtual void close();
++
++ //! Handle server responses. Called by the event dispatcher during execute.
++ //! @param eventType The type of event that occurred.
++ //! @see XmlRpcDispatch::EventType
++ virtual unsigned handleEvent(unsigned eventType);
++
++ protected:
++ // Execution processing helpers
++ virtual bool doConnect();
++ virtual bool setupConnection();
++
++ virtual bool generateRequest(const char* method, XmlRpcValue const& params);
++ virtual std::string generateHeader(std::string const& body);
++ virtual bool writeRequest();
++ virtual bool readHeader();
++ virtual bool readResponse();
++ virtual bool parseResponse(XmlRpcValue& result);
++
++ // Possible IO states for the connection
++ enum ClientConnectionState { NO_CONNECTION, CONNECTING, WRITE_REQUEST, READ_HEADER, READ_RESPONSE, IDLE };
++ ClientConnectionState _connectionState;
++
++ // Server location
++ std::string _host;
++ std::string _uri;
++ int _port;
++ public:
++ const std::string &getHost() { return _host; }
++ const std::string &getUri() { return _uri; }
++ int getPort() const { return _port; }
++
++ // The xml-encoded request, http header of response, and response xml
++ std::string _request;
++ std::string _header;
++ std::string _response;
++
++ // Number of times the client has attempted to send the request
++ int _sendAttempts;
++
++ // Number of bytes of the request that have been written to the socket so far
++ int _bytesWritten;
++
++ // True if we are currently executing a request. If you want to multithread,
++ // each thread should have its own client.
++ bool _executing;
++
++ // True if the server closed the connection
++ bool _eof;
++
++ // True if a fault response was returned by the server
++ bool _isFault;
++
++ // Number of bytes expected in the response body (parsed from response header)
++ int _contentLength;
++
++ // Event dispatcher
++ XmlRpcDispatch _disp;
++
++ }; // class XmlRpcClient
++
++} // namespace XmlRpc
++
++#endif // _XMLRPCCLIENT_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDecl.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDecl.h
+new file mode 100644
+index 0000000..8af174a
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDecl.h
+@@ -0,0 +1,55 @@
++/*********************************************************************
++*
++* Software License Agreement (BSD License)
++*
++* Copyright (c) 2009, Willow Garage, Inc.
++* All rights reserved.
++*
++* Redistribution and use in source and binary forms, with or without
++* modification, are permitted provided that the following conditions
++* are met:
++*
++* * Redistributions of source code must retain the above copyright
++* notice, this list of conditions and the following disclaimer.
++* * Redistributions in binary form must reproduce the above
++* copyright notice, this list of conditions and the following
++* disclaimer in the documentation and/or other materials provided
++* with the distribution.
++* * Neither the name of the Willow Garage nor the names of its
++* contributors may be used to endorse or promote products derived
++* from this software without specific prior written permission.
++*
++* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
++* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
++* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
++* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
++* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++* POSSIBILITY OF SUCH DAMAGE.
++*
++*********************************************************************/
++/*
++ * Cross platform macros.
++ *
++ */
++#ifndef XMLRPCPP_DECL_H_INCLUDED
++#define XMLRPCPP_DECL_H_INCLUDED
++
++#include <ros/macros.h>
++
++#ifdef ROS_BUILD_SHARED_LIBS // ros is being built around shared libraries
++ #ifdef xmlrpcpp_EXPORTS // we are building a shared lib/dll
++ #define XMLRPCPP_DECL ROS_HELPER_EXPORT
++ #else // we are using shared lib/dll
++ #define XMLRPCPP_DECL ROS_HELPER_IMPORT
++ #endif
++#else // ros is being built around static libraries
++ #define XMLRPCPP_DECL
++#endif
++
++#endif /* XMLRPCPP_DECL_H_INCLUDED */
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDispatch.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDispatch.h
+new file mode 100644
+index 0000000..5e90822
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcDispatch.h
+@@ -0,0 +1,89 @@
++
++#ifndef _XMLRPCDISPATCH_H_
++#define _XMLRPCDISPATCH_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++#ifndef MAKEDEPEND
++# include <list>
++#endif
++
++namespace XmlRpc {
++
++ // An RPC source represents a file descriptor to monitor
++ class XmlRpcSource;
++
++ //! An object which monitors file descriptors for events and performs
++ //! callbacks when interesting events happen.
++ class XMLRPCPP_DECL XmlRpcDispatch {
++ public:
++ //! Constructor
++ XmlRpcDispatch();
++ ~XmlRpcDispatch();
++
++ //! Values indicating the type of events a source is interested in
++ enum EventType {
++ ReadableEvent = 1, //!< data available to read
++ WritableEvent = 2, //!< connected/data can be written without blocking
++ Exception = 4 //!< uh oh
++ };
++
++ //! Monitor this source for the event types specified by the event mask
++ //! and call its event handler when any of the events occur.
++ //! @param source The source to monitor
++ //! @param eventMask Which event types to watch for. \see EventType
++ void addSource(XmlRpcSource* source, unsigned eventMask);
++
++ //! Stop monitoring this source.
++ //! @param source The source to stop monitoring
++ void removeSource(XmlRpcSource* source);
++
++ //! Modify the types of events to watch for on this source
++ void setSourceEvents(XmlRpcSource* source, unsigned eventMask);
++
++
++ //! Watch current set of sources and process events for the specified
++ //! duration (in ms, -1 implies wait forever, or until exit is called)
++ void work(double msTime);
++
++ //! Exit from work routine
++ void exit();
++
++ //! Clear all sources from the monitored sources list. Sources are closed.
++ void clear();
++
++ // helper
++ double getTime();
++
++ // A source to monitor and what to monitor it for
++ struct MonitoredSource {
++ MonitoredSource(XmlRpcSource* src, unsigned mask) : _src(src), _mask(mask) {}
++ XmlRpcSource* getSource() const { return _src; }
++ unsigned& getMask() { return _mask; }
++ XmlRpcSource* _src;
++ unsigned _mask;
++ };
++
++ // A list of sources to monitor
++ typedef std::list< MonitoredSource > SourceList;
++
++ // Sources being monitored
++ SourceList _sources;
++ protected:
++
++ // When work should stop (-1 implies wait forever, or until exit is called)
++ double _endTime;
++
++ bool _doClear;
++ bool _inWork;
++
++ };
++} // namespace XmlRpc
++
++#endif // _XMLRPCDISPATCH_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcException.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcException.h
+new file mode 100644
+index 0000000..4e8a2a6
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcException.h
+@@ -0,0 +1,44 @@
++
++#ifndef _XMLRPCEXCEPTION_H_
++#define _XMLRPCEXCEPTION_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++
++namespace XmlRpc {
++
++ //! A class representing an error.
++ //! If server methods throw this exception, a fault response is returned
++ //! to the client.
++ class XMLRPCPP_DECL XmlRpcException {
++ public:
++ //! Constructor
++ //! @param message A descriptive error message
++ //! @param code An integer error code
++ XmlRpcException(const std::string& message, int code=-1) :
++ _message(message), _code(code) {}
++
++ //! Return the error message.
++ const std::string& getMessage() const { return _message; }
++
++ //! Return the error code.
++ int getCode() const { return _code; }
++
++ private:
++ std::string _message;
++ int _code;
++ };
++
++}
++
++#endif // _XMLRPCEXCEPTION_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServer.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServer.h
+new file mode 100644
+index 0000000..ac16dae
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServer.h
+@@ -0,0 +1,114 @@
++// this file modified by Morgan Quigley on 22 Apr 2008.
++// added features: server can be opened on port 0 and you can read back
++// what port the OS gave you
++
++#ifndef _XMLRPCSERVER_H_
++#define _XMLRPCSERVER_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <map>
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcDispatch.h"
++#include "xmlrpcpp/XmlRpcSource.h"
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++namespace XmlRpc {
++
++
++ // An abstract class supporting XML RPC methods
++ class XmlRpcServerMethod;
++
++ // Class representing connections to specific clients
++ class XmlRpcServerConnection;
++
++ // Class representing argument and result values
++ class XmlRpcValue;
++
++
++ //! A class to handle XML RPC requests
++ class XMLRPCPP_DECL XmlRpcServer : public XmlRpcSource {
++ public:
++ //! Create a server object.
++ XmlRpcServer();
++ //! Destructor.
++ virtual ~XmlRpcServer();
++
++ //! Specify whether introspection is enabled or not. Default is not enabled.
++ void enableIntrospection(bool enabled=true);
++
++ //! Add a command to the RPC server
++ void addMethod(XmlRpcServerMethod* method);
++
++ //! Remove a command from the RPC server
++ void removeMethod(XmlRpcServerMethod* method);
++
++ //! Remove a command from the RPC server by name
++ void removeMethod(const std::string& methodName);
++
++ //! Look up a method by name
++ XmlRpcServerMethod* findMethod(const std::string& name) const;
++
++ //! Create a socket, bind to the specified port, and
++ //! set it in listen mode to make it available for clients.
++ bool bindAndListen(int port, int backlog = 5);
++
++ //! Process client requests for the specified time
++ void work(double msTime);
++
++ //! Temporarily stop processing client requests and exit the work() method.
++ void exit();
++
++ //! Close all connections with clients and the socket file descriptor
++ void shutdown();
++
++ //! Introspection support
++ void listMethods(XmlRpcValue& result);
++
++ // XmlRpcSource interface implementation
++
++ //! Handle client connection requests
++ virtual unsigned handleEvent(unsigned eventType);
++
++ //! Remove a connection from the dispatcher
++ virtual void removeConnection(XmlRpcServerConnection*);
++
++ inline int get_port() { return _port; }
++
++ XmlRpcDispatch *get_dispatch() { return &_disp; }
++
++ protected:
++
++ //! Accept a client connection request
++ virtual void acceptConnection();
++
++ //! Create a new connection object for processing requests from a specific client.
++ virtual XmlRpcServerConnection* createConnection(int socket);
++
++ // Whether the introspection API is supported by this server
++ bool _introspectionEnabled;
++
++ // Event dispatcher
++ XmlRpcDispatch _disp;
++
++ // Collection of methods. This could be a set keyed on method name if we wanted...
++ typedef std::map< std::string, XmlRpcServerMethod* > MethodMap;
++ MethodMap _methods;
++
++ // system methods
++ XmlRpcServerMethod* _listMethods;
++ XmlRpcServerMethod* _methodHelp;
++
++ int _port;
++
++ };
++} // namespace XmlRpc
++
++#endif //_XMLRPCSERVER_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerConnection.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerConnection.h
+new file mode 100644
+index 0000000..ed4d092
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerConnection.h
+@@ -0,0 +1,103 @@
++#ifndef _XMLRPCSERVERCONNECTION_H_
++#define _XMLRPCSERVERCONNECTION_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcSource.h"
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++namespace XmlRpc {
++
++
++ // The server waits for client connections and provides methods
++ class XmlRpcServer;
++ class XmlRpcServerMethod;
++
++ //! A class to handle XML RPC requests from a particular client
++ class XMLRPCPP_DECL XmlRpcServerConnection : public XmlRpcSource {
++ public:
++ // Static data
++ static const char METHODNAME_TAG[];
++ static const char PARAMS_TAG[];
++ static const char PARAMS_ETAG[];
++ static const char PARAM_TAG[];
++ static const char PARAM_ETAG[];
++
++ static const std::string SYSTEM_MULTICALL;
++ static const std::string METHODNAME;
++ static const std::string PARAMS;
++
++ static const std::string FAULTCODE;
++ static const std::string FAULTSTRING;
++
++ //! Constructor
++ XmlRpcServerConnection(int fd, XmlRpcServer* server, bool deleteOnClose = false);
++ //! Destructor
++ virtual ~XmlRpcServerConnection();
++
++ // XmlRpcSource interface implementation
++ //! Handle IO on the client connection socket.
++ //! @param eventType Type of IO event that occurred. @see XmlRpcDispatch::EventType.
++ virtual unsigned handleEvent(unsigned eventType);
++
++ protected:
++
++ bool readHeader();
++ bool readRequest();
++ bool writeResponse();
++
++ // Parses the request, runs the method, generates the response xml.
++ virtual void executeRequest();
++
++ // Parse the methodName and parameters from the request.
++ std::string parseRequest(XmlRpcValue& params);
++
++ // Execute a named method with the specified params.
++ bool executeMethod(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
++
++ // Execute multiple calls and return the results in an array.
++ bool executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
++
++ // Construct a response from the result XML.
++ void generateResponse(std::string const& resultXml);
++ void generateFaultResponse(std::string const& msg, int errorCode = -1);
++ std::string generateHeader(std::string const& body);
++
++
++ // The XmlRpc server that accepted this connection
++ XmlRpcServer* _server;
++
++ // Possible IO states for the connection
++ enum ServerConnectionState { READ_HEADER, READ_REQUEST, WRITE_RESPONSE };
++ ServerConnectionState _connectionState;
++
++ // Request headers
++ std::string _header;
++
++ // Number of bytes expected in the request body (parsed from header)
++ int _contentLength;
++
++ // Request body
++ std::string _request;
++
++ // Response
++ std::string _response;
++
++ // Number of bytes of the response written so far
++ int _bytesWritten;
++
++ // Whether to keep the current client connection open for further requests
++ bool _keepAlive;
++ };
++} // namespace XmlRpc
++
++#endif // _XMLRPCSERVERCONNECTION_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerMethod.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerMethod.h
+new file mode 100644
+index 0000000..90dddcd
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcServerMethod.h
+@@ -0,0 +1,49 @@
++
++#ifndef _XMLRPCSERVERMETHOD_H_
++#define _XMLRPCSERVERMETHOD_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++namespace XmlRpc {
++
++ // Representation of a parameter or result value
++ class XmlRpcValue;
++
++ // The XmlRpcServer processes client requests to call RPCs
++ class XmlRpcServer;
++
++ //! Abstract class representing a single RPC method
++ class XMLRPCPP_DECL XmlRpcServerMethod {
++ public:
++ //! Constructor
++ XmlRpcServerMethod(std::string const& name, XmlRpcServer* server = 0);
++ //! Destructor
++ virtual ~XmlRpcServerMethod();
++
++ //! Returns the name of the method
++ std::string& name() { return _name; }
++
++ //! Execute the method. Subclasses must provide a definition for this method.
++ virtual void execute(XmlRpcValue& params, XmlRpcValue& result) = 0;
++
++ //! Returns a help string for the method.
++ //! Subclasses should define this method if introspection is being used.
++ virtual std::string help() { return std::string(); }
++
++ protected:
++ std::string _name;
++ XmlRpcServer* _server;
++ };
++} // namespace XmlRpc
++
++#endif // _XMLRPCSERVERMETHOD_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSocket.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSocket.h
+new file mode 100644
+index 0000000..bc9a530
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSocket.h
+@@ -0,0 +1,80 @@
++// this file modified by Morgan Quigley on 22 Apr 2008.
++// added features: server can be opened on port 0 and you can read back
++// what port the OS gave you
++
++#ifndef _XMLRPCSOCKET_H_
++#define _XMLRPCSOCKET_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++namespace XmlRpc {
++
++ //! A platform-independent socket API.
++ class XMLRPCPP_DECL XmlRpcSocket {
++ public:
++
++ static bool s_use_ipv6_;
++
++ //! Creates a stream (TCP) socket. Returns -1 on failure.
++ static int socket();
++
++ //! Closes a socket.
++ static void close(int socket);
++
++
++ //! Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure.
++ static bool setNonBlocking(int socket);
++
++ //! Read text from the specified socket. Returns false on error.
++ static bool nbRead(int socket, std::string& s, bool *eof);
++
++ //! Write text to the specified socket. Returns false on error.
++ static bool nbWrite(int socket, std::string& s, int *bytesSoFar);
++
++
++ // The next four methods are appropriate for servers.
++
++ //! Allow the port the specified socket is bound to to be re-bound immediately so
++ //! server re-starts are not delayed. Returns false on failure.
++ static bool setReuseAddr(int socket);
++
++ //! Bind to a specified port
++ static bool bind(int socket, int port);
++
++ static int get_port(int socket);
++
++ //! Set socket in listen mode
++ static bool listen(int socket, int backlog);
++
++ //! Accept a client connection request
++ static int accept(int socket);
++
++
++
++ //! Connect a socket to a server (from a client)
++ static bool connect(int socket, std::string& host, int port);
++
++
++ //! Returns last errno
++ static int getError();
++
++ //! Returns message corresponding to last error
++ static std::string getErrorMsg();
++
++ //! Returns message corresponding to error
++ static std::string getErrorMsg(int error);
++ };
++
++} // namespace XmlRpc
++
++#endif
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSource.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSource.h
+new file mode 100644
+index 0000000..217f416
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcSource.h
+@@ -0,0 +1,57 @@
++
++#ifndef _XMLRPCSOURCE_H_
++#define _XMLRPCSOURCE_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++namespace XmlRpc {
++
++ //! An RPC source represents a file descriptor to monitor
++ class XMLRPCPP_DECL XmlRpcSource {
++ public:
++ //! Constructor
++ //! @param fd The socket file descriptor to monitor.
++ //! @param deleteOnClose If true, the object deletes itself when close is called.
++ XmlRpcSource(int fd = -1, bool deleteOnClose = false);
++
++ //! Destructor
++ virtual ~XmlRpcSource();
++
++ //! Return the file descriptor being monitored.
++ int getfd() const { return _fd; }
++ //! Specify the file descriptor to monitor.
++ void setfd(int fd) { _fd = fd; }
++
++ //! Return whether the file descriptor should be kept open if it is no longer monitored.
++ bool getKeepOpen() const { return _keepOpen; }
++ //! Specify whether the file descriptor should be kept open if it is no longer monitored.
++ void setKeepOpen(bool b=true) { _keepOpen = b; }
++
++ //! Close the owned fd. If deleteOnClose was specified at construction, the object is deleted.
++ virtual void close();
++
++ //! Return true to continue monitoring this source
++ virtual unsigned handleEvent(unsigned eventType) = 0;
++
++ private:
++
++ // Socket. This should really be a SOCKET (an alias for unsigned int*) on windows...
++ int _fd;
++
++ // In the server, a new source (XmlRpcServerConnection) is created
++ // for each connected client. When each connection is closed, the
++ // corresponding source object is deleted.
++ bool _deleteOnClose;
++
++ // In the client, keep connections open if you intend to make multiple calls.
++ bool _keepOpen;
++ };
++} // namespace XmlRpc
++
++#endif //_XMLRPCSOURCE_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcUtil.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcUtil.h
+new file mode 100644
+index 0000000..acde160
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcUtil.h
+@@ -0,0 +1,63 @@
++#ifndef _XMLRPCUTIL_H_
++#define _XMLRPCUTIL_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#ifndef MAKEDEPEND
++# include <string>
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++#if defined(_MSC_VER)
++# define snprintf _snprintf_s
++# define vsnprintf _vsnprintf_s
++# define strcasecmp _stricmp
++# define strncasecmp _strnicmp
++#elif defined(__BORLANDC__)
++# define strcasecmp stricmp
++# define strncasecmp strnicmp
++#endif
++
++namespace XmlRpc {
++
++ //! Utilities for XML parsing, encoding, and decoding and message handlers.
++ class XMLRPCPP_DECL XmlRpcUtil {
++ public:
++ // hokey xml parsing
++ //! Returns contents between <tag> and </tag>, updates offset to char after </tag>
++ static std::string parseTag(const char* tag, std::string const& xml, int* offset);
++
++ //! Returns true if the tag is found and updates offset to the char after the tag
++ static bool findTag(const char* tag, std::string const& xml, int* offset);
++
++ //! Returns the next tag and updates offset to the char after the tag, or empty string
++ //! if the next non-whitespace character is not '<'
++ static std::string getNextTag(std::string const& xml, int* offset);
++
++ //! Returns true if the tag is found at the specified offset (modulo any whitespace)
++ //! and updates offset to the char after the tag
++ static bool nextTagIs(const char* tag, std::string const& xml, int* offset);
++
++
++ //! Convert raw text to encoded xml.
++ static std::string xmlEncode(const std::string& raw);
++
++ //! Convert encoded xml to raw text
++ static std::string xmlDecode(const std::string& encoded);
++
++
++ //! Dump messages somewhere
++ static void log(int level, const char* fmt, ...);
++
++ //! Dump error messages somewhere
++ static void error(const char* fmt, ...);
++
++ };
++} // namespace XmlRpc
++
++#endif // _XMLRPCUTIL_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcValue.h b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcValue.h
+new file mode 100644
+index 0000000..0d72c59
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/XmlRpcValue.h
+@@ -0,0 +1,195 @@
++
++#ifndef _XMLRPCVALUE_H_
++#define _XMLRPCVALUE_H_
++//
++// XmlRpc++ Copyright (c) 2002-2003 by Chris Morley
++//
++#if defined(_MSC_VER)
++# pragma warning(disable:4786) // identifier was truncated in debug info
++#endif
++
++#include "xmlrpcpp/XmlRpcDecl.h"
++
++#ifndef MAKEDEPEND
++# include <map>
++# include <string>
++# include <vector>
++# include <time.h>
++#endif
++
++namespace XmlRpc {
++
++ //! RPC method arguments and results are represented by Values
++ // should probably refcount them...
++ class XMLRPCPP_DECL XmlRpcValue {
++ public:
++
++
++ enum Type {
++ TypeInvalid,
++ TypeBoolean,
++ TypeInt,
++ TypeDouble,
++ TypeString,
++ TypeDateTime,
++ TypeBase64,
++ TypeArray,
++ TypeStruct
++ };
++
++ // Non-primitive types
++ typedef std::vector<char> BinaryData;
++ typedef std::vector<XmlRpcValue> ValueArray;
++ typedef std::map<std::string, XmlRpcValue> ValueStruct;
++ typedef ValueStruct::iterator iterator;
++
++
++ //! Constructors
++ XmlRpcValue() : _type(TypeInvalid) { _value.asBinary = 0; }
++ XmlRpcValue(bool value) : _type(TypeBoolean) { _value.asBool = value; }
++ XmlRpcValue(int value) : _type(TypeInt) { _value.asInt = value; }
++ XmlRpcValue(double value) : _type(TypeDouble) { _value.asDouble = value; }
++
++ XmlRpcValue(std::string const& value) : _type(TypeString)
++ { _value.asString = new std::string(value); }
++
++ XmlRpcValue(const char* value) : _type(TypeString)
++ { _value.asString = new std::string(value); }
++
++ XmlRpcValue(struct tm* value) : _type(TypeDateTime)
++ { _value.asTime = new struct tm(*value); }
++
++
++ XmlRpcValue(void* value, int nBytes) : _type(TypeBase64)
++ {
++ _value.asBinary = new BinaryData((char*)value, ((char*)value)+nBytes);
++ }
++
++ //! Construct from xml, beginning at *offset chars into the string, updates offset
++ XmlRpcValue(std::string const& xml, int* offset) : _type(TypeInvalid)
++ { if ( ! fromXml(xml,offset)) _type = TypeInvalid; }
++
++ //! Copy
++ XmlRpcValue(XmlRpcValue const& rhs) : _type(TypeInvalid) { *this = rhs; }
++
++ //! Destructor (make virtual if you want to subclass)
++ /*virtual*/ ~XmlRpcValue() { invalidate(); }
++
++ //! Erase the current value
++ void clear() { invalidate(); }
++
++ // Operators
++ XmlRpcValue& operator=(XmlRpcValue const& rhs);
++ XmlRpcValue& operator=(int const& rhs) { return operator=(XmlRpcValue(rhs)); }
++ XmlRpcValue& operator=(double const& rhs) { return operator=(XmlRpcValue(rhs)); }
++ XmlRpcValue& operator=(const char* rhs) { return operator=(XmlRpcValue(std::string(rhs))); }
++
++ bool operator==(XmlRpcValue const& other) const;
++ bool operator!=(XmlRpcValue const& other) const;
++
++ operator bool&() { assertTypeOrInvalid(TypeBoolean); return _value.asBool; }
++ operator int&() { assertTypeOrInvalid(TypeInt); return _value.asInt; }
++ operator double&() { assertTypeOrInvalid(TypeDouble); return _value.asDouble; }
++ operator std::string&() { assertTypeOrInvalid(TypeString); return *_value.asString; }
++ operator BinaryData&() { assertTypeOrInvalid(TypeBase64); return *_value.asBinary; }
++ operator struct tm&() { assertTypeOrInvalid(TypeDateTime); return *_value.asTime; }
++
++ XmlRpcValue const& operator[](int i) const { assertArray(i+1); return _value.asArray->at(i); }
++ XmlRpcValue& operator[](int i) { assertArray(i+1); return _value.asArray->at(i); }
++
++ XmlRpcValue& operator[](std::string const& k) { assertStruct(); return (*_value.asStruct)[k]; }
++ XmlRpcValue& operator[](const char* k) { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; }
++
++ iterator begin() {assertStruct(); return (*_value.asStruct).begin(); }
++ iterator end() {assertStruct(); return (*_value.asStruct).end(); }
++
++ // Accessors
++ //! Return true if the value has been set to something.
++ bool valid() const { return _type != TypeInvalid; }
++
++ //! Return the type of the value stored. \see Type.
++ Type const &getType() const { return _type; }
++
++ //! Return the size for string, base64, array, and struct values.
++ int size() const;
++
++ //! Specify the size for array values. Array values will grow beyond this size if needed.
++ void setSize(int size) { assertArray(size); }
++
++ //! Check for the existence of a struct member by name.
++ bool hasMember(const std::string& name) const;
++
++ //! Decode xml. Destroys any existing value.
++ bool fromXml(std::string const& valueXml, int* offset);
++
++ //! Encode the Value in xml
++ std::string toXml() const;
++
++ //! Write the value (no xml encoding)
++ std::ostream& write(std::ostream& os) const;
++
++ // Formatting
++ //! Return the format used to write double values.
++ static std::string const& getDoubleFormat() { return _doubleFormat; }
++
++ //! Specify the format used to write double values.
++ static void setDoubleFormat(const char* f) { _doubleFormat = f; }
++
++
++ protected:
++ // Clean up
++ void invalidate();
++
++ // Type checking
++ void assertTypeOrInvalid(Type t);
++ void assertArray(int size) const;
++ void assertArray(int size);
++ void assertStruct();
++
++ // XML decoding
++ bool boolFromXml(std::string const& valueXml, int* offset);
++ bool intFromXml(std::string const& valueXml, int* offset);
++ bool doubleFromXml(std::string const& valueXml, int* offset);
++ bool stringFromXml(std::string const& valueXml, int* offset);
++ bool timeFromXml(std::string const& valueXml, int* offset);
++ bool binaryFromXml(std::string const& valueXml, int* offset);
++ bool arrayFromXml(std::string const& valueXml, int* offset);
++ bool structFromXml(std::string const& valueXml, int* offset);
++
++ // XML encoding
++ std::string boolToXml() const;
++ std::string intToXml() const;
++ std::string doubleToXml() const;
++ std::string stringToXml() const;
++ std::string timeToXml() const;
++ std::string binaryToXml() const;
++ std::string arrayToXml() const;
++ std::string structToXml() const;
++
++ // Format strings
++ static std::string _doubleFormat;
++
++ // Type tag and values
++ Type _type;
++
++ // At some point I will split off Arrays and Structs into
++ // separate ref-counted objects for more efficient copying.
++ union {
++ bool asBool;
++ int asInt;
++ double asDouble;
++ struct tm* asTime;
++ std::string* asString;
++ BinaryData* asBinary;
++ ValueArray* asArray;
++ ValueStruct* asStruct;
++ } _value;
++
++ };
++} // namespace XmlRpc
++
++
++std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v);
++
++
++#endif // _XMLRPCVALUE_H_
+diff --git a/utilities/xmlrpcpp/include/xmlrpcpp/base64.h b/utilities/xmlrpcpp/include/xmlrpcpp/base64.h
+new file mode 100644
+index 0000000..c239403
+--- /dev/null
++++ b/utilities/xmlrpcpp/include/xmlrpcpp/base64.h
+@@ -0,0 +1,380 @@
++
++
++// base64.hpp
++// Autor Konstantin Pilipchuk
++// mailto:lostd at ukr.net
++//
++//
++
++#if !defined(__BASE64_H_INCLUDED__)
++#define __BASE64_H_INCLUDED__ 1
++
++#ifndef MAKEDEPEND
++# include <iterator>
++#endif
++
++#include <ios>
++
++static
++int _base64Chars[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
++ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
++ '0','1','2','3','4','5','6','7','8','9',
++ '+','/' };
++
++
++#define _0000_0011 0x03
++#define _1111_1100 0xFC
++#define _1111_0000 0xF0
++#define _0011_0000 0x30
++#define _0011_1100 0x3C
++#define _0000_1111 0x0F
++#define _1100_0000 0xC0
++#define _0011_1111 0x3F
++
++#define _EQUAL_CHAR (-1)
++#define _UNKNOWN_CHAR (-2)
++
++#define _IOS_FAILBIT std::ios_base::failbit
++#define _IOS_EOFBIT std::ios_base::eofbit
++#define _IOS_BADBIT std::ios_base::badbit
++#define _IOS_GOODBIT std::ios_base::goodbit
++
++// TEMPLATE CLASS base64_put
++template<class _E = char, class _Tr = std::char_traits<_E> >
++class base64
++{
++public:
++
++ typedef unsigned char byte_t;
++ typedef _E char_type;
++ typedef _Tr traits_type;
++
++ // base64 requires max line length <= 72 characters
++ // you can fill end of line
++ // it may be crlf, crlfsp, noline or other class like it
++
++
++ struct crlf
++ {
++ template<class _OI>
++ _OI operator()(_OI _To) const{
++ *_To = _Tr::to_char_type('\r'); ++_To;
++ *_To = _Tr::to_char_type('\n'); ++_To;
++
++ return (_To);
++ }
++ };
++
++
++ struct crlfsp
++ {
++ template<class _OI>
++ _OI operator()(_OI _To) const{
++ *_To = _Tr::to_char_type('\r'); ++_To;
++ *_To = _Tr::to_char_type('\n'); ++_To;
++ *_To = _Tr::to_char_type(' '); ++_To;
++
++ return (_To);
++ }
++ };
++
++ struct noline
++ {
++ template<class _OI>
++ _OI operator()(_OI _To) const{
++ return (_To);
++ }
++ };
++
++ struct three2four
++ {
++ void zero()
++ {
++ _data[0] = 0;
++ _data[1] = 0;
++ _data[2] = 0;
++ }
++
++ byte_t get_0() const
++ {
++ return _data[0];
++ }
++ byte_t get_1() const
++ {
++ return _data[1];
++ }
++ byte_t get_2() const
++ {
++ return _data[2];
++ }
++
++ void set_0(byte_t _ch)
++ {
++ _data[0] = _ch;
++ }
++
++ void set_1(byte_t _ch)
++ {
++ _data[1] = _ch;
++ }
++
++ void set_2(byte_t _ch)
++ {
++ _data[2] = _ch;
++ }
++
++ // 0000 0000 1111 1111 2222 2222
++ // xxxx xxxx xxxx xxxx xxxx xxxx
++ // 0000 0011 1111 2222 2233 3333
++
++ int b64_0() const {return (_data[0] & _1111_1100) >> 2;}
++ int b64_1() const {return ((_data[0] & _0000_0011) << 4) + ((_data[1] & _1111_0000)>>4);}
++ int b64_2() const {return ((_data[1] & _0000_1111) << 2) + ((_data[2] & _1100_0000)>>6);}
++ int b64_3() const {return (_data[2] & _0011_1111);}
++
++ void b64_0(int _ch) {_data[0] = ((_ch & _0011_1111) << 2) | (_0000_0011 & _data[0]);}
++
++ void b64_1(int _ch) {
++ _data[0] = ((_ch & _0011_0000) >> 4) | (_1111_1100 & _data[0]);
++ _data[1] = ((_ch & _0000_1111) << 4) | (_0000_1111 & _data[1]); }
++
++ void b64_2(int _ch) {
++ _data[1] = ((_ch & _0011_1100) >> 2) | (_1111_0000 & _data[1]);
++ _data[2] = ((_ch & _0000_0011) << 6) | (_0011_1111 & _data[2]); }
++
++ void b64_3(int _ch){
++ _data[2] = (_ch & _0011_1111) | (_1100_0000 & _data[2]);}
++
++ private:
++ byte_t _data[3];
++
++ };
++
++
++
++
++ template<class _II, class _OI, class _State, class _Endline>
++ _II put(_II _First, _II _Last, _OI _To, _State&, _Endline) const
++ {
++ three2four _3to4;
++ int line_octets = 0;
++
++ while(_First != _Last)
++ {
++ _3to4.zero();
++
++ _3to4.set_0(*_First);
++ _First++;
++
++ if(_First == _Last)
++ {
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
++ *_To = _Tr::to_char_type('='); ++_To;
++ *_To = _Tr::to_char_type('='); ++_To;
++ goto __end;
++ }
++
++ _3to4.set_1(*_First);
++ _First++;
++
++ if(_First == _Last)
++ {
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
++ *_To = _Tr::to_char_type('='); ++_To;
++ goto __end;
++ }
++
++ _3to4.set_2(*_First);
++ _First++;
++
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
++ *_To = _Tr::to_char_type(_base64Chars[_3to4.b64_3()]); ++_To;
++
++ if(line_octets == 17)
++ {
++ //_To = _Endl(_To);
++ *_To = '\n'; ++_To;
++ line_octets = 0;
++ }
++ else
++ ++line_octets;
++ }
++
++ __end: ;
++
++ return (_First);
++
++ }
++
++
++ template<class _II, class _OI, class _State>
++ _II get(_II _First, _II _Last, _OI _To, _State& _St) const
++ {
++ three2four _3to4;
++ int _Char;
++
++ while(_First != _Last)
++ {
++
++ // Take octet
++ _3to4.zero();
++
++ // -- 0 --
++ // Search next valid char...
++ while((_Char = _getCharType(*_First)) < 0 && _Char == _UNKNOWN_CHAR)
++ {
++ if(++_First == _Last)
++ {
++ _St |= _IOS_FAILBIT|_IOS_EOFBIT; return _First; // unexpected EOF
++ }
++ }
++
++ if(_Char == _EQUAL_CHAR){
++ // Error! First character in octet can't be '='
++ _St |= _IOS_FAILBIT;
++ return _First;
++ }
++ else
++ _3to4.b64_0(_Char);
++
++
++ // -- 1 --
++ // Search next valid char...
++ while(++_First != _Last)
++ if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
++ break;
++
++ if(_First == _Last) {
++ _St |= _IOS_FAILBIT|_IOS_EOFBIT; // unexpected EOF
++ return _First;
++ }
++
++ if(_Char == _EQUAL_CHAR){
++ // Error! Second character in octet can't be '='
++ _St |= _IOS_FAILBIT;
++ return _First;
++ }
++ else
++ _3to4.b64_1(_Char);
++
++
++ // -- 2 --
++ // Search next valid char...
++ while(++_First != _Last)
++ if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
++ break;
++
++ if(_First == _Last) {
++ // Error! Unexpected EOF. Must be '=' or base64 character
++ _St |= _IOS_FAILBIT|_IOS_EOFBIT;
++ return _First;
++ }
++
++ if(_Char == _EQUAL_CHAR){
++ // OK!
++ _3to4.b64_2(0);
++ _3to4.b64_3(0);
++
++ // chek for EOF
++ if(++_First == _Last)
++ {
++ // Error! Unexpected EOF. Must be '='. Ignore it.
++ //_St |= _IOS_BADBIT|_IOS_EOFBIT;
++ _St |= _IOS_EOFBIT;
++ }
++ else
++ if(_getCharType(*_First) != _EQUAL_CHAR)
++ {
++ // Error! Must be '='. Ignore it.
++ //_St |= _IOS_BADBIT;
++ }
++ else
++ ++_First; // Skip '='
++
++ // write 1 byte to output
++ *_To = (byte_t) _3to4.get_0();
++ return _First;
++ }
++ else
++ _3to4.b64_2(_Char);
++
++
++ // -- 3 --
++ // Search next valid char...
++ while(++_First != _Last)
++ if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
++ break;
++
++ if(_First == _Last) {
++ // Unexpected EOF. It's error. But ignore it.
++ //_St |= _IOS_FAILBIT|_IOS_EOFBIT;
++ _St |= _IOS_EOFBIT;
++
++ return _First;
++ }
++
++ if(_Char == _EQUAL_CHAR)
++ {
++ // OK!
++ _3to4.b64_3(0);
++
++ // write to output 2 bytes
++ *_To = (byte_t) _3to4.get_0();
++ *_To = (byte_t) _3to4.get_1();
++
++ ++_First; // set position to next character
++
++ return _First;
++ }
++ else
++ _3to4.b64_3(_Char);
++
++
++ // write to output 3 bytes
++ *_To = (byte_t) _3to4.get_0();
++ *_To = (byte_t) _3to4.get_1();
++ *_To = (byte_t) _3to4.get_2();
++
++ ++_First;
++
++
++ } // while(_First != _Last)
++
++ return (_First);
++ }
++
++protected:
++
++ int _getCharType(int _Ch) const
++ {
++ if(_base64Chars[62] == _Ch)
++ return 62;
++
++ if(_base64Chars[63] == _Ch)
++ return 63;
++
++ if((_base64Chars[0] <= _Ch) && (_base64Chars[25] >= _Ch))
++ return _Ch - _base64Chars[0];
++
++ if((_base64Chars[26] <= _Ch) && (_base64Chars[51] >= _Ch))
++ return _Ch - _base64Chars[26] + 26;
++
++ if((_base64Chars[52] <= _Ch) && (_base64Chars[61] >= _Ch))
++ return _Ch - _base64Chars[52] + 52;
++
++ if(_Ch == _Tr::to_int_type('='))
++ return _EQUAL_CHAR;
++
++ return _UNKNOWN_CHAR;
++ }
++
++
++};
++
++
++#endif
+diff --git a/utilities/xmlrpcpp/src/XmlRpcClient.cpp b/utilities/xmlrpcpp/src/XmlRpcClient.cpp
+index 31cda22..b533059 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcClient.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcClient.cpp
+@@ -1,8 +1,8 @@
+
+-#include "XmlRpcClient.h"
++#include "xmlrpcpp/XmlRpcClient.h"
+
+-#include "XmlRpcSocket.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff --git a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
+index 1d47836..e92dc5c 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp
+@@ -1,7 +1,7 @@
+
+-#include "XmlRpcDispatch.h"
+-#include "XmlRpcSource.h"
+-#include "XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcDispatch.h"
++#include "xmlrpcpp/XmlRpcSource.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
+
+ #include <math.h>
+ #include <errno.h>
+diff --git a/utilities/xmlrpcpp/src/XmlRpcServer.cpp b/utilities/xmlrpcpp/src/XmlRpcServer.cpp
+index 013c6ec..2515142 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcServer.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcServer.cpp
+@@ -2,12 +2,12 @@
+ // added features: server can be opened on port 0 and you can read back
+ // what port the OS gave you
+
+-#include "XmlRpcServer.h"
+-#include "XmlRpcServerConnection.h"
+-#include "XmlRpcServerMethod.h"
+-#include "XmlRpcSocket.h"
+-#include "XmlRpcUtil.h"
+-#include "XmlRpcException.h"
++#include "xmlrpcpp/XmlRpcServer.h"
++#include "xmlrpcpp/XmlRpcServerConnection.h"
++#include "xmlrpcpp/XmlRpcServerMethod.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcException.h"
+
+
+ using namespace XmlRpc;
+diff --git a/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp b/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
+index 76b2737..26c997f 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcServerConnection.cpp
+@@ -1,8 +1,8 @@
+
+-#include "XmlRpcServerConnection.h"
++#include "xmlrpcpp/XmlRpcServerConnection.h"
+
+-#include "XmlRpcSocket.h"
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpc.h"
+ #ifndef MAKEDEPEND
+ # include <stdio.h>
+ # include <stdlib.h>
+diff --git a/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp b/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
+index 1616ff4..f40447c 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcServerMethod.cpp
+@@ -1,6 +1,6 @@
+
+-#include "XmlRpcServerMethod.h"
+-#include "XmlRpcServer.h"
++#include "xmlrpcpp/XmlRpcServerMethod.h"
++#include "xmlrpcpp/XmlRpcServer.h"
+
+ namespace XmlRpc {
+
+diff --git a/utilities/xmlrpcpp/src/XmlRpcSocket.cpp b/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
+index b3c694b..8173fc9 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcSocket.cpp
+@@ -2,8 +2,8 @@
+ // added features: server can be opened on port 0 and you can read back
+ // what port the OS gave you
+
+-#include "XmlRpcSocket.h"
+-#include "XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
+
+ #ifndef MAKEDEPEND
+
+diff --git a/utilities/xmlrpcpp/src/XmlRpcSource.cpp b/utilities/xmlrpcpp/src/XmlRpcSource.cpp
+index 99203b0..4b44625 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcSource.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcSource.cpp
+@@ -1,7 +1,7 @@
+
+-#include "XmlRpcSource.h"
+-#include "XmlRpcSocket.h"
+-#include "XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcSource.h"
++#include "xmlrpcpp/XmlRpcSocket.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
+
+ namespace XmlRpc {
+
+diff --git a/utilities/xmlrpcpp/src/XmlRpcUtil.cpp b/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
+index 26f14b2..901ebc8 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcUtil.cpp
+@@ -1,5 +1,5 @@
+
+-#include "XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
+
+ #ifndef MAKEDEPEND
+ # include <ctype.h>
+@@ -9,7 +9,7 @@
+ # include <string.h>
+ #endif
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ using namespace XmlRpc;
+
+diff --git a/utilities/xmlrpcpp/src/XmlRpcValue.cpp b/utilities/xmlrpcpp/src/XmlRpcValue.cpp
+index e765cfa..e6dabce 100644
+--- a/utilities/xmlrpcpp/src/XmlRpcValue.cpp
++++ b/utilities/xmlrpcpp/src/XmlRpcValue.cpp
+@@ -1,8 +1,8 @@
+
+-#include "XmlRpcValue.h"
+-#include "XmlRpcException.h"
+-#include "XmlRpcUtil.h"
+-#include "base64.h"
++#include "xmlrpcpp/XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcException.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
++#include "xmlrpcpp/base64.h"
+
+ #ifndef MAKEDEPEND
+ # include <iostream>
+diff --git a/utilities/xmlrpcpp/test/FileClient.cpp b/utilities/xmlrpcpp/test/FileClient.cpp
+index 81d9f3e..58580f1 100644
+--- a/utilities/xmlrpcpp/test/FileClient.cpp
++++ b/utilities/xmlrpcpp/test/FileClient.cpp
+@@ -3,7 +3,7 @@
+ //
+ // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib on windows)
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ #include <iostream>
+ #include <fstream>
+ #include <stdlib.h>
+diff --git a/utilities/xmlrpcpp/test/HelloClient.cpp b/utilities/xmlrpcpp/test/HelloClient.cpp
+index 576f63c..bcbf9fe 100644
+--- a/utilities/xmlrpcpp/test/HelloClient.cpp
++++ b/utilities/xmlrpcpp/test/HelloClient.cpp
+@@ -1,7 +1,7 @@
+ // HelloClient.cpp : A simple xmlrpc client. Usage: HelloClient serverHost serverPort
+ // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib
+ // on windows)
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ #include <iostream>
+ using namespace XmlRpc;
+
+diff --git a/utilities/xmlrpcpp/test/HelloServer.cpp b/utilities/xmlrpcpp/test/HelloServer.cpp
+index ff81ad8..2a03c6f 100644
+--- a/utilities/xmlrpcpp/test/HelloServer.cpp
++++ b/utilities/xmlrpcpp/test/HelloServer.cpp
+@@ -1,6 +1,6 @@
+ // HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort
+ //
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <iostream>
+ #include <stdlib.h>
+diff --git a/utilities/xmlrpcpp/test/TestBase64Client.cpp b/utilities/xmlrpcpp/test/TestBase64Client.cpp
+index de95438..b540d91 100644
+--- a/utilities/xmlrpcpp/test/TestBase64Client.cpp
++++ b/utilities/xmlrpcpp/test/TestBase64Client.cpp
+@@ -5,7 +5,7 @@
+ // Requests a png file from the specified server and saves it in outputfile.
+ // Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib on windows)
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ #include <iostream>
+ #include <fstream>
+ #include <stdlib.h>
+diff --git a/utilities/xmlrpcpp/test/TestBase64Server.cpp b/utilities/xmlrpcpp/test/TestBase64Server.cpp
+index 7cb4a63..56ff3aa 100644
+--- a/utilities/xmlrpcpp/test/TestBase64Server.cpp
++++ b/utilities/xmlrpcpp/test/TestBase64Server.cpp
+@@ -11,7 +11,7 @@
+ #include <stdlib.h>
+
+
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ using namespace XmlRpc;
+
+
+diff --git a/utilities/xmlrpcpp/test/TestValues.cpp b/utilities/xmlrpcpp/test/TestValues.cpp
+index e770e51..bb7b0d2 100644
+--- a/utilities/xmlrpcpp/test/TestValues.cpp
++++ b/utilities/xmlrpcpp/test/TestValues.cpp
+@@ -2,7 +2,7 @@
+
+ #include <stdlib.h>
+
+-#include "XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcValue.h"
+
+
+ #include <assert.h>
+diff --git a/utilities/xmlrpcpp/test/TestValuesWin32.cpp b/utilities/xmlrpcpp/test/TestValuesWin32.cpp
+index f4cdafd..7ccd8c1 100644
+--- a/utilities/xmlrpcpp/test/TestValuesWin32.cpp
++++ b/utilities/xmlrpcpp/test/TestValuesWin32.cpp
+@@ -4,7 +4,7 @@
+ #include <stdlib.h>
+ #include <crtdbg.h>
+
+-#include "XmlRpcValue.h"
++#include "xmlrpcpp/XmlRpcValue.h"
+
+
+ #include <assert.h>
+diff --git a/utilities/xmlrpcpp/test/TestXml.cpp b/utilities/xmlrpcpp/test/TestXml.cpp
+index 4fa707d..16ffb4a 100644
+--- a/utilities/xmlrpcpp/test/TestXml.cpp
++++ b/utilities/xmlrpcpp/test/TestXml.cpp
+@@ -11,7 +11,7 @@
+ #include <assert.h>
+ #include <stdlib.h>
+
+-#include "XmlRpcUtil.h"
++#include "xmlrpcpp/XmlRpcUtil.h"
+
+ using namespace XmlRpc;
+
+diff --git a/utilities/xmlrpcpp/test/Validator.cpp b/utilities/xmlrpcpp/test/Validator.cpp
+index 2868a2d..83b3ca4 100644
+--- a/utilities/xmlrpcpp/test/Validator.cpp
++++ b/utilities/xmlrpcpp/test/Validator.cpp
+@@ -1,6 +1,6 @@
+ // Validator.cpp : XMLRPC server based on the compliancy test at validator.xmlrpc.com.
+ //
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ using namespace XmlRpc;
+
+ #include <iostream>
+diff --git a/utilities/xmlrpcpp/test/bool_test.cpp b/utilities/xmlrpcpp/test/bool_test.cpp
+index db9d414..fbec414 100644
+--- a/utilities/xmlrpcpp/test/bool_test.cpp
++++ b/utilities/xmlrpcpp/test/bool_test.cpp
+@@ -1,5 +1,5 @@
+ // bool_test.cpp : make sure bool variables copy around ok
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+ #include <iostream>
+ #include <stdlib.h>
+
+diff --git a/utilities/xmlrpcpp/test/port_zero_server.cpp b/utilities/xmlrpcpp/test/port_zero_server.cpp
+index 0cb19d8..b60ab45 100644
+--- a/utilities/xmlrpcpp/test/port_zero_server.cpp
++++ b/utilities/xmlrpcpp/test/port_zero_server.cpp
+@@ -1,6 +1,6 @@
+ // HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort
+ //
+-#include "XmlRpc.h"
++#include "xmlrpcpp/XmlRpc.h"
+
+ #include <iostream>
+ #include <stdlib.h>
diff --git a/debian/patches/series b/debian/patches/series
index 11a7c0b..6a73536 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,5 +4,4 @@
0004-Fix-executable-not-elf-or-script.patch
0005-Add-defaults-to-roswtf.patch
0006-Fix-confusing-copyright-messages-dates.patch
-0007-Adapting-code-to-a-headers-move.patch
-0008-Change-location-of-headers.patch
+0007-move-heaers-to-include-xmlrpcpp.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/ros/ros-ros-comm.git
More information about the debian-science-commits
mailing list