summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/config/Make.rules4
-rw-r--r--cpp/demo/Glacier/session/.depend2
-rw-r--r--cpp/doc/Makefile2
-rw-r--r--cpp/doc/Properties.sgml6
-rw-r--r--cpp/doc/ProxiesEndpoints.sgml (renamed from cpp/doc/ReferencesEndpoints.sgml)3
-rw-r--r--cpp/doc/manual.sgml6
-rw-r--r--cpp/include/Ice/Proxy.h3
-rw-r--r--cpp/slice/Freeze/DB.ice4
-rw-r--r--cpp/slice/Freeze/Evictor.ice18
-rw-r--r--cpp/slice/Glacier/Starter.ice2
-rw-r--r--cpp/slice/Ice/Communicator.ice98
-rw-r--r--cpp/slice/Ice/Current.ice4
-rw-r--r--cpp/slice/Ice/Identity.ice8
-rw-r--r--cpp/slice/Ice/LocalException.ice38
-rw-r--r--cpp/slice/Ice/Logger.ice2
-rw-r--r--cpp/slice/Ice/ObjectAdapter.ice122
-rw-r--r--cpp/slice/Ice/Properties.ice4
-rw-r--r--cpp/slice/Ice/Router.ice6
-rw-r--r--cpp/slice/Ice/ServantLocator.ice16
-rw-r--r--cpp/slice/IceBox/IceBox.ice4
-rw-r--r--cpp/slice/IcePack/Admin.ice4
-rw-r--r--cpp/slice/IceSSL/Exception.ice2
-rw-r--r--cpp/slice/IceStorm/IceStorm.ice2
-rw-r--r--cpp/src/Ice/.depend2
-rw-r--r--cpp/src/Ice/Connection.cpp280
-rw-r--r--cpp/src/Ice/Connection.h6
-rw-r--r--cpp/src/Ice/EventHandler.h2
-rw-r--r--cpp/src/Ice/Exception.cpp15
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp4
-rw-r--r--cpp/src/Ice/ObjectAdapterI.h2
-rw-r--r--cpp/src/Ice/Outgoing.cpp4
-rw-r--r--cpp/src/Ice/Protocol.h3
-rw-r--r--cpp/src/Ice/Proxy.cpp20
-rw-r--r--cpp/src/Ice/Reference.cpp62
-rw-r--r--cpp/src/Ice/Reference.h6
-rw-r--r--cpp/src/Ice/ReferenceFactory.cpp47
-rw-r--r--cpp/src/Ice/ReferenceFactory.h2
-rw-r--r--cpp/src/Ice/TraceUtil.cpp17
-rw-r--r--cpp/src/Ice/ice.dsp12
-rw-r--r--cpp/src/IcePatch/.depend7
-rw-r--r--cpp/src/IcePatch/Makefile15
-rw-r--r--cpp/src/IcePatch/blocksort.c1141
-rw-r--r--cpp/src/IcePatch/bzlib.c1593
-rw-r--r--cpp/src/IcePatch/bzlib.h321
-rw-r--r--cpp/src/IcePatch/bzlib_private.h537
-rw-r--r--cpp/src/IcePatch/compress.c714
-rw-r--r--cpp/src/IcePatch/crctable.c144
-rw-r--r--cpp/src/IcePatch/decompress.c660
-rw-r--r--cpp/src/IcePatch/huffman.c228
-rw-r--r--cpp/src/IcePatch/icepatch.dsp48
-rw-r--r--cpp/src/IcePatch/randtable.c124
-rw-r--r--cpp/test/IceSSL/certificateAndKeyParsing/.depend2
-rw-r--r--cpp/test/IceSSL/certificateAndKeyParsing/CertificateAndKeyParsing.cpp1530
-rw-r--r--cpp/test/IceSSL/certificateVerification/Pinger.ice22
-rw-r--r--cpp/test/IceSSL/certificateVerifier/CertificateVerifier.cpp370
-rw-r--r--cpp/test/IceSSL/configuration/Configuration.cpp448
-rw-r--r--cpp/test/IceSSL/loadPEM/LoadPEM.cpp506
-rw-r--r--java/src/Ice/ObjectAdapterI.java5
-rw-r--r--java/src/Ice/ObjectPrxHelper.java2
-rw-r--r--java/src/IceInternal/Connection.java10
-rw-r--r--java/src/IceInternal/Protocol.java3
-rw-r--r--java/src/IceInternal/Reference.java77
-rw-r--r--java/src/IceInternal/ReferenceFactory.java31
63 files changed, 2116 insertions, 7266 deletions
diff --git a/cpp/config/Make.rules b/cpp/config/Make.rules
index e874a08c69b..f6c2678cb8c 100644
--- a/cpp/config/Make.rules
+++ b/cpp/config/Make.rules
@@ -48,7 +48,7 @@ CXXFLAGS = -g -ftemplate-depth-128 -fPIC -Wall
#CXXFLAGS = -O3 -DNDEBUG -ftemplate-depth-128 -fPIC -Wall
CPPFLAGS = -I$(includedir) -I$(STLPORT_HOME)/include/stlport
LDFLAGS = -L$(libdir) -L$(STLPORT_HOME)/lib
-BASELIBS = -lIceUtil -lstlport_gcc -lpthread -luuid -ldl
+BASELIBS = -lIceUtil -lstlport_gcc -lpthread -luuid -ldl -lbz2
LIBS = -lIce $(BASELIBS)
SSLLIBS = -lIceSSL $(OPENSSL_LIBS)
CC = gcc
@@ -60,7 +60,7 @@ CFLAGS = $(CXXFLAGS)
#CXXFLAGS = -O3 -DNDEBUG -KPIC
#CPPFLAGS = -I$(includedir)
#LDFLAGS = -L$(libdir) -L$(OPENSSL_HOME)/lib -L$(XERCESC_HOME)/lib
-#BASELIBS = -lIceUtil -lpthread -luuid -ldl
+#BASELIBS = -lIceUtil -lpthread -luuid -ldl -lbz2
#LIBS = -lIce $(BASELIBS)
#SSLLIBS = -lIceSSL $(OPENSSL_LIBS)
#CC = gcc
diff --git a/cpp/demo/Glacier/session/.depend b/cpp/demo/Glacier/session/.depend
index cef81e1dc11..8b79dcdb3c0 100644
--- a/cpp/demo/Glacier/session/.depend
+++ b/cpp/demo/Glacier/session/.depend
@@ -1,4 +1,4 @@
HelloSession.o: HelloSession.cpp HelloSession.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Identity.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/InstanceF.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Glacier/Session.h ../../../include/Ice/LocalException.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/Stream.h ../../../include/Ice/BuiltinSequences.h
-Client.o: Client.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h ../../../include/Glacier/Glacier.h ../../../include/Glacier/Starter.h ../../../include/Glacier/Router.h ../../../include/Ice/Router.h ../../../include/Glacier/SessionF.h ../../../include/Glacier/Session.h ../../../include/Glacier/SessionManager.h HelloSession.h
+Client.o: Client.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h ../../../include/Glacier/Glacier.h ../../../include/Glacier/Starter.h ../../../include/Glacier/Router.h ../../../include/Ice/Router.h ../../../include/Glacier/SessionF.h ../../../include/Glacier/Session.h ../../../include/Glacier/SessionManager.h ../../../include/IceSSL/Plugin.h ../../../include/Ice/Plugin.h ../../../include/IceSSL/CertificateVerifierF.h HelloSession.h
HelloSessionI.o: HelloSessionI.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h HelloSessionI.h ../../../include/Glacier/SessionManager.h ../../../include/Glacier/SessionF.h HelloSession.h ../../../include/Glacier/Session.h
Server.o: Server.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h ../../../include/Glacier/Glacier.h ../../../include/Glacier/Starter.h ../../../include/Glacier/Router.h ../../../include/Ice/Router.h ../../../include/Glacier/SessionF.h ../../../include/Glacier/Session.h ../../../include/Glacier/SessionManager.h HelloSessionI.h HelloSession.h
diff --git a/cpp/doc/Makefile b/cpp/doc/Makefile
index e004eb4d217..22a33d7535b 100644
--- a/cpp/doc/Makefile
+++ b/cpp/doc/Makefile
@@ -15,7 +15,7 @@ TARGETS = manual/index.html
SGMLFILES = manual.sgml \
SliceDoc.sgml \
Properties.sgml \
- ReferencesEndpoints.sgml
+ ProxiesEndpoints.sgml
SLICEFILES = ../slice/Ice/BuiltinSequences.ice \
../slice/Ice/Communicator.ice \
diff --git a/cpp/doc/Properties.sgml b/cpp/doc/Properties.sgml
index b7320366da3..c889b054389 100644
--- a/cpp/doc/Properties.sgml
+++ b/cpp/doc/Properties.sgml
@@ -118,7 +118,7 @@ The request retry tracing level:
</section>
<!-- ********************************************************************** -->
-<section><title>&Ice; Object Adapter Properties</title>
+<section><title>&Ice; object adapter Properties</title>
<!-- ********************************************************************** -->
<section><title>Ice.Adapter.<replaceable>name</replaceable>.Endpoints</title>
@@ -261,8 +261,8 @@ Ice.DefaultRouter=<replaceable>router</replaceable>
<title>Description</title>
<para>
Specifies a default router (as stingified proxy to the &Glacier;
-router control interface) which is to be used for all Proxies, unless
-the router is overwritten with the Proxy's
+router control interface) which is to be used for all proxies, unless
+the router is overwritten with the proxy's
<literal>ice_router()</literal> operation. The default value is no
router.
</para>
diff --git a/cpp/doc/ReferencesEndpoints.sgml b/cpp/doc/ProxiesEndpoints.sgml
index 15c340a7cf7..b06c48d38bf 100644
--- a/cpp/doc/ReferencesEndpoints.sgml
+++ b/cpp/doc/ProxiesEndpoints.sgml
@@ -9,7 +9,7 @@ All Rights Reserved
-->
<!-- ********************************************************************** -->
-<section><title>References</title>
+<section><title>proxies</title>
<!-- ********************************************************************** -->
<section><title>Synopsis</title>
@@ -23,6 +23,7 @@ All Rights Reserved
<arg>-d</arg>
<arg>-D</arg>
<arg>-s</arg>
+<arg>-c</arg>
</group>
<arg choice=plain> : <replaceable>endpoints</replaceable></arg>
</cmdsynopsis>
diff --git a/cpp/doc/manual.sgml b/cpp/doc/manual.sgml
index 002af9e0a56..161505f7e48 100644
--- a/cpp/doc/manual.sgml
+++ b/cpp/doc/manual.sgml
@@ -8,7 +8,7 @@
<!ENTITY SliceDoc SYSTEM "SliceDoc.sgml">
<!ENTITY Properties SYSTEM "Properties.sgml">
-<!ENTITY ReferencesEndpoints SYSTEM "ReferencesEndpoints.sgml">
+<!ENTITY ProxiesEndpoints SYSTEM "ProxiesEndpoints.sgml">
]>
@@ -70,8 +70,8 @@ TBD
&Properties;
</chapter>
<chapter>
-<title>References and Endpoints</title>
-&ReferencesEndpoints;
+<title>proxies and Endpoints</title>
+&ProxiesEndpoints;
</chapter>
</part>
</book>
diff --git a/cpp/include/Ice/Proxy.h b/cpp/include/Ice/Proxy.h
index 8d93f3e8b42..81d438c7391 100644
--- a/cpp/include/Ice/Proxy.h
+++ b/cpp/include/Ice/Proxy.h
@@ -87,6 +87,7 @@ public:
::Ice::ObjectPrx ice_datagram() const;
::Ice::ObjectPrx ice_batchDatagram() const;
::Ice::ObjectPrx ice_secure(bool) const;
+ ::Ice::ObjectPrx ice_compress(bool) const;
::Ice::ObjectPrx ice_timeout(int) const;
::Ice::ObjectPrx ice_router(const ::Ice::RouterPrx&) const;
::Ice::ObjectPrx ice_default() const;
@@ -109,7 +110,7 @@ protected:
private:
void setup(const ::IceInternal::ReferencePtr&);
- friend ::IceInternal::ProxyFactory;
+ friend class ::IceInternal::ProxyFactory;
::IceInternal::ReferencePtr _reference;
::IceInternal::Handle< ::IceDelegate::Ice::Object> _delegate;
diff --git a/cpp/slice/Freeze/DB.ice b/cpp/slice/Freeze/DB.ice
index 1beffec5a8f..6a723cccd0b 100644
--- a/cpp/slice/Freeze/DB.ice
+++ b/cpp/slice/Freeze/DB.ice
@@ -18,7 +18,7 @@
/**
*
- * The Ice module for object persistence.
+ * The &Ice; module for object persistence.
*
**/
module Freeze
@@ -526,7 +526,7 @@ local interface DB
* or the database environment this database belongs to, before
* the Evictor has been properly deactivated. The Evictor is
* deactivated by calling [Ice::ObjectAdapter::deactivate] on the
- * Object Adapter this Evictor is installed with, or by shutting
+ * object adapter this Evictor is installed with, or by shutting
* down all Object Adapters with [Ice::Communicator::shutdown]
* followed by [Ice::Communicator::waitForShutdown].</para></note>
*
diff --git a/cpp/slice/Freeze/Evictor.ice b/cpp/slice/Freeze/Evictor.ice
index cd0b91f4801..ce569afd3a7 100644
--- a/cpp/slice/Freeze/Evictor.ice
+++ b/cpp/slice/Freeze/Evictor.ice
@@ -39,7 +39,7 @@ local interface ServantInitializer
*
* @param adapter The ObjectAdapter the Evictor is installed with.
*
- * @param identity The identity of the Ice Object for which the
+ * @param identity The identity of the &&Ice;; object for which the
* Servant was created.
*
* @param servant The Servant to set up.
@@ -106,11 +106,11 @@ local exception EvictorDeactivatedException
/**
*
- * A semi-automatic Ice Object persistence manager, based on the
+ * A semi-automatic &&Ice;; object persistence manager, based on the
* evictor pattern. The Evictor is an extended Servant Locator, with
* an implementation in the Freeze module. Instances of this
* implementation can be created with the operation
- * [DB::createEvictor], and must be registered with an Object Adapter
+ * [DB::createEvictor], and must be registered with an object adapter
* like other Servant Locators.
*
* @see ServantInitializer
@@ -176,13 +176,13 @@ local interface Evictor extends Ice::ServantLocator
/**
*
- * Create a new Ice Object for this Evictor. The state of the
+ * Create a new &&Ice;; object for this Evictor. The state of the
* initial Servant passed to this operation is put into the
* Evictor's persistent store.
*
- * @param identity The identity of the Ice Object to create.
+ * @param identity The identity of the &&Ice;; object to create.
*
- * @param servant The initial Servant for the Ice Object to
+ * @param servant The initial Servant for the &&Ice;; object to
* create.
*
* @throws DBException Raised if a database failure occurred.
@@ -198,12 +198,12 @@ local interface Evictor extends Ice::ServantLocator
/**
*
- * Permanently destroy an Ice Object by removing it from this
+ * Permanently destroy an &&Ice;; object by removing it from this
* Evictor's persistent store. Furthermore, if the Evictor
- * currently holds a Servant for the Ice Object, such Servant will
+ * currently holds a Servant for the &&Ice;; object, such Servant will
* be removed.
*
- * @param identity The identity of the Ice Object to destroy.
+ * @param identity The identity of the &&Ice;; object to destroy.
*
* @throws DBException Raised if a database failure occurred.
*
diff --git a/cpp/slice/Glacier/Starter.ice b/cpp/slice/Glacier/Starter.ice
index 2927d91fe19..90057f3dabf 100644
--- a/cpp/slice/Glacier/Starter.ice
+++ b/cpp/slice/Glacier/Starter.ice
@@ -16,7 +16,7 @@
/**
*
- * &Glacier; is the &Ice; firewall and router.
+ * &Glacier; is the &&Ice;; firewall and router.
*
**/
module Glacier
diff --git a/cpp/slice/Ice/Communicator.ice b/cpp/slice/Ice/Communicator.ice
index bbfcd4ba4c1..b2092d89d4f 100644
--- a/cpp/slice/Ice/Communicator.ice
+++ b/cpp/slice/Ice/Communicator.ice
@@ -21,7 +21,7 @@
/**
*
- * The basic Ice module, containing all the Ice core functionality.
+ * The basic &Ice; module, containing all the &Ice; core functionality.
*
**/
module Ice
@@ -29,8 +29,8 @@ module Ice
/**
*
- * The central object in Ice. One or more Communicators can be
- * instantiated for an Ice application. Communicator instantiation is
+ * The central object in &Ice;. One or more communicators can be
+ * instantiated for an &Ice; application. communicator instantiation is
* language specific, and not specified in Slice code.
*
* @see Logger
@@ -44,7 +44,7 @@ local interface Communicator
{
/**
*
- * Destroy the Communicator. This operation calls [shutdown]
+ * Destroy the communicator. This operation calls [shutdown]
* implicitly. Calling [destroy] cleans up memory, and shuts the
* client-side of an application down. Subsequent calls to
* [destroy] are ignored.
@@ -57,12 +57,12 @@ local interface Communicator
/**
*
* Shut the server-side of an application down. [shutdown]
- * deactivates all Object Adapters. Subsequent calls to [shutdown]
+ * deactivates all object adapters. Subsequent calls to [shutdown]
* are ignored.
*
* <important><para>Shutdown is the only operation that is
* signal-safe, i.e., it is safe to call this operation from a
- * Unix signal handler. No other Ice operation can be called from
+ * Unix signal handler. No other &Ice; operation can be called from
* a Unix signal handler.</para></important>
*
* <note><para> Shutdown is not immediate, i.e., after [shutdown]
@@ -97,16 +97,16 @@ local interface Communicator
/**
*
- * Convert a string into a Proxy. For example,
+ * Convert a string into a proxy. For example,
* <literal>MyCategory/MyObject:tcp -h some_host -p
- * 10000</literal> creates a proxy that refers to the Ice Object
+ * 10000</literal> creates a proxy that refers to the &&Ice;; object
* having an identity with a name "MyObject" and a category
* "MyCategory", with the server running on host "some_host", port
* 10000.
*
- * @param str The string to turn into a Proxy.
+ * @param str The string to turn into a proxy.
*
- * @return The Proxy.
+ * @return The proxy.
*
* @see proxyToString
*
@@ -115,11 +115,11 @@ local interface Communicator
/**
*
- * Convert a Proxy into a string.
+ * Convert a proxy into a string.
*
- * @param obj The Proxy to turn into a string.
+ * @param obj The proxy to turn into a string.
*
- * @return The "stringified" Proxy.
+ * @return The "stringified" proxy.
*
* @see stringToProxy
*
@@ -128,16 +128,16 @@ local interface Communicator
/**
*
- * Create a new Object Adapter. The endpoints for the Object
- * Adapter are taken from the property
+ * Create a new object adapter. The endpoints for the object
+ * adapter are taken from the property
* <literal>Ice.Adapter.<replaceable>name</replaceable>.Endpoints</literal>,
* with <replaceable>name</replaceable> being the name of the
- * Object Adapter.
+ * object adapter.
*
- * @param name The name to use for the Object Adapter. This name
- * must be unique for the Communicator.
+ * @param name The name to use for the object adapter. This name
+ * must be unique for the communicator.
*
- * @return The new Object Adapter.
+ * @return The new object adapter.
*
* @see ObjectAdapter
* @see Properties
@@ -149,16 +149,16 @@ local interface Communicator
/**
*
- * Create a new Object Adapter from a property. The endpoints for
- * the Object Adapter are taken from the property
+ * Create a new object adapter from a property. The endpoints for
+ * the object adapter are taken from the property
* <replaceable>property</replaceable>.
*
- * @param name The name to use for the Object Adapter. This name
- * must be unique for the Communicator.
+ * @param name The name to use for the object adapter. This name
+ * must be unique for the communicator.
*
* @param property The property from which the endpoints are taken.
*
- * @return The new Object Adapter.
+ * @return The new object adapter.
*
* @see Properties
* @see ObjectAdapter
@@ -169,17 +169,17 @@ local interface Communicator
/**
*
- * Create a new Object Adapter with a list of endpoints. In
+ * Create a new object adapter with a list of endpoints. In
* contrast to [createObjectAdapter] and
* [createObjectAdapterFromProperty], the endpoints to use are
* passed explicitly as a parameter.
*
- * @param name The name to use for the Object Adapter. This name
- * must be unique for the Communicator.
+ * @param name The name to use for the object adapter. This name
+ * must be unique for the communicator.
*
- * @param endpts The list of endpoints for the Object Adapter.
+ * @param endpts The list of endpoints for the object adapter.
*
- * @return The new Object Adapter.
+ * @return The new object adapter.
*
* @see ObjectAdapter
* @see createObjectAdapter
@@ -190,7 +190,7 @@ local interface Communicator
/**
*
- * Add a Servant factory to this Communicator. If a factory has
+ * Add a Servant factory to this communicator. If a factory has
* already been installed for the given id, the current factory
* for this id is replaced by the new one.
*
@@ -208,7 +208,7 @@ local interface Communicator
/**
*
- * Remove a Servant factory from this Communicator. This operation
+ * Remove a Servant factory from this communicator. This operation
* does nothing if no factory for the given id has been installed.
*
* @param id The type id for which the factory can create
@@ -223,7 +223,7 @@ local interface Communicator
/**
*
- * Find a Servant factory installed with this Communicator.
+ * Find a Servant factory installed with this communicator.
*
* @param id The type id for which the factory can create
* instances.
@@ -240,7 +240,7 @@ local interface Communicator
/**
*
- * Add a user exception factory to this Communicator. If a factory
+ * Add a user exception factory to this communicator. If a factory
* has already been installed for the given id, the current
* factory for this id is replaced by the new one.
*
@@ -258,7 +258,7 @@ local interface Communicator
/**
*
- * Remove a user exception factory from this Communicator. This
+ * Remove a user exception factory from this communicator. This
* operation does nothing if no factory for the given id has been
* installed.
*
@@ -274,7 +274,7 @@ local interface Communicator
/**
*
- * Find a user exception factory installed with this Communicator.
+ * Find a user exception factory installed with this communicator.
*
* @param id The type id for which the factory can create user
* exceptions.
@@ -291,9 +291,9 @@ local interface Communicator
/**
*
- * Get the properties for this Communicator.
+ * Get the properties for this communicator.
*
- * @return This Communicator's properties.
+ * @return This communicator's properties.
*
* @see Properties
*
@@ -302,9 +302,9 @@ local interface Communicator
/**
*
- * Get the logger for this Communicator.
+ * Get the logger for this communicator.
*
- * @return This Communicator's Logger.
+ * @return This communicator's logger.
*
* @see Logger
*
@@ -313,9 +313,9 @@ local interface Communicator
/**
*
- * Set the logger for this Communicator.
+ * Set the logger for this communicator.
*
- * @param logger The logger to use for this Communicator.
+ * @param logger The logger to use for this communicator.
*
* @see Logger
*
@@ -324,16 +324,16 @@ local interface Communicator
/**
*
- * Set a default &Glacier; router for this Communicator. All newly
- * created Proxies will use this default router. To disable the
+ * Set a default &Glacier; router for this communicator. All newly
+ * created proxies will use this default router. To disable the
* default router, null can be passed as argument. Note that this
- * operation has no effect on already existing Proxies.
+ * operation has no effect on already existing proxies.
*
- * <note><para> You can also set a router for an individual Proxy
+ * <note><para> You can also set a router for an individual proxy
* by calling the operation [ice_router] on such
- * Proxy.</para></note>
+ * proxy.</para></note>
*
- * @param router The default router to use for this Communicator.
+ * @param router The default router to use for this communicator.
*
* @see Router
* @see ObjectAdapter::addRouter
@@ -343,9 +343,9 @@ local interface Communicator
/**
*
- * Get the plug-in manager for this Communicator.
+ * Get the plug-in manager for this communicator.
*
- * @return This Communicator's plug-in manager.
+ * @return This communicator's plug-in manager.
*
* @see PluginManager
*
diff --git a/cpp/slice/Ice/Current.ice b/cpp/slice/Ice/Current.ice
index 156ea072d9d..e2f0eb23370 100644
--- a/cpp/slice/Ice/Current.ice
+++ b/cpp/slice/Ice/Current.ice
@@ -30,7 +30,7 @@ local dictionary<string, string> Context;
*
* Information about the current method invocation for servers. Each
* method on the server has a [Current] as last parameter
- * implicitly. [Current] is mostly used for Ice services, such as
+ * implicitly. [Current] is mostly used for &Ice; services, such as
* &IceStorm;. "Regular" user applications normally ignore this last
* parameter.
*
@@ -41,7 +41,7 @@ local struct Current
{
/**
*
- * The Ice Object identity.
+ * The &&Ice;; object identity.
*
**/
Identity identity;
diff --git a/cpp/slice/Ice/Identity.ice b/cpp/slice/Ice/Identity.ice
index d947ec81ad1..777c82ac506 100644
--- a/cpp/slice/Ice/Identity.ice
+++ b/cpp/slice/Ice/Identity.ice
@@ -16,7 +16,7 @@ module Ice
/**
*
- * The identity of an Ice Object. An empty [name] denotes a null
+ * The identity of an &&Ice;; object. An empty [name] denotes a null
* object.
*
**/
@@ -24,14 +24,14 @@ struct Identity
{
/**
*
- * The name of the Ice Object.
+ * The name of the &&Ice;; object.
*
**/
string name;
/**
*
- * The Ice Object category.
+ * The &&Ice;; object category.
*
* @see ServantLocator
* @see ObjectAdapter::addServantLocator
@@ -42,7 +42,7 @@ struct Identity
/**
*
- * A mapping between identities and Ice Objects.
+ * A mapping between identities and &&Ice;; objects.
*
**/
local dictionary<Identity, Object> ObjectDict;
diff --git a/cpp/slice/Ice/LocalException.ice b/cpp/slice/Ice/LocalException.ice
index 897dd5378d7..f8e105d8fc9 100644
--- a/cpp/slice/Ice/LocalException.ice
+++ b/cpp/slice/Ice/LocalException.ice
@@ -20,7 +20,7 @@ module Ice
*
* This exception is raised if an operation call on a server raises a
* local exception. Since the exception is local, it is not
- * transmitted by the Ice protocol. Instead, the client only receives
+ * transmitted by the &Ice; protocol. Instead, the client only receives
* an [UknownLocalException] for all local exceptions being raised by
* the server.
*
@@ -34,7 +34,7 @@ local exception UnknownLocalException
* This exception is raised if an operation call on a server raises a
* user exception which is not declared in the exception's
* <literal>throws</literal> clause. Such undeclared exceptions are
- * not transmitted from the server to the client by the Ice protocol,
+ * not transmitted from the server to the client by the &Ice; protocol,
* but instead the client just gets an [UnknownUserException]. This is
* necessary in order to not violate the contract established by an
* operation's signature: Only local exceptions and user exceptions
@@ -60,8 +60,8 @@ local exception UnknownException
/**
*
- * This exception is raised if the Ice library version doesn't match
- * the Ice header files version.
+ * This exception is raised if the &Ice; library version doesn't match
+ * the &Ice; header files version.
*
**/
local exception VersionMismatchException
@@ -94,8 +94,7 @@ local exception ObjectAdapterDeactivatedException
/**
*
- * This exception is raised if not suitable endpoint is available in
- * an object reference.
+ * This exception is raised if not suitable endpoint is available.
*
**/
local exception NoEndpointException
@@ -114,22 +113,22 @@ local exception EndpointParseException
/**
*
- * This exception is raised if there was an error while parsing an
- * object reference.
+ * This exception is raised if there was an error while parsing a
+ * stringified proxy.
*
**/
-local exception ReferenceParseException
+local exception ProxyParseException
{
};
/**
*
- * This exception is raised if an operation call using a Proxy
- * resulted in a location forward to an object reference that doesn't
- * match the Proxy's identity.
+ * This exception is raised if an operation call using a proxy
+ * resulted in a location forward to another proxy that doesn't
+ * match this proxy's identity.
*
**/
-local exception ReferenceIdentityException
+local exception LocationForwardIdentityException
{
};
@@ -422,7 +421,7 @@ local exception UnknownReplyStatusException extends ProtocolException
*
* This exception is a specialization of [ProtocolException],
* indicating that a connection has been gracefully shut down. Usually
- * you will never see this exception, as Ice automatically tries to
+ * you will never see this exception, as &Ice; automatically tries to
* reestablish a connection if the old one has been shut down.
*
**/
@@ -451,6 +450,17 @@ local exception IllegalMessageSizeException extends ProtocolException
{
};
+/**
+ *
+ * This exception is a specialization of [ProtocolException], which is
+ * raised if a compressed protocol message has been received by an
+ * &Ice; version which does not support compression.
+ *
+ **/
+local exception CompressionNotSupportedException extends ProtocolException
+{
+};
+
};
#endif
diff --git a/cpp/slice/Ice/Logger.ice b/cpp/slice/Ice/Logger.ice
index 6cbcc3c89ad..0dab27636ea 100644
--- a/cpp/slice/Ice/Logger.ice
+++ b/cpp/slice/Ice/Logger.ice
@@ -16,7 +16,7 @@ module Ice
/**
*
- * The Ice message logger. Applications can provide their own Logger
+ * The &Ice; message logger. Applications can provide their own Logger
* by implementing this interface and installing it with with a
* Communicator.
*
diff --git a/cpp/slice/Ice/ObjectAdapter.ice b/cpp/slice/Ice/ObjectAdapter.ice
index 01c056bd4d4..75c5c64fd9e 100644
--- a/cpp/slice/Ice/ObjectAdapter.ice
+++ b/cpp/slice/Ice/ObjectAdapter.ice
@@ -21,9 +21,9 @@ module Ice
/**
*
- * The Object Adapter, which is responsible for receiving requests
+ * The object adapter, which is responsible for receiving requests
* from Endpoints, and for mapping between Servant, Identities, and
- * Proxies.
+ * proxies.
*
* @see Communicator
* @see ServantLocator
@@ -33,10 +33,10 @@ local interface ObjectAdapter
{
/**
*
- * Get the name of this Object Adapter. The name is mainly used
+ * Get the name of this object adapter. The name is mainly used
* for configuration purposes with Properties.
*
- * @return The name of this Object Adapter.
+ * @return The name of this object adapter.
*
* @see Properties
*
@@ -45,9 +45,9 @@ local interface ObjectAdapter
/**
*
- * Get the Communicator this Object Adapter belongs to.
+ * Get the communicator this object adapter belongs to.
*
- * @return This Object Adapter's Communicator.
+ * @return This object adapter's communicator.
*
* @see Communicator
*
@@ -56,8 +56,8 @@ local interface ObjectAdapter
/**
*
- * Activate all Endpoints that belong to this Object
- * Adapter. After activation, the Object Adapter can dispatch
+ * Activate all Endpoints that belong to this object
+ * adapter. After activation, the object adapter can dispatch
* requests received through its Endpoints.
*
* @see hold
@@ -68,8 +68,8 @@ local interface ObjectAdapter
/**
*
- * Temporarily hold receiving and dispatching requests. The Object
- * Adapter can be reactivated with the [activate] operation.
+ * Temporarily hold receiving and dispatching requests. The object
+ * adapter can be reactivated with the [activate] operation.
*
* @see activate
* @see deactivate
@@ -79,14 +79,14 @@ local interface ObjectAdapter
/**
*
- * Deactivate all Endpoints that belong to this Object
- * Adapter. After deactivation, the Object Adapter stops receiving
- * requests through its Endpoints. Object Adapter's that have been
+ * Deactivate all Endpoints that belong to this object
+ * adapter. After deactivation, the object adapter stops receiving
+ * requests through its Endpoints. object adapter's that have been
* deactivated must not be reactivated again, i.e., the
* deactivation is permanent and [activate] or [hold] must not be
* called after calling [deactivate]. Attempting to do so results
* in an [ObjectAdapterDeactivatedException] being thrown. Calls
- * to [deactivate] on an already deactivated Object Adapter are
+ * to [deactivate] on an already deactivated object adapter are
* ignored.
*
* @see activate
@@ -98,17 +98,17 @@ local interface ObjectAdapter
/**
*
- * Add a Servant to this Object Adapter's Active Servant Map. Note
- * that one Servant can implement several Ice Objects by
+ * Add a Servant to this object adapter's Active Servant Map. Note
+ * that one Servant can implement several &Ice; objects by
* registering the Servant with multiple identities.
*
* @param servant The Servant to add.
*
- * @param identity The identity of the Ice Object that is
+ * @param identity The identity of the &Ice; object that is
* implemented by the Servant.
*
- * @return A Proxy that matches the given identity and this Object
- * Adapter.
+ * @return A proxy that matches the given identity and this object
+ * adapter.
*
* @see Identity
* @see addWithUUID
@@ -119,15 +119,15 @@ local interface ObjectAdapter
/**
*
- * Add a Servant to this Object Adapter's Active Servant Map,
+ * Add a Servant to this object adapter's Active Servant Map,
* using an automatically generated UUID as identity. Note that
- * the generated UUID identity can be accessed using the Proxy's
+ * the generated UUID identity can be accessed using the proxy's
* [ice_getIdentity] operation.
*
* @param servant The Servant to add.
*
- * @return A Proxy that matches the generated UUID identity and
- * this Object Adapter.
+ * @return A proxy that matches the generated UUID identity and
+ * this object adapter.
*
* @see Identity
* @see add
@@ -138,12 +138,12 @@ local interface ObjectAdapter
/**
*
- * Remove a Servant from the Object Adapter's Active Servant Map.
+ * Remove a Servant from the object adapter's Active Servant Map.
*
- * @param identity The identity of the Ice Object that is
+ * @param identity The identity of the &Ice; object that is
* implemented by the Servant. If the Servant implements multiple
- * Ice Objects, [remove] has to be called for all such Ice
- * Objects.
+ * &Ice; objects, [remove] has to be called for all such &Ice;
+ * objects.
*
* @see Identity
* @see add
@@ -154,31 +154,31 @@ local interface ObjectAdapter
/**
*
- * Add a Servant Locator to this Object Adapter. If a locator has
+ * Add a Servant Locator to this object adapter. If a locator has
* already been installed for the given category, the current
* locator for this category is replaced by the new one. To dispatch
- * operation calls on Servants, the Object Adapter tries to find a
- * Servant for a given Ice Object identity in the following order:
+ * operation calls on Servants, the object adapter tries to find a
+ * Servant for a given &Ice; object identity in the following order:
*
* <orderedlist>
*
- * <listitem><para>The Object Adapter tries to find a Servant for
+ * <listitem><para>The object adapter tries to find a Servant for
* the identity in the Active Servant Map.</para></listitem>
*
* <listitem><para>If no Servant has been found in the Active
- * Servant Map, the Object Adapter tries to find a locator for the
+ * Servant Map, the object adapter tries to find a locator for the
* category component of the identity. If a locator is found, the
- * Object Adapter tries to find a Servant using this
+ * object adapter tries to find a Servant using this
* locator.</para></listitem>
*
* <listitem><para>If no Servant has been found by any of the
- * preceding steps, the Object Adapter tries to find a locator for
+ * preceding steps, the object adapter tries to find a locator for
* an empty category, regardless of the category contained in the
- * identity. If a locator is found, the Object Adapter tries to
+ * identity. If a locator is found, the object adapter tries to
* find a Servant using this locator.</para></listitem>
*
* <listitem><para>If no Servant has been found with any of the
- * preceding steps, the Object Adapter gives up and the caller
+ * preceding steps, the object adapter gives up and the caller
* will receive an [ObjectNotExistException].</para></listitem>
*
* </orderedlist>
@@ -202,7 +202,7 @@ local interface ObjectAdapter
/**
*
- * Remove a Servant Locator from this Object Adapter. This
+ * Remove a Servant Locator from this object adapter. This
* operation does nothing if no locator for the given category has
* been installed.
*
@@ -220,7 +220,7 @@ local interface ObjectAdapter
/**
*
- * Find a Servant Locator installed with this Object Adapter.
+ * Find a Servant Locator installed with this object adapter.
*
* @param category The category for which the Servant Locator can
* locate Servants, or an empty string if the Servant Locator does
@@ -239,17 +239,17 @@ local interface ObjectAdapter
/**
*
- * Look up a Servant in this Object Adapter's Active Servant Map
- * by the identity of the Ice Object it implements.
+ * Look up a Servant in this object adapter's Active Servant Map
+ * by the identity of the &&Ice;; object it implements.
*
* <note><para>This operation only tries to lookup a Servant in
* the Active Servant Map. It does not attempt to find a Servant
* by using any installed [ServantLocator].</para></note>
*
- * @param identity The identity of the Ice Object for which the
+ * @param identity The identity of the &&Ice;; object for which the
* Servant should be returned.
*
- * @return The Servant that implements the Ice Object with the
+ * @return The Servant that implements the &&Ice;; object with the
* given identity, or null if no such Servant has been found.
*
* @see Identity
@@ -260,16 +260,16 @@ local interface ObjectAdapter
/**
*
- * Look up a Servant in this Object Adapter's Active Servant Map,
- * given a Proxy.
+ * Look up a Servant in this object adapter's Active Servant Map,
+ * given a proxy.
*
* <note><para>This operation only tries to lookup a Servant in
* the Active Servant Map. It does not attempt to find a Servant
* via any installed [ServantLocator]s.</para></note>
*
- * @param Proxy The proxy for which the Servant should be returned.
+ * @param proxy The proxy for which the Servant should be returned.
*
- * @return The Servant that matches the Proxy, or null if no such
+ * @return The Servant that matches the proxy, or null if no such
* Servant has been found.
*
* see identityToServant
@@ -279,13 +279,13 @@ local interface ObjectAdapter
/**
*
- * Create a Proxy that matches this Object Adapter and the given
+ * Create a proxy that matches this object adapter and the given
* identity.
*
- * @param identity The identity for which a Proxy is to be created.
+ * @param identity The identity for which a proxy is to be created.
*
- * @return A Proxy that matches the given identity and this Object
- * Adapter.
+ * @return A proxy that matches the given identity and this object
+ * adapter.
*
* @see Identity
*
@@ -294,19 +294,19 @@ local interface ObjectAdapter
/**
*
- * Create a "reverse Proxy" that matches this Object Adapter and
- * the given identity. A reverse Proxy uses connections that have
- * been established from a client to this Object Adapter.
+ * Create a "reverse proxy" that matches this object adapter and
+ * the given identity. A reverse proxy uses connections that have
+ * been established from a client to this object adapter.
*
* <note><para> Like the [Router] interface, this operation is
* intended to be used by router implementations. Regular user
* code should not attempt to use this operation.
* </para></note>
*
- * @param identity The identity for which a Proxy is to be created.
+ * @param identity The identity for which a proxy is to be created.
*
- * @return A "reverse Proxy" that matches the given identity and
- * this Object Adapter.
+ * @return A "reverse proxy" that matches the given identity and
+ * this object adapter.
*
* @see Identity
*
@@ -315,19 +315,19 @@ local interface ObjectAdapter
/**
*
- * Add a &Glacier; router to this Object Adapter. By doing so,
+ * Add a &Glacier; router to this object adapter. By doing so,
* this object adapter can receive callbacks from this router,
* using connections which are established from this process to
* the router, instead of the router having to establish a
* connection back to this object adapter.
*
* <note><para> You can only add a particular router to one single
- * Object Adapter. Adding a router to more than one Object Adapter
+ * object adapter. Adding a router to more than one object adapter
* will result in undefined behavior. However, it is possible to
- * add different routers to different Object
- * Adapters. </para></note>
+ * add different routers to different object
+ * adapters. </para></note>
*
- * @param router The router to add to this Object Adapter.
+ * @param router The router to add to this object adapter.
*
* @see Router
* @see Communicator::setDefaultRouter
diff --git a/cpp/slice/Ice/Properties.ice b/cpp/slice/Ice/Properties.ice
index 1833cdfcd42..e44098d075e 100644
--- a/cpp/slice/Ice/Properties.ice
+++ b/cpp/slice/Ice/Properties.ice
@@ -18,8 +18,8 @@ module Ice
/**
*
- * A property set to configure Ice and applications based on
- * Ice. Properties are key/value pairs, with both keys and values
+ * A property set to configure &Ice; and applications based on
+ * &Ice;. Properties are key/value pairs, with both keys and values
* being strings. By conventions, property keys should have the form
* <replaceable>application-name</replaceable>\[.<replaceable>category</replaceable>\[.<replaceable>sub-category</replaceable>]].<replaceable>name</replaceable>.
*
diff --git a/cpp/slice/Ice/Router.ice b/cpp/slice/Ice/Router.ice
index 9c0ed828d40..95ef850d826 100644
--- a/cpp/slice/Ice/Router.ice
+++ b/cpp/slice/Ice/Router.ice
@@ -16,12 +16,12 @@ module Ice
/**
*
- * The Ice router interface. Routers can be set either globally with
+ * The &Ice; router interface. Routers can be set either globally with
* [Communicator::setGlobalRouter], or with [ice_router] on specific
- * Proxies.
+ * proxies.
*
* <note><para> The router interface is not intended to be used by
- * Ice internals and by router implementations. Regular user code
+ * &Ice; internals and by router implementations. Regular user code
* should not attempt to use any functionality of this interface
* directly.</para></note>
*
diff --git a/cpp/slice/Ice/ServantLocator.ice b/cpp/slice/Ice/ServantLocator.ice
index aded28f8ae6..97fe262431a 100644
--- a/cpp/slice/Ice/ServantLocator.ice
+++ b/cpp/slice/Ice/ServantLocator.ice
@@ -19,7 +19,7 @@ module Ice
/**
*
- * The Servant Locator, which is called by the Object Adapter to
+ * The Servant Locator, which is called by the object adapter to
* locate a Servant which is not found in its Active Servant Map.
*
* @see ObjectAdapter
@@ -32,9 +32,9 @@ local interface ServantLocator
{
/**
*
- * Called by the Object Adapter before a request is made, in case
- * a Servant cannot be found in the Object Adapter's Active
- * Servant Map. Note that the Object Adapter does not
+ * Called by the object adapter before a request is made, in case
+ * a Servant cannot be found in the object adapter's Active
+ * Servant Map. Note that the object adapter does not
* automatically insert the returned Servant into it's Active
* Servant Map. This must be done by the Servant Locator's
* implementation, if this is desired.
@@ -46,7 +46,7 @@ local interface ServantLocator
* Servant Locators such as the
* [Freeze::Evictor].</para></important>
*
- * @param adapter The Object Adapter that calls the Servant
+ * @param adapter The object adapter that calls the Servant
* Locator.
*
* @param current Information about the current operation call to
@@ -66,12 +66,12 @@ local interface ServantLocator
/**
*
- * Called by the Object Adapter after a request has been
+ * Called by the object adapter after a request has been
* made. This operation is only called if [locate] was called
* prior to the request and returned a non-null servant. This
* operation can be used for cleanup purposes after a request.
*
- * @param adapter The Object Adapter that calls the Servant Locator.
+ * @param adapter The object adapter that calls the Servant Locator.
*
* @param current Information about the current operation call for
* which a servant was lcoated by [locate].
@@ -89,7 +89,7 @@ local interface ServantLocator
/**
*
- * Called when the Object Adapter in which this Servant Locator is
+ * Called when the object adapter in which this Servant Locator is
* installed is deactivated.
*
* @see ObjectAdapter::deactivate
diff --git a/cpp/slice/IceBox/IceBox.ice b/cpp/slice/IceBox/IceBox.ice
index 9c5bf8682d2..26743e87526 100644
--- a/cpp/slice/IceBox/IceBox.ice
+++ b/cpp/slice/IceBox/IceBox.ice
@@ -48,7 +48,7 @@ exception FailureException
* <itemizedlist>
*
* <listitem><para>[init] - This is the opportunity for the service to
- * create a Communicator or Object Adapter, register servants,
+ * create a Communicator or object adapter, register servants,
* etc.</para></listitem>
*
* <listitem><para>[start] - Perform any client-side activities which
@@ -62,7 +62,7 @@ exception FailureException
*
* </itemizedlist>
*
- * <note><para>If the service requires an Object Adapter, it should be
+ * <note><para>If the service requires an object adapter, it should be
* created and activated in [init]. However, the service should
* refrain from any client-side activities which might result in an
* invocation on a collocated service, because the order of service
diff --git a/cpp/slice/IcePack/Admin.ice b/cpp/slice/IcePack/Admin.ice
index 42ee18e6756..acdd34e4810 100644
--- a/cpp/slice/IcePack/Admin.ice
+++ b/cpp/slice/IcePack/Admin.ice
@@ -15,7 +15,7 @@
/**
*
- * The Ice module for object location and activation.
+ * The &Ice; module for object location and activation.
*
**/
module IcePack
@@ -78,7 +78,7 @@ struct ServerDescription
/**
*
- * A dictionary of server descriptions. The dictionary key is the Ice
+ * A dictionary of server descriptions. The dictionary key is the &Ice;
* Object identity, and the value is the corresponding server
* description.
*
diff --git a/cpp/slice/IceSSL/Exception.ice b/cpp/slice/IceSSL/Exception.ice
index 073f1e7f763..66912b67030 100644
--- a/cpp/slice/IceSSL/Exception.ice
+++ b/cpp/slice/IceSSL/Exception.ice
@@ -17,7 +17,7 @@ module IceSSL
/**
*
* This exception represents the base of all security related exceptions
- * in Ice. It is a local exception since usually a problem with security
+ * in &Ice;. It is a local exception since usually a problem with security
* precludes a proper secure connection to transmit exceptions upon. As
* well, many exceptions would contain information that is of no business
* for external clients/servers.
diff --git a/cpp/slice/IceStorm/IceStorm.ice b/cpp/slice/IceStorm/IceStorm.ice
index dd1a0bde238..448b3c46938 100644
--- a/cpp/slice/IceStorm/IceStorm.ice
+++ b/cpp/slice/IceStorm/IceStorm.ice
@@ -13,7 +13,7 @@
/**
*
- * The Ice module for publish/subscribe.
+ * The &Ice; module for publish/subscribe.
*
**/
module IceStorm
diff --git a/cpp/src/Ice/.depend b/cpp/src/Ice/.depend
index 57da1e3f73e..8e7be9cace9 100644
--- a/cpp/src/Ice/.depend
+++ b/cpp/src/Ice/.depend
@@ -26,7 +26,7 @@ UserExceptionFactory.o: UserExceptionFactory.cpp ../../include/Ice/UserException
UserExceptionFactoryManager.o: UserExceptionFactoryManager.cpp ../Ice/UserExceptionFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
Endpoint.o: Endpoint.cpp ../Ice/Endpoint.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h
EndpointFactory.o: EndpointFactory.cpp ../../include/Ice/EndpointFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/EndpointFactoryF.h
-EndpointFactoryManager.o: EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/UnknownEndpoint.h ../../include/Ice/EndpointFactory.h ../Ice/Network.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PluginF.h
+EndpointFactoryManager.o: EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/UnknownEndpoint.h ../../include/Ice/EndpointFactory.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PluginF.h
TcpEndpoint.o: TcpEndpoint.cpp ../Ice/TcpEndpoint.h ../Ice/Endpoint.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../Ice/TcpAcceptor.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Ice/Acceptor.h ../Ice/TcpConnector.h ../Ice/Connector.h ../Ice/TcpTransceiver.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/PluginF.h
UdpEndpoint.o: UdpEndpoint.cpp ../Ice/UdpEndpoint.h ../Ice/Endpoint.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/PluginF.h
UnknownEndpoint.o: UnknownEndpoint.cpp ../Ice/UnknownEndpoint.h ../Ice/Endpoint.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/PluginF.h
diff --git a/cpp/src/Ice/Connection.cpp b/cpp/src/Ice/Connection.cpp
index 2c82d6eaa58..3cc5c9a757c 100644
--- a/cpp/src/Ice/Connection.cpp
+++ b/cpp/src/Ice/Connection.cpp
@@ -21,6 +21,7 @@
#include <Ice/Incoming.h>
#include <Ice/LocalException.h>
#include <Ice/Protocol.h>
+#include <bzlib.h>
using namespace std;
using namespace Ice;
@@ -83,7 +84,7 @@ IceInternal::Connection::prepareRequest(Outgoing* out)
}
void
-IceInternal::Connection::sendRequest(Outgoing* out, bool oneway)
+IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool comp)
{
IceUtil::RecMutex::Lock sync(*this);
@@ -98,15 +99,10 @@ IceInternal::Connection::sendRequest(Outgoing* out, bool oneway)
try
{
BasicStream* os = out->os();
- os->i = os->b.begin();
//
- // Fill in the message size and request ID.
+ // Fill in the request ID.
//
- const Byte* p;
- Int sz = os->b.size();
- p = reinterpret_cast<Byte*>(&sz);
- copy(p, p + sizeof(Int), os->i + 3);
if (!_endpoint->datagram() && !oneway)
{
requestId = _nextRequestId++;
@@ -114,12 +110,50 @@ IceInternal::Connection::sendRequest(Outgoing* out, bool oneway)
{
_nextRequestId = 1;
requestId = _nextRequestId++;
- }
- p = reinterpret_cast<Byte*>(&requestId);
- copy(p, p + sizeof(Int), os->i + headerSize);
+ }
+ const Byte* p;
+ p = reinterpret_cast<const Byte*>(&requestId);
+ copy(p, p + sizeof(Int), os->b.begin() + headerSize);
+ }
+
+ if (comp)
+ {
+ //
+ // Change message type.
+ //
+ os->b[2] = compressedRequestMsg;
+
+ //
+ // Do compression.
+ //
+ BasicStream cstream(_instance);
+ compress(*os, cstream);
+
+ //
+ // Send the request.
+ //
+ os->i = os->b.begin();
+ traceRequest("sending compressed request", *os, _logger, _traceLevels);
+ cstream.i = cstream.b.begin();
+ _transceiver->write(cstream, _endpoint->timeout());
+ }
+ else
+ {
+ //
+ // No compression, just fill in the message size.
+ //
+ const Byte* p;
+ Int sz = os->b.size();
+ p = reinterpret_cast<const Byte*>(&sz);
+ copy(p, p + sizeof(Int), os->b.begin() + 3);
+
+ //
+ // Send the request.
+ //
+ os->i = os->b.begin();
+ traceRequest("sending request", *os, _logger, _traceLevels);
+ _transceiver->write(*os, _endpoint->timeout());
}
- traceRequest("sending request", *os, _logger, _traceLevels);
- _transceiver->write(*os, _endpoint->timeout());
}
catch (const LocalException& ex)
{
@@ -191,7 +225,7 @@ IceInternal::Connection::abortBatchRequest()
}
void
-IceInternal::Connection::flushBatchRequest()
+IceInternal::Connection::flushBatchRequest(bool comp)
{
IceUtil::RecMutex::Lock sync(*this);
@@ -210,15 +244,44 @@ IceInternal::Connection::flushBatchRequest()
_batchStream.i = _batchStream.b.begin();
- //
- // Fill in the message size.
- //
- const Byte* p;
- Int sz = _batchStream.b.size();
- p = reinterpret_cast<Byte*>(&sz);
- copy(p, p + sizeof(Int), _batchStream.i + 3);
- traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels);
- _transceiver->write(_batchStream, _endpoint->timeout());
+ if (comp)
+ {
+ //
+ // Change message type.
+ //
+ _batchStream.b[2] = compressedRequestMsg;
+
+ //
+ // Do compression.
+ //
+ BasicStream cstream(_instance);
+ compress(_batchStream, cstream);
+
+ //
+ // Send the batch request.
+ //
+ _batchStream.i = _batchStream.b.begin();
+ traceBatchRequest("sending compressed batch request", _batchStream, _logger, _traceLevels);
+ cstream.i = cstream.b.begin();
+ _transceiver->write(cstream, _endpoint->timeout());
+ }
+ else
+ {
+ //
+ // No compression, just fill in the message size.
+ //
+ const Byte* p;
+ Int sz = _batchStream.b.size();
+ p = reinterpret_cast<const Byte*>(&sz);
+ copy(p, p + sizeof(Int), _batchStream.b.begin() + 3);
+
+ //
+ // Send the batch request.
+ //
+ _batchStream.i = _batchStream.b.begin();
+ traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels);
+ _transceiver->write(_batchStream, _endpoint->timeout());
+ }
//
// Reset _batchStream so that new batch messages can be sent.
@@ -303,6 +366,7 @@ void
IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threadPool)
{
bool invoke = false;
+ bool comp = false;
bool batch = false;
{
@@ -323,6 +387,20 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
assert(stream.i == stream.b.end());
stream.i = stream.b.begin() + 2;
stream.read(messageType);
+
+ //
+ // Uncompress if necessary.
+ //
+ if (messageType == compressedRequestMsg ||
+ messageType == compressedRequestBatchMsg ||
+ messageType == compressedReplyMsg)
+ {
+ BasicStream ustream(_instance);
+ uncompress(stream, ustream);
+ stream.b.swap(ustream.b);
+ comp = true;
+ }
+
stream.i = stream.b.begin() + headerSize;
switch (messageType)
@@ -343,6 +421,22 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
break;
}
+ case compressedRequestMsg:
+ {
+ if (_state == StateClosing)
+ {
+ traceRequest("received compressed request during closing\n"
+ "(ignored by server, client will retry)",
+ stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceRequest("received compressed request", stream, _logger, _traceLevels);
+ invoke = true;
+ }
+ break;
+ }
+
case requestBatchMsg:
{
if (_state == StateClosing)
@@ -360,9 +454,35 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
break;
}
+ case compressedRequestBatchMsg:
+ {
+ if (_state == StateClosing)
+ {
+ traceBatchRequest("received compressed batch request during closing\n"
+ "(ignored by server, client will retry)",
+ stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceBatchRequest("received compressed batch request", stream, _logger, _traceLevels);
+ invoke = true;
+ batch = true;
+ }
+ break;
+ }
+
case replyMsg:
+ case compressedReplyMsg:
{
- traceReply("received reply", stream, _logger, _traceLevels);
+ if (messageType == compressedReplyMsg)
+ {
+ traceReply("received compressed reply", stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceReply("received reply", stream, _logger, _traceLevels);
+ }
+
Int requestId;
stream.read(requestId);
@@ -523,18 +643,44 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
return;
}
- os->i = os->b.begin();
-
- //
- // Fill in the message size.
- //
- const Byte* p;
- Int sz = os->b.size();
- p = reinterpret_cast<Byte*>(&sz);
- copy(p, p + sizeof(Int), os->i + 3);
-
- traceReply("sending reply", *os, _logger, _traceLevels);
- _transceiver->write(*os, _endpoint->timeout());
+ if (comp)
+ {
+ //
+ // Change message type.
+ //
+ os->b[2] = compressedReplyMsg;
+
+ //
+ // Do compression.
+ //
+ BasicStream cstream(_instance);
+ compress(*os, cstream);
+
+ //
+ // Send the reply.
+ //
+ os->i = os->b.begin();
+ traceReply("sending compressed reply", *os, _logger, _traceLevels);
+ cstream.i = cstream.b.begin();
+ _transceiver->write(cstream, _endpoint->timeout());
+ }
+ else
+ {
+ //
+ // No compression, just fill in the message size.
+ //
+ const Byte* p;
+ Int sz = os->b.size();
+ p = reinterpret_cast<const Byte*>(&sz);
+ copy(p, p + sizeof(Int), os->b.begin() + 3);
+
+ //
+ // Send the reply.
+ //
+ os->i = os->b.begin();
+ traceReply("sending reply", *os, _logger, _traceLevels);
+ _transceiver->write(*os, _endpoint->timeout());
+ }
--_responseCount;
@@ -824,3 +970,67 @@ IceInternal::Connection::unregisterWithPool()
_clientThreadPool->unregister(_transceiver->fd());
}
}
+
+void
+IceInternal::Connection::compress(BasicStream& uncompressed, BasicStream& compressed)
+{
+ const Byte* p;
+
+ //
+ // Compress the message body, but not the header.
+ //
+ unsigned int uncompressedLen = uncompressed.b.size() - headerSize;
+ unsigned int compressedLen = static_cast<int>(uncompressedLen * 1.01 + 600);
+ compressed.b.resize(headerSize + sizeof(Int) + compressedLen);
+ int bzError = BZ2_bzBuffToBuffCompress(compressed.b.begin() + headerSize + sizeof(Int), &compressedLen,
+ uncompressed.b.begin() + headerSize, uncompressedLen,
+ 1, 0, 0);
+ assert(bzError == BZ_OK); // TODO: Local exception
+ compressed.b.resize(headerSize + sizeof(Int) + compressedLen);
+
+ //
+ // Write the size of the compressed stream into the header of the
+ // uncompressed stream. Since the header will be copied, this size
+ // will also be in the header of the compressed stream.
+ //
+ Int compressedSize = compressed.b.size();
+ p = reinterpret_cast<const Byte*>(&compressedSize);
+ copy(p, p + sizeof(Int), uncompressed.b.begin() + 3);
+
+ //
+ // Add the size of the uncompressed stream before the message body
+ // of the compressed stream.
+ //
+ Int uncompressedSize = uncompressed.b.size();
+ p = reinterpret_cast<const Byte*>(&uncompressedSize);
+ copy(p, p + sizeof(Int), compressed.b.begin() + headerSize);
+
+ //
+ // Copy the header from the uncompressed stream to the compressed one.
+ //
+ copy(uncompressed.b.begin(), uncompressed.b.begin() + headerSize, compressed.b.begin());
+}
+
+void
+IceInternal::Connection::uncompress(BasicStream& compressed, BasicStream& uncompressed)
+{
+ Int uncompressedSize;
+ compressed.i = compressed.b.begin() + headerSize;
+ compressed.read(uncompressedSize);
+ if (uncompressedSize <= headerSize)
+ {
+ throw IllegalMessageSizeException(__FILE__, __LINE__);
+ }
+
+ uncompressed.resize(uncompressedSize);
+ unsigned int uncompressedLen = uncompressedSize - headerSize;
+ unsigned int compressedLen = compressed.b.size() - headerSize - sizeof(Int);
+ int bzError = BZ2_bzBuffToBuffDecompress(uncompressed.b.begin() + headerSize,
+ &uncompressedLen,
+ compressed.b.begin() + headerSize + sizeof(Int),
+ compressedLen,
+ 0, 0);
+ assert(bzError == BZ_OK);
+
+ copy(compressed.b.begin(), compressed.b.begin() + headerSize, uncompressed.b.begin());
+}
diff --git a/cpp/src/Ice/Connection.h b/cpp/src/Ice/Connection.h
index de623c0187e..e6b9f288747 100644
--- a/cpp/src/Ice/Connection.h
+++ b/cpp/src/Ice/Connection.h
@@ -46,12 +46,12 @@ public:
void incProxyUsageCount();
void decProxyUsageCount();
void prepareRequest(Outgoing*);
- void sendRequest(Outgoing*, bool);
+ void sendRequest(Outgoing*, bool, bool);
void removeRequest(Outgoing*);
void prepareBatchRequest(Outgoing*);
void finishBatchRequest(Outgoing*);
void abortBatchRequest();
- void flushBatchRequest();
+ void flushBatchRequest(bool);
int timeout() const;
EndpointPtr endpoint() const;
void setAdapter(const ::Ice::ObjectAdapterPtr&);
@@ -92,6 +92,8 @@ private:
void closeConnection();
void registerWithPool();
void unregisterWithPool();
+ void compress(BasicStream&, BasicStream&);
+ void uncompress(BasicStream&, BasicStream&);
TransceiverPtr _transceiver;
EndpointPtr _endpoint;
diff --git a/cpp/src/Ice/EventHandler.h b/cpp/src/Ice/EventHandler.h
index 7951b43ea2c..3205f077489 100644
--- a/cpp/src/Ice/EventHandler.h
+++ b/cpp/src/Ice/EventHandler.h
@@ -79,7 +79,7 @@ private:
// The _stream data member is for use by ThreadPool only
//
BasicStream _stream;
- friend ThreadPool;
+ friend class ThreadPool;
};
}
diff --git a/cpp/src/Ice/Exception.cpp b/cpp/src/Ice/Exception.cpp
index 45e894fc92d..40256b54c27 100644
--- a/cpp/src/Ice/Exception.cpp
+++ b/cpp/src/Ice/Exception.cpp
@@ -89,17 +89,17 @@ Ice::EndpointParseException::ice_print(ostream& out) const
}
void
-Ice::ReferenceParseException::ice_print(ostream& out) const
+Ice::ProxyParseException::ice_print(ostream& out) const
{
Exception::ice_print(out);
- out << ":\nerror while parsing reference";
+ out << ":\nerror while parsing proxy";
}
void
-Ice::ReferenceIdentityException::ice_print(ostream& out) const
+Ice::LocationForwardIdentityException::ice_print(ostream& out) const
{
Exception::ice_print(out);
- out << ":\nreference identity mismatch in location forward";
+ out << ":\nidentity mismatch in location forward";
}
void
@@ -300,6 +300,13 @@ Ice::IllegalMessageSizeException::ice_print(ostream& out) const
}
void
+Ice::CompressionNotSupportedException::ice_print(ostream& out) const
+{
+ Exception::ice_print(out);
+ out << ":\nprotocol error: compressed messages not supported";
+}
+
+void
Ice::PluginExistsException::ice_print(ostream& out) const
{
Exception::ice_print(out);
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp
index 9586c0906be..7b80c71e8aa 100644
--- a/cpp/src/Ice/ObjectAdapterI.cpp
+++ b/cpp/src/Ice/ObjectAdapterI.cpp
@@ -310,7 +310,7 @@ Ice::ObjectAdapterI::createReverseProxy(const Identity& ident)
// Create a reference and return a reverse proxy for this reference.
//
vector<EndpointPtr> endpoints;
- ReferencePtr ref = _instance->referenceFactory()->create(ident, "", Reference::ModeTwoway, false,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, "", Reference::ModeTwoway, false, false,
endpoints, endpoints, 0, this);
return _instance->proxyFactory()->referenceToProxy(ref);
}
@@ -476,7 +476,7 @@ Ice::ObjectAdapterI::newProxy(const Identity& ident) const
//
// Create a reference and return a proxy for this reference.
//
- ReferencePtr ref = _instance->referenceFactory()->create(ident, "", Reference::ModeTwoway, false,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, "", Reference::ModeTwoway, false, false,
endpoints, endpoints, 0, 0);
return _instance->proxyFactory()->referenceToProxy(ref);
}
diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h
index 82598bd3062..18f6fc40967 100644
--- a/cpp/src/Ice/ObjectAdapterI.h
+++ b/cpp/src/Ice/ObjectAdapterI.h
@@ -63,7 +63,7 @@ private:
ObjectAdapterI(const ::IceInternal::InstancePtr&, const std::string&, const std::string&);
virtual ~ObjectAdapterI();
- friend ::IceInternal::ObjectAdapterFactory;
+ friend class ::IceInternal::ObjectAdapterFactory;
ObjectPrx newProxy(const Identity&) const;
bool isLocal(const ObjectPrx&) const;
diff --git a/cpp/src/Ice/Outgoing.cpp b/cpp/src/Ice/Outgoing.cpp
index 4e1a7db1f7e..77304c9dd0d 100644
--- a/cpp/src/Ice/Outgoing.cpp
+++ b/cpp/src/Ice/Outgoing.cpp
@@ -105,7 +105,7 @@ IceInternal::Outgoing::invoke()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- _connection->sendRequest(this, false);
+ _connection->sendRequest(this, false, _reference->compress);
_state = StateInProgress;
Int timeout = _connection->timeout();
@@ -179,7 +179,7 @@ IceInternal::Outgoing::invoke()
case Reference::ModeOneway:
case Reference::ModeDatagram:
{
- _connection->sendRequest(this, true);
+ _connection->sendRequest(this, true, _reference->compress);
_state = StateInProgress;
break;
}
diff --git a/cpp/src/Ice/Protocol.h b/cpp/src/Ice/Protocol.h
index 516d0f5aaa8..4d9c879b3b6 100644
--- a/cpp/src/Ice/Protocol.h
+++ b/cpp/src/Ice/Protocol.h
@@ -39,6 +39,9 @@ const ::Ice::Byte requestMsg = 0;
const ::Ice::Byte requestBatchMsg = 1;
const ::Ice::Byte replyMsg = 2;
const ::Ice::Byte closeConnectionMsg = 3;
+const ::Ice::Byte compressedRequestMsg = 4;
+const ::Ice::Byte compressedRequestBatchMsg = 5;
+const ::Ice::Byte compressedReplyMsg = 6;
}
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 9a2ad59c61b..9828955df81 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -413,6 +413,22 @@ IceProxy::Ice::Object::ice_secure(bool b) const
}
ObjectPrx
+IceProxy::Ice::Object::ice_compress(bool b) const
+{
+ ReferencePtr ref = _reference->changeCompress(b);
+ if (ref == _reference)
+ {
+ return ObjectPrx(const_cast< ::IceProxy::Ice::Object*>(this));
+ }
+ else
+ {
+ ObjectPrx proxy(new ::IceProxy::Ice::Object());
+ proxy->setup(ref);
+ return proxy;
+ }
+}
+
+ObjectPrx
IceProxy::Ice::Object::ice_timeout(int t) const
{
ReferencePtr ref = _reference->changeTimeout(t);
@@ -577,7 +593,7 @@ IceProxy::Ice::Object::__locationForward(const LocationForward& ex)
if (_reference->identity != ex._prx->_reference->identity)
{
- throw ReferenceIdentityException(__FILE__, __LINE__);
+ throw LocationForwardIdentityException(__FILE__, __LINE__);
}
_reference = _reference->changeEndpoints(ex._prx->_reference->endpoints);
@@ -765,7 +781,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation,
void
IceDelegateM::Ice::Object::ice_flush()
{
- __connection->flushBatchRequest();
+ __connection->flushBatchRequest(__reference->compress);
}
void
diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp
index f416d1d39ca..5d454d063c0 100644
--- a/cpp/src/Ice/Reference.cpp
+++ b/cpp/src/Ice/Reference.cpp
@@ -53,6 +53,11 @@ IceInternal::Reference::operator==(const Reference& r) const
return false;
}
+ if (compress != r.compress)
+ {
+ return false;
+ }
+
if (origEndpoints != r.origEndpoints)
{
return false;
@@ -126,6 +131,15 @@ IceInternal::Reference::operator<(const Reference& r) const
return false;
}
+ if (!compress && r.compress)
+ {
+ return true;
+ }
+ else if (r.compress < compress)
+ {
+ return false;
+ }
+
if (origEndpoints < r.origEndpoints)
{
return true;
@@ -178,6 +192,8 @@ IceInternal::Reference::streamWrite(BasicStream* s) const
s->write(static_cast<Byte>(mode));
s->write(secure);
+
+ s->write(compress);
vector<EndpointPtr>::const_iterator p;
@@ -252,6 +268,11 @@ IceInternal::Reference::toString() const
s << " -s";
}
+ if (compress)
+ {
+ s << " -s";
+ }
+
vector<EndpointPtr>::const_iterator p;
for (p = origEndpoints.begin(); p != origEndpoints.end(); ++p)
@@ -280,7 +301,7 @@ IceInternal::Reference::changeIdentity(const Identity& newIdentity) const
}
else
{
- return instance->referenceFactory()->create(newIdentity, facet, mode, secure,
+ return instance->referenceFactory()->create(newIdentity, facet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -295,7 +316,7 @@ IceInternal::Reference::changeFacet(const string& newFacet) const
}
else
{
- return instance->referenceFactory()->create(identity, newFacet, mode, secure,
+ return instance->referenceFactory()->create(identity, newFacet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -341,7 +362,7 @@ IceInternal::Reference::changeTimeout(int timeout) const
}
}
- return instance->referenceFactory()->create(identity, facet, mode, secure,
+ return instance->referenceFactory()->create(identity, facet, mode, secure, compress,
newOrigEndpoints, newEndpoints,
newRouterInfo, reverseAdapter);
}
@@ -355,7 +376,7 @@ IceInternal::Reference::changeMode(Mode newMode) const
}
else
{
- return instance->referenceFactory()->create(identity, facet, newMode, secure,
+ return instance->referenceFactory()->create(identity, facet, newMode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -370,7 +391,22 @@ IceInternal::Reference::changeSecure(bool newSecure) const
}
else
{
- return instance->referenceFactory()->create(identity, facet, mode, newSecure,
+ return instance->referenceFactory()->create(identity, facet, mode, newSecure, compress,
+ origEndpoints, endpoints,
+ routerInfo, reverseAdapter);
+ }
+}
+
+ReferencePtr
+IceInternal::Reference::changeCompress(bool newCompress) const
+{
+ if (newCompress == compress)
+ {
+ return ReferencePtr(const_cast<Reference*>(this));
+ }
+ else
+ {
+ return instance->referenceFactory()->create(identity, facet, mode, secure, newCompress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -385,7 +421,7 @@ IceInternal::Reference::changeEndpoints(const vector<EndpointPtr>& newEndpoints)
}
else
{
- return instance->referenceFactory()->create(identity, facet, mode, secure,
+ return instance->referenceFactory()->create(identity, facet, mode, secure, compress,
origEndpoints, newEndpoints,
routerInfo, reverseAdapter);
}
@@ -402,7 +438,7 @@ IceInternal::Reference::changeRouter(const RouterPrx& newRouter) const
}
else
{
- return instance->referenceFactory()->create(identity, facet, mode, secure,
+ return instance->referenceFactory()->create(identity, facet, mode, secure, compress,
origEndpoints, endpoints,
newRouterInfo, reverseAdapter);
}
@@ -411,7 +447,7 @@ IceInternal::Reference::changeRouter(const RouterPrx& newRouter) const
ReferencePtr
IceInternal::Reference::changeDefault() const
{
- return instance->referenceFactory()->create(identity, "", ModeTwoway, false,
+ return instance->referenceFactory()->create(identity, "", ModeTwoway, false, false,
origEndpoints, origEndpoints,
0, 0);
}
@@ -421,6 +457,7 @@ IceInternal::Reference::Reference(const InstancePtr& inst,
const string& fac,
Mode md,
bool sec,
+ bool com,
const vector<EndpointPtr>& origEndpts,
const vector<EndpointPtr>& endpts,
const RouterInfoPtr& rtrInfo,
@@ -430,18 +467,13 @@ IceInternal::Reference::Reference(const InstancePtr& inst,
facet(fac),
mode(md),
secure(sec),
+ compress(com),
origEndpoints(origEndpts),
endpoints(endpts),
routerInfo(rtrInfo),
reverseAdapter(rvAdapter),
hashValue(0)
{
- calcHashValue();
-}
-
-void
-IceInternal::Reference::calcHashValue()
-{
Int h = 0;
string::const_iterator p;
@@ -465,6 +497,8 @@ IceInternal::Reference::calcHashValue()
h = 5 * h + static_cast<Int>(secure);
+ h = 5 * h + static_cast<Int>(compress);
+
//
// TODO: Should we also take the endpoints and other stuff into
// account for hash calculation? Perhaps not, the code above
diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h
index 977a3f68844..1c64e87c3d2 100644
--- a/cpp/src/Ice/Reference.h
+++ b/cpp/src/Ice/Reference.h
@@ -62,6 +62,7 @@ public:
const std::string facet;
const Mode mode;
const bool secure;
+ const bool compress;
const std::vector<EndpointPtr> origEndpoints; // Original endpoints.
const std::vector<EndpointPtr> endpoints; // Actual endpoints, changed by a location forwards.
const RouterInfoPtr routerInfo; // Null if no router is used.
@@ -77,18 +78,17 @@ public:
ReferencePtr changeTimeout(int) const;
ReferencePtr changeMode(Mode) const;
ReferencePtr changeSecure(bool) const;
+ ReferencePtr changeCompress(bool) const;
ReferencePtr changeEndpoints(const std::vector<EndpointPtr>&) const;
ReferencePtr changeRouter(const ::Ice::RouterPrx&) const;
ReferencePtr changeDefault() const;
private:
- Reference(const InstancePtr&, const Ice::Identity&, const std::string&, Mode, bool,
+ Reference(const InstancePtr&, const Ice::Identity&, const std::string&, Mode, bool, bool,
const std::vector<EndpointPtr>&, const std::vector<EndpointPtr>&,
const RouterInfoPtr&, const Ice::ObjectAdapterPtr&);
friend class ReferenceFactory;
-
- void calcHashValue();
};
}
diff --git a/cpp/src/Ice/ReferenceFactory.cpp b/cpp/src/Ice/ReferenceFactory.cpp
index 9f567aa105e..e3d157ab2e4 100644
--- a/cpp/src/Ice/ReferenceFactory.cpp
+++ b/cpp/src/Ice/ReferenceFactory.cpp
@@ -29,6 +29,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident,
const string& facet,
Reference::Mode mode,
bool secure,
+ bool compress,
const vector<EndpointPtr>& origEndpoints,
const vector<EndpointPtr>& endpoints,
const RouterInfoPtr& routerInfo,
@@ -44,7 +45,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident,
//
// Create new reference
//
- ReferencePtr ref = new Reference(_instance, ident, facet, mode, secure,
+ ReferencePtr ref = new Reference(_instance, ident, facet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
@@ -114,7 +115,7 @@ IceInternal::ReferenceFactory::create(const string& str)
beg = s.find_first_not_of(delim, end);
if (beg == string::npos)
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
end = s.find_first_of(delim + ":", beg);
@@ -125,13 +126,14 @@ IceInternal::ReferenceFactory::create(const string& str)
if (beg == end)
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
Identity ident = stringToIdentity(s.substr(beg, end - beg));
string facet;
Reference::Mode mode = Reference::ModeTwoway;
bool secure = false;
+ bool compress = false;
while (true)
{
@@ -160,7 +162,7 @@ IceInternal::ReferenceFactory::create(const string& str)
string option = s.substr(beg, end - beg);
if (option.length() != 2 || option[0] != '-')
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
string argument;
@@ -186,7 +188,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
facet = argument;
break;
@@ -196,7 +198,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
mode = Reference::ModeTwoway;
break;
@@ -206,7 +208,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
mode = Reference::ModeOneway;
break;
@@ -216,7 +218,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
mode = Reference::ModeBatchOneway;
break;
@@ -226,7 +228,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
mode = Reference::ModeDatagram;
break;
@@ -236,7 +238,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
mode = Reference::ModeBatchDatagram;
break;
@@ -246,15 +248,25 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!argument.empty())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
secure = true;
break;
}
+ case 'c':
+ {
+ if (!argument.empty())
+ {
+ throw ProxyParseException(__FILE__, __LINE__);
+ }
+ compress = true;
+ break;
+ }
+
default:
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
}
}
@@ -277,7 +289,7 @@ IceInternal::ReferenceFactory::create(const string& str)
{
if (!orig)
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
orig = false;
@@ -304,11 +316,11 @@ IceInternal::ReferenceFactory::create(const string& str)
if (!origEndpoints.size() || !endpoints.size())
{
- throw ReferenceParseException(__FILE__, __LINE__);
+ throw ProxyParseException(__FILE__, __LINE__);
}
RouterInfoPtr routerInfo = _instance->routerManager()->get(getDefaultRouter());
- return create(ident, facet, mode, secure, origEndpoints, endpoints, routerInfo, 0);
+ return create(ident, facet, mode, secure, compress, origEndpoints, endpoints, routerInfo, 0);
}
ReferencePtr
@@ -333,6 +345,9 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s)
bool secure;
s->read(secure);
+ bool compress;
+ s->read(compress);
+
vector<EndpointPtr> origEndpoints;
vector<EndpointPtr> endpoints;
@@ -363,7 +378,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s)
}
RouterInfoPtr routerInfo = _instance->routerManager()->get(getDefaultRouter());
- return create(ident, facet, mode, secure, origEndpoints, endpoints, routerInfo, 0);
+ return create(ident, facet, mode, secure, compress, origEndpoints, endpoints, routerInfo, 0);
}
void
diff --git a/cpp/src/Ice/ReferenceFactory.h b/cpp/src/Ice/ReferenceFactory.h
index e6203f884cf..cd7bd723c26 100644
--- a/cpp/src/Ice/ReferenceFactory.h
+++ b/cpp/src/Ice/ReferenceFactory.h
@@ -24,7 +24,7 @@ class ReferenceFactory : public ::IceUtil::Shared, public ::IceUtil::Mutex
{
public:
- ReferencePtr create(const Ice::Identity&, const std::string&, Reference::Mode, bool,
+ ReferencePtr create(const Ice::Identity&, const std::string&, Reference::Mode, bool, bool,
const std::vector<EndpointPtr>&, const std::vector<EndpointPtr>&,
const RouterInfoPtr&, const Ice::ObjectAdapterPtr&);
ReferencePtr create(const std::string&);
diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp
index 260a266f9c3..e29609825c6 100644
--- a/cpp/src/Ice/TraceUtil.cpp
+++ b/cpp/src/Ice/TraceUtil.cpp
@@ -51,6 +51,21 @@ printHeader(ostream& s, BasicStream& stream)
s << "(reply)";
break;
}
+ case compressedRequestMsg:
+ {
+ s << "(compressed request)";
+ break;
+ }
+ case compressedRequestBatchMsg:
+ {
+ s << "(compressed batch request)";
+ break;
+ }
+ case compressedReplyMsg:
+ {
+ s << "(compressed reply)";
+ break;
+ }
case closeConnectionMsg:
{
s << "(close connection)";
@@ -100,7 +115,7 @@ printRequestHeader(ostream& s, BasicStream& stream)
#if 0
static void
-dumpOctets(const string& cat, const BasicStream& stream, const ::Ice::LoggerPtr& logger)
+dumpOctets(const char* cat, const BasicStream& stream, const ::Ice::LoggerPtr& logger)
{
ostringstream s;
s << endl;
diff --git a/cpp/src/Ice/ice.dsp b/cpp/src/Ice/ice.dsp
index 46bbe761446..7cc574d2d51 100644
--- a/cpp/src/Ice/ice.dsp
+++ b/cpp/src/Ice/ice.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ws2_32.lib /nologo /dll /machine:I386 /out:"Release/ice001.dll"
+# ADD LINK32 ws2_32.lib libbz2.lib /nologo /dll /machine:I386 /out:"Release/ice001.dll"
# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -86,7 +86,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 ws2_32.lib /nologo /dll /debug /machine:I386 /out:"Debug/ice001d.dll" /pdbtype:sept
+# ADD LINK32 ws2_32.lib libbz2.lib /nologo /dll /debug /machine:I386 /out:"Debug/ice001d.dll" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -1282,7 +1282,7 @@ SOURCE=..\..\slice\Ice\Plugin.ice
!IF "$(CFG)" == "Ice - Win32 Release"
-USERDEP__USERE="../../bin/slice2cpp.exe"
+USERDEP__PLUGI="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\Ice\Plugin.ice
@@ -1301,7 +1301,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "Ice - Win32 Debug"
-USERDEP__USERE="../../bin/slice2cpp.exe"
+USERDEP__PLUGI="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\Ice\Plugin.ice
@@ -1327,7 +1327,7 @@ SOURCE=..\..\slice\Ice\PluginF.ice
!IF "$(CFG)" == "Ice - Win32 Release"
-USERDEP__USEREX="../../bin/slice2cpp.exe"
+USERDEP__PLUGIN="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\Ice\PluginF.ice
@@ -1341,7 +1341,7 @@ InputPath=..\..\slice\Ice\PluginF.ice
!ELSEIF "$(CFG)" == "Ice - Win32 Debug"
-USERDEP__USEREX="../../bin/slice2cpp.exe"
+USERDEP__PLUGIN="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\Ice\PluginF.ice
diff --git a/cpp/src/IcePatch/.depend b/cpp/src/IcePatch/.depend
index 4304c595f53..af80d05452c 100644
--- a/cpp/src/IcePatch/.depend
+++ b/cpp/src/IcePatch/.depend
@@ -5,10 +5,3 @@ Client.o: Client.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../
Server.o: Server.cpp ../../include/IceUtil/IceUtil.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Base64.h ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../IcePatch/FileLocator.h ../../include/IcePatch/IcePatch.h ../../include/IcePatch/Util.h
IcePatchI.o: IcePatchI.cpp ../IcePatch/IcePatchI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IcePatch/IcePatch.h ../../include/IcePatch/Util.h
FileLocator.o: FileLocator.cpp ../IcePatch/FileLocator.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IcePatch/IcePatch.h ../../include/IcePatch/Util.h ../IcePatch/IcePatchI.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h
-blocksort.o: blocksort.c bzlib_private.h bzlib.h
-huffman.o: huffman.c bzlib_private.h bzlib.h
-crctable.o: crctable.c bzlib_private.h bzlib.h
-randtable.o: randtable.c bzlib_private.h bzlib.h
-compress.o: compress.c bzlib_private.h bzlib.h
-decompress.o: decompress.c bzlib_private.h bzlib.h
-bzlib.o: bzlib.c bzlib_private.h bzlib.h
diff --git a/cpp/src/IcePatch/Makefile b/cpp/src/IcePatch/Makefile
index 449b87932a2..6bc4e00cf61 100644
--- a/cpp/src/IcePatch/Makefile
+++ b/cpp/src/IcePatch/Makefile
@@ -31,18 +31,9 @@ SOBJS = Server.o \
IcePatchI.o \
FileLocator.o
-BZOBJS = blocksort.o \
- huffman.o \
- crctable.o \
- randtable.o \
- compress.o \
- decompress.o \
- bzlib.o
-
SRCS = $(OBJS:.o=.cpp) \
$(COBJS:.o=.cpp) \
- $(SOBJS:.o=.cpp) \
- $(BZOBJS:.o=.c)
+ $(SOBJS:.o=.cpp)
HDIR = $(includedir)/IcePatch
SDIR = $(slicedir)/IcePatch
@@ -52,9 +43,9 @@ include $(top_srcdir)/config/Make.rules
CPPFLAGS := -I.. $(CPPFLAGS)
-$(VERSIONED_NAME): $(OBJS) $(BZOBJS)
+$(VERSIONED_NAME): $(OBJS)
rm -f $@
- $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $(OBJS) $(BZOBJS)
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $(OBJS)
$(NAME): $(VERSIONED_NAME)
rm -f $@
diff --git a/cpp/src/IcePatch/blocksort.c b/cpp/src/IcePatch/blocksort.c
deleted file mode 100644
index aba3efcd312..00000000000
--- a/cpp/src/IcePatch/blocksort.c
+++ /dev/null
@@ -1,1141 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Block sorting machinery ---*/
-/*--- blocksort.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
-
- To get some idea how the block sorting algorithms in this file
- work, read my paper
- On the Performance of BWT Sorting Algorithms
- in Proceedings of the IEEE Data Compression Conference 2000,
- Snowbird, Utah, USA, 27-30 March 2000. The main sort in this
- file implements the algorithm called cache in the paper.
---*/
-
-
-#include "bzlib_private.h"
-
-/*---------------------------------------------*/
-/*--- Fallback O(N log(N)^2) sorting ---*/
-/*--- algorithm, for repetitive blocks ---*/
-/*---------------------------------------------*/
-
-/*---------------------------------------------*/
-static
-__inline__
-void fallbackSimpleSort ( UInt32* fmap,
- UInt32* eclass,
- Int32 lo,
- Int32 hi )
-{
- Int32 i, j, tmp;
- UInt32 ec_tmp;
-
- if (lo == hi) return;
-
- if (hi - lo > 3) {
- for ( i = hi-4; i >= lo; i-- ) {
- tmp = fmap[i];
- ec_tmp = eclass[tmp];
- for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
- fmap[j-4] = fmap[j];
- fmap[j-4] = tmp;
- }
- }
-
- for ( i = hi-1; i >= lo; i-- ) {
- tmp = fmap[i];
- ec_tmp = eclass[tmp];
- for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
- fmap[j-1] = fmap[j];
- fmap[j-1] = tmp;
- }
-}
-
-
-/*---------------------------------------------*/
-#define fswap(zz1, zz2) \
- { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
-
-#define fvswap(zzp1, zzp2, zzn) \
-{ \
- Int32 yyp1 = (zzp1); \
- Int32 yyp2 = (zzp2); \
- Int32 yyn = (zzn); \
- while (yyn > 0) { \
- fswap(fmap[yyp1], fmap[yyp2]); \
- yyp1++; yyp2++; yyn--; \
- } \
-}
-
-
-#define fmin(a,b) ((a) < (b)) ? (a) : (b)
-
-#define fpush(lz,hz) { stackLo[sp] = lz; \
- stackHi[sp] = hz; \
- sp++; }
-
-#define fpop(lz,hz) { sp--; \
- lz = stackLo[sp]; \
- hz = stackHi[sp]; }
-
-#define FALLBACK_QSORT_SMALL_THRESH 10
-#define FALLBACK_QSORT_STACK_SIZE 100
-
-
-static
-void fallbackQSort3 ( UInt32* fmap,
- UInt32* eclass,
- Int32 loSt,
- Int32 hiSt )
-{
- Int32 unLo, unHi, ltLo, gtHi, n, m;
- Int32 sp, lo, hi;
- UInt32 med, r, r3;
- Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
- Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
-
- r = 0;
-
- sp = 0;
- fpush ( loSt, hiSt );
-
- while (sp > 0) {
-
- AssertH ( sp < FALLBACK_QSORT_STACK_SIZE, 1004 );
-
- fpop ( lo, hi );
- if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
- fallbackSimpleSort ( fmap, eclass, lo, hi );
- continue;
- }
-
- /* Random partitioning. Median of 3 sometimes fails to
- avoid bad cases. Median of 9 seems to help but
- looks rather expensive. This too seems to work but
- is cheaper. Guidance for the magic constants
- 7621 and 32768 is taken from Sedgewick's algorithms
- book, chapter 35.
- */
- r = ((r * 7621) + 1) % 32768;
- r3 = r % 3;
- if (r3 == 0) med = eclass[fmap[lo]]; else
- if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
- med = eclass[fmap[hi]];
-
- unLo = ltLo = lo;
- unHi = gtHi = hi;
-
- while (1) {
- while (1) {
- if (unLo > unHi) break;
- n = (Int32)eclass[fmap[unLo]] - (Int32)med;
- if (n == 0) {
- fswap(fmap[unLo], fmap[ltLo]);
- ltLo++; unLo++;
- continue;
- };
- if (n > 0) break;
- unLo++;
- }
- while (1) {
- if (unLo > unHi) break;
- n = (Int32)eclass[fmap[unHi]] - (Int32)med;
- if (n == 0) {
- fswap(fmap[unHi], fmap[gtHi]);
- gtHi--; unHi--;
- continue;
- };
- if (n < 0) break;
- unHi--;
- }
- if (unLo > unHi) break;
- fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
- }
-
- AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
-
- if (gtHi < ltLo) continue;
-
- n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
- m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
-
- n = lo + unLo - ltLo - 1;
- m = hi - (gtHi - unHi) + 1;
-
- if (n - lo > hi - m) {
- fpush ( lo, n );
- fpush ( m, hi );
- } else {
- fpush ( m, hi );
- fpush ( lo, n );
- }
- }
-}
-
-#undef fmin
-#undef fpush
-#undef fpop
-#undef fswap
-#undef fvswap
-#undef FALLBACK_QSORT_SMALL_THRESH
-#undef FALLBACK_QSORT_STACK_SIZE
-
-
-/*---------------------------------------------*/
-/* Pre:
- nblock > 0
- eclass exists for [0 .. nblock-1]
- ((UChar*)eclass) [0 .. nblock-1] holds block
- ptr exists for [0 .. nblock-1]
-
- Post:
- ((UChar*)eclass) [0 .. nblock-1] holds block
- All other areas of eclass destroyed
- fmap [0 .. nblock-1] holds sorted order
- bhtab [ 0 .. 2+(nblock/32) ] destroyed
-*/
-
-#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
-#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
-#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
-#define WORD_BH(zz) bhtab[(zz) >> 5]
-#define UNALIGNED_BH(zz) ((zz) & 0x01f)
-
-static
-void fallbackSort ( UInt32* fmap,
- UInt32* eclass,
- UInt32* bhtab,
- Int32 nblock,
- Int32 verb )
-{
- Int32 ftab[257];
- Int32 ftabCopy[256];
- Int32 H, i, j, k, l, r, cc, cc1;
- Int32 nNotDone;
- Int32 nBhtab;
- UChar* eclass8 = (UChar*)eclass;
-
- /*--
- Initial 1-char radix sort to generate
- initial fmap and initial BH bits.
- --*/
- if (verb >= 4)
- VPrintf0 ( " bucket sorting ...\n" );
- for (i = 0; i < 257; i++) ftab[i] = 0;
- for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
- for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i];
- for (i = 1; i < 257; i++) ftab[i] += ftab[i-1];
-
- for (i = 0; i < nblock; i++) {
- j = eclass8[i];
- k = ftab[j] - 1;
- ftab[j] = k;
- fmap[k] = i;
- }
-
- nBhtab = 2 + (nblock / 32);
- for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
- for (i = 0; i < 256; i++) SET_BH(ftab[i]);
-
- /*--
- Inductively refine the buckets. Kind-of an
- "exponential radix sort" (!), inspired by the
- Manber-Myers suffix array construction algorithm.
- --*/
-
- /*-- set sentinel bits for block-end detection --*/
- for (i = 0; i < 32; i++) {
- SET_BH(nblock + 2*i);
- CLEAR_BH(nblock + 2*i + 1);
- }
-
- /*-- the log(N) loop --*/
- H = 1;
- while (1) {
-
- if (verb >= 4)
- VPrintf1 ( " depth %6d has ", H );
-
- j = 0;
- for (i = 0; i < nblock; i++) {
- if (ISSET_BH(i)) j = i;
- k = fmap[i] - H; if (k < 0) k += nblock;
- eclass[k] = j;
- }
-
- nNotDone = 0;
- r = -1;
- while (1) {
-
- /*-- find the next non-singleton bucket --*/
- k = r + 1;
- while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
- if (ISSET_BH(k)) {
- while (WORD_BH(k) == 0xffffffff) k += 32;
- while (ISSET_BH(k)) k++;
- }
- l = k - 1;
- if (l >= nblock) break;
- while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
- if (!ISSET_BH(k)) {
- while (WORD_BH(k) == 0x00000000) k += 32;
- while (!ISSET_BH(k)) k++;
- }
- r = k - 1;
- if (r >= nblock) break;
-
- /*-- now [l, r] bracket current bucket --*/
- if (r > l) {
- nNotDone += (r - l + 1);
- fallbackQSort3 ( fmap, eclass, l, r );
-
- /*-- scan bucket and generate header bits-- */
- cc = -1;
- for (i = l; i <= r; i++) {
- cc1 = eclass[fmap[i]];
- if (cc != cc1) { SET_BH(i); cc = cc1; };
- }
- }
- }
-
- if (verb >= 4)
- VPrintf1 ( "%6d unresolved strings\n", nNotDone );
-
- H *= 2;
- if (H > nblock || nNotDone == 0) break;
- }
-
- /*--
- Reconstruct the original block in
- eclass8 [0 .. nblock-1], since the
- previous phase destroyed it.
- --*/
- if (verb >= 4)
- VPrintf0 ( " reconstructing block ...\n" );
- j = 0;
- for (i = 0; i < nblock; i++) {
- while (ftabCopy[j] == 0) j++;
- ftabCopy[j]--;
- eclass8[fmap[i]] = (UChar)j;
- }
- AssertH ( j < 256, 1005 );
-}
-
-#undef SET_BH
-#undef CLEAR_BH
-#undef ISSET_BH
-#undef WORD_BH
-#undef UNALIGNED_BH
-
-
-/*---------------------------------------------*/
-/*--- The main, O(N^2 log(N)) sorting ---*/
-/*--- algorithm. Faster for "normal" ---*/
-/*--- non-repetitive blocks. ---*/
-/*---------------------------------------------*/
-
-/*---------------------------------------------*/
-static
-__inline__
-Bool mainGtU ( UInt32 i1,
- UInt32 i2,
- UChar* block,
- UInt16* quadrant,
- UInt32 nblock,
- Int32* budget )
-{
- Int32 k;
- UChar c1, c2;
- UInt16 s1, s2;
-
- AssertD ( i1 != i2, "mainGtU" );
- /* 1 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 2 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 3 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 4 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 5 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 6 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 7 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 8 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 9 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 10 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 11 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
- /* 12 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- i1++; i2++;
-
- k = nblock + 8;
-
- do {
- /* 1 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 2 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 3 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 4 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 5 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 6 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 7 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
- /* 8 */
- c1 = block[i1]; c2 = block[i2];
- if (c1 != c2) return (c1 > c2);
- s1 = quadrant[i1]; s2 = quadrant[i2];
- if (s1 != s2) return (s1 > s2);
- i1++; i2++;
-
- if (i1 >= nblock) i1 -= nblock;
- if (i2 >= nblock) i2 -= nblock;
-
- k -= 8;
- (*budget)--;
- }
- while (k >= 0);
-
- return False;
-}
-
-
-/*---------------------------------------------*/
-/*--
- Knuth's increments seem to work better
- than Incerpi-Sedgewick here. Possibly
- because the number of elems to sort is
- usually small, typically <= 20.
---*/
-static
-Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
- 9841, 29524, 88573, 265720,
- 797161, 2391484 };
-
-static
-void mainSimpleSort ( UInt32* ptr,
- UChar* block,
- UInt16* quadrant,
- Int32 nblock,
- Int32 lo,
- Int32 hi,
- Int32 d,
- Int32* budget )
-{
- Int32 i, j, h, bigN, hp;
- UInt32 v;
-
- bigN = hi - lo + 1;
- if (bigN < 2) return;
-
- hp = 0;
- while (incs[hp] < bigN) hp++;
- hp--;
-
- for (; hp >= 0; hp--) {
- h = incs[hp];
-
- i = lo + h;
- while (True) {
-
- /*-- copy 1 --*/
- if (i > hi) break;
- v = ptr[i];
- j = i;
- while ( mainGtU (
- ptr[j-h]+d, v+d, block, quadrant, nblock, budget
- ) ) {
- ptr[j] = ptr[j-h];
- j = j - h;
- if (j <= (lo + h - 1)) break;
- }
- ptr[j] = v;
- i++;
-
- /*-- copy 2 --*/
- if (i > hi) break;
- v = ptr[i];
- j = i;
- while ( mainGtU (
- ptr[j-h]+d, v+d, block, quadrant, nblock, budget
- ) ) {
- ptr[j] = ptr[j-h];
- j = j - h;
- if (j <= (lo + h - 1)) break;
- }
- ptr[j] = v;
- i++;
-
- /*-- copy 3 --*/
- if (i > hi) break;
- v = ptr[i];
- j = i;
- while ( mainGtU (
- ptr[j-h]+d, v+d, block, quadrant, nblock, budget
- ) ) {
- ptr[j] = ptr[j-h];
- j = j - h;
- if (j <= (lo + h - 1)) break;
- }
- ptr[j] = v;
- i++;
-
- if (*budget < 0) return;
- }
- }
-}
-
-
-/*---------------------------------------------*/
-/*--
- The following is an implementation of
- an elegant 3-way quicksort for strings,
- described in a paper "Fast Algorithms for
- Sorting and Searching Strings", by Robert
- Sedgewick and Jon L. Bentley.
---*/
-
-#define mswap(zz1, zz2) \
- { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
-
-#define mvswap(zzp1, zzp2, zzn) \
-{ \
- Int32 yyp1 = (zzp1); \
- Int32 yyp2 = (zzp2); \
- Int32 yyn = (zzn); \
- while (yyn > 0) { \
- mswap(ptr[yyp1], ptr[yyp2]); \
- yyp1++; yyp2++; yyn--; \
- } \
-}
-
-static
-__inline__
-UChar mmed3 ( UChar a, UChar b, UChar c )
-{
- UChar t;
- if (a > b) { t = a; a = b; b = t; };
- if (b > c) {
- b = c;
- if (a > b) b = a;
- }
- return b;
-}
-
-#define mmin(a,b) ((a) < (b)) ? (a) : (b)
-
-#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
- stackHi[sp] = hz; \
- stackD [sp] = dz; \
- sp++; }
-
-#define mpop(lz,hz,dz) { sp--; \
- lz = stackLo[sp]; \
- hz = stackHi[sp]; \
- dz = stackD [sp]; }
-
-
-#define mnextsize(az) (nextHi[az]-nextLo[az])
-
-#define mnextswap(az,bz) \
- { Int32 tz; \
- tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
- tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
- tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
-
-
-#define MAIN_QSORT_SMALL_THRESH 20
-#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
-#define MAIN_QSORT_STACK_SIZE 100
-
-static
-void mainQSort3 ( UInt32* ptr,
- UChar* block,
- UInt16* quadrant,
- Int32 nblock,
- Int32 loSt,
- Int32 hiSt,
- Int32 dSt,
- Int32* budget )
-{
- Int32 unLo, unHi, ltLo, gtHi, n, m, med;
- Int32 sp, lo, hi, d;
-
- Int32 stackLo[MAIN_QSORT_STACK_SIZE];
- Int32 stackHi[MAIN_QSORT_STACK_SIZE];
- Int32 stackD [MAIN_QSORT_STACK_SIZE];
-
- Int32 nextLo[3];
- Int32 nextHi[3];
- Int32 nextD [3];
-
- sp = 0;
- mpush ( loSt, hiSt, dSt );
-
- while (sp > 0) {
-
- AssertH ( sp < MAIN_QSORT_STACK_SIZE, 1001 );
-
- mpop ( lo, hi, d );
- if (hi - lo < MAIN_QSORT_SMALL_THRESH ||
- d > MAIN_QSORT_DEPTH_THRESH) {
- mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
- if (*budget < 0) return;
- continue;
- }
-
- med = (Int32)
- mmed3 ( block[ptr[ lo ]+d],
- block[ptr[ hi ]+d],
- block[ptr[ (lo+hi)>>1 ]+d] );
-
- unLo = ltLo = lo;
- unHi = gtHi = hi;
-
- while (True) {
- while (True) {
- if (unLo > unHi) break;
- n = ((Int32)block[ptr[unLo]+d]) - med;
- if (n == 0) {
- mswap(ptr[unLo], ptr[ltLo]);
- ltLo++; unLo++; continue;
- };
- if (n > 0) break;
- unLo++;
- }
- while (True) {
- if (unLo > unHi) break;
- n = ((Int32)block[ptr[unHi]+d]) - med;
- if (n == 0) {
- mswap(ptr[unHi], ptr[gtHi]);
- gtHi--; unHi--; continue;
- };
- if (n < 0) break;
- unHi--;
- }
- if (unLo > unHi) break;
- mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
- }
-
- AssertD ( unHi == unLo-1, "mainQSort3(2)" );
-
- if (gtHi < ltLo) {
- mpush(lo, hi, d+1 );
- continue;
- }
-
- n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
- m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
-
- n = lo + unLo - ltLo - 1;
- m = hi - (gtHi - unHi) + 1;
-
- nextLo[0] = lo; nextHi[0] = n; nextD[0] = d;
- nextLo[1] = m; nextHi[1] = hi; nextD[1] = d;
- nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
-
- if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
- if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
- if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
-
- AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
- AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
-
- mpush (nextLo[0], nextHi[0], nextD[0]);
- mpush (nextLo[1], nextHi[1], nextD[1]);
- mpush (nextLo[2], nextHi[2], nextD[2]);
- }
-}
-
-#undef mswap
-#undef mvswap
-#undef mpush
-#undef mpop
-#undef mmin
-#undef mnextsize
-#undef mnextswap
-#undef MAIN_QSORT_SMALL_THRESH
-#undef MAIN_QSORT_DEPTH_THRESH
-#undef MAIN_QSORT_STACK_SIZE
-
-
-/*---------------------------------------------*/
-/* Pre:
- nblock > N_OVERSHOOT
- block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
- ((UChar*)block32) [0 .. nblock-1] holds block
- ptr exists for [0 .. nblock-1]
-
- Post:
- ((UChar*)block32) [0 .. nblock-1] holds block
- All other areas of block32 destroyed
- ftab [0 .. 65536 ] destroyed
- ptr [0 .. nblock-1] holds sorted order
- if (*budget < 0), sorting was abandoned
-*/
-
-#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
-#define SETMASK (1 << 21)
-#define CLEARMASK (~(SETMASK))
-
-static
-void mainSort ( UInt32* ptr,
- UChar* block,
- UInt16* quadrant,
- UInt32* ftab,
- Int32 nblock,
- Int32 verb,
- Int32* budget )
-{
- Int32 i, j, k, ss, sb;
- Int32 runningOrder[256];
- Bool bigDone[256];
- Int32 copyStart[256];
- Int32 copyEnd [256];
- UChar c1;
- Int32 numQSorted;
- UInt16 s;
- if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" );
-
- /*-- set up the 2-byte frequency table --*/
- for (i = 65536; i >= 0; i--) ftab[i] = 0;
-
- j = block[0] << 8;
- i = nblock-1;
- for (; i >= 3; i -= 4) {
- quadrant[i] = 0;
- j = (j >> 8) | ( ((UInt16)block[i]) << 8);
- ftab[j]++;
- quadrant[i-1] = 0;
- j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
- ftab[j]++;
- quadrant[i-2] = 0;
- j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
- ftab[j]++;
- quadrant[i-3] = 0;
- j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
- ftab[j]++;
- }
- for (; i >= 0; i--) {
- quadrant[i] = 0;
- j = (j >> 8) | ( ((UInt16)block[i]) << 8);
- ftab[j]++;
- }
-
- /*-- (emphasises close relationship of block & quadrant) --*/
- for (i = 0; i < BZ_N_OVERSHOOT; i++) {
- block [nblock+i] = block[i];
- quadrant[nblock+i] = 0;
- }
-
- if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" );
-
- /*-- Complete the initial radix sort --*/
- for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
-
- s = block[0] << 8;
- i = nblock-1;
- for (; i >= 3; i -= 4) {
- s = (s >> 8) | (block[i] << 8);
- j = ftab[s] -1;
- ftab[s] = j;
- ptr[j] = i;
- s = (s >> 8) | (block[i-1] << 8);
- j = ftab[s] -1;
- ftab[s] = j;
- ptr[j] = i-1;
- s = (s >> 8) | (block[i-2] << 8);
- j = ftab[s] -1;
- ftab[s] = j;
- ptr[j] = i-2;
- s = (s >> 8) | (block[i-3] << 8);
- j = ftab[s] -1;
- ftab[s] = j;
- ptr[j] = i-3;
- }
- for (; i >= 0; i--) {
- s = (s >> 8) | (block[i] << 8);
- j = ftab[s] -1;
- ftab[s] = j;
- ptr[j] = i;
- }
-
- /*--
- Now ftab contains the first loc of every small bucket.
- Calculate the running order, from smallest to largest
- big bucket.
- --*/
- for (i = 0; i <= 255; i++) {
- bigDone [i] = False;
- runningOrder[i] = i;
- }
-
- {
- Int32 vv;
- Int32 h = 1;
- do h = 3 * h + 1; while (h <= 256);
- do {
- h = h / 3;
- for (i = h; i <= 255; i++) {
- vv = runningOrder[i];
- j = i;
- while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
- runningOrder[j] = runningOrder[j-h];
- j = j - h;
- if (j <= (h - 1)) goto zero;
- }
- zero:
- runningOrder[j] = vv;
- }
- } while (h != 1);
- }
-
- /*--
- The main sorting loop.
- --*/
-
- numQSorted = 0;
-
- for (i = 0; i <= 255; i++) {
-
- /*--
- Process big buckets, starting with the least full.
- Basically this is a 3-step process in which we call
- mainQSort3 to sort the small buckets [ss, j], but
- also make a big effort to avoid the calls if we can.
- --*/
- ss = runningOrder[i];
-
- /*--
- Step 1:
- Complete the big bucket [ss] by quicksorting
- any unsorted small buckets [ss, j], for j != ss.
- Hopefully previous pointer-scanning phases have already
- completed many of the small buckets [ss, j], so
- we don't have to sort them at all.
- --*/
- for (j = 0; j <= 255; j++) {
- if (j != ss) {
- sb = (ss << 8) + j;
- if ( ! (ftab[sb] & SETMASK) ) {
- Int32 lo = ftab[sb] & CLEARMASK;
- Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
- if (hi > lo) {
- if (verb >= 4)
- VPrintf4 ( " qsort [0x%x, 0x%x] "
- "done %d this %d\n",
- ss, j, numQSorted, hi - lo + 1 );
- mainQSort3 (
- ptr, block, quadrant, nblock,
- lo, hi, BZ_N_RADIX, budget
- );
- numQSorted += (hi - lo + 1);
- if (*budget < 0) return;
- }
- }
- ftab[sb] |= SETMASK;
- }
- }
-
- AssertH ( !bigDone[ss], 1006 );
-
- /*--
- Step 2:
- Now scan this big bucket [ss] so as to synthesise the
- sorted order for small buckets [t, ss] for all t,
- including, magically, the bucket [ss,ss] too.
- This will avoid doing Real Work in subsequent Step 1's.
- --*/
- {
- for (j = 0; j <= 255; j++) {
- copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK;
- copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
- }
- for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
- k = ptr[j]-1; if (k < 0) k += nblock;
- c1 = block[k];
- if (!bigDone[c1])
- ptr[ copyStart[c1]++ ] = k;
- }
- for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
- k = ptr[j]-1; if (k < 0) k += nblock;
- c1 = block[k];
- if (!bigDone[c1])
- ptr[ copyEnd[c1]-- ] = k;
- }
- }
-
- AssertH ( (copyStart[ss]-1 == copyEnd[ss])
- ||
- /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
- Necessity for this case is demonstrated by compressing
- a sequence of approximately 48.5 million of character
- 251; 1.0.0/1.0.1 will then die here. */
- (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
- 1007 )
-
- for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
-
- /*--
- Step 3:
- The [ss] big bucket is now done. Record this fact,
- and update the quadrant descriptors. Remember to
- update quadrants in the overshoot area too, if
- necessary. The "if (i < 255)" test merely skips
- this updating for the last bucket processed, since
- updating for the last bucket is pointless.
-
- The quadrant array provides a way to incrementally
- cache sort orderings, as they appear, so as to
- make subsequent comparisons in fullGtU() complete
- faster. For repetitive blocks this makes a big
- difference (but not big enough to be able to avoid
- the fallback sorting mechanism, exponential radix sort).
-
- The precise meaning is: at all times:
-
- for 0 <= i < nblock and 0 <= j <= nblock
-
- if block[i] != block[j],
-
- then the relative values of quadrant[i] and
- quadrant[j] are meaningless.
-
- else {
- if quadrant[i] < quadrant[j]
- then the string starting at i lexicographically
- precedes the string starting at j
-
- else if quadrant[i] > quadrant[j]
- then the string starting at j lexicographically
- precedes the string starting at i
-
- else
- the relative ordering of the strings starting
- at i and j has not yet been determined.
- }
- --*/
- bigDone[ss] = True;
-
- if (i < 255) {
- Int32 bbStart = ftab[ss << 8] & CLEARMASK;
- Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
- Int32 shifts = 0;
-
- while ((bbSize >> shifts) > 65534) shifts++;
-
- for (j = bbSize-1; j >= 0; j--) {
- Int32 a2update = ptr[bbStart + j];
- UInt16 qVal = (UInt16)(j >> shifts);
- quadrant[a2update] = qVal;
- if (a2update < BZ_N_OVERSHOOT)
- quadrant[a2update + nblock] = qVal;
- }
- AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
- }
-
- }
-
- if (verb >= 4)
- VPrintf3 ( " %d pointers, %d sorted, %d scanned\n",
- nblock, numQSorted, nblock - numQSorted );
-}
-
-#undef BIGFREQ
-#undef SETMASK
-#undef CLEARMASK
-
-
-/*---------------------------------------------*/
-/* Pre:
- nblock > 0
- arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
- ((UChar*)arr2) [0 .. nblock-1] holds block
- arr1 exists for [0 .. nblock-1]
-
- Post:
- ((UChar*)arr2) [0 .. nblock-1] holds block
- All other areas of block destroyed
- ftab [ 0 .. 65536 ] destroyed
- arr1 [0 .. nblock-1] holds sorted order
-*/
-void BZ2_blockSort ( EState* s )
-{
- UInt32* ptr = s->ptr;
- UChar* block = s->block;
- UInt32* ftab = s->ftab;
- Int32 nblock = s->nblock;
- Int32 verb = s->verbosity;
- Int32 wfact = s->workFactor;
- UInt16* quadrant;
- Int32 budget;
- Int32 budgetInit;
- Int32 i;
-
- if (nblock < 10000) {
- fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
- } else {
- /* Calculate the location for quadrant, remembering to get
- the alignment right. Assumes that &(block[0]) is at least
- 2-byte aligned -- this should be ok since block is really
- the first section of arr2.
- */
- i = nblock+BZ_N_OVERSHOOT;
- if (i & 1) i++;
- quadrant = (UInt16*)(&(block[i]));
-
- /* (wfact-1) / 3 puts the default-factor-30
- transition point at very roughly the same place as
- with v0.1 and v0.9.0.
- Not that it particularly matters any more, since the
- resulting compressed stream is now the same regardless
- of whether or not we use the main sort or fallback sort.
- */
- if (wfact < 1 ) wfact = 1;
- if (wfact > 100) wfact = 100;
- budgetInit = nblock * ((wfact-1) / 3);
- budget = budgetInit;
-
- mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
- if (verb >= 3)
- VPrintf3 ( " %d work, %d block, ratio %5.2f\n",
- budgetInit - budget,
- nblock,
- (float)(budgetInit - budget) /
- (float)(nblock==0 ? 1 : nblock) );
- if (budget < 0) {
- if (verb >= 2)
- VPrintf0 ( " too repetitive; using fallback"
- " sorting algorithm\n" );
- fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
- }
- }
-
- s->origPtr = -1;
- for (i = 0; i < s->nblock; i++)
- if (ptr[i] == 0)
- { s->origPtr = i; break; };
-
- AssertH( s->origPtr != -1, 1003 );
-}
-
-
-/*-------------------------------------------------------------*/
-/*--- end blocksort.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/bzlib.c b/cpp/src/IcePatch/bzlib.c
deleted file mode 100644
index 7d1cb275f5b..00000000000
--- a/cpp/src/IcePatch/bzlib.c
+++ /dev/null
@@ -1,1593 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Library top-level functions. ---*/
-/*--- bzlib.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-/*--
- CHANGES
- ~~~~~~~
- 0.9.0 -- original version.
-
- 0.9.0a/b -- no changes in this file.
-
- 0.9.0c
- * made zero-length BZ_FLUSH work correctly in bzCompress().
- * fixed bzWrite/bzRead to ignore zero-length requests.
- * fixed bzread to correctly handle read requests after EOF.
- * wrong parameter order in call to bzDecompressInit in
- bzBuffToBuffDecompress. Fixed.
---*/
-
-#include "bzlib_private.h"
-
-
-/*---------------------------------------------------*/
-/*--- Compression stuff ---*/
-/*---------------------------------------------------*/
-
-
-/*---------------------------------------------------*/
-#ifndef BZ_NO_STDIO
-void BZ2_bz__AssertH__fail ( int errcode )
-{
- fprintf(stderr,
- "\n\nbzip2/libbzip2: internal error number %d.\n"
- "This is a bug in bzip2/libbzip2, %s.\n"
- "Please report it to me at: jseward@acm.org. If this happened\n"
- "when you were using some program which uses libbzip2 as a\n"
- "component, you should also report this bug to the author(s)\n"
- "of that program. Please make an effort to report this bug;\n"
- "timely and accurate bug reports eventually lead to higher\n"
- "quality software. Thanks. Julian Seward, 30 December 2001.\n\n",
- errcode,
- BZ2_bzlibVersion()
- );
-
- if (errcode == 1007) {
- fprintf(stderr,
- "\n*** A special note about internal error number 1007 ***\n"
- "\n"
- "Experience suggests that a common cause of i.e. 1007\n"
- "is unreliable memory or other hardware. The 1007 assertion\n"
- "just happens to cross-check the results of huge numbers of\n"
- "memory reads/writes, and so acts (unintendedly) as a stress\n"
- "test of your memory system.\n"
- "\n"
- "I suggest the following: try compressing the file again,\n"
- "possibly monitoring progress in detail with the -vv flag.\n"
- "\n"
- "* If the error cannot be reproduced, and/or happens at different\n"
- " points in compression, you may have a flaky memory system.\n"
- " Try a memory-test program. I have used Memtest86\n"
- " (www.memtest86.com). At the time of writing it is free (GPLd).\n"
- " Memtest86 tests memory much more thorougly than your BIOSs\n"
- " power-on test, and may find failures that the BIOS doesn't.\n"
- "\n"
- "* If the error can be repeatably reproduced, this is a bug in\n"
- " bzip2, and I would very much like to hear about it. Please\n"
- " let me know, and, ideally, save a copy of the file causing the\n"
- " problem -- without which I will be unable to investigate it.\n"
- "\n"
- );
- }
-
- exit(3);
-}
-#endif
-
-
-/*---------------------------------------------------*/
-static
-int bz_config_ok ( void )
-{
- if (sizeof(int) != 4) return 0;
- if (sizeof(short) != 2) return 0;
- if (sizeof(char) != 1) return 0;
- return 1;
-}
-
-
-/*---------------------------------------------------*/
-static
-void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
-{
- void* v = malloc ( items * size );
- return v;
-}
-
-static
-void default_bzfree ( void* opaque, void* addr )
-{
- if (addr != NULL) free ( addr );
-}
-
-
-/*---------------------------------------------------*/
-static
-void prepare_new_block ( EState* s )
-{
- Int32 i;
- s->nblock = 0;
- s->numZ = 0;
- s->state_out_pos = 0;
- BZ_INITIALISE_CRC ( s->blockCRC );
- for (i = 0; i < 256; i++) s->inUse[i] = False;
- s->blockNo++;
-}
-
-
-/*---------------------------------------------------*/
-static
-void init_RL ( EState* s )
-{
- s->state_in_ch = 256;
- s->state_in_len = 0;
-}
-
-
-static
-Bool isempty_RL ( EState* s )
-{
- if (s->state_in_ch < 256 && s->state_in_len > 0)
- return False; else
- return True;
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzCompressInit)
- ( bz_stream* strm,
- int blockSize100k,
- int verbosity,
- int workFactor )
-{
- Int32 n;
- EState* s;
-
- if (!bz_config_ok()) return BZ_CONFIG_ERROR;
-
- if (strm == NULL ||
- blockSize100k < 1 || blockSize100k > 9 ||
- workFactor < 0 || workFactor > 250)
- return BZ_PARAM_ERROR;
-
- if (workFactor == 0) workFactor = 30;
- if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
- if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
-
- s = BZALLOC( sizeof(EState) );
- if (s == NULL) return BZ_MEM_ERROR;
- s->strm = strm;
-
- s->arr1 = NULL;
- s->arr2 = NULL;
- s->ftab = NULL;
-
- n = 100000 * blockSize100k;
- s->arr1 = BZALLOC( n * sizeof(UInt32) );
- s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
- s->ftab = BZALLOC( 65537 * sizeof(UInt32) );
-
- if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
- if (s->arr1 != NULL) BZFREE(s->arr1);
- if (s->arr2 != NULL) BZFREE(s->arr2);
- if (s->ftab != NULL) BZFREE(s->ftab);
- if (s != NULL) BZFREE(s);
- return BZ_MEM_ERROR;
- }
-
- s->blockNo = 0;
- s->state = BZ_S_INPUT;
- s->mode = BZ_M_RUNNING;
- s->combinedCRC = 0;
- s->blockSize100k = blockSize100k;
- s->nblockMAX = 100000 * blockSize100k - 19;
- s->verbosity = verbosity;
- s->workFactor = workFactor;
-
- s->block = (UChar*)s->arr2;
- s->mtfv = (UInt16*)s->arr1;
- s->zbits = NULL;
- s->ptr = (UInt32*)s->arr1;
-
- strm->state = s;
- strm->total_in_lo32 = 0;
- strm->total_in_hi32 = 0;
- strm->total_out_lo32 = 0;
- strm->total_out_hi32 = 0;
- init_RL ( s );
- prepare_new_block ( s );
- return BZ_OK;
-}
-
-
-/*---------------------------------------------------*/
-static
-void add_pair_to_block ( EState* s )
-{
- Int32 i;
- UChar ch = (UChar)(s->state_in_ch);
- for (i = 0; i < s->state_in_len; i++) {
- BZ_UPDATE_CRC( s->blockCRC, ch );
- }
- s->inUse[s->state_in_ch] = True;
- switch (s->state_in_len) {
- case 1:
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- break;
- case 2:
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- break;
- case 3:
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- break;
- default:
- s->inUse[s->state_in_len-4] = True;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = (UChar)ch; s->nblock++;
- s->block[s->nblock] = ((UChar)(s->state_in_len-4));
- s->nblock++;
- break;
- }
-}
-
-
-/*---------------------------------------------------*/
-static
-void flush_RL ( EState* s )
-{
- if (s->state_in_ch < 256) add_pair_to_block ( s );
- init_RL ( s );
-}
-
-
-/*---------------------------------------------------*/
-#define ADD_CHAR_TO_BLOCK(zs,zchh0) \
-{ \
- UInt32 zchh = (UInt32)(zchh0); \
- /*-- fast track the common case --*/ \
- if (zchh != zs->state_in_ch && \
- zs->state_in_len == 1) { \
- UChar ch = (UChar)(zs->state_in_ch); \
- BZ_UPDATE_CRC( zs->blockCRC, ch ); \
- zs->inUse[zs->state_in_ch] = True; \
- zs->block[zs->nblock] = (UChar)ch; \
- zs->nblock++; \
- zs->state_in_ch = zchh; \
- } \
- else \
- /*-- general, uncommon cases --*/ \
- if (zchh != zs->state_in_ch || \
- zs->state_in_len == 255) { \
- if (zs->state_in_ch < 256) \
- add_pair_to_block ( zs ); \
- zs->state_in_ch = zchh; \
- zs->state_in_len = 1; \
- } else { \
- zs->state_in_len++; \
- } \
-}
-
-
-/*---------------------------------------------------*/
-static
-Bool copy_input_until_stop ( EState* s )
-{
- Bool progress_in = False;
-
- if (s->mode == BZ_M_RUNNING) {
-
- /*-- fast track the common case --*/
- while (True) {
- /*-- block full? --*/
- if (s->nblock >= s->nblockMAX) break;
- /*-- no input? --*/
- if (s->strm->avail_in == 0) break;
- progress_in = True;
- ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
- s->strm->next_in++;
- s->strm->avail_in--;
- s->strm->total_in_lo32++;
- if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
- }
-
- } else {
-
- /*-- general, uncommon case --*/
- while (True) {
- /*-- block full? --*/
- if (s->nblock >= s->nblockMAX) break;
- /*-- no input? --*/
- if (s->strm->avail_in == 0) break;
- /*-- flush/finish end? --*/
- if (s->avail_in_expect == 0) break;
- progress_in = True;
- ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
- s->strm->next_in++;
- s->strm->avail_in--;
- s->strm->total_in_lo32++;
- if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
- s->avail_in_expect--;
- }
- }
- return progress_in;
-}
-
-
-/*---------------------------------------------------*/
-static
-Bool copy_output_until_stop ( EState* s )
-{
- Bool progress_out = False;
-
- while (True) {
-
- /*-- no output space? --*/
- if (s->strm->avail_out == 0) break;
-
- /*-- block done? --*/
- if (s->state_out_pos >= s->numZ) break;
-
- progress_out = True;
- *(s->strm->next_out) = s->zbits[s->state_out_pos];
- s->state_out_pos++;
- s->strm->avail_out--;
- s->strm->next_out++;
- s->strm->total_out_lo32++;
- if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
- }
-
- return progress_out;
-}
-
-
-/*---------------------------------------------------*/
-static
-Bool handle_compress ( bz_stream* strm )
-{
- Bool progress_in = False;
- Bool progress_out = False;
- EState* s = strm->state;
-
- while (True) {
-
- if (s->state == BZ_S_OUTPUT) {
- progress_out |= copy_output_until_stop ( s );
- if (s->state_out_pos < s->numZ) break;
- if (s->mode == BZ_M_FINISHING &&
- s->avail_in_expect == 0 &&
- isempty_RL(s)) break;
- prepare_new_block ( s );
- s->state = BZ_S_INPUT;
- if (s->mode == BZ_M_FLUSHING &&
- s->avail_in_expect == 0 &&
- isempty_RL(s)) break;
- }
-
- if (s->state == BZ_S_INPUT) {
- progress_in |= copy_input_until_stop ( s );
- if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
- flush_RL ( s );
- BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
- s->state = BZ_S_OUTPUT;
- }
- else
- if (s->nblock >= s->nblockMAX) {
- BZ2_compressBlock ( s, False );
- s->state = BZ_S_OUTPUT;
- }
- else
- if (s->strm->avail_in == 0) {
- break;
- }
- }
-
- }
-
- return progress_in || progress_out;
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
-{
- Bool progress;
- EState* s;
- if (strm == NULL) return BZ_PARAM_ERROR;
- s = strm->state;
- if (s == NULL) return BZ_PARAM_ERROR;
- if (s->strm != strm) return BZ_PARAM_ERROR;
-
- preswitch:
- switch (s->mode) {
-
- case BZ_M_IDLE:
- return BZ_SEQUENCE_ERROR;
-
- case BZ_M_RUNNING:
- if (action == BZ_RUN) {
- progress = handle_compress ( strm );
- return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
- }
- else
- if (action == BZ_FLUSH) {
- s->avail_in_expect = strm->avail_in;
- s->mode = BZ_M_FLUSHING;
- goto preswitch;
- }
- else
- if (action == BZ_FINISH) {
- s->avail_in_expect = strm->avail_in;
- s->mode = BZ_M_FINISHING;
- goto preswitch;
- }
- else
- return BZ_PARAM_ERROR;
-
- case BZ_M_FLUSHING:
- if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
- if (s->avail_in_expect != s->strm->avail_in)
- return BZ_SEQUENCE_ERROR;
- progress = handle_compress ( strm );
- if (s->avail_in_expect > 0 || !isempty_RL(s) ||
- s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
- s->mode = BZ_M_RUNNING;
- return BZ_RUN_OK;
-
- case BZ_M_FINISHING:
- if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
- if (s->avail_in_expect != s->strm->avail_in)
- return BZ_SEQUENCE_ERROR;
- progress = handle_compress ( strm );
- if (!progress) return BZ_SEQUENCE_ERROR;
- if (s->avail_in_expect > 0 || !isempty_RL(s) ||
- s->state_out_pos < s->numZ) return BZ_FINISH_OK;
- s->mode = BZ_M_IDLE;
- return BZ_STREAM_END;
- }
- return BZ_OK; /*--not reached--*/
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm )
-{
- EState* s;
- if (strm == NULL) return BZ_PARAM_ERROR;
- s = strm->state;
- if (s == NULL) return BZ_PARAM_ERROR;
- if (s->strm != strm) return BZ_PARAM_ERROR;
-
- if (s->arr1 != NULL) BZFREE(s->arr1);
- if (s->arr2 != NULL) BZFREE(s->arr2);
- if (s->ftab != NULL) BZFREE(s->ftab);
- BZFREE(strm->state);
-
- strm->state = NULL;
-
- return BZ_OK;
-}
-
-
-/*---------------------------------------------------*/
-/*--- Decompression stuff ---*/
-/*---------------------------------------------------*/
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzDecompressInit)
- ( bz_stream* strm,
- int verbosity,
- int small )
-{
- DState* s;
-
- if (!bz_config_ok()) return BZ_CONFIG_ERROR;
-
- if (strm == NULL) return BZ_PARAM_ERROR;
- if (small != 0 && small != 1) return BZ_PARAM_ERROR;
- if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
-
- if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
- if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
-
- s = BZALLOC( sizeof(DState) );
- if (s == NULL) return BZ_MEM_ERROR;
- s->strm = strm;
- strm->state = s;
- s->state = BZ_X_MAGIC_1;
- s->bsLive = 0;
- s->bsBuff = 0;
- s->calculatedCombinedCRC = 0;
- strm->total_in_lo32 = 0;
- strm->total_in_hi32 = 0;
- strm->total_out_lo32 = 0;
- strm->total_out_hi32 = 0;
- s->smallDecompress = (Bool)small;
- s->ll4 = NULL;
- s->ll16 = NULL;
- s->tt = NULL;
- s->currBlockNo = 0;
- s->verbosity = verbosity;
-
- return BZ_OK;
-}
-
-
-/*---------------------------------------------------*/
-static
-void unRLE_obuf_to_output_FAST ( DState* s )
-{
- UChar k1;
-
- if (s->blockRandomised) {
-
- while (True) {
- /* try to finish existing run */
- while (True) {
- if (s->strm->avail_out == 0) return;
- if (s->state_out_len == 0) break;
- *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
- BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
- s->state_out_len--;
- s->strm->next_out++;
- s->strm->avail_out--;
- s->strm->total_out_lo32++;
- if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
- }
-
- /* can a new run be started? */
- if (s->nblock_used == s->save_nblock+1) return;
-
-
- s->state_out_len = 1;
- s->state_out_ch = s->k0;
- BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 2;
- BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 3;
- BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- s->state_out_len = ((Int32)k1) + 4;
- BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK;
- s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
- }
-
- } else {
-
- /* restore */
- UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
- UChar c_state_out_ch = s->state_out_ch;
- Int32 c_state_out_len = s->state_out_len;
- Int32 c_nblock_used = s->nblock_used;
- Int32 c_k0 = s->k0;
- UInt32* c_tt = s->tt;
- UInt32 c_tPos = s->tPos;
- char* cs_next_out = s->strm->next_out;
- unsigned int cs_avail_out = s->strm->avail_out;
- /* end restore */
-
- UInt32 avail_out_INIT = cs_avail_out;
- Int32 s_save_nblockPP = s->save_nblock+1;
- unsigned int total_out_lo32_old;
-
- while (True) {
-
- /* try to finish existing run */
- if (c_state_out_len > 0) {
- while (True) {
- if (cs_avail_out == 0) goto return_notr;
- if (c_state_out_len == 1) break;
- *( (UChar*)(cs_next_out) ) = c_state_out_ch;
- BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
- c_state_out_len--;
- cs_next_out++;
- cs_avail_out--;
- }
- s_state_out_len_eq_one:
- {
- if (cs_avail_out == 0) {
- c_state_out_len = 1; goto return_notr;
- };
- *( (UChar*)(cs_next_out) ) = c_state_out_ch;
- BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
- cs_next_out++;
- cs_avail_out--;
- }
- }
- /* can a new run be started? */
- if (c_nblock_used == s_save_nblockPP) {
- c_state_out_len = 0; goto return_notr;
- };
- c_state_out_ch = c_k0;
- BZ_GET_FAST_C(k1); c_nblock_used++;
- if (k1 != c_k0) {
- c_k0 = k1; goto s_state_out_len_eq_one;
- };
- if (c_nblock_used == s_save_nblockPP)
- goto s_state_out_len_eq_one;
-
- c_state_out_len = 2;
- BZ_GET_FAST_C(k1); c_nblock_used++;
- if (c_nblock_used == s_save_nblockPP) continue;
- if (k1 != c_k0) { c_k0 = k1; continue; };
-
- c_state_out_len = 3;
- BZ_GET_FAST_C(k1); c_nblock_used++;
- if (c_nblock_used == s_save_nblockPP) continue;
- if (k1 != c_k0) { c_k0 = k1; continue; };
-
- BZ_GET_FAST_C(k1); c_nblock_used++;
- c_state_out_len = ((Int32)k1) + 4;
- BZ_GET_FAST_C(c_k0); c_nblock_used++;
- }
-
- return_notr:
- total_out_lo32_old = s->strm->total_out_lo32;
- s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
- if (s->strm->total_out_lo32 < total_out_lo32_old)
- s->strm->total_out_hi32++;
-
- /* save */
- s->calculatedBlockCRC = c_calculatedBlockCRC;
- s->state_out_ch = c_state_out_ch;
- s->state_out_len = c_state_out_len;
- s->nblock_used = c_nblock_used;
- s->k0 = c_k0;
- s->tt = c_tt;
- s->tPos = c_tPos;
- s->strm->next_out = cs_next_out;
- s->strm->avail_out = cs_avail_out;
- /* end save */
- }
-}
-
-
-
-/*---------------------------------------------------*/
-__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
-{
- Int32 nb, na, mid;
- nb = 0;
- na = 256;
- do {
- mid = (nb + na) >> 1;
- if (indx >= cftab[mid]) nb = mid; else na = mid;
- }
- while (na - nb != 1);
- return nb;
-}
-
-
-/*---------------------------------------------------*/
-static
-void unRLE_obuf_to_output_SMALL ( DState* s )
-{
- UChar k1;
-
- if (s->blockRandomised) {
-
- while (True) {
- /* try to finish existing run */
- while (True) {
- if (s->strm->avail_out == 0) return;
- if (s->state_out_len == 0) break;
- *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
- BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
- s->state_out_len--;
- s->strm->next_out++;
- s->strm->avail_out--;
- s->strm->total_out_lo32++;
- if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
- }
-
- /* can a new run be started? */
- if (s->nblock_used == s->save_nblock+1) return;
-
-
- s->state_out_len = 1;
- s->state_out_ch = s->k0;
- BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 2;
- BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 3;
- BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
- k1 ^= BZ_RAND_MASK; s->nblock_used++;
- s->state_out_len = ((Int32)k1) + 4;
- BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK;
- s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
- }
-
- } else {
-
- while (True) {
- /* try to finish existing run */
- while (True) {
- if (s->strm->avail_out == 0) return;
- if (s->state_out_len == 0) break;
- *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
- BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
- s->state_out_len--;
- s->strm->next_out++;
- s->strm->avail_out--;
- s->strm->total_out_lo32++;
- if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
- }
-
- /* can a new run be started? */
- if (s->nblock_used == s->save_nblock+1) return;
-
- s->state_out_len = 1;
- s->state_out_ch = s->k0;
- BZ_GET_SMALL(k1); s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 2;
- BZ_GET_SMALL(k1); s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- s->state_out_len = 3;
- BZ_GET_SMALL(k1); s->nblock_used++;
- if (s->nblock_used == s->save_nblock+1) continue;
- if (k1 != s->k0) { s->k0 = k1; continue; };
-
- BZ_GET_SMALL(k1); s->nblock_used++;
- s->state_out_len = ((Int32)k1) + 4;
- BZ_GET_SMALL(s->k0); s->nblock_used++;
- }
-
- }
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
-{
- DState* s;
- if (strm == NULL) return BZ_PARAM_ERROR;
- s = strm->state;
- if (s == NULL) return BZ_PARAM_ERROR;
- if (s->strm != strm) return BZ_PARAM_ERROR;
-
- while (True) {
- if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
- if (s->state == BZ_X_OUTPUT) {
- if (s->smallDecompress)
- unRLE_obuf_to_output_SMALL ( s ); else
- unRLE_obuf_to_output_FAST ( s );
- if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
- BZ_FINALISE_CRC ( s->calculatedBlockCRC );
- if (s->verbosity >= 3)
- VPrintf2 ( " {0x%x, 0x%x}", s->storedBlockCRC,
- s->calculatedBlockCRC );
- if (s->verbosity >= 2) VPrintf0 ( "]" );
- if (s->calculatedBlockCRC != s->storedBlockCRC)
- return BZ_DATA_ERROR;
- s->calculatedCombinedCRC
- = (s->calculatedCombinedCRC << 1) |
- (s->calculatedCombinedCRC >> 31);
- s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
- s->state = BZ_X_BLKHDR_1;
- } else {
- return BZ_OK;
- }
- }
- if (s->state >= BZ_X_MAGIC_1) {
- Int32 r = BZ2_decompress ( s );
- if (r == BZ_STREAM_END) {
- if (s->verbosity >= 3)
- VPrintf2 ( "\n combined CRCs: stored = 0x%x, computed = 0x%x",
- s->storedCombinedCRC, s->calculatedCombinedCRC );
- if (s->calculatedCombinedCRC != s->storedCombinedCRC)
- return BZ_DATA_ERROR;
- return r;
- }
- if (s->state != BZ_X_OUTPUT) return r;
- }
- }
-
- AssertH ( 0, 6001 );
-
- return 0; /*NOTREACHED*/
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm )
-{
- DState* s;
- if (strm == NULL) return BZ_PARAM_ERROR;
- s = strm->state;
- if (s == NULL) return BZ_PARAM_ERROR;
- if (s->strm != strm) return BZ_PARAM_ERROR;
-
- if (s->tt != NULL) BZFREE(s->tt);
- if (s->ll16 != NULL) BZFREE(s->ll16);
- if (s->ll4 != NULL) BZFREE(s->ll4);
-
- BZFREE(strm->state);
- strm->state = NULL;
-
- return BZ_OK;
-}
-
-
-#ifndef BZ_NO_STDIO
-/*---------------------------------------------------*/
-/*--- File I/O stuff ---*/
-/*---------------------------------------------------*/
-
-#define BZ_SETERR(eee) \
-{ \
- if (bzerror != NULL) *bzerror = eee; \
- if (bzf != NULL) bzf->lastErr = eee; \
-}
-
-typedef
- struct {
- FILE* handle;
- Char buf[BZ_MAX_UNUSED];
- Int32 bufN;
- Bool writing;
- bz_stream strm;
- Int32 lastErr;
- Bool initialisedOk;
- }
- bzFile;
-
-
-/*---------------------------------------------*/
-static Bool myfeof ( FILE* f )
-{
- Int32 c = fgetc ( f );
- if (c == EOF) return True;
- ungetc ( c, f );
- return False;
-}
-
-
-/*---------------------------------------------------*/
-BZFILE* BZ_API(BZ2_bzWriteOpen)
- ( int* bzerror,
- FILE* f,
- int blockSize100k,
- int verbosity,
- int workFactor )
-{
- Int32 ret;
- bzFile* bzf = NULL;
-
- BZ_SETERR(BZ_OK);
-
- if (f == NULL ||
- (blockSize100k < 1 || blockSize100k > 9) ||
- (workFactor < 0 || workFactor > 250) ||
- (verbosity < 0 || verbosity > 4))
- { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
-
- if (ferror(f))
- { BZ_SETERR(BZ_IO_ERROR); return NULL; };
-
- bzf = malloc ( sizeof(bzFile) );
- if (bzf == NULL)
- { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
-
- BZ_SETERR(BZ_OK);
- bzf->initialisedOk = False;
- bzf->bufN = 0;
- bzf->handle = f;
- bzf->writing = True;
- bzf->strm.bzalloc = NULL;
- bzf->strm.bzfree = NULL;
- bzf->strm.opaque = NULL;
-
- if (workFactor == 0) workFactor = 30;
- ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k,
- verbosity, workFactor );
- if (ret != BZ_OK)
- { BZ_SETERR(ret); free(bzf); return NULL; };
-
- bzf->strm.avail_in = 0;
- bzf->initialisedOk = True;
- return bzf;
-}
-
-
-
-/*---------------------------------------------------*/
-void BZ_API(BZ2_bzWrite)
- ( int* bzerror,
- BZFILE* b,
- void* buf,
- int len )
-{
- Int32 n, n2, ret;
- bzFile* bzf = (bzFile*)b;
-
- BZ_SETERR(BZ_OK);
- if (bzf == NULL || buf == NULL || len < 0)
- { BZ_SETERR(BZ_PARAM_ERROR); return; };
- if (!(bzf->writing))
- { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
- if (ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return; };
-
- if (len == 0)
- { BZ_SETERR(BZ_OK); return; };
-
- bzf->strm.avail_in = len;
- bzf->strm.next_in = buf;
-
- while (True) {
- bzf->strm.avail_out = BZ_MAX_UNUSED;
- bzf->strm.next_out = bzf->buf;
- ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
- if (ret != BZ_RUN_OK)
- { BZ_SETERR(ret); return; };
-
- if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
- n = BZ_MAX_UNUSED - bzf->strm.avail_out;
- n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
- n, bzf->handle );
- if (n != n2 || ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return; };
- }
-
- if (bzf->strm.avail_in == 0)
- { BZ_SETERR(BZ_OK); return; };
- }
-}
-
-
-/*---------------------------------------------------*/
-void BZ_API(BZ2_bzWriteClose)
- ( int* bzerror,
- BZFILE* b,
- int abandon,
- unsigned int* nbytes_in,
- unsigned int* nbytes_out )
-{
- BZ2_bzWriteClose64 ( bzerror, b, abandon,
- nbytes_in, NULL, nbytes_out, NULL );
-}
-
-
-void BZ_API(BZ2_bzWriteClose64)
- ( int* bzerror,
- BZFILE* b,
- int abandon,
- unsigned int* nbytes_in_lo32,
- unsigned int* nbytes_in_hi32,
- unsigned int* nbytes_out_lo32,
- unsigned int* nbytes_out_hi32 )
-{
- Int32 n, n2, ret;
- bzFile* bzf = (bzFile*)b;
-
- if (bzf == NULL)
- { BZ_SETERR(BZ_OK); return; };
- if (!(bzf->writing))
- { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
- if (ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return; };
-
- if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
- if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
- if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
- if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
-
- if ((!abandon) && bzf->lastErr == BZ_OK) {
- while (True) {
- bzf->strm.avail_out = BZ_MAX_UNUSED;
- bzf->strm.next_out = bzf->buf;
- ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
- if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
- { BZ_SETERR(ret); return; };
-
- if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
- n = BZ_MAX_UNUSED - bzf->strm.avail_out;
- n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
- n, bzf->handle );
- if (n != n2 || ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return; };
- }
-
- if (ret == BZ_STREAM_END) break;
- }
- }
-
- if ( !abandon && !ferror ( bzf->handle ) ) {
- fflush ( bzf->handle );
- if (ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return; };
- }
-
- if (nbytes_in_lo32 != NULL)
- *nbytes_in_lo32 = bzf->strm.total_in_lo32;
- if (nbytes_in_hi32 != NULL)
- *nbytes_in_hi32 = bzf->strm.total_in_hi32;
- if (nbytes_out_lo32 != NULL)
- *nbytes_out_lo32 = bzf->strm.total_out_lo32;
- if (nbytes_out_hi32 != NULL)
- *nbytes_out_hi32 = bzf->strm.total_out_hi32;
-
- BZ_SETERR(BZ_OK);
- BZ2_bzCompressEnd ( &(bzf->strm) );
- free ( bzf );
-}
-
-
-/*---------------------------------------------------*/
-BZFILE* BZ_API(BZ2_bzReadOpen)
- ( int* bzerror,
- FILE* f,
- int verbosity,
- int small,
- void* unused,
- int nUnused )
-{
- bzFile* bzf = NULL;
- int ret;
-
- BZ_SETERR(BZ_OK);
-
- if (f == NULL ||
- (small != 0 && small != 1) ||
- (verbosity < 0 || verbosity > 4) ||
- (unused == NULL && nUnused != 0) ||
- (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
- { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
-
- if (ferror(f))
- { BZ_SETERR(BZ_IO_ERROR); return NULL; };
-
- bzf = malloc ( sizeof(bzFile) );
- if (bzf == NULL)
- { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
-
- BZ_SETERR(BZ_OK);
-
- bzf->initialisedOk = False;
- bzf->handle = f;
- bzf->bufN = 0;
- bzf->writing = False;
- bzf->strm.bzalloc = NULL;
- bzf->strm.bzfree = NULL;
- bzf->strm.opaque = NULL;
-
- while (nUnused > 0) {
- bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
- unused = ((void*)( 1 + ((UChar*)(unused)) ));
- nUnused--;
- }
-
- ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
- if (ret != BZ_OK)
- { BZ_SETERR(ret); free(bzf); return NULL; };
-
- bzf->strm.avail_in = bzf->bufN;
- bzf->strm.next_in = bzf->buf;
-
- bzf->initialisedOk = True;
- return bzf;
-}
-
-
-/*---------------------------------------------------*/
-void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
-{
- bzFile* bzf = (bzFile*)b;
-
- BZ_SETERR(BZ_OK);
- if (bzf == NULL)
- { BZ_SETERR(BZ_OK); return; };
-
- if (bzf->writing)
- { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
-
- if (bzf->initialisedOk)
- (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
- free ( bzf );
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzRead)
- ( int* bzerror,
- BZFILE* b,
- void* buf,
- int len )
-{
- Int32 n, ret;
- bzFile* bzf = (bzFile*)b;
-
- BZ_SETERR(BZ_OK);
-
- if (bzf == NULL || buf == NULL || len < 0)
- { BZ_SETERR(BZ_PARAM_ERROR); return 0; };
-
- if (bzf->writing)
- { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
-
- if (len == 0)
- { BZ_SETERR(BZ_OK); return 0; };
-
- bzf->strm.avail_out = len;
- bzf->strm.next_out = buf;
-
- while (True) {
-
- if (ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return 0; };
-
- if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
- n = fread ( bzf->buf, sizeof(UChar),
- BZ_MAX_UNUSED, bzf->handle );
- if (ferror(bzf->handle))
- { BZ_SETERR(BZ_IO_ERROR); return 0; };
- bzf->bufN = n;
- bzf->strm.avail_in = bzf->bufN;
- bzf->strm.next_in = bzf->buf;
- }
-
- ret = BZ2_bzDecompress ( &(bzf->strm) );
-
- if (ret != BZ_OK && ret != BZ_STREAM_END)
- { BZ_SETERR(ret); return 0; };
-
- if (ret == BZ_OK && myfeof(bzf->handle) &&
- bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
- { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
-
- if (ret == BZ_STREAM_END)
- { BZ_SETERR(BZ_STREAM_END);
- return len - bzf->strm.avail_out; };
- if (bzf->strm.avail_out == 0)
- { BZ_SETERR(BZ_OK); return len; };
-
- }
-
- return 0; /*not reached*/
-}
-
-
-/*---------------------------------------------------*/
-void BZ_API(BZ2_bzReadGetUnused)
- ( int* bzerror,
- BZFILE* b,
- void** unused,
- int* nUnused )
-{
- bzFile* bzf = (bzFile*)b;
- if (bzf == NULL)
- { BZ_SETERR(BZ_PARAM_ERROR); return; };
- if (bzf->lastErr != BZ_STREAM_END)
- { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
- if (unused == NULL || nUnused == NULL)
- { BZ_SETERR(BZ_PARAM_ERROR); return; };
-
- BZ_SETERR(BZ_OK);
- *nUnused = bzf->strm.avail_in;
- *unused = bzf->strm.next_in;
-}
-#endif
-
-
-/*---------------------------------------------------*/
-/*--- Misc convenience stuff ---*/
-/*---------------------------------------------------*/
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzBuffToBuffCompress)
- ( char* dest,
- unsigned int* destLen,
- char* source,
- unsigned int sourceLen,
- int blockSize100k,
- int verbosity,
- int workFactor )
-{
- bz_stream strm;
- int ret;
-
- if (dest == NULL || destLen == NULL ||
- source == NULL ||
- blockSize100k < 1 || blockSize100k > 9 ||
- verbosity < 0 || verbosity > 4 ||
- workFactor < 0 || workFactor > 250)
- return BZ_PARAM_ERROR;
-
- if (workFactor == 0) workFactor = 30;
- strm.bzalloc = NULL;
- strm.bzfree = NULL;
- strm.opaque = NULL;
- ret = BZ2_bzCompressInit ( &strm, blockSize100k,
- verbosity, workFactor );
- if (ret != BZ_OK) return ret;
-
- strm.next_in = source;
- strm.next_out = dest;
- strm.avail_in = sourceLen;
- strm.avail_out = *destLen;
-
- ret = BZ2_bzCompress ( &strm, BZ_FINISH );
- if (ret == BZ_FINISH_OK) goto output_overflow;
- if (ret != BZ_STREAM_END) goto errhandler;
-
- /* normal termination */
- *destLen -= strm.avail_out;
- BZ2_bzCompressEnd ( &strm );
- return BZ_OK;
-
- output_overflow:
- BZ2_bzCompressEnd ( &strm );
- return BZ_OUTBUFF_FULL;
-
- errhandler:
- BZ2_bzCompressEnd ( &strm );
- return ret;
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzBuffToBuffDecompress)
- ( char* dest,
- unsigned int* destLen,
- char* source,
- unsigned int sourceLen,
- int small,
- int verbosity )
-{
- bz_stream strm;
- int ret;
-
- if (dest == NULL || destLen == NULL ||
- source == NULL ||
- (small != 0 && small != 1) ||
- verbosity < 0 || verbosity > 4)
- return BZ_PARAM_ERROR;
-
- strm.bzalloc = NULL;
- strm.bzfree = NULL;
- strm.opaque = NULL;
- ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
- if (ret != BZ_OK) return ret;
-
- strm.next_in = source;
- strm.next_out = dest;
- strm.avail_in = sourceLen;
- strm.avail_out = *destLen;
-
- ret = BZ2_bzDecompress ( &strm );
- if (ret == BZ_OK) goto output_overflow_or_eof;
- if (ret != BZ_STREAM_END) goto errhandler;
-
- /* normal termination */
- *destLen -= strm.avail_out;
- BZ2_bzDecompressEnd ( &strm );
- return BZ_OK;
-
- output_overflow_or_eof:
- if (strm.avail_out > 0) {
- BZ2_bzDecompressEnd ( &strm );
- return BZ_UNEXPECTED_EOF;
- } else {
- BZ2_bzDecompressEnd ( &strm );
- return BZ_OUTBUFF_FULL;
- };
-
- errhandler:
- BZ2_bzDecompressEnd ( &strm );
- return ret;
-}
-
-
-/*---------------------------------------------------*/
-/*--
- Code contributed by Yoshioka Tsuneo
- (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp),
- to support better zlib compatibility.
- This code is not _officially_ part of libbzip2 (yet);
- I haven't tested it, documented it, or considered the
- threading-safeness of it.
- If this code breaks, please contact both Yoshioka and me.
---*/
-/*---------------------------------------------------*/
-
-/*---------------------------------------------------*/
-/*--
- return version like "0.9.0c".
---*/
-const char * BZ_API(BZ2_bzlibVersion)(void)
-{
- return BZ_VERSION;
-}
-
-
-#ifndef BZ_NO_STDIO
-/*---------------------------------------------------*/
-
-#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
-# include <fcntl.h>
-# include <io.h>
-# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
-#else
-# define SET_BINARY_MODE(file)
-#endif
-static
-BZFILE * bzopen_or_bzdopen
- ( const char *path, /* no use when bzdopen */
- int fd, /* no use when bzdopen */
- const char *mode,
- int open_mode) /* bzopen: 0, bzdopen:1 */
-{
- int bzerr;
- char unused[BZ_MAX_UNUSED];
- int blockSize100k = 9;
- int writing = 0;
- char mode2[10] = "";
- FILE *fp = NULL;
- BZFILE *bzfp = NULL;
- int verbosity = 0;
- int workFactor = 30;
- int smallMode = 0;
- int nUnused = 0;
-
- if (mode == NULL) return NULL;
- while (*mode) {
- switch (*mode) {
- case 'r':
- writing = 0; break;
- case 'w':
- writing = 1; break;
- case 's':
- smallMode = 1; break;
- default:
- if (isdigit((int)(*mode))) {
- blockSize100k = *mode-BZ_HDR_0;
- }
- }
- mode++;
- }
- strcat(mode2, writing ? "w" : "r" );
- strcat(mode2,"b"); /* binary mode */
-
- if (open_mode==0) {
- if (path==NULL || strcmp(path,"")==0) {
- fp = (writing ? stdout : stdin);
- SET_BINARY_MODE(fp);
- } else {
- fp = fopen(path,mode2);
- }
- } else {
-#ifdef BZ_STRICT_ANSI
- fp = NULL;
-#else
- fp = fdopen(fd,mode2);
-#endif
- }
- if (fp == NULL) return NULL;
-
- if (writing) {
- /* Guard against total chaos and anarchy -- JRS */
- if (blockSize100k < 1) blockSize100k = 1;
- if (blockSize100k > 9) blockSize100k = 9;
- bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
- verbosity,workFactor);
- } else {
- bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
- unused,nUnused);
- }
- if (bzfp == NULL) {
- if (fp != stdin && fp != stdout) fclose(fp);
- return NULL;
- }
- return bzfp;
-}
-
-
-/*---------------------------------------------------*/
-/*--
- open file for read or write.
- ex) bzopen("file","w9")
- case path="" or NULL => use stdin or stdout.
---*/
-BZFILE * BZ_API(BZ2_bzopen)
- ( const char *path,
- const char *mode )
-{
- return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
-}
-
-
-/*---------------------------------------------------*/
-BZFILE * BZ_API(BZ2_bzdopen)
- ( int fd,
- const char *mode )
-{
- return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
-{
- int bzerr, nread;
- if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
- nread = BZ2_bzRead(&bzerr,b,buf,len);
- if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
- return nread;
- } else {
- return -1;
- }
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
-{
- int bzerr;
-
- BZ2_bzWrite(&bzerr,b,buf,len);
- if(bzerr == BZ_OK){
- return len;
- }else{
- return -1;
- }
-}
-
-
-/*---------------------------------------------------*/
-int BZ_API(BZ2_bzflush) (BZFILE *b)
-{
- /* do nothing now... */
- return 0;
-}
-
-
-/*---------------------------------------------------*/
-void BZ_API(BZ2_bzclose) (BZFILE* b)
-{
- int bzerr;
- FILE *fp = ((bzFile *)b)->handle;
-
- if (b==NULL) {return;}
- if(((bzFile*)b)->writing){
- BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
- if(bzerr != BZ_OK){
- BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
- }
- }else{
- BZ2_bzReadClose(&bzerr,b);
- }
- if(fp!=stdin && fp!=stdout){
- fclose(fp);
- }
-}
-
-
-/*---------------------------------------------------*/
-/*--
- return last error code
---*/
-static char *bzerrorstrings[] = {
- "OK"
- ,"SEQUENCE_ERROR"
- ,"PARAM_ERROR"
- ,"MEM_ERROR"
- ,"DATA_ERROR"
- ,"DATA_ERROR_MAGIC"
- ,"IO_ERROR"
- ,"UNEXPECTED_EOF"
- ,"OUTBUFF_FULL"
- ,"CONFIG_ERROR"
- ,"???" /* for future */
- ,"???" /* for future */
- ,"???" /* for future */
- ,"???" /* for future */
- ,"???" /* for future */
- ,"???" /* for future */
-};
-
-
-const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
-{
- int err = ((bzFile *)b)->lastErr;
-
- if(err>0) err = 0;
- *errnum = err;
- return bzerrorstrings[err*-1];
-}
-#endif
-
-
-/*-------------------------------------------------------------*/
-/*--- end bzlib.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/bzlib.h b/cpp/src/IcePatch/bzlib.h
deleted file mode 100644
index 9ac43a169da..00000000000
--- a/cpp/src/IcePatch/bzlib.h
+++ /dev/null
@@ -1,321 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Public header file for the library. ---*/
-/*--- bzlib.h ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#ifndef _BZLIB_H
-#define _BZLIB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define BZ_RUN 0
-#define BZ_FLUSH 1
-#define BZ_FINISH 2
-
-#define BZ_OK 0
-#define BZ_RUN_OK 1
-#define BZ_FLUSH_OK 2
-#define BZ_FINISH_OK 3
-#define BZ_STREAM_END 4
-#define BZ_SEQUENCE_ERROR (-1)
-#define BZ_PARAM_ERROR (-2)
-#define BZ_MEM_ERROR (-3)
-#define BZ_DATA_ERROR (-4)
-#define BZ_DATA_ERROR_MAGIC (-5)
-#define BZ_IO_ERROR (-6)
-#define BZ_UNEXPECTED_EOF (-7)
-#define BZ_OUTBUFF_FULL (-8)
-#define BZ_CONFIG_ERROR (-9)
-
-typedef
- struct {
- char *next_in;
- unsigned int avail_in;
- unsigned int total_in_lo32;
- unsigned int total_in_hi32;
-
- char *next_out;
- unsigned int avail_out;
- unsigned int total_out_lo32;
- unsigned int total_out_hi32;
-
- void *state;
-
- void *(*bzalloc)(void *,int,int);
- void (*bzfree)(void *,void *);
- void *opaque;
- }
- bz_stream;
-
-
-#ifndef BZ_IMPORT
-#define BZ_EXPORT
-#endif
-
-/* Need a definitition for FILE */
-#include <stdio.h>
-
-#ifdef _WIN32
-# include <windows.h>
-# ifdef small
- /* windows.h define small to char */
-# undef small
-# endif
-# ifdef BZ_EXPORT
-# define BZ_API(func) WINAPI func
-# define BZ_EXTERN extern
-# else
- /* import windows dll dynamically */
-# define BZ_API(func) (WINAPI * func)
-# define BZ_EXTERN
-# endif
-#else
-# define BZ_API(func) func
-# define BZ_EXTERN extern
-#endif
-
-
-/*-- Core (low-level) library functions --*/
-
-BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
- bz_stream* strm,
- int blockSize100k,
- int verbosity,
- int workFactor
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzCompress) (
- bz_stream* strm,
- int action
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
- bz_stream* strm
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
- bz_stream *strm,
- int verbosity,
- int small
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
- bz_stream* strm
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
- bz_stream *strm
- );
-
-
-
-/*-- High(er) level library functions --*/
-
-#ifndef BZ_NO_STDIO
-#define BZ_MAX_UNUSED 5000
-
-typedef void BZFILE;
-
-BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
- int* bzerror,
- FILE* f,
- int verbosity,
- int small,
- void* unused,
- int nUnused
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
- int* bzerror,
- BZFILE* b
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
- int* bzerror,
- BZFILE* b,
- void** unused,
- int* nUnused
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzRead) (
- int* bzerror,
- BZFILE* b,
- void* buf,
- int len
- );
-
-BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
- int* bzerror,
- FILE* f,
- int blockSize100k,
- int verbosity,
- int workFactor
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzWrite) (
- int* bzerror,
- BZFILE* b,
- void* buf,
- int len
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
- int* bzerror,
- BZFILE* b,
- int abandon,
- unsigned int* nbytes_in,
- unsigned int* nbytes_out
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
- int* bzerror,
- BZFILE* b,
- int abandon,
- unsigned int* nbytes_in_lo32,
- unsigned int* nbytes_in_hi32,
- unsigned int* nbytes_out_lo32,
- unsigned int* nbytes_out_hi32
- );
-#endif
-
-
-/*-- Utility functions --*/
-
-BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
- char* dest,
- unsigned int* destLen,
- char* source,
- unsigned int sourceLen,
- int blockSize100k,
- int verbosity,
- int workFactor
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
- char* dest,
- unsigned int* destLen,
- char* source,
- unsigned int sourceLen,
- int small,
- int verbosity
- );
-
-
-/*--
- Code contributed by Yoshioka Tsuneo
- (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp),
- to support better zlib compatibility.
- This code is not _officially_ part of libbzip2 (yet);
- I haven't tested it, documented it, or considered the
- threading-safeness of it.
- If this code breaks, please contact both Yoshioka and me.
---*/
-
-BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
- void
- );
-
-#ifndef BZ_NO_STDIO
-BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
- const char *path,
- const char *mode
- );
-
-BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
- int fd,
- const char *mode
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzread) (
- BZFILE* b,
- void* buf,
- int len
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzwrite) (
- BZFILE* b,
- void* buf,
- int len
- );
-
-BZ_EXTERN int BZ_API(BZ2_bzflush) (
- BZFILE* b
- );
-
-BZ_EXTERN void BZ_API(BZ2_bzclose) (
- BZFILE* b
- );
-
-BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
- BZFILE *b,
- int *errnum
- );
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/*-------------------------------------------------------------*/
-/*--- end bzlib.h ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/bzlib_private.h b/cpp/src/IcePatch/bzlib_private.h
deleted file mode 100644
index ff973c3bfd0..00000000000
--- a/cpp/src/IcePatch/bzlib_private.h
+++ /dev/null
@@ -1,537 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Private header file for the library. ---*/
-/*--- bzlib_private.h ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#ifndef _BZLIB_PRIVATE_H
-#define _BZLIB_PRIVATE_H
-
-#include <stdlib.h>
-
-#ifndef BZ_NO_STDIO
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#endif
-
-#include "bzlib.h"
-
-
-
-/*-- General stuff. --*/
-
-#define BZ_VERSION "1.0.2, 30-Dec-2001"
-
-typedef char Char;
-typedef unsigned char Bool;
-typedef unsigned char UChar;
-typedef int Int32;
-typedef unsigned int UInt32;
-typedef short Int16;
-typedef unsigned short UInt16;
-
-#define True ((Bool)1)
-#define False ((Bool)0)
-
-#ifndef __GNUC__
-#define __inline__ /* */
-#endif
-
-#ifndef BZ_NO_STDIO
-extern void BZ2_bz__AssertH__fail ( int errcode );
-#define AssertH(cond,errcode) \
- { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
-#if BZ_DEBUG
-#define AssertD(cond,msg) \
- { if (!(cond)) { \
- fprintf ( stderr, \
- "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
- exit(1); \
- }}
-#else
-#define AssertD(cond,msg) /* */
-#endif
-#define VPrintf0(zf) \
- fprintf(stderr,zf)
-#define VPrintf1(zf,za1) \
- fprintf(stderr,zf,za1)
-#define VPrintf2(zf,za1,za2) \
- fprintf(stderr,zf,za1,za2)
-#define VPrintf3(zf,za1,za2,za3) \
- fprintf(stderr,zf,za1,za2,za3)
-#define VPrintf4(zf,za1,za2,za3,za4) \
- fprintf(stderr,zf,za1,za2,za3,za4)
-#define VPrintf5(zf,za1,za2,za3,za4,za5) \
- fprintf(stderr,zf,za1,za2,za3,za4,za5)
-#else
-extern void bz_internal_error ( int errcode );
-#define AssertH(cond,errcode) \
- { if (!(cond)) bz_internal_error ( errcode ); }
-#define AssertD(cond,msg) /* */
-#define VPrintf0(zf) /* */
-#define VPrintf1(zf,za1) /* */
-#define VPrintf2(zf,za1,za2) /* */
-#define VPrintf3(zf,za1,za2,za3) /* */
-#define VPrintf4(zf,za1,za2,za3,za4) /* */
-#define VPrintf5(zf,za1,za2,za3,za4,za5) /* */
-#endif
-
-
-#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
-#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
-
-
-/*-- Header bytes. --*/
-
-#define BZ_HDR_B 0x42 /* 'B' */
-#define BZ_HDR_Z 0x5a /* 'Z' */
-#define BZ_HDR_h 0x68 /* 'h' */
-#define BZ_HDR_0 0x30 /* '0' */
-
-/*-- Constants for the back end. --*/
-
-#define BZ_MAX_ALPHA_SIZE 258
-#define BZ_MAX_CODE_LEN 23
-
-#define BZ_RUNA 0
-#define BZ_RUNB 1
-
-#define BZ_N_GROUPS 6
-#define BZ_G_SIZE 50
-#define BZ_N_ITERS 4
-
-#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
-
-
-
-/*-- Stuff for randomising repetitive blocks. --*/
-
-extern Int32 BZ2_rNums[512];
-
-#define BZ_RAND_DECLS \
- Int32 rNToGo; \
- Int32 rTPos \
-
-#define BZ_RAND_INIT_MASK \
- s->rNToGo = 0; \
- s->rTPos = 0 \
-
-#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
-
-#define BZ_RAND_UPD_MASK \
- if (s->rNToGo == 0) { \
- s->rNToGo = BZ2_rNums[s->rTPos]; \
- s->rTPos++; \
- if (s->rTPos == 512) s->rTPos = 0; \
- } \
- s->rNToGo--;
-
-
-
-/*-- Stuff for doing CRCs. --*/
-
-extern UInt32 BZ2_crc32Table[256];
-
-#define BZ_INITIALISE_CRC(crcVar) \
-{ \
- crcVar = 0xffffffffL; \
-}
-
-#define BZ_FINALISE_CRC(crcVar) \
-{ \
- crcVar = ~(crcVar); \
-}
-
-#define BZ_UPDATE_CRC(crcVar,cha) \
-{ \
- crcVar = (crcVar << 8) ^ \
- BZ2_crc32Table[(crcVar >> 24) ^ \
- ((UChar)cha)]; \
-}
-
-
-
-/*-- States and modes for compression. --*/
-
-#define BZ_M_IDLE 1
-#define BZ_M_RUNNING 2
-#define BZ_M_FLUSHING 3
-#define BZ_M_FINISHING 4
-
-#define BZ_S_OUTPUT 1
-#define BZ_S_INPUT 2
-
-#define BZ_N_RADIX 2
-#define BZ_N_QSORT 12
-#define BZ_N_SHELL 18
-#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
-
-
-
-
-/*-- Structure holding all the compression-side stuff. --*/
-
-typedef
- struct {
- /* pointer back to the struct bz_stream */
- bz_stream* strm;
-
- /* mode this stream is in, and whether inputting */
- /* or outputting data */
- Int32 mode;
- Int32 state;
-
- /* remembers avail_in when flush/finish requested */
- UInt32 avail_in_expect;
-
- /* for doing the block sorting */
- UInt32* arr1;
- UInt32* arr2;
- UInt32* ftab;
- Int32 origPtr;
-
- /* aliases for arr1 and arr2 */
- UInt32* ptr;
- UChar* block;
- UInt16* mtfv;
- UChar* zbits;
-
- /* for deciding when to use the fallback sorting algorithm */
- Int32 workFactor;
-
- /* run-length-encoding of the input */
- UInt32 state_in_ch;
- Int32 state_in_len;
- BZ_RAND_DECLS;
-
- /* input and output limits and current posns */
- Int32 nblock;
- Int32 nblockMAX;
- Int32 numZ;
- Int32 state_out_pos;
-
- /* map of bytes used in block */
- Int32 nInUse;
- Bool inUse[256];
- UChar unseqToSeq[256];
-
- /* the buffer for bit stream creation */
- UInt32 bsBuff;
- Int32 bsLive;
-
- /* block and combined CRCs */
- UInt32 blockCRC;
- UInt32 combinedCRC;
-
- /* misc administratium */
- Int32 verbosity;
- Int32 blockNo;
- Int32 blockSize100k;
-
- /* stuff for coding the MTF values */
- Int32 nMTF;
- Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
- UChar selector [BZ_MAX_SELECTORS];
- UChar selectorMtf[BZ_MAX_SELECTORS];
-
- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- /* second dimension: only 3 needed; 4 makes index calculations faster */
- UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
-
- }
- EState;
-
-
-
-/*-- externs for compression. --*/
-
-extern void
-BZ2_blockSort ( EState* );
-
-extern void
-BZ2_compressBlock ( EState*, Bool );
-
-extern void
-BZ2_bsInitWrite ( EState* );
-
-extern void
-BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
-
-extern void
-BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
-
-
-
-/*-- states for decompression. --*/
-
-#define BZ_X_IDLE 1
-#define BZ_X_OUTPUT 2
-
-#define BZ_X_MAGIC_1 10
-#define BZ_X_MAGIC_2 11
-#define BZ_X_MAGIC_3 12
-#define BZ_X_MAGIC_4 13
-#define BZ_X_BLKHDR_1 14
-#define BZ_X_BLKHDR_2 15
-#define BZ_X_BLKHDR_3 16
-#define BZ_X_BLKHDR_4 17
-#define BZ_X_BLKHDR_5 18
-#define BZ_X_BLKHDR_6 19
-#define BZ_X_BCRC_1 20
-#define BZ_X_BCRC_2 21
-#define BZ_X_BCRC_3 22
-#define BZ_X_BCRC_4 23
-#define BZ_X_RANDBIT 24
-#define BZ_X_ORIGPTR_1 25
-#define BZ_X_ORIGPTR_2 26
-#define BZ_X_ORIGPTR_3 27
-#define BZ_X_MAPPING_1 28
-#define BZ_X_MAPPING_2 29
-#define BZ_X_SELECTOR_1 30
-#define BZ_X_SELECTOR_2 31
-#define BZ_X_SELECTOR_3 32
-#define BZ_X_CODING_1 33
-#define BZ_X_CODING_2 34
-#define BZ_X_CODING_3 35
-#define BZ_X_MTF_1 36
-#define BZ_X_MTF_2 37
-#define BZ_X_MTF_3 38
-#define BZ_X_MTF_4 39
-#define BZ_X_MTF_5 40
-#define BZ_X_MTF_6 41
-#define BZ_X_ENDHDR_2 42
-#define BZ_X_ENDHDR_3 43
-#define BZ_X_ENDHDR_4 44
-#define BZ_X_ENDHDR_5 45
-#define BZ_X_ENDHDR_6 46
-#define BZ_X_CCRC_1 47
-#define BZ_X_CCRC_2 48
-#define BZ_X_CCRC_3 49
-#define BZ_X_CCRC_4 50
-
-
-
-/*-- Constants for the fast MTF decoder. --*/
-
-#define MTFA_SIZE 4096
-#define MTFL_SIZE 16
-
-
-
-/*-- Structure holding all the decompression-side stuff. --*/
-
-typedef
- struct {
- /* pointer back to the struct bz_stream */
- bz_stream* strm;
-
- /* state indicator for this stream */
- Int32 state;
-
- /* for doing the final run-length decoding */
- UChar state_out_ch;
- Int32 state_out_len;
- Bool blockRandomised;
- BZ_RAND_DECLS;
-
- /* the buffer for bit stream reading */
- UInt32 bsBuff;
- Int32 bsLive;
-
- /* misc administratium */
- Int32 blockSize100k;
- Bool smallDecompress;
- Int32 currBlockNo;
- Int32 verbosity;
-
- /* for undoing the Burrows-Wheeler transform */
- Int32 origPtr;
- UInt32 tPos;
- Int32 k0;
- Int32 unzftab[256];
- Int32 nblock_used;
- Int32 cftab[257];
- Int32 cftabCopy[257];
-
- /* for undoing the Burrows-Wheeler transform (FAST) */
- UInt32 *tt;
-
- /* for undoing the Burrows-Wheeler transform (SMALL) */
- UInt16 *ll16;
- UChar *ll4;
-
- /* stored and calculated CRCs */
- UInt32 storedBlockCRC;
- UInt32 storedCombinedCRC;
- UInt32 calculatedBlockCRC;
- UInt32 calculatedCombinedCRC;
-
- /* map of bytes used in block */
- Int32 nInUse;
- Bool inUse[256];
- Bool inUse16[16];
- UChar seqToUnseq[256];
-
- /* for decoding the MTF values */
- UChar mtfa [MTFA_SIZE];
- Int32 mtfbase[256 / MTFL_SIZE];
- UChar selector [BZ_MAX_SELECTORS];
- UChar selectorMtf[BZ_MAX_SELECTORS];
- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-
- Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 minLens[BZ_N_GROUPS];
-
- /* save area for scalars in the main decompress code */
- Int32 save_i;
- Int32 save_j;
- Int32 save_t;
- Int32 save_alphaSize;
- Int32 save_nGroups;
- Int32 save_nSelectors;
- Int32 save_EOB;
- Int32 save_groupNo;
- Int32 save_groupPos;
- Int32 save_nextSym;
- Int32 save_nblockMAX;
- Int32 save_nblock;
- Int32 save_es;
- Int32 save_N;
- Int32 save_curr;
- Int32 save_zt;
- Int32 save_zn;
- Int32 save_zvec;
- Int32 save_zj;
- Int32 save_gSel;
- Int32 save_gMinlen;
- Int32* save_gLimit;
- Int32* save_gBase;
- Int32* save_gPerm;
-
- }
- DState;
-
-
-
-/*-- Macros for decompression. --*/
-
-#define BZ_GET_FAST(cccc) \
- s->tPos = s->tt[s->tPos]; \
- cccc = (UChar)(s->tPos & 0xff); \
- s->tPos >>= 8;
-
-#define BZ_GET_FAST_C(cccc) \
- c_tPos = c_tt[c_tPos]; \
- cccc = (UChar)(c_tPos & 0xff); \
- c_tPos >>= 8;
-
-#define SET_LL4(i,n) \
- { if (((i) & 0x1) == 0) \
- s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
- s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
- }
-
-#define GET_LL4(i) \
- ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
-
-#define SET_LL(i,n) \
- { s->ll16[i] = (UInt16)(n & 0x0000ffff); \
- SET_LL4(i, n >> 16); \
- }
-
-#define GET_LL(i) \
- (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
-
-#define BZ_GET_SMALL(cccc) \
- cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
- s->tPos = GET_LL(s->tPos);
-
-
-/*-- externs for decompression. --*/
-
-extern Int32
-BZ2_indexIntoF ( Int32, Int32* );
-
-extern Int32
-BZ2_decompress ( DState* );
-
-extern void
-BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
- Int32, Int32, Int32 );
-
-
-#endif
-
-
-/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
-
-#ifdef BZ_NO_STDIO
-#ifndef NULL
-#define NULL 0
-#endif
-#endif
-
-
-/*-------------------------------------------------------------*/
-/*--- end bzlib_private.h ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/compress.c b/cpp/src/IcePatch/compress.c
deleted file mode 100644
index 56501c11553..00000000000
--- a/cpp/src/IcePatch/compress.c
+++ /dev/null
@@ -1,714 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Compression machinery (not incl block sorting) ---*/
-/*--- compress.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-/*--
- CHANGES
- ~~~~~~~
- 0.9.0 -- original version.
-
- 0.9.0a/b -- no changes in this file.
-
- 0.9.0c
- * changed setting of nGroups in sendMTFValues() so as to
- do a bit better on small files
---*/
-
-#include "bzlib_private.h"
-
-
-/*---------------------------------------------------*/
-/*--- Bit stream I/O ---*/
-/*---------------------------------------------------*/
-
-/*---------------------------------------------------*/
-void BZ2_bsInitWrite ( EState* s )
-{
- s->bsLive = 0;
- s->bsBuff = 0;
-}
-
-
-/*---------------------------------------------------*/
-static
-void bsFinishWrite ( EState* s )
-{
- while (s->bsLive > 0) {
- s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
- s->numZ++;
- s->bsBuff <<= 8;
- s->bsLive -= 8;
- }
-}
-
-
-/*---------------------------------------------------*/
-#define bsNEEDW(nz) \
-{ \
- while (s->bsLive >= 8) { \
- s->zbits[s->numZ] \
- = (UChar)(s->bsBuff >> 24); \
- s->numZ++; \
- s->bsBuff <<= 8; \
- s->bsLive -= 8; \
- } \
-}
-
-
-/*---------------------------------------------------*/
-static
-__inline__
-void bsW ( EState* s, Int32 n, UInt32 v )
-{
- bsNEEDW ( n );
- s->bsBuff |= (v << (32 - s->bsLive - n));
- s->bsLive += n;
-}
-
-
-/*---------------------------------------------------*/
-static
-void bsPutUInt32 ( EState* s, UInt32 u )
-{
- bsW ( s, 8, (u >> 24) & 0xffL );
- bsW ( s, 8, (u >> 16) & 0xffL );
- bsW ( s, 8, (u >> 8) & 0xffL );
- bsW ( s, 8, u & 0xffL );
-}
-
-
-/*---------------------------------------------------*/
-static
-void bsPutUChar ( EState* s, UChar c )
-{
- bsW( s, 8, (UInt32)c );
-}
-
-
-/*---------------------------------------------------*/
-/*--- The back end proper ---*/
-/*---------------------------------------------------*/
-
-/*---------------------------------------------------*/
-static
-void makeMaps_e ( EState* s )
-{
- Int32 i;
- s->nInUse = 0;
- for (i = 0; i < 256; i++)
- if (s->inUse[i]) {
- s->unseqToSeq[i] = s->nInUse;
- s->nInUse++;
- }
-}
-
-
-/*---------------------------------------------------*/
-static
-void generateMTFValues ( EState* s )
-{
- UChar yy[256];
- Int32 i, j;
- Int32 zPend;
- Int32 wr;
- Int32 EOB;
-
- /*
- After sorting (eg, here),
- s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
- and
- ((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
- holds the original block data.
-
- The first thing to do is generate the MTF values,
- and put them in
- ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
- Because there are strictly fewer or equal MTF values
- than block values, ptr values in this area are overwritten
- with MTF values only when they are no longer needed.
-
- The final compressed bitstream is generated into the
- area starting at
- (UChar*) (&((UChar*)s->arr2)[s->nblock])
-
- These storage aliases are set up in bzCompressInit(),
- except for the last one, which is arranged in
- compressBlock().
- */
- UInt32* ptr = s->ptr;
- UChar* block = s->block;
- UInt16* mtfv = s->mtfv;
-
- makeMaps_e ( s );
- EOB = s->nInUse+1;
-
- for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
-
- wr = 0;
- zPend = 0;
- for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
-
- for (i = 0; i < s->nblock; i++) {
- UChar ll_i;
- AssertD ( wr <= i, "generateMTFValues(1)" );
- j = ptr[i]-1; if (j < 0) j += s->nblock;
- ll_i = s->unseqToSeq[block[j]];
- AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
-
- if (yy[0] == ll_i) {
- zPend++;
- } else {
-
- if (zPend > 0) {
- zPend--;
- while (True) {
- if (zPend & 1) {
- mtfv[wr] = BZ_RUNB; wr++;
- s->mtfFreq[BZ_RUNB]++;
- } else {
- mtfv[wr] = BZ_RUNA; wr++;
- s->mtfFreq[BZ_RUNA]++;
- }
- if (zPend < 2) break;
- zPend = (zPend - 2) / 2;
- };
- zPend = 0;
- }
- {
- register UChar rtmp;
- register UChar* ryy_j;
- register UChar rll_i;
- rtmp = yy[1];
- yy[1] = yy[0];
- ryy_j = &(yy[1]);
- rll_i = ll_i;
- while ( rll_i != rtmp ) {
- register UChar rtmp2;
- ryy_j++;
- rtmp2 = rtmp;
- rtmp = *ryy_j;
- *ryy_j = rtmp2;
- };
- yy[0] = rtmp;
- j = ryy_j - &(yy[0]);
- mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
- }
-
- }
- }
-
- if (zPend > 0) {
- zPend--;
- while (True) {
- if (zPend & 1) {
- mtfv[wr] = BZ_RUNB; wr++;
- s->mtfFreq[BZ_RUNB]++;
- } else {
- mtfv[wr] = BZ_RUNA; wr++;
- s->mtfFreq[BZ_RUNA]++;
- }
- if (zPend < 2) break;
- zPend = (zPend - 2) / 2;
- };
- zPend = 0;
- }
-
- mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
-
- s->nMTF = wr;
-}
-
-
-/*---------------------------------------------------*/
-#define BZ_LESSER_ICOST 0
-#define BZ_GREATER_ICOST 15
-
-static
-void sendMTFValues ( EState* s )
-{
- Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
- Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
- Int32 nGroups, nBytes;
-
- /*--
- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- is a global since the decoder also needs it.
-
- Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
- are also globals only used in this proc.
- Made global to keep stack frame size small.
- --*/
-
-
- UInt16 cost[BZ_N_GROUPS];
- Int32 fave[BZ_N_GROUPS];
-
- UInt16* mtfv = s->mtfv;
-
- if (s->verbosity >= 3)
- VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
- "%d+2 syms in use\n",
- s->nblock, s->nMTF, s->nInUse );
-
- alphaSize = s->nInUse+2;
- for (t = 0; t < BZ_N_GROUPS; t++)
- for (v = 0; v < alphaSize; v++)
- s->len[t][v] = BZ_GREATER_ICOST;
-
- /*--- Decide how many coding tables to use ---*/
- AssertH ( s->nMTF > 0, 3001 );
- if (s->nMTF < 200) nGroups = 2; else
- if (s->nMTF < 600) nGroups = 3; else
- if (s->nMTF < 1200) nGroups = 4; else
- if (s->nMTF < 2400) nGroups = 5; else
- nGroups = 6;
-
- /*--- Generate an initial set of coding tables ---*/
- {
- Int32 nPart, remF, tFreq, aFreq;
-
- nPart = nGroups;
- remF = s->nMTF;
- gs = 0;
- while (nPart > 0) {
- tFreq = remF / nPart;
- ge = gs-1;
- aFreq = 0;
- while (aFreq < tFreq && ge < alphaSize-1) {
- ge++;
- aFreq += s->mtfFreq[ge];
- }
-
- if (ge > gs
- && nPart != nGroups && nPart != 1
- && ((nGroups-nPart) % 2 == 1)) {
- aFreq -= s->mtfFreq[ge];
- ge--;
- }
-
- if (s->verbosity >= 3)
- VPrintf5( " initial group %d, [%d .. %d], "
- "has %d syms (%4.1f%%)\n",
- nPart, gs, ge, aFreq,
- (100.0 * (float)aFreq) / (float)(s->nMTF) );
-
- for (v = 0; v < alphaSize; v++)
- if (v >= gs && v <= ge)
- s->len[nPart-1][v] = BZ_LESSER_ICOST; else
- s->len[nPart-1][v] = BZ_GREATER_ICOST;
-
- nPart--;
- gs = ge+1;
- remF -= aFreq;
- }
- }
-
- /*---
- Iterate up to BZ_N_ITERS times to improve the tables.
- ---*/
- for (iter = 0; iter < BZ_N_ITERS; iter++) {
-
- for (t = 0; t < nGroups; t++) fave[t] = 0;
-
- for (t = 0; t < nGroups; t++)
- for (v = 0; v < alphaSize; v++)
- s->rfreq[t][v] = 0;
-
- /*---
- Set up an auxiliary length table which is used to fast-track
- the common case (nGroups == 6).
- ---*/
- if (nGroups == 6) {
- for (v = 0; v < alphaSize; v++) {
- s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
- s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
- s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
- }
- }
-
- nSelectors = 0;
- totc = 0;
- gs = 0;
- while (True) {
-
- /*--- Set group start & end marks. --*/
- if (gs >= s->nMTF) break;
- ge = gs + BZ_G_SIZE - 1;
- if (ge >= s->nMTF) ge = s->nMTF-1;
-
- /*--
- Calculate the cost of this group as coded
- by each of the coding tables.
- --*/
- for (t = 0; t < nGroups; t++) cost[t] = 0;
-
- if (nGroups == 6 && 50 == ge-gs+1) {
- /*--- fast track the common case ---*/
- register UInt32 cost01, cost23, cost45;
- register UInt16 icv;
- cost01 = cost23 = cost45 = 0;
-
-# define BZ_ITER(nn) \
- icv = mtfv[gs+(nn)]; \
- cost01 += s->len_pack[icv][0]; \
- cost23 += s->len_pack[icv][1]; \
- cost45 += s->len_pack[icv][2]; \
-
- BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4);
- BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9);
- BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
- BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
- BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
- BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
- BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
- BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
- BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
- BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
-
-# undef BZ_ITER
-
- cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
- cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
- cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
-
- } else {
- /*--- slow version which correctly handles all situations ---*/
- for (i = gs; i <= ge; i++) {
- UInt16 icv = mtfv[i];
- for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
- }
- }
-
- /*--
- Find the coding table which is best for this group,
- and record its identity in the selector table.
- --*/
- bc = 999999999; bt = -1;
- for (t = 0; t < nGroups; t++)
- if (cost[t] < bc) { bc = cost[t]; bt = t; };
- totc += bc;
- fave[bt]++;
- s->selector[nSelectors] = bt;
- nSelectors++;
-
- /*--
- Increment the symbol frequencies for the selected table.
- --*/
- if (nGroups == 6 && 50 == ge-gs+1) {
- /*--- fast track the common case ---*/
-
-# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
-
- BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4);
- BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9);
- BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
- BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
- BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
- BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
- BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
- BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
- BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
- BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
-
-# undef BZ_ITUR
-
- } else {
- /*--- slow version which correctly handles all situations ---*/
- for (i = gs; i <= ge; i++)
- s->rfreq[bt][ mtfv[i] ]++;
- }
-
- gs = ge+1;
- }
- if (s->verbosity >= 3) {
- VPrintf2 ( " pass %d: size is %d, grp uses are ",
- iter+1, totc/8 );
- for (t = 0; t < nGroups; t++)
- VPrintf1 ( "%d ", fave[t] );
- VPrintf0 ( "\n" );
- }
-
- /*--
- Recompute the tables based on the accumulated frequencies.
- --*/
- for (t = 0; t < nGroups; t++)
- BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
- alphaSize, 20 );
- }
-
-
- AssertH( nGroups < 8, 3002 );
- AssertH( nSelectors < 32768 &&
- nSelectors <= (2 + (900000 / BZ_G_SIZE)),
- 3003 );
-
-
- /*--- Compute MTF values for the selectors. ---*/
- {
- UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
- for (i = 0; i < nGroups; i++) pos[i] = i;
- for (i = 0; i < nSelectors; i++) {
- ll_i = s->selector[i];
- j = 0;
- tmp = pos[j];
- while ( ll_i != tmp ) {
- j++;
- tmp2 = tmp;
- tmp = pos[j];
- pos[j] = tmp2;
- };
- pos[0] = tmp;
- s->selectorMtf[i] = j;
- }
- };
-
- /*--- Assign actual codes for the tables. --*/
- for (t = 0; t < nGroups; t++) {
- minLen = 32;
- maxLen = 0;
- for (i = 0; i < alphaSize; i++) {
- if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
- if (s->len[t][i] < minLen) minLen = s->len[t][i];
- }
- AssertH ( !(maxLen > 20), 3004 );
- AssertH ( !(minLen < 1), 3005 );
- BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
- minLen, maxLen, alphaSize );
- }
-
- /*--- Transmit the mapping table. ---*/
- {
- Bool inUse16[16];
- for (i = 0; i < 16; i++) {
- inUse16[i] = False;
- for (j = 0; j < 16; j++)
- if (s->inUse[i * 16 + j]) inUse16[i] = True;
- }
-
- nBytes = s->numZ;
- for (i = 0; i < 16; i++)
- if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
-
- for (i = 0; i < 16; i++)
- if (inUse16[i])
- for (j = 0; j < 16; j++) {
- if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
- }
-
- if (s->verbosity >= 3)
- VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
- }
-
- /*--- Now the selectors. ---*/
- nBytes = s->numZ;
- bsW ( s, 3, nGroups );
- bsW ( s, 15, nSelectors );
- for (i = 0; i < nSelectors; i++) {
- for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
- bsW(s,1,0);
- }
- if (s->verbosity >= 3)
- VPrintf1( "selectors %d, ", s->numZ-nBytes );
-
- /*--- Now the coding tables. ---*/
- nBytes = s->numZ;
-
- for (t = 0; t < nGroups; t++) {
- Int32 curr = s->len[t][0];
- bsW ( s, 5, curr );
- for (i = 0; i < alphaSize; i++) {
- while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
- while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
- bsW ( s, 1, 0 );
- }
- }
-
- if (s->verbosity >= 3)
- VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
-
- /*--- And finally, the block data proper ---*/
- nBytes = s->numZ;
- selCtr = 0;
- gs = 0;
- while (True) {
- if (gs >= s->nMTF) break;
- ge = gs + BZ_G_SIZE - 1;
- if (ge >= s->nMTF) ge = s->nMTF-1;
- AssertH ( s->selector[selCtr] < nGroups, 3006 );
-
- if (nGroups == 6 && 50 == ge-gs+1) {
- /*--- fast track the common case ---*/
- UInt16 mtfv_i;
- UChar* s_len_sel_selCtr
- = &(s->len[s->selector[selCtr]][0]);
- Int32* s_code_sel_selCtr
- = &(s->code[s->selector[selCtr]][0]);
-
-# define BZ_ITAH(nn) \
- mtfv_i = mtfv[gs+(nn)]; \
- bsW ( s, \
- s_len_sel_selCtr[mtfv_i], \
- s_code_sel_selCtr[mtfv_i] )
-
- BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4);
- BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9);
- BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
- BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
- BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
- BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
- BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
- BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
- BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
- BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
-
-# undef BZ_ITAH
-
- } else {
- /*--- slow version which correctly handles all situations ---*/
- for (i = gs; i <= ge; i++) {
- bsW ( s,
- s->len [s->selector[selCtr]] [mtfv[i]],
- s->code [s->selector[selCtr]] [mtfv[i]] );
- }
- }
-
-
- gs = ge+1;
- selCtr++;
- }
- AssertH( selCtr == nSelectors, 3007 );
-
- if (s->verbosity >= 3)
- VPrintf1( "codes %d\n", s->numZ-nBytes );
-}
-
-
-/*---------------------------------------------------*/
-void BZ2_compressBlock ( EState* s, Bool is_last_block )
-{
- if (s->nblock > 0) {
-
- BZ_FINALISE_CRC ( s->blockCRC );
- s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
- s->combinedCRC ^= s->blockCRC;
- if (s->blockNo > 1) s->numZ = 0;
-
- if (s->verbosity >= 2)
- VPrintf4( " block %d: crc = 0x%8x, "
- "combined CRC = 0x%8x, size = %d\n",
- s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
-
- BZ2_blockSort ( s );
- }
-
- s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
-
- /*-- If this is the first block, create the stream header. --*/
- if (s->blockNo == 1) {
- BZ2_bsInitWrite ( s );
- bsPutUChar ( s, BZ_HDR_B );
- bsPutUChar ( s, BZ_HDR_Z );
- bsPutUChar ( s, BZ_HDR_h );
- bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
- }
-
- if (s->nblock > 0) {
-
- bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
- bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
- bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
-
- /*-- Now the block's CRC, so it is in a known place. --*/
- bsPutUInt32 ( s, s->blockCRC );
-
- /*--
- Now a single bit indicating (non-)randomisation.
- As of version 0.9.5, we use a better sorting algorithm
- which makes randomisation unnecessary. So always set
- the randomised bit to 'no'. Of course, the decoder
- still needs to be able to handle randomised blocks
- so as to maintain backwards compatibility with
- older versions of bzip2.
- --*/
- bsW(s,1,0);
-
- bsW ( s, 24, s->origPtr );
- generateMTFValues ( s );
- sendMTFValues ( s );
- }
-
-
- /*-- If this is the last block, add the stream trailer. --*/
- if (is_last_block) {
-
- bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
- bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
- bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
- bsPutUInt32 ( s, s->combinedCRC );
- if (s->verbosity >= 2)
- VPrintf1( " final combined CRC = 0x%x\n ", s->combinedCRC );
- bsFinishWrite ( s );
- }
-}
-
-
-/*-------------------------------------------------------------*/
-/*--- end compress.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/crctable.c b/cpp/src/IcePatch/crctable.c
deleted file mode 100644
index b16746ae194..00000000000
--- a/cpp/src/IcePatch/crctable.c
+++ /dev/null
@@ -1,144 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Table for doing CRCs ---*/
-/*--- crctable.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#include "bzlib_private.h"
-
-/*--
- I think this is an implementation of the AUTODIN-II,
- Ethernet & FDDI 32-bit CRC standard. Vaguely derived
- from code by Rob Warnock, in Section 51 of the
- comp.compression FAQ.
---*/
-
-UInt32 BZ2_crc32Table[256] = {
-
- /*-- Ugly, innit? --*/
-
- 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
- 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
- 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
- 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
- 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
- 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
- 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
- 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
- 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
- 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
- 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
- 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
- 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
- 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
- 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
- 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
- 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
- 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
- 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
- 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
- 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
- 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
- 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
- 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
- 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
- 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
- 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
- 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
- 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
- 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
- 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
- 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
- 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
- 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
- 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
- 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
- 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
- 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
- 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
- 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
- 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
- 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
- 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
- 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
- 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
- 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
- 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
- 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
- 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
- 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
- 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
- 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
- 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
- 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
- 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
- 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
- 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
- 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
- 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
- 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
- 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
- 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
- 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
- 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
-};
-
-
-/*-------------------------------------------------------------*/
-/*--- end crctable.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/decompress.c b/cpp/src/IcePatch/decompress.c
deleted file mode 100644
index e9213473acf..00000000000
--- a/cpp/src/IcePatch/decompress.c
+++ /dev/null
@@ -1,660 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Decompression machinery ---*/
-/*--- decompress.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#include "bzlib_private.h"
-
-
-/*---------------------------------------------------*/
-static
-void makeMaps_d ( DState* s )
-{
- Int32 i;
- s->nInUse = 0;
- for (i = 0; i < 256; i++)
- if (s->inUse[i]) {
- s->seqToUnseq[s->nInUse] = i;
- s->nInUse++;
- }
-}
-
-
-/*---------------------------------------------------*/
-#define RETURN(rrr) \
- { retVal = rrr; goto save_state_and_return; };
-
-#define GET_BITS(lll,vvv,nnn) \
- case lll: s->state = lll; \
- while (True) { \
- if (s->bsLive >= nnn) { \
- UInt32 v; \
- v = (s->bsBuff >> \
- (s->bsLive-nnn)) & ((1 << nnn)-1); \
- s->bsLive -= nnn; \
- vvv = v; \
- break; \
- } \
- if (s->strm->avail_in == 0) RETURN(BZ_OK); \
- s->bsBuff \
- = (s->bsBuff << 8) | \
- ((UInt32) \
- (*((UChar*)(s->strm->next_in)))); \
- s->bsLive += 8; \
- s->strm->next_in++; \
- s->strm->avail_in--; \
- s->strm->total_in_lo32++; \
- if (s->strm->total_in_lo32 == 0) \
- s->strm->total_in_hi32++; \
- }
-
-#define GET_UCHAR(lll,uuu) \
- GET_BITS(lll,uuu,8)
-
-#define GET_BIT(lll,uuu) \
- GET_BITS(lll,uuu,1)
-
-/*---------------------------------------------------*/
-#define GET_MTF_VAL(label1,label2,lval) \
-{ \
- if (groupPos == 0) { \
- groupNo++; \
- if (groupNo >= nSelectors) \
- RETURN(BZ_DATA_ERROR); \
- groupPos = BZ_G_SIZE; \
- gSel = s->selector[groupNo]; \
- gMinlen = s->minLens[gSel]; \
- gLimit = &(s->limit[gSel][0]); \
- gPerm = &(s->perm[gSel][0]); \
- gBase = &(s->base[gSel][0]); \
- } \
- groupPos--; \
- zn = gMinlen; \
- GET_BITS(label1, zvec, zn); \
- while (1) { \
- if (zn > 20 /* the longest code */) \
- RETURN(BZ_DATA_ERROR); \
- if (zvec <= gLimit[zn]) break; \
- zn++; \
- GET_BIT(label2, zj); \
- zvec = (zvec << 1) | zj; \
- }; \
- if (zvec - gBase[zn] < 0 \
- || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
- RETURN(BZ_DATA_ERROR); \
- lval = gPerm[zvec - gBase[zn]]; \
-}
-
-
-/*---------------------------------------------------*/
-Int32 BZ2_decompress ( DState* s )
-{
- UChar uc;
- Int32 retVal;
- Int32 minLen, maxLen;
- bz_stream* strm = s->strm;
-
- /* stuff that needs to be saved/restored */
- Int32 i;
- Int32 j;
- Int32 t;
- Int32 alphaSize;
- Int32 nGroups;
- Int32 nSelectors;
- Int32 EOB;
- Int32 groupNo;
- Int32 groupPos;
- Int32 nextSym;
- Int32 nblockMAX;
- Int32 nblock;
- Int32 es;
- Int32 N;
- Int32 curr;
- Int32 zt;
- Int32 zn;
- Int32 zvec;
- Int32 zj;
- Int32 gSel;
- Int32 gMinlen;
- Int32* gLimit;
- Int32* gBase;
- Int32* gPerm;
-
- if (s->state == BZ_X_MAGIC_1) {
- /*initialise the save area*/
- s->save_i = 0;
- s->save_j = 0;
- s->save_t = 0;
- s->save_alphaSize = 0;
- s->save_nGroups = 0;
- s->save_nSelectors = 0;
- s->save_EOB = 0;
- s->save_groupNo = 0;
- s->save_groupPos = 0;
- s->save_nextSym = 0;
- s->save_nblockMAX = 0;
- s->save_nblock = 0;
- s->save_es = 0;
- s->save_N = 0;
- s->save_curr = 0;
- s->save_zt = 0;
- s->save_zn = 0;
- s->save_zvec = 0;
- s->save_zj = 0;
- s->save_gSel = 0;
- s->save_gMinlen = 0;
- s->save_gLimit = NULL;
- s->save_gBase = NULL;
- s->save_gPerm = NULL;
- }
-
- /*restore from the save area*/
- i = s->save_i;
- j = s->save_j;
- t = s->save_t;
- alphaSize = s->save_alphaSize;
- nGroups = s->save_nGroups;
- nSelectors = s->save_nSelectors;
- EOB = s->save_EOB;
- groupNo = s->save_groupNo;
- groupPos = s->save_groupPos;
- nextSym = s->save_nextSym;
- nblockMAX = s->save_nblockMAX;
- nblock = s->save_nblock;
- es = s->save_es;
- N = s->save_N;
- curr = s->save_curr;
- zt = s->save_zt;
- zn = s->save_zn;
- zvec = s->save_zvec;
- zj = s->save_zj;
- gSel = s->save_gSel;
- gMinlen = s->save_gMinlen;
- gLimit = s->save_gLimit;
- gBase = s->save_gBase;
- gPerm = s->save_gPerm;
-
- retVal = BZ_OK;
-
- switch (s->state) {
-
- GET_UCHAR(BZ_X_MAGIC_1, uc);
- if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
-
- GET_UCHAR(BZ_X_MAGIC_2, uc);
- if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
-
- GET_UCHAR(BZ_X_MAGIC_3, uc)
- if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);
-
- GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
- if (s->blockSize100k < (BZ_HDR_0 + 1) ||
- s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
- s->blockSize100k -= BZ_HDR_0;
-
- if (s->smallDecompress) {
- s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
- s->ll4 = BZALLOC(
- ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
- );
- if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
- } else {
- s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
- if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
- }
-
- GET_UCHAR(BZ_X_BLKHDR_1, uc);
-
- if (uc == 0x17) goto endhdr_2;
- if (uc != 0x31) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_BLKHDR_2, uc);
- if (uc != 0x41) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_BLKHDR_3, uc);
- if (uc != 0x59) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_BLKHDR_4, uc);
- if (uc != 0x26) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_BLKHDR_5, uc);
- if (uc != 0x53) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_BLKHDR_6, uc);
- if (uc != 0x59) RETURN(BZ_DATA_ERROR);
-
- s->currBlockNo++;
- if (s->verbosity >= 2)
- VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
-
- s->storedBlockCRC = 0;
- GET_UCHAR(BZ_X_BCRC_1, uc);
- s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_BCRC_2, uc);
- s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_BCRC_3, uc);
- s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_BCRC_4, uc);
- s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
-
- GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
-
- s->origPtr = 0;
- GET_UCHAR(BZ_X_ORIGPTR_1, uc);
- s->origPtr = (s->origPtr << 8) | ((Int32)uc);
- GET_UCHAR(BZ_X_ORIGPTR_2, uc);
- s->origPtr = (s->origPtr << 8) | ((Int32)uc);
- GET_UCHAR(BZ_X_ORIGPTR_3, uc);
- s->origPtr = (s->origPtr << 8) | ((Int32)uc);
-
- if (s->origPtr < 0)
- RETURN(BZ_DATA_ERROR);
- if (s->origPtr > 10 + 100000*s->blockSize100k)
- RETURN(BZ_DATA_ERROR);
-
- /*--- Receive the mapping table ---*/
- for (i = 0; i < 16; i++) {
- GET_BIT(BZ_X_MAPPING_1, uc);
- if (uc == 1)
- s->inUse16[i] = True; else
- s->inUse16[i] = False;
- }
-
- for (i = 0; i < 256; i++) s->inUse[i] = False;
-
- for (i = 0; i < 16; i++)
- if (s->inUse16[i])
- for (j = 0; j < 16; j++) {
- GET_BIT(BZ_X_MAPPING_2, uc);
- if (uc == 1) s->inUse[i * 16 + j] = True;
- }
- makeMaps_d ( s );
- if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
- alphaSize = s->nInUse+2;
-
- /*--- Now the selectors ---*/
- GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
- if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
- GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
- if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
- for (i = 0; i < nSelectors; i++) {
- j = 0;
- while (True) {
- GET_BIT(BZ_X_SELECTOR_3, uc);
- if (uc == 0) break;
- j++;
- if (j >= nGroups) RETURN(BZ_DATA_ERROR);
- }
- s->selectorMtf[i] = j;
- }
-
- /*--- Undo the MTF values for the selectors. ---*/
- {
- UChar pos[BZ_N_GROUPS], tmp, v;
- for (v = 0; v < nGroups; v++) pos[v] = v;
-
- for (i = 0; i < nSelectors; i++) {
- v = s->selectorMtf[i];
- tmp = pos[v];
- while (v > 0) { pos[v] = pos[v-1]; v--; }
- pos[0] = tmp;
- s->selector[i] = tmp;
- }
- }
-
- /*--- Now the coding tables ---*/
- for (t = 0; t < nGroups; t++) {
- GET_BITS(BZ_X_CODING_1, curr, 5);
- for (i = 0; i < alphaSize; i++) {
- while (True) {
- if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
- GET_BIT(BZ_X_CODING_2, uc);
- if (uc == 0) break;
- GET_BIT(BZ_X_CODING_3, uc);
- if (uc == 0) curr++; else curr--;
- }
- s->len[t][i] = curr;
- }
- }
-
- /*--- Create the Huffman decoding tables ---*/
- for (t = 0; t < nGroups; t++) {
- minLen = 32;
- maxLen = 0;
- for (i = 0; i < alphaSize; i++) {
- if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
- if (s->len[t][i] < minLen) minLen = s->len[t][i];
- }
- BZ2_hbCreateDecodeTables (
- &(s->limit[t][0]),
- &(s->base[t][0]),
- &(s->perm[t][0]),
- &(s->len[t][0]),
- minLen, maxLen, alphaSize
- );
- s->minLens[t] = minLen;
- }
-
- /*--- Now the MTF values ---*/
-
- EOB = s->nInUse+1;
- nblockMAX = 100000 * s->blockSize100k;
- groupNo = -1;
- groupPos = 0;
-
- for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
-
- /*-- MTF init --*/
- {
- Int32 ii, jj, kk;
- kk = MTFA_SIZE-1;
- for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
- for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
- s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
- kk--;
- }
- s->mtfbase[ii] = kk + 1;
- }
- }
- /*-- end MTF init --*/
-
- nblock = 0;
- GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
-
- while (True) {
-
- if (nextSym == EOB) break;
-
- if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
-
- es = -1;
- N = 1;
- do {
- if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
- if (nextSym == BZ_RUNB) es = es + (1+1) * N;
- N = N * 2;
- GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
- }
- while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
-
- es++;
- uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
- s->unzftab[uc] += es;
-
- if (s->smallDecompress)
- while (es > 0) {
- if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
- s->ll16[nblock] = (UInt16)uc;
- nblock++;
- es--;
- }
- else
- while (es > 0) {
- if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
- s->tt[nblock] = (UInt32)uc;
- nblock++;
- es--;
- };
-
- continue;
-
- } else {
-
- if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
-
- /*-- uc = MTF ( nextSym-1 ) --*/
- {
- Int32 ii, jj, kk, pp, lno, off;
- UInt32 nn;
- nn = (UInt32)(nextSym - 1);
-
- if (nn < MTFL_SIZE) {
- /* avoid general-case expense */
- pp = s->mtfbase[0];
- uc = s->mtfa[pp+nn];
- while (nn > 3) {
- Int32 z = pp+nn;
- s->mtfa[(z) ] = s->mtfa[(z)-1];
- s->mtfa[(z)-1] = s->mtfa[(z)-2];
- s->mtfa[(z)-2] = s->mtfa[(z)-3];
- s->mtfa[(z)-3] = s->mtfa[(z)-4];
- nn -= 4;
- }
- while (nn > 0) {
- s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
- };
- s->mtfa[pp] = uc;
- } else {
- /* general case */
- lno = nn / MTFL_SIZE;
- off = nn % MTFL_SIZE;
- pp = s->mtfbase[lno] + off;
- uc = s->mtfa[pp];
- while (pp > s->mtfbase[lno]) {
- s->mtfa[pp] = s->mtfa[pp-1]; pp--;
- };
- s->mtfbase[lno]++;
- while (lno > 0) {
- s->mtfbase[lno]--;
- s->mtfa[s->mtfbase[lno]]
- = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
- lno--;
- }
- s->mtfbase[0]--;
- s->mtfa[s->mtfbase[0]] = uc;
- if (s->mtfbase[0] == 0) {
- kk = MTFA_SIZE-1;
- for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
- for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
- s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
- kk--;
- }
- s->mtfbase[ii] = kk + 1;
- }
- }
- }
- }
- /*-- end uc = MTF ( nextSym-1 ) --*/
-
- s->unzftab[s->seqToUnseq[uc]]++;
- if (s->smallDecompress)
- s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
- s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
- nblock++;
-
- GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
- continue;
- }
- }
-
- /* Now we know what nblock is, we can do a better sanity
- check on s->origPtr.
- */
- if (s->origPtr < 0 || s->origPtr >= nblock)
- RETURN(BZ_DATA_ERROR);
-
- s->state_out_len = 0;
- s->state_out_ch = 0;
- BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
- s->state = BZ_X_OUTPUT;
- if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
-
- /*-- Set up cftab to facilitate generation of T^(-1) --*/
- s->cftab[0] = 0;
- for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
- for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
-
- if (s->smallDecompress) {
-
- /*-- Make a copy of cftab, used in generation of T --*/
- for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
-
- /*-- compute the T vector --*/
- for (i = 0; i < nblock; i++) {
- uc = (UChar)(s->ll16[i]);
- SET_LL(i, s->cftabCopy[uc]);
- s->cftabCopy[uc]++;
- }
-
- /*-- Compute T^(-1) by pointer reversal on T --*/
- i = s->origPtr;
- j = GET_LL(i);
- do {
- Int32 tmp = GET_LL(j);
- SET_LL(j, i);
- i = j;
- j = tmp;
- }
- while (i != s->origPtr);
-
- s->tPos = s->origPtr;
- s->nblock_used = 0;
- if (s->blockRandomised) {
- BZ_RAND_INIT_MASK;
- BZ_GET_SMALL(s->k0); s->nblock_used++;
- BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
- } else {
- BZ_GET_SMALL(s->k0); s->nblock_used++;
- }
-
- } else {
-
- /*-- compute the T^(-1) vector --*/
- for (i = 0; i < nblock; i++) {
- uc = (UChar)(s->tt[i] & 0xff);
- s->tt[s->cftab[uc]] |= (i << 8);
- s->cftab[uc]++;
- }
-
- s->tPos = s->tt[s->origPtr] >> 8;
- s->nblock_used = 0;
- if (s->blockRandomised) {
- BZ_RAND_INIT_MASK;
- BZ_GET_FAST(s->k0); s->nblock_used++;
- BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
- } else {
- BZ_GET_FAST(s->k0); s->nblock_used++;
- }
-
- }
-
- RETURN(BZ_OK);
-
-
-
- endhdr_2:
-
- GET_UCHAR(BZ_X_ENDHDR_2, uc);
- if (uc != 0x72) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_ENDHDR_3, uc);
- if (uc != 0x45) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_ENDHDR_4, uc);
- if (uc != 0x38) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_ENDHDR_5, uc);
- if (uc != 0x50) RETURN(BZ_DATA_ERROR);
- GET_UCHAR(BZ_X_ENDHDR_6, uc);
- if (uc != 0x90) RETURN(BZ_DATA_ERROR);
-
- s->storedCombinedCRC = 0;
- GET_UCHAR(BZ_X_CCRC_1, uc);
- s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_CCRC_2, uc);
- s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_CCRC_3, uc);
- s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
- GET_UCHAR(BZ_X_CCRC_4, uc);
- s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
-
- s->state = BZ_X_IDLE;
- RETURN(BZ_STREAM_END);
-
- default: AssertH ( False, 4001 );
- }
-
- AssertH ( False, 4002 );
-
- save_state_and_return:
-
- s->save_i = i;
- s->save_j = j;
- s->save_t = t;
- s->save_alphaSize = alphaSize;
- s->save_nGroups = nGroups;
- s->save_nSelectors = nSelectors;
- s->save_EOB = EOB;
- s->save_groupNo = groupNo;
- s->save_groupPos = groupPos;
- s->save_nextSym = nextSym;
- s->save_nblockMAX = nblockMAX;
- s->save_nblock = nblock;
- s->save_es = es;
- s->save_N = N;
- s->save_curr = curr;
- s->save_zt = zt;
- s->save_zn = zn;
- s->save_zvec = zvec;
- s->save_zj = zj;
- s->save_gSel = gSel;
- s->save_gMinlen = gMinlen;
- s->save_gLimit = gLimit;
- s->save_gBase = gBase;
- s->save_gPerm = gPerm;
-
- return retVal;
-}
-
-
-/*-------------------------------------------------------------*/
-/*--- end decompress.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/huffman.c b/cpp/src/IcePatch/huffman.c
deleted file mode 100644
index 293095c170c..00000000000
--- a/cpp/src/IcePatch/huffman.c
+++ /dev/null
@@ -1,228 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Huffman coding low-level stuff ---*/
-/*--- huffman.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#include "bzlib_private.h"
-
-/*---------------------------------------------------*/
-#define WEIGHTOF(zz0) ((zz0) & 0xffffff00)
-#define DEPTHOF(zz1) ((zz1) & 0x000000ff)
-#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
-
-#define ADDWEIGHTS(zw1,zw2) \
- (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \
- (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
-
-#define UPHEAP(z) \
-{ \
- Int32 zz, tmp; \
- zz = z; tmp = heap[zz]; \
- while (weight[tmp] < weight[heap[zz >> 1]]) { \
- heap[zz] = heap[zz >> 1]; \
- zz >>= 1; \
- } \
- heap[zz] = tmp; \
-}
-
-#define DOWNHEAP(z) \
-{ \
- Int32 zz, yy, tmp; \
- zz = z; tmp = heap[zz]; \
- while (True) { \
- yy = zz << 1; \
- if (yy > nHeap) break; \
- if (yy < nHeap && \
- weight[heap[yy+1]] < weight[heap[yy]]) \
- yy++; \
- if (weight[tmp] < weight[heap[yy]]) break; \
- heap[zz] = heap[yy]; \
- zz = yy; \
- } \
- heap[zz] = tmp; \
-}
-
-
-/*---------------------------------------------------*/
-void BZ2_hbMakeCodeLengths ( UChar *len,
- Int32 *freq,
- Int32 alphaSize,
- Int32 maxLen )
-{
- /*--
- Nodes and heap entries run from 1. Entry 0
- for both the heap and nodes is a sentinel.
- --*/
- Int32 nNodes, nHeap, n1, n2, i, j, k;
- Bool tooLong;
-
- Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ];
- Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
- Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ];
-
- for (i = 0; i < alphaSize; i++)
- weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
-
- while (True) {
-
- nNodes = alphaSize;
- nHeap = 0;
-
- heap[0] = 0;
- weight[0] = 0;
- parent[0] = -2;
-
- for (i = 1; i <= alphaSize; i++) {
- parent[i] = -1;
- nHeap++;
- heap[nHeap] = i;
- UPHEAP(nHeap);
- }
-
- AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
-
- while (nHeap > 1) {
- n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
- n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
- nNodes++;
- parent[n1] = parent[n2] = nNodes;
- weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
- parent[nNodes] = -1;
- nHeap++;
- heap[nHeap] = nNodes;
- UPHEAP(nHeap);
- }
-
- AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
-
- tooLong = False;
- for (i = 1; i <= alphaSize; i++) {
- j = 0;
- k = i;
- while (parent[k] >= 0) { k = parent[k]; j++; }
- len[i-1] = j;
- if (j > maxLen) tooLong = True;
- }
-
- if (! tooLong) break;
-
- for (i = 1; i < alphaSize; i++) {
- j = weight[i] >> 8;
- j = 1 + (j / 2);
- weight[i] = j << 8;
- }
- }
-}
-
-
-/*---------------------------------------------------*/
-void BZ2_hbAssignCodes ( Int32 *code,
- UChar *length,
- Int32 minLen,
- Int32 maxLen,
- Int32 alphaSize )
-{
- Int32 n, vec, i;
-
- vec = 0;
- for (n = minLen; n <= maxLen; n++) {
- for (i = 0; i < alphaSize; i++)
- if (length[i] == n) { code[i] = vec; vec++; };
- vec <<= 1;
- }
-}
-
-
-/*---------------------------------------------------*/
-void BZ2_hbCreateDecodeTables ( Int32 *limit,
- Int32 *base,
- Int32 *perm,
- UChar *length,
- Int32 minLen,
- Int32 maxLen,
- Int32 alphaSize )
-{
- Int32 pp, i, j, vec;
-
- pp = 0;
- for (i = minLen; i <= maxLen; i++)
- for (j = 0; j < alphaSize; j++)
- if (length[j] == i) { perm[pp] = j; pp++; };
-
- for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
- for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
-
- for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
-
- for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
- vec = 0;
-
- for (i = minLen; i <= maxLen; i++) {
- vec += (base[i+1] - base[i]);
- limit[i] = vec-1;
- vec <<= 1;
- }
- for (i = minLen + 1; i <= maxLen; i++)
- base[i] = ((limit[i-1] + 1) << 1) - base[i];
-}
-
-
-/*-------------------------------------------------------------*/
-/*--- end huffman.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/src/IcePatch/icepatch.dsp b/cpp/src/IcePatch/icepatch.dsp
index acb2d70cdaa..a1732704e9e 100644
--- a/cpp/src/IcePatch/icepatch.dsp
+++ b/cpp/src/IcePatch/icepatch.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 libeay32.lib ssleay32.lib /nologo /dll /machine:I386 /out:"Release/icepatch001.dll" /libpath:"../../../lib"
+# ADD LINK32 libeay32.lib ssleay32.lib libbz2.lib /nologo /dll /machine:I386 /out:"Release/icepatch001.dll" /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -86,7 +86,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libeay32.lib ssleay32.lib /nologo /dll /debug /machine:I386 /out:"Debug/icepatch001d.dll" /pdbtype:sept /libpath:"../../../lib"
+# ADD LINK32 libeay32.lib ssleay32.lib libbz2.lib /nologo /dll /debug /machine:I386 /out:"Debug/icepatch001d.dll" /pdbtype:sept /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -104,39 +104,11 @@ PostBuild_Cmds=copy Debug\icepatch001d.* ..\..\lib
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
-SOURCE=.\blocksort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\bzlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\compress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\crctable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\decompress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\huffman.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\IcePatch.cpp
-# End Source File
-# Begin Source File
-
SOURCE=.\FileDescFactory.cpp
# End Source File
# Begin Source File
-SOURCE=.\randtable.c
+SOURCE=.\IcePatch.cpp
# End Source File
# Begin Source File
@@ -148,11 +120,7 @@ SOURCE=.\Util.cpp
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
-SOURCE=.\bzlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\bzlib_private.h
+SOURCE=..\..\include\IcePatch\FileDescFactory.h
# End Source File
# Begin Source File
@@ -160,10 +128,6 @@ SOURCE=..\..\include\IcePatch\IcePatch.h
# End Source File
# Begin Source File
-SOURCE=..\..\include\IcePatch\FileDescFactory.h
-# End Source File
-# Begin Source File
-
SOURCE=..\..\include\IcePatch\Util.h
# End Source File
# End Group
@@ -176,7 +140,7 @@ SOURCE=..\..\slice\IcePatch\IcePatch.ice
!IF "$(CFG)" == "IcePatch - Win32 Release"
-USERDEP__NODE_="../../bin/slice2cpp.exe"
+USERDEP__ICEPA="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\IcePatch\IcePatch.ice
@@ -195,7 +159,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "IcePatch - Win32 Debug"
-USERDEP__NODE_="../../bin/slice2cpp.exe"
+USERDEP__ICEPA="../../bin/slice2cpp.exe"
# Begin Custom Build
InputPath=..\..\slice\IcePatch\IcePatch.ice
diff --git a/cpp/src/IcePatch/randtable.c b/cpp/src/IcePatch/randtable.c
deleted file mode 100644
index 5c922e94f3c..00000000000
--- a/cpp/src/IcePatch/randtable.c
+++ /dev/null
@@ -1,124 +0,0 @@
-
-/*-------------------------------------------------------------*/
-/*--- Table for randomising repetitive blocks ---*/
-/*--- randtable.c ---*/
-/*-------------------------------------------------------------*/
-
-/*--
- This file is a part of bzip2 and/or libbzip2, a program and
- library for lossless, block-sorting data compression.
-
- Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, Cambridge, UK.
- jseward@acm.org
- bzip2/libbzip2 version 1.0 of 21 March 2000
-
- This program is based on (at least) the work of:
- Mike Burrows
- David Wheeler
- Peter Fenwick
- Alistair Moffat
- Radford Neal
- Ian H. Witten
- Robert Sedgewick
- Jon L. Bentley
-
- For more information on these sources, see the manual.
---*/
-
-
-#include "bzlib_private.h"
-
-
-/*---------------------------------------------*/
-Int32 BZ2_rNums[512] = {
- 619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
- 985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
- 733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
- 419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
- 878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
- 862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
- 150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
- 170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
- 73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
- 909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
- 641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
- 161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
- 382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
- 98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
- 227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
- 469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
- 184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
- 715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
- 951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
- 652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
- 645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
- 609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
- 653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
- 411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
- 170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
- 857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
- 669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
- 944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
- 344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
- 897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
- 433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
- 686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
- 946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
- 978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
- 680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
- 707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
- 297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
- 134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
- 343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
- 140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
- 170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
- 369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
- 804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
- 896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
- 661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
- 768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
- 61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
- 372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
- 780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
- 920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
- 645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
- 936, 638
-};
-
-
-/*-------------------------------------------------------------*/
-/*--- end randtable.c ---*/
-/*-------------------------------------------------------------*/
diff --git a/cpp/test/IceSSL/certificateAndKeyParsing/.depend b/cpp/test/IceSSL/certificateAndKeyParsing/.depend
index ddfe5e077f9..0d101683c01 100644
--- a/cpp/test/IceSSL/certificateAndKeyParsing/.depend
+++ b/cpp/test/IceSSL/certificateAndKeyParsing/.depend
@@ -1 +1 @@
-CertificateAndKeyParsing.o: CertificateAndKeyParsing.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h ../../include/TestCommon.h ../../../include/IceSSL/Exception.h ../../../include/IceSSL/RSACertificateGen.h ../../../include/IceSSL/RSAKeyPairF.h ../../../include/IceSSL/RSAKeyPair.h ../../../include/IceSSL/RSACertificateGenF.h ../../../include/IceSSL/RSAPrivateKeyF.h ../../../include/IceSSL/RSAPublicKeyF.h ../../../include/IceSSL/Plugin.h ../../../include/Ice/Plugin.h ../../../include/IceSSL/CertificateVerifierF.h ../../../include/IceUtil/Base64.h
+CertificateAndKeyParsing.o: CertificateAndKeyParsing.cpp ../../../include/Ice/Ice.h ../../../include/Ice/Initialize.h ../../../include/Ice/CommunicatorF.h ../../../include/Ice/LocalObjectF.h ../../../include/Ice/Handle.h ../../../include/IceUtil/Handle.h ../../../include/IceUtil/Exception.h ../../../include/IceUtil/Config.h ../../../include/Ice/Config.h ../../../include/Ice/ProxyF.h ../../../include/Ice/ProxyHandle.h ../../../include/Ice/ObjectF.h ../../../include/Ice/Exception.h ../../../include/Ice/LocalObject.h ../../../include/IceUtil/Shared.h ../../../include/Ice/StreamF.h ../../../include/Ice/PropertiesF.h ../../../include/Ice/InstanceF.h ../../../include/Ice/BuiltinSequences.h ../../../include/Ice/LocalException.h ../../../include/Ice/Identity.h ../../../include/Ice/Properties.h ../../../include/Ice/Logger.h ../../../include/Ice/LoggerUtil.h ../../../include/Ice/LoggerF.h ../../../include/Ice/Communicator.h ../../../include/Ice/Proxy.h ../../../include/IceUtil/Mutex.h ../../../include/IceUtil/Lock.h ../../../include/Ice/ProxyFactoryF.h ../../../include/Ice/ConnectionF.h ../../../include/Ice/EndpointF.h ../../../include/Ice/ObjectAdapterF.h ../../../include/Ice/ReferenceF.h ../../../include/Ice/Current.h ../../../include/Ice/Object.h ../../../include/Ice/Outgoing.h ../../../include/IceUtil/Monitor.h ../../../include/IceUtil/Cond.h ../../../include/IceUtil/Time.h ../../../include/Ice/BasicStream.h ../../../include/Ice/Buffer.h ../../../include/Ice/ObjectFactoryF.h ../../../include/Ice/Incoming.h ../../../include/Ice/Direct.h ../../../include/Ice/ServantLocatorF.h ../../../include/Ice/UserExceptionFactoryF.h ../../../include/Ice/RouterF.h ../../../include/Ice/PluginF.h ../../../include/Ice/ObjectFactory.h ../../../include/Ice/UserExceptionFactory.h ../../../include/Ice/ObjectAdapter.h ../../../include/Ice/ServantLocator.h ../../../include/Ice/IdentityUtil.h ../../include/TestCommon.h ../../../include/IceSSL/Exception.h ../../../include/IceSSL/RSAKeyPair.h ../../../include/IceSSL/RSAKeyPairF.h ../../../include/IceSSL/RSACertificateGenF.h ../../../include/IceSSL/RSAPrivateKeyF.h ../../../include/IceSSL/RSAPublicKeyF.h ../../../include/IceSSL/RSACertificateGen.h ../../../include/IceSSL/Plugin.h ../../../include/Ice/Plugin.h ../../../include/IceSSL/CertificateVerifierF.h ../../../include/IceUtil/Base64.h
diff --git a/cpp/test/IceSSL/certificateAndKeyParsing/CertificateAndKeyParsing.cpp b/cpp/test/IceSSL/certificateAndKeyParsing/CertificateAndKeyParsing.cpp
index 274a800ffd5..9adbd595e42 100644
--- a/cpp/test/IceSSL/certificateAndKeyParsing/CertificateAndKeyParsing.cpp
+++ b/cpp/test/IceSSL/certificateAndKeyParsing/CertificateAndKeyParsing.cpp
@@ -1,765 +1,765 @@
-// **********************************************************************
-//
-// Copyright (c) 2002
-// MutableRealms, Inc.
-// Huntsville, AL, USA
-//
-// All Rights Reserved
-//
-// **********************************************************************
-
-#include <Ice/Ice.h>
-#include <TestCommon.h>
-#include <IceSSL/Exception.h>
-#include <IceSSL/RSAKeyPair.h>
-#include <IceSSL/RSACertificateGen.h>
-#include <IceSSL/Plugin.h>
-#include <IceUtil/Base64.h>
-
-#include <fstream>
-
-using namespace std;
-using namespace Ice;
-
-void
-testExpectCertificateAndPrivateKeyParseException(const IceSSL::PluginPtr& plugin,
- const string& key,
- const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const IceSSL::PrivateKeyParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateAndPrivateKeyParseException(const IceSSL::PluginPtr& plugin,
- const Ice::ByteSeq& key,
- const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const IceSSL::PrivateKeyParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectPrivateKeyParseException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::PrivateKeyParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectPrivateKeyParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::PrivateKeyParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const string& cert)
-{
- try
- {
- plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->addTrustedCertificate(IceSSL::Client, cert);
- test(false);
- }
- catch (const IceSSL::CertificateParseException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin,
- const string& key,
- const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin,
- const Ice::ByteSeq& key,
- const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin, const string& cert)
-{
- try
- {
- plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->addTrustedCertificate(IceSSL::Client, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateKeyMatchException(const IceSSL::PluginPtr& plugin,
- const string& key,
- const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testExpectCertificateKeyMatchException(const IceSSL::PluginPtr& plugin,
- const Ice::ByteSeq& key,
- const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- test(false);
- }
- catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
- {
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testNoException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
-{
- try
- {
- plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testNoException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->setRSAKeys(IceSSL::Client, key, cert);
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testNoException(const IceSSL::PluginPtr& plugin, const string& cert)
-{
- try
- {
- plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-void
-testNoException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
-{
- try
- {
- plugin->addTrustedCertificate(IceSSL::Client, cert);
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-
- cout << "ok" << endl;
-}
-
-int
-run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
-{
- PropertiesPtr properties = communicator->getProperties();
-
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- string clientTestCertPath = properties->getProperty("IceSSL.Test.Client.CertPath");
-
- IceSSL::OpenSSL::RSACertificateGen certGen;
-
- IceSSL::OpenSSL::RSAKeyPairPtr goodKeyPair1;
- IceSSL::OpenSSL::RSAKeyPairPtr goodKeyPair2;
-
- string goodKey1File = clientTestCertPath + "/goodKey_1.pem";
- string goodCert1File = clientTestCertPath + "/goodCert_1.pem";
- string goodKey2File = clientTestCertPath + "/goodKey_2.pem";
- string goodCert2File = clientTestCertPath + "/goodCert_2.pem";
-
- goodKeyPair1 = certGen.loadKeyPair(goodKey1File, goodCert1File);
- goodKeyPair2 = certGen.loadKeyPair(goodKey2File, goodCert2File);
-
- Ice::ByteSeq gcert1;
- Ice::ByteSeq gkey1;
- string gcert1b64;
- string gkey1b64;
-
- Ice::ByteSeq gcert2;
- Ice::ByteSeq gkey2;
- string gcert2b64;
- string gkey2b64;
-
- Ice::ByteSeq badCert;
- Ice::ByteSeq badKey;
- string badCertb64;
- string badKeyb64;
-
- goodKeyPair1->certToByteSeq(gcert1);
- goodKeyPair1->keyToByteSeq(gkey1);
- goodKeyPair1->certToBase64(gcert1b64);
- goodKeyPair1->keyToBase64(gkey1b64);
-
- goodKeyPair2->certToByteSeq(gcert2);
- goodKeyPair2->keyToByteSeq(gkey2);
- goodKeyPair2->certToBase64(gcert2b64);
- goodKeyPair2->keyToBase64(gkey2b64);
-
- string badKeyFile = clientTestCertPath + "/badKey.b64";
- string badCertFile = clientTestCertPath + "/badCert.b64";
-
- ifstream keyStream(badKeyFile.c_str());
- ifstream certStream(badCertFile.c_str());
-
- keyStream >> badKeyb64;
- certStream >> badCertb64;
-
- keyStream.close();
- certStream.close();
-
- badKey = IceUtil::Base64::decode(badKeyb64);
- badCert = IceUtil::Base64::decode(badCertb64);
-
- cout << "testing certificate and key parsing failures." << endl;
-
- cout << "bad private key and certificate (Base64)... " << flush;
- testExpectCertificateAndPrivateKeyParseException(sslPlugin, badKeyb64, badCertb64);
-
- cout << "bad private key and certificate... " << flush;
- testExpectCertificateAndPrivateKeyParseException(sslPlugin, badKey, badCert);
-
- cout << "bad private key and good certificate (Base64)... " << flush;
- testExpectPrivateKeyParseException(sslPlugin, badKeyb64, gcert1b64);
-
- cout << "bad private key and good certificate... " << flush;
- testExpectPrivateKeyParseException(sslPlugin, badKey, gcert1);
-
- cout << "good private key and bad certificate (Base64)... " << flush;
- testExpectCertificateParseException(sslPlugin, gkey1b64, badCertb64);
-
- cout << "good private key and bad certificate... " << flush;
- testExpectCertificateParseException(sslPlugin, gkey1, badCert);
-
- cout << "bad certificate as a trusted certificate... " << flush;
- testExpectCertificateParseException(sslPlugin, badCert);
-
- cout << "bad certificate as a trusted certificate (Base64)... " << flush;
- testExpectCertificateParseException(sslPlugin, badCertb64);
-
- cout << "testing setting good certificates and keys on a unconfigured context." << endl;
-
- cout << "good private key and certificate... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gkey1, gcert1);
-
- cout << "good private key and certificate (Base64)... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gkey1b64, gcert1b64);
-
- cout << "good private key and certificate (again)... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gkey2, gcert2);
-
- cout << "good private key and certificate (Base64) (again)... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gkey2b64, gcert2b64);
-
- cout << "good certificate as a trusted certificate... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gcert1);
-
- cout << "good certificate as a trusted certificate (Base64)... " << flush;
- testExpectContextNotConfiguredException(sslPlugin, gcert1b64);
-
- properties->setProperty("IceSSL.Client.CertPath", clientTestCertPath);
- properties->setProperty("IceSSL.Client.Config", "sslconfig_6.xml");
- sslPlugin->configure(IceSSL::Client);
-
- cout << "testing mismatched certificates and keys failures on a configured context." << endl;
-
- cout << "good private key and certificate, mismatched... " << flush;
- testExpectCertificateKeyMatchException(sslPlugin, gkey1, gcert2);
-
- cout << "good private key and certificate, mismatched (Base64)... " << flush;
- testExpectCertificateKeyMatchException(sslPlugin, gkey1b64, gcert2b64);
-
- cout << "good private key and certificate, mismatched (again)... " << flush;
- testExpectCertificateKeyMatchException(sslPlugin, gkey2, gcert1);
-
- cout << "good private key and certificate, mismatched (Base64) (again)... " << flush;
- testExpectCertificateKeyMatchException(sslPlugin, gkey2b64, gcert1b64);
-
- cout << "testing setting good certificates and keys on a configured context." << endl;
-
- cout << "good private key and certificate... " << flush;
- testNoException(sslPlugin, gkey1, gcert1);
-
- cout << "good private key and certificate (Base64)... " << flush;
- testNoException(sslPlugin, gkey1b64, gcert1b64);
-
- cout << "good private key and certificate (again)... " << flush;
- testNoException(sslPlugin, gkey2, gcert2);
-
- cout << "good private key and certificate (Base64) (again)... " << flush;
- testNoException(sslPlugin, gkey2b64, gcert2b64);
-
- cout << "good certificate as trusted certificate... " << flush;
- testNoException(sslPlugin, gcert1);
-
- cout << "good certificate as trusted certificate (Base64)... " << flush;
- testNoException(sslPlugin, gcert2b64);
-
- return EXIT_SUCCESS;
-}
-
-int
-main(int argc, char* argv[])
-{
- int status;
- Ice::CommunicatorPtr communicator;
-
- try
- {
- communicator = Ice::initialize(argc, argv);
- status = run(argc, argv, communicator);
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
-
- if (communicator)
- {
- try
- {
- communicator->destroy();
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- }
-
- return status;
-}
+// **********************************************************************
+//
+// Copyright (c) 2002
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <TestCommon.h>
+#include <IceSSL/Exception.h>
+#include <IceSSL/RSAKeyPair.h>
+#include <IceSSL/RSACertificateGen.h>
+#include <IceSSL/Plugin.h>
+#include <IceUtil/Base64.h>
+
+#include <fstream>
+
+using namespace std;
+using namespace Ice;
+
+void
+testExpectCertificateAndPrivateKeyParseException(const IceSSL::PluginPtr& plugin,
+ const string& key,
+ const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const IceSSL::PrivateKeyParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateAndPrivateKeyParseException(const IceSSL::PluginPtr& plugin,
+ const Ice::ByteSeq& key,
+ const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const IceSSL::PrivateKeyParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectPrivateKeyParseException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::PrivateKeyParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectPrivateKeyParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::PrivateKeyParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const string& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateParseException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificate(IceSSL::Client, cert);
+ test(false);
+ }
+ catch (const IceSSL::CertificateParseException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin,
+ const string& key,
+ const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin,
+ const Ice::ByteSeq& key,
+ const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin, const string& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectContextNotConfiguredException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificate(IceSSL::Client, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::ContextNotConfiguredException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateKeyMatchException(const IceSSL::PluginPtr& plugin,
+ const string& key,
+ const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testExpectCertificateKeyMatchException(const IceSSL::PluginPtr& plugin,
+ const Ice::ByteSeq& key,
+ const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
+ {
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testNoException(const IceSSL::PluginPtr& plugin, const string& key, const string& cert)
+{
+ try
+ {
+ plugin->setRSAKeysBase64(IceSSL::Client, key, cert);
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testNoException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& key, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->setRSAKeys(IceSSL::Client, key, cert);
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testNoException(const IceSSL::PluginPtr& plugin, const string& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificateBase64(IceSSL::Client, cert);
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+void
+testNoException(const IceSSL::PluginPtr& plugin, const Ice::ByteSeq& cert)
+{
+ try
+ {
+ plugin->addTrustedCertificate(IceSSL::Client, cert);
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+
+ cout << "ok" << endl;
+}
+
+int
+run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
+{
+ PropertiesPtr properties = communicator->getProperties();
+
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ string clientTestCertPath = properties->getProperty("IceSSL.Test.Client.CertPath");
+
+ IceSSL::OpenSSL::RSACertificateGen certGen;
+
+ IceSSL::OpenSSL::RSAKeyPairPtr goodKeyPair1;
+ IceSSL::OpenSSL::RSAKeyPairPtr goodKeyPair2;
+
+ string goodKey1File = clientTestCertPath + "/goodKey_1.pem";
+ string goodCert1File = clientTestCertPath + "/goodCert_1.pem";
+ string goodKey2File = clientTestCertPath + "/goodKey_2.pem";
+ string goodCert2File = clientTestCertPath + "/goodCert_2.pem";
+
+ goodKeyPair1 = certGen.loadKeyPair(goodKey1File, goodCert1File);
+ goodKeyPair2 = certGen.loadKeyPair(goodKey2File, goodCert2File);
+
+ Ice::ByteSeq gcert1;
+ Ice::ByteSeq gkey1;
+ string gcert1b64;
+ string gkey1b64;
+
+ Ice::ByteSeq gcert2;
+ Ice::ByteSeq gkey2;
+ string gcert2b64;
+ string gkey2b64;
+
+ Ice::ByteSeq badCert;
+ Ice::ByteSeq badKey;
+ string badCertb64;
+ string badKeyb64;
+
+ goodKeyPair1->certToByteSeq(gcert1);
+ goodKeyPair1->keyToByteSeq(gkey1);
+ goodKeyPair1->certToBase64(gcert1b64);
+ goodKeyPair1->keyToBase64(gkey1b64);
+
+ goodKeyPair2->certToByteSeq(gcert2);
+ goodKeyPair2->keyToByteSeq(gkey2);
+ goodKeyPair2->certToBase64(gcert2b64);
+ goodKeyPair2->keyToBase64(gkey2b64);
+
+ string badKeyFile = clientTestCertPath + "/badKey.b64";
+ string badCertFile = clientTestCertPath + "/badCert.b64";
+
+ ifstream keyStream(badKeyFile.c_str());
+ ifstream certStream(badCertFile.c_str());
+
+ keyStream >> badKeyb64;
+ certStream >> badCertb64;
+
+ keyStream.close();
+ certStream.close();
+
+ badKey = IceUtil::Base64::decode(badKeyb64);
+ badCert = IceUtil::Base64::decode(badCertb64);
+
+ cout << "testing certificate and key parsing failures." << endl;
+
+ cout << "bad private key and certificate (Base64)... " << flush;
+ testExpectCertificateAndPrivateKeyParseException(sslPlugin, badKeyb64, badCertb64);
+
+ cout << "bad private key and certificate... " << flush;
+ testExpectCertificateAndPrivateKeyParseException(sslPlugin, badKey, badCert);
+
+ cout << "bad private key and good certificate (Base64)... " << flush;
+ testExpectPrivateKeyParseException(sslPlugin, badKeyb64, gcert1b64);
+
+ cout << "bad private key and good certificate... " << flush;
+ testExpectPrivateKeyParseException(sslPlugin, badKey, gcert1);
+
+ cout << "good private key and bad certificate (Base64)... " << flush;
+ testExpectCertificateParseException(sslPlugin, gkey1b64, badCertb64);
+
+ cout << "good private key and bad certificate... " << flush;
+ testExpectCertificateParseException(sslPlugin, gkey1, badCert);
+
+ cout << "bad certificate as a trusted certificate... " << flush;
+ testExpectCertificateParseException(sslPlugin, badCert);
+
+ cout << "bad certificate as a trusted certificate (Base64)... " << flush;
+ testExpectCertificateParseException(sslPlugin, badCertb64);
+
+ cout << "testing setting good certificates and keys on a unconfigured context." << endl;
+
+ cout << "good private key and certificate... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gkey1, gcert1);
+
+ cout << "good private key and certificate (Base64)... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gkey1b64, gcert1b64);
+
+ cout << "good private key and certificate (again)... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gkey2, gcert2);
+
+ cout << "good private key and certificate (Base64) (again)... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gkey2b64, gcert2b64);
+
+ cout << "good certificate as a trusted certificate... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gcert1);
+
+ cout << "good certificate as a trusted certificate (Base64)... " << flush;
+ testExpectContextNotConfiguredException(sslPlugin, gcert1b64);
+
+ properties->setProperty("IceSSL.Client.CertPath", clientTestCertPath);
+ properties->setProperty("IceSSL.Client.Config", "sslconfig_6.xml");
+ sslPlugin->configure(IceSSL::Client);
+
+ cout << "testing mismatched certificates and keys failures on a configured context." << endl;
+
+ cout << "good private key and certificate, mismatched... " << flush;
+ testExpectCertificateKeyMatchException(sslPlugin, gkey1, gcert2);
+
+ cout << "good private key and certificate, mismatched (Base64)... " << flush;
+ testExpectCertificateKeyMatchException(sslPlugin, gkey1b64, gcert2b64);
+
+ cout << "good private key and certificate, mismatched (again)... " << flush;
+ testExpectCertificateKeyMatchException(sslPlugin, gkey2, gcert1);
+
+ cout << "good private key and certificate, mismatched (Base64) (again)... " << flush;
+ testExpectCertificateKeyMatchException(sslPlugin, gkey2b64, gcert1b64);
+
+ cout << "testing setting good certificates and keys on a configured context." << endl;
+
+ cout << "good private key and certificate... " << flush;
+ testNoException(sslPlugin, gkey1, gcert1);
+
+ cout << "good private key and certificate (Base64)... " << flush;
+ testNoException(sslPlugin, gkey1b64, gcert1b64);
+
+ cout << "good private key and certificate (again)... " << flush;
+ testNoException(sslPlugin, gkey2, gcert2);
+
+ cout << "good private key and certificate (Base64) (again)... " << flush;
+ testNoException(sslPlugin, gkey2b64, gcert2b64);
+
+ cout << "good certificate as trusted certificate... " << flush;
+ testNoException(sslPlugin, gcert1);
+
+ cout << "good certificate as trusted certificate (Base64)... " << flush;
+ testNoException(sslPlugin, gcert2b64);
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ Ice::CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = Ice::initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if (communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceSSL/certificateVerification/Pinger.ice b/cpp/test/IceSSL/certificateVerification/Pinger.ice
index 90a7be5d2ab..0d8d46aae11 100644
--- a/cpp/test/IceSSL/certificateVerification/Pinger.ice
+++ b/cpp/test/IceSSL/certificateVerification/Pinger.ice
@@ -10,20 +10,20 @@
#ifndef PINGER_ICE
#define PINGER_ICE
-
-#include <Ice/BuiltinSequences.ice>
-
-class KeyManager
-{
- void getServerCerts(; Ice::ByteSeq trusted, Ice::ByteSeq untrusted);
- void getTrustedClientKeys(; Ice::ByteSeq key, Ice::ByteSeq cert);
- void getUntrustedClientKeys(; Ice::ByteSeq key, Ice::ByteSeq cert);
- void shutdown();
-};
+
+#include <Ice/BuiltinSequences.ice>
+
+class KeyManager
+{
+ void getServerCerts(; Ice::ByteSeq trusted, Ice::ByteSeq untrusted);
+ void getTrustedClientKeys(; Ice::ByteSeq key, Ice::ByteSeq cert);
+ void getUntrustedClientKeys(; Ice::ByteSeq key, Ice::ByteSeq cert);
+ void shutdown();
+};
class Pinger
{
- void ping();
+ void ping();
};
#endif
diff --git a/cpp/test/IceSSL/certificateVerifier/CertificateVerifier.cpp b/cpp/test/IceSSL/certificateVerifier/CertificateVerifier.cpp
index 113de36005b..96ddb381a54 100644
--- a/cpp/test/IceSSL/certificateVerifier/CertificateVerifier.cpp
+++ b/cpp/test/IceSSL/certificateVerifier/CertificateVerifier.cpp
@@ -1,185 +1,185 @@
-// **********************************************************************
-//
-// Copyright (c) 2002
-// MutableRealms, Inc.
-// Huntsville, AL, USA
-//
-// All Rights Reserved
-//
-// **********************************************************************
-
-#include <Ice/Ice.h>
-#include <TestCommon.h>
-#include <IceSSL/CertificateVerifier.h>
-#include <IceSSL/CertificateVerifierOpenSSL.h>
-#include <IceSSL/Exception.h>
-#include <IceSSL/Plugin.h>
-
-using namespace std;
-using namespace Ice;
-
-//
-// Certificate Verifier definitions
-//
-
-class BadCertificateVerifier : virtual public ::IceSSL::CertificateVerifier
-{
-public:
-};
-
-class GoodCertificateVerifier : virtual public ::IceSSL::OpenSSL::CertificateVerifier
-{
-public:
- virtual int verify(int, X509_STORE_CTX*, SSL*);
-};
-
-int
-GoodCertificateVerifier::verify(int preVerifyOk, X509_STORE_CTX* certificateStore, SSL* sslConnection)
-{
- return preVerifyOk;
-}
-
-//
-// certificateVerifierClient definition
-//
-
-void
-testExpectCertificateVerifierTypeException(const IceSSL::PluginPtr& plugin,
- IceSSL::ContextType context,
- const IceSSL::CertificateVerifierPtr& verifier)
-{
- try
- {
- plugin->setCertificateVerifier(context, verifier);
- test(false);
- }
- catch (const IceSSL::CertificateVerifierTypeException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-void
-testExpectNoException(const IceSSL::PluginPtr& plugin,
- IceSSL::ContextType context,
- const IceSSL::CertificateVerifierPtr& verifier)
-{
- try
- {
- plugin->setCertificateVerifier(context, verifier);
- std::cout << "ok" << std::endl;
- }
- catch (const Ice::LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-int
-run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
-{
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- IceSSL::CertificateVerifierPtr badVerifier = new BadCertificateVerifier();
- IceSSL::CertificateVerifierPtr goodVerifier = new GoodCertificateVerifier();
-
- //
- // Testing IceSSL::Client context type.
- //
-
- std::cout << "setting Certificate Verifiers on Client context." << std::endl;
-
- std::cout << "setting verifier of wrong type... " << std::flush;
- testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::Client, badVerifier);
-
- std::cout << "setting verifier of correct type... " << std::flush;
- testExpectNoException(sslPlugin, IceSSL::Client, goodVerifier);
-
- //
- // Testing IceSSL::Server context type.
- //
-
- std::cout << "setting Certificate Verifiers on Server context." << std::endl;
-
- std::cout << "setting verifier of wrong type... " << std::flush;
- testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::Server, badVerifier);
-
- std::cout << "setting verifier of correct type... " << std::flush;
- testExpectNoException(sslPlugin, IceSSL::Server, goodVerifier);
-
- //
- // Testing IceSSL::ClientServer context type.
- //
-
- std::cout << "setting Certificate Verifiers on Client and Server contexts." << std::endl;
-
- std::cout << "setting verifier of wrong type... " << std::flush;
- testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::ClientServer, badVerifier);
-
- std::cout << "setting verifier of correct type... " << std::flush;
- testExpectNoException(sslPlugin, IceSSL::ClientServer, goodVerifier);
-
- return EXIT_SUCCESS;
-}
-
-int
-main(int argc, char* argv[])
-{
- int status;
- Ice::CommunicatorPtr communicator;
-
- try
- {
- communicator = Ice::initialize(argc, argv);
- status = run(argc, argv, communicator);
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
-
- if (communicator)
- {
- try
- {
- communicator->destroy();
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- }
-
- return status;
-}
+// **********************************************************************
+//
+// Copyright (c) 2002
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <TestCommon.h>
+#include <IceSSL/CertificateVerifier.h>
+#include <IceSSL/CertificateVerifierOpenSSL.h>
+#include <IceSSL/Exception.h>
+#include <IceSSL/Plugin.h>
+
+using namespace std;
+using namespace Ice;
+
+//
+// Certificate Verifier definitions
+//
+
+class BadCertificateVerifier : virtual public ::IceSSL::CertificateVerifier
+{
+public:
+};
+
+class GoodCertificateVerifier : virtual public ::IceSSL::OpenSSL::CertificateVerifier
+{
+public:
+ virtual int verify(int, X509_STORE_CTX*, SSL*);
+};
+
+int
+GoodCertificateVerifier::verify(int preVerifyOk, X509_STORE_CTX* certificateStore, SSL* sslConnection)
+{
+ return preVerifyOk;
+}
+
+//
+// certificateVerifierClient definition
+//
+
+void
+testExpectCertificateVerifierTypeException(const IceSSL::PluginPtr& plugin,
+ IceSSL::ContextType context,
+ const IceSSL::CertificateVerifierPtr& verifier)
+{
+ try
+ {
+ plugin->setCertificateVerifier(context, verifier);
+ test(false);
+ }
+ catch (const IceSSL::CertificateVerifierTypeException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+void
+testExpectNoException(const IceSSL::PluginPtr& plugin,
+ IceSSL::ContextType context,
+ const IceSSL::CertificateVerifierPtr& verifier)
+{
+ try
+ {
+ plugin->setCertificateVerifier(context, verifier);
+ std::cout << "ok" << std::endl;
+ }
+ catch (const Ice::LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+int
+run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
+{
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ IceSSL::CertificateVerifierPtr badVerifier = new BadCertificateVerifier();
+ IceSSL::CertificateVerifierPtr goodVerifier = new GoodCertificateVerifier();
+
+ //
+ // Testing IceSSL::Client context type.
+ //
+
+ std::cout << "setting Certificate Verifiers on Client context." << std::endl;
+
+ std::cout << "setting verifier of wrong type... " << std::flush;
+ testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::Client, badVerifier);
+
+ std::cout << "setting verifier of correct type... " << std::flush;
+ testExpectNoException(sslPlugin, IceSSL::Client, goodVerifier);
+
+ //
+ // Testing IceSSL::Server context type.
+ //
+
+ std::cout << "setting Certificate Verifiers on Server context." << std::endl;
+
+ std::cout << "setting verifier of wrong type... " << std::flush;
+ testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::Server, badVerifier);
+
+ std::cout << "setting verifier of correct type... " << std::flush;
+ testExpectNoException(sslPlugin, IceSSL::Server, goodVerifier);
+
+ //
+ // Testing IceSSL::ClientServer context type.
+ //
+
+ std::cout << "setting Certificate Verifiers on Client and Server contexts." << std::endl;
+
+ std::cout << "setting verifier of wrong type... " << std::flush;
+ testExpectCertificateVerifierTypeException(sslPlugin, IceSSL::ClientServer, badVerifier);
+
+ std::cout << "setting verifier of correct type... " << std::flush;
+ testExpectNoException(sslPlugin, IceSSL::ClientServer, goodVerifier);
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ Ice::CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = Ice::initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if (communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceSSL/configuration/Configuration.cpp b/cpp/test/IceSSL/configuration/Configuration.cpp
index de824da6a66..03e63b656d2 100644
--- a/cpp/test/IceSSL/configuration/Configuration.cpp
+++ b/cpp/test/IceSSL/configuration/Configuration.cpp
@@ -1,224 +1,224 @@
-// **********************************************************************
-//
-// Copyright (c) 2002
-// MutableRealms, Inc.
-// Huntsville, AL, USA
-//
-// All Rights Reserved
-//
-// **********************************************************************
-
-#include <Ice/Ice.h>
-#include <TestCommon.h>
-#include <IceSSL/Exception.h>
-#include <IceSSL/Plugin.h>
-
-// Note: This test must have a valid IceSSL.Client.CertPath
-// and IceSSL.Server.CertPath specified.
-
-using namespace std;
-using namespace Ice;
-
-void testContextWithConfig(const Ice::CommunicatorPtr&, IceSSL::ContextType, const std::string&,
- const std::string&, bool expectFailure = true);
-
-void
-testContextNoConfig(const Ice::CommunicatorPtr& communicator, IceSSL::ContextType contextType)
-{
- testContextWithConfig(communicator, contextType, "", "");
-}
-
-void
-testContextWithConfig(const Ice::CommunicatorPtr& communicator,
- IceSSL::ContextType contextType,
- const std::string& clientFile,
- const std::string& serverFile,
- bool expectFailure)
-{
- PropertiesPtr properties = communicator->getProperties();
-
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- std::string contextString;
-
- std::string clientPropertyString = "IceSSL.Client.Config";
- std::string serverPropertyString = "IceSSL.Server.Config";
-
- switch (contextType)
- {
- case IceSSL::Client:
- {
- contextString = "client";
- break;
- }
-
- case IceSSL::Server:
- {
- contextString = "server";
- break;
- }
-
- case IceSSL::ClientServer:
- {
- contextString = "client/server";
- break;
- }
- }
-
- std::string configFileDesc = "";
-
- if (!clientFile.empty() && !serverFile.empty())
- {
- configFileDesc = "client and server configuration files";
- }
- else if (!clientFile.empty())
- {
- configFileDesc = "client configuration file";
- }
- else if (!serverFile.empty())
- {
- configFileDesc = "server configuration file";
- }
- else
- {
- configFileDesc = "no configuration file";
- }
-
- std::cout << contextString << " with " << configFileDesc << "... " << std::flush;
-
- try
- {
- properties->setProperty(clientPropertyString, clientFile);
- properties->setProperty(serverPropertyString, serverFile);
- sslPlugin->configure(contextType);
-
- if (expectFailure)
- {
- test(false);
- }
- else
- {
- std::cout << "ok" << std::endl;
- }
- }
- catch (const IceSSL::ConfigurationLoadingException&)
- {
- //
- // Depending on the context type, and if we supplied
- // a configuration file, this might be a valid response.
- //
-
- switch (contextType)
- {
- case IceSSL::Client:
- {
- if (clientFile.empty())
- {
- std::cout << "ok" << std::endl;
- }
- else
- {
- test(false);
- }
- break;
- }
-
- case IceSSL::Server:
- {
- if (serverFile.empty())
- {
- std::cout << "ok" << std::endl;
- }
- else
- {
- test(false);
- }
- break;
- }
-
- case IceSSL::ClientServer:
- {
- if (clientFile.empty() || serverFile.empty())
- {
- std::cout << "ok" << std::endl;
- }
- else
- {
- test(false);
- }
- break;
- }
- }
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-int
-run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
-{
- // Testing Client context.
- testContextNoConfig(communicator, IceSSL::Client);
- testContextWithConfig(communicator, IceSSL::Client,"client_sslconfig.xml","", false);
-
- // Testing Server context.
- testContextNoConfig(communicator, IceSSL::Server);
- testContextWithConfig(communicator, IceSSL::Server,"","server_sslconfig.xml", false);
-
- // Testing ClientServer context.
- testContextNoConfig(communicator, IceSSL::ClientServer);
- testContextWithConfig(communicator, IceSSL::ClientServer, "client_sslconfig.xml", "");
- testContextWithConfig(communicator, IceSSL::ClientServer, "", "server_sslconfig.xml");
- testContextWithConfig(communicator, IceSSL::ClientServer, "client_sslconfig.xml", "server_sslconfig.xml", false);
- testContextWithConfig(communicator, IceSSL::ClientServer, "sslconfig.xml", "sslconfig.xml", false);
-
- return EXIT_SUCCESS;
-}
-
-int
-main(int argc, char* argv[])
-{
- int status;
- Ice::CommunicatorPtr communicator;
-
- try
- {
- communicator = Ice::initialize(argc, argv);
- status = run(argc, argv, communicator);
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
-
- if (communicator)
- {
- try
- {
- communicator->destroy();
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- }
-
- return status;
-}
+// **********************************************************************
+//
+// Copyright (c) 2002
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <TestCommon.h>
+#include <IceSSL/Exception.h>
+#include <IceSSL/Plugin.h>
+
+// Note: This test must have a valid IceSSL.Client.CertPath
+// and IceSSL.Server.CertPath specified.
+
+using namespace std;
+using namespace Ice;
+
+void testContextWithConfig(const Ice::CommunicatorPtr&, IceSSL::ContextType, const std::string&,
+ const std::string&, bool expectFailure = true);
+
+void
+testContextNoConfig(const Ice::CommunicatorPtr& communicator, IceSSL::ContextType contextType)
+{
+ testContextWithConfig(communicator, contextType, "", "");
+}
+
+void
+testContextWithConfig(const Ice::CommunicatorPtr& communicator,
+ IceSSL::ContextType contextType,
+ const std::string& clientFile,
+ const std::string& serverFile,
+ bool expectFailure)
+{
+ PropertiesPtr properties = communicator->getProperties();
+
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ std::string contextString;
+
+ std::string clientPropertyString = "IceSSL.Client.Config";
+ std::string serverPropertyString = "IceSSL.Server.Config";
+
+ switch (contextType)
+ {
+ case IceSSL::Client:
+ {
+ contextString = "client";
+ break;
+ }
+
+ case IceSSL::Server:
+ {
+ contextString = "server";
+ break;
+ }
+
+ case IceSSL::ClientServer:
+ {
+ contextString = "client/server";
+ break;
+ }
+ }
+
+ std::string configFileDesc = "";
+
+ if (!clientFile.empty() && !serverFile.empty())
+ {
+ configFileDesc = "client and server configuration files";
+ }
+ else if (!clientFile.empty())
+ {
+ configFileDesc = "client configuration file";
+ }
+ else if (!serverFile.empty())
+ {
+ configFileDesc = "server configuration file";
+ }
+ else
+ {
+ configFileDesc = "no configuration file";
+ }
+
+ std::cout << contextString << " with " << configFileDesc << "... " << std::flush;
+
+ try
+ {
+ properties->setProperty(clientPropertyString, clientFile);
+ properties->setProperty(serverPropertyString, serverFile);
+ sslPlugin->configure(contextType);
+
+ if (expectFailure)
+ {
+ test(false);
+ }
+ else
+ {
+ std::cout << "ok" << std::endl;
+ }
+ }
+ catch (const IceSSL::ConfigurationLoadingException&)
+ {
+ //
+ // Depending on the context type, and if we supplied
+ // a configuration file, this might be a valid response.
+ //
+
+ switch (contextType)
+ {
+ case IceSSL::Client:
+ {
+ if (clientFile.empty())
+ {
+ std::cout << "ok" << std::endl;
+ }
+ else
+ {
+ test(false);
+ }
+ break;
+ }
+
+ case IceSSL::Server:
+ {
+ if (serverFile.empty())
+ {
+ std::cout << "ok" << std::endl;
+ }
+ else
+ {
+ test(false);
+ }
+ break;
+ }
+
+ case IceSSL::ClientServer:
+ {
+ if (clientFile.empty() || serverFile.empty())
+ {
+ std::cout << "ok" << std::endl;
+ }
+ else
+ {
+ test(false);
+ }
+ break;
+ }
+ }
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+int
+run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
+{
+ // Testing Client context.
+ testContextNoConfig(communicator, IceSSL::Client);
+ testContextWithConfig(communicator, IceSSL::Client,"client_sslconfig.xml","", false);
+
+ // Testing Server context.
+ testContextNoConfig(communicator, IceSSL::Server);
+ testContextWithConfig(communicator, IceSSL::Server,"","server_sslconfig.xml", false);
+
+ // Testing ClientServer context.
+ testContextNoConfig(communicator, IceSSL::ClientServer);
+ testContextWithConfig(communicator, IceSSL::ClientServer, "client_sslconfig.xml", "");
+ testContextWithConfig(communicator, IceSSL::ClientServer, "", "server_sslconfig.xml");
+ testContextWithConfig(communicator, IceSSL::ClientServer, "client_sslconfig.xml", "server_sslconfig.xml", false);
+ testContextWithConfig(communicator, IceSSL::ClientServer, "sslconfig.xml", "sslconfig.xml", false);
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ Ice::CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = Ice::initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if (communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceSSL/loadPEM/LoadPEM.cpp b/cpp/test/IceSSL/loadPEM/LoadPEM.cpp
index f2b5eb2e70f..933f90a9272 100644
--- a/cpp/test/IceSSL/loadPEM/LoadPEM.cpp
+++ b/cpp/test/IceSSL/loadPEM/LoadPEM.cpp
@@ -1,253 +1,253 @@
-// **********************************************************************
-//
-// Copyright (c) 2002
-// MutableRealms, Inc.
-// Huntsville, AL, USA
-//
-// All Rights Reserved
-//
-// **********************************************************************
-
-#include <Ice/Ice.h>
-#include <TestCommon.h>
-#include <IceSSL/Exception.h>
-#include <IceSSL/Plugin.h>
-
-using namespace std;
-using namespace Ice;
-
-void
-testExpectCertificateAndPrivateKeyLoadException(const Ice::CommunicatorPtr& communicator,
- const std::string& configFile)
-{
- PropertiesPtr properties = communicator->getProperties();
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- try
- {
- properties->setProperty("IceSSL.Client.Config", configFile);
- sslPlugin->configure(IceSSL::Client);
- test(false);
- }
- catch (const IceSSL::OpenSSL::CertificateLoadException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const IceSSL::OpenSSL::PrivateKeyLoadException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-void
-testExpectPrivateKeyLoadException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
-{
- PropertiesPtr properties = communicator->getProperties();
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- try
- {
- properties->setProperty("IceSSL.Client.Config", configFile);
- sslPlugin->configure(IceSSL::Client);
- test(false);
- }
- catch (const IceSSL::OpenSSL::PrivateKeyLoadException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-void
-testExpectCertificateLoadException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
-{
- PropertiesPtr properties = communicator->getProperties();
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- try
- {
- properties->setProperty("IceSSL.Client.Config", configFile);
- sslPlugin->configure(IceSSL::Client);
- test(false);
- }
- catch (const IceSSL::OpenSSL::CertificateLoadException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-void
-testExpectCertificateKeyMatchException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
-{
- PropertiesPtr properties = communicator->getProperties();
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- try
- {
- properties->setProperty("IceSSL.Client.Config", configFile);
- sslPlugin->configure(IceSSL::Client);
- test(false);
- }
- catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
- {
- std::cout << "ok" << std::endl;
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-void
-testNoException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
-{
- PropertiesPtr properties = communicator->getProperties();
- Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
- IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
-
- try
- {
- properties->setProperty("IceSSL.Client.Config", configFile);
- sslPlugin->configure(IceSSL::Client);
- std::cout << "ok" << std::endl;
- }
- catch (const LocalException&)
- {
- //
- // Any other exception is bad.
- //
-
- test(false);
- }
- catch (...)
- {
- //
- // Unknown exceptions are always bad.
- //
-
- test(false);
- }
-}
-
-int
-run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
-{
- PropertiesPtr properties = communicator->getProperties();
- // properties->setProperty("IceSSL.Client.CertPath", "../certs");
-
- std::cout << "bad private key and certificate... " << std::flush;
- testExpectCertificateAndPrivateKeyLoadException(communicator, "sslconfig_1.xml");
-
- std::cout << "bad private key and good certificate 1... " << std::flush;
- testExpectPrivateKeyLoadException(communicator, "sslconfig_2.xml");
-
- std::cout << "good private key 1 and bad certificate... " << std::flush;
- testExpectCertificateLoadException(communicator, "sslconfig_3.xml");
-
- std::cout << "good private key 1 and good certificate 2, mismatched... " << std::flush;
- testExpectCertificateKeyMatchException(communicator, "sslconfig_4.xml");
-
- std::cout << "good private key 2 and good certificate 1, mismatched (again)... " << std::flush;
- testExpectCertificateKeyMatchException(communicator, "sslconfig_5.xml");
-
- std::cout << "good matched private key and certificate... " << std::flush;
- testNoException(communicator, "sslconfig_6.xml");
-
- return EXIT_SUCCESS;
-}
-
-int
-main(int argc, char* argv[])
-{
- int status;
- Ice::CommunicatorPtr communicator;
-
- try
- {
- communicator = Ice::initialize(argc, argv);
- status = run(argc, argv, communicator);
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
-
- if (communicator)
- {
- try
- {
- communicator->destroy();
- }
- catch(const Ice::Exception& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- }
-
- return status;
-}
+// **********************************************************************
+//
+// Copyright (c) 2002
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <TestCommon.h>
+#include <IceSSL/Exception.h>
+#include <IceSSL/Plugin.h>
+
+using namespace std;
+using namespace Ice;
+
+void
+testExpectCertificateAndPrivateKeyLoadException(const Ice::CommunicatorPtr& communicator,
+ const std::string& configFile)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ try
+ {
+ properties->setProperty("IceSSL.Client.Config", configFile);
+ sslPlugin->configure(IceSSL::Client);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::CertificateLoadException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const IceSSL::OpenSSL::PrivateKeyLoadException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+void
+testExpectPrivateKeyLoadException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ try
+ {
+ properties->setProperty("IceSSL.Client.Config", configFile);
+ sslPlugin->configure(IceSSL::Client);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::PrivateKeyLoadException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+void
+testExpectCertificateLoadException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ try
+ {
+ properties->setProperty("IceSSL.Client.Config", configFile);
+ sslPlugin->configure(IceSSL::Client);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::CertificateLoadException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+void
+testExpectCertificateKeyMatchException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ try
+ {
+ properties->setProperty("IceSSL.Client.Config", configFile);
+ sslPlugin->configure(IceSSL::Client);
+ test(false);
+ }
+ catch (const IceSSL::OpenSSL::CertificateKeyMatchException&)
+ {
+ std::cout << "ok" << std::endl;
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+void
+testNoException(const Ice::CommunicatorPtr& communicator, const std::string& configFile)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ Ice::PluginPtr plugin = communicator->getPluginManager()->getPlugin("IceSSL");
+ IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
+
+ try
+ {
+ properties->setProperty("IceSSL.Client.Config", configFile);
+ sslPlugin->configure(IceSSL::Client);
+ std::cout << "ok" << std::endl;
+ }
+ catch (const LocalException&)
+ {
+ //
+ // Any other exception is bad.
+ //
+
+ test(false);
+ }
+ catch (...)
+ {
+ //
+ // Unknown exceptions are always bad.
+ //
+
+ test(false);
+ }
+}
+
+int
+run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ // properties->setProperty("IceSSL.Client.CertPath", "../certs");
+
+ std::cout << "bad private key and certificate... " << std::flush;
+ testExpectCertificateAndPrivateKeyLoadException(communicator, "sslconfig_1.xml");
+
+ std::cout << "bad private key and good certificate 1... " << std::flush;
+ testExpectPrivateKeyLoadException(communicator, "sslconfig_2.xml");
+
+ std::cout << "good private key 1 and bad certificate... " << std::flush;
+ testExpectCertificateLoadException(communicator, "sslconfig_3.xml");
+
+ std::cout << "good private key 1 and good certificate 2, mismatched... " << std::flush;
+ testExpectCertificateKeyMatchException(communicator, "sslconfig_4.xml");
+
+ std::cout << "good private key 2 and good certificate 1, mismatched (again)... " << std::flush;
+ testExpectCertificateKeyMatchException(communicator, "sslconfig_5.xml");
+
+ std::cout << "good matched private key and certificate... " << std::flush;
+ testNoException(communicator, "sslconfig_6.xml");
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ Ice::CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = Ice::initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if (communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/java/src/Ice/ObjectAdapterI.java b/java/src/Ice/ObjectAdapterI.java
index 708ff795de1..de5fec4c5fc 100644
--- a/java/src/Ice/ObjectAdapterI.java
+++ b/java/src/Ice/ObjectAdapterI.java
@@ -227,7 +227,7 @@ public class ObjectAdapterI implements ObjectAdapter
//
IceInternal.Endpoint[] endpoints = new IceInternal.Endpoint[0];
IceInternal.Reference ref =
- _instance.referenceFactory().create(ident, "", IceInternal.Reference.ModeTwoway, false, endpoints,
+ _instance.referenceFactory().create(ident, "", IceInternal.Reference.ModeTwoway, false, false, endpoints,
endpoints, null, this);
return _instance.proxyFactory().referenceToProxy(ref);
@@ -418,7 +418,8 @@ public class ObjectAdapterI implements ObjectAdapter
// Create a reference and return a proxy for this reference.
//
IceInternal.Reference reference = _instance.referenceFactory().create(ident, "",
- IceInternal.Reference.ModeTwoway, false,
+ IceInternal.Reference.ModeTwoway,
+ false, false,
endpoints, endpoints, null, null);
return _instance.proxyFactory().referenceToProxy(reference);
}
diff --git a/java/src/Ice/ObjectPrxHelper.java b/java/src/Ice/ObjectPrxHelper.java
index 95f5d408408..8f0e853f32f 100644
--- a/java/src/Ice/ObjectPrxHelper.java
+++ b/java/src/Ice/ObjectPrxHelper.java
@@ -554,7 +554,7 @@ public class ObjectPrxHelper implements ObjectPrx
ObjectPrxHelper h = (ObjectPrxHelper)ex._prx;
if (!_reference.identity.equals(h.__reference().identity))
{
- throw new ReferenceIdentityException();
+ throw new LocationForwardIdentityException();
}
_reference = _reference.changeEndpoints(h.__reference().endpoints);
diff --git a/java/src/IceInternal/Connection.java b/java/src/IceInternal/Connection.java
index e6cd256ded7..ce5f649f484 100644
--- a/java/src/IceInternal/Connection.java
+++ b/java/src/IceInternal/Connection.java
@@ -387,6 +387,13 @@ public final class Connection extends EventHandler
switch (messageType)
{
+ case Protocol.compressedRequestMsg:
+ case Protocol.compressedRequestBatchMsg:
+ case Protocol.compressedReplyMsg:
+ {
+ throw new Ice.CompressionNotSupportedException();
+ }
+
case Protocol.requestMsg:
{
if (_state == StateClosing)
@@ -766,8 +773,7 @@ public final class Connection extends EventHandler
if (!(ex instanceof Ice.CloseConnectionException ||
ex instanceof Ice.CommunicatorDestroyedException ||
ex instanceof Ice.ObjectAdapterDeactivatedException ||
- (ex instanceof Ice.ConnectionLostException &&
- _state == StateClosing)))
+ (ex instanceof Ice.ConnectionLostException && _state == StateClosing)))
{
warning("connection exception", ex);
}
diff --git a/java/src/IceInternal/Protocol.java b/java/src/IceInternal/Protocol.java
index 4b326fef4fc..1b34b22840c 100644
--- a/java/src/IceInternal/Protocol.java
+++ b/java/src/IceInternal/Protocol.java
@@ -35,4 +35,7 @@ final class Protocol
final static byte requestBatchMsg = 1;
final static byte replyMsg = 2;
final static byte closeConnectionMsg = 3;
+ final static byte compressedRequestMsg = 4;
+ final static byte compressedRequestBatchMsg = 5;
+ final static byte compressedReplyMsg = 6;
}
diff --git a/java/src/IceInternal/Reference.java b/java/src/IceInternal/Reference.java
index 7af1c4653c8..763447e19a8 100644
--- a/java/src/IceInternal/Reference.java
+++ b/java/src/IceInternal/Reference.java
@@ -65,6 +65,11 @@ public final class Reference
return false;
}
+ if (compress != r.compress)
+ {
+ return false;
+ }
+
if (!compare(origEndpoints, r.origEndpoints))
{
return false;
@@ -111,6 +116,8 @@ public final class Reference
s.writeBool(secure);
+ s.writeBool(compress);
+
s.writeSize(origEndpoints.length);
for (int i = 0; i < origEndpoints.length; i++)
{
@@ -185,6 +192,11 @@ public final class Reference
s.append(" -s");
}
+ if (compress)
+ {
+ s.append(" -c");
+ }
+
for (int i = 0; i < origEndpoints.length; i++)
{
s.append(':');
@@ -207,16 +219,17 @@ public final class Reference
//
// All members are treated as const, because References are immutable.
//
- public Instance instance;
- public Ice.Identity identity;
- public String facet;
- public int mode;
- public boolean secure;
- public Endpoint[] origEndpoints; // Original endpoints.
- public Endpoint[] endpoints; // Actual endpoints, changed by a location forward.
- public RouterInfo routerInfo; // Null if no router is used.
- public Ice.ObjectAdapter reverseAdapter; // For reverse communications using the adapter's incoming connections.
- public int hashValue;
+ final public Instance instance;
+ final public Ice.Identity identity;
+ final public String facet;
+ final public int mode;
+ final public boolean secure;
+ final public boolean compress;
+ final public Endpoint[] origEndpoints; // Original endpoints.
+ final public Endpoint[] endpoints; // Actual endpoints, changed by a location forward.
+ final public RouterInfo routerInfo; // Null if no router is used.
+ final public Ice.ObjectAdapter reverseAdapter; // For reverse comm. using the adapter's incoming connections.
+ final public int hashValue;
//
// Get a new reference, based on the existing one, overwriting
@@ -231,7 +244,7 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(newIdentity, facet, mode, secure,
+ return instance.referenceFactory().create(newIdentity, facet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -246,7 +259,7 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(identity, newFacet, mode, secure,
+ return instance.referenceFactory().create(identity, newFacet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -291,7 +304,7 @@ public final class Reference
}
}
- return instance.referenceFactory().create(identity, facet, mode, secure,
+ return instance.referenceFactory().create(identity, facet, mode, secure, compress,
newOrigEndpoints, newEndpoints,
newRouterInfo, reverseAdapter);
}
@@ -305,7 +318,7 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(identity, facet, newMode, secure,
+ return instance.referenceFactory().create(identity, facet, newMode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -320,7 +333,22 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(identity, facet, mode, newSecure,
+ return instance.referenceFactory().create(identity, facet, mode, newSecure, compress,
+ origEndpoints, endpoints,
+ routerInfo, reverseAdapter);
+ }
+ }
+
+ public Reference
+ changeCompress(boolean newCompress)
+ {
+ if (newCompress == compress)
+ {
+ return this;
+ }
+ else
+ {
+ return instance.referenceFactory().create(identity, facet, mode, secure, newCompress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
}
@@ -335,7 +363,7 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(identity, facet, mode, secure,
+ return instance.referenceFactory().create(identity, facet, mode, secure, compress,
origEndpoints, newEndpoints,
routerInfo, reverseAdapter);
}
@@ -353,7 +381,7 @@ public final class Reference
}
else
{
- return instance.referenceFactory().create(identity, facet, mode, secure,
+ return instance.referenceFactory().create(identity, facet, mode, secure, compress,
origEndpoints, endpoints,
newRouterInfo, reverseAdapter);
}
@@ -362,7 +390,7 @@ public final class Reference
public Reference
changeDefault()
{
- return instance.referenceFactory().create(identity, "", ModeTwoway, false,
+ return instance.referenceFactory().create(identity, "", ModeTwoway, false, false,
origEndpoints, origEndpoints,
null, null);
}
@@ -375,6 +403,7 @@ public final class Reference
String fac,
int md,
boolean sec,
+ boolean com,
Endpoint[] origEndpts,
Endpoint[] endpts,
RouterInfo rtrInfo,
@@ -385,18 +414,12 @@ public final class Reference
facet = fac;
mode = md;
secure = sec;
+ compress = com;
origEndpoints = origEndpts;
endpoints = endpts;
routerInfo = rtrInfo;
reverseAdapter = rvAdapter;
- hashValue = 0;
-
- calcHashValue();
- }
- private void
- calcHashValue()
- {
int h = 0;
int sz = identity.name.length();
@@ -421,13 +444,15 @@ public final class Reference
h = 5 * h + (secure ? 1 : 0);
+ h = 5 * h + (compress ? 1 : 0);
+
//
// TODO: Should we also take the endpoints into account for hash
// calculation? Perhaps not, the code above should be good enough
// for a good hash value.
//
- hashValue = h;
+ hashValue = h;
}
//
diff --git a/java/src/IceInternal/ReferenceFactory.java b/java/src/IceInternal/ReferenceFactory.java
index ddf84364c79..876bd466a97 100644
--- a/java/src/IceInternal/ReferenceFactory.java
+++ b/java/src/IceInternal/ReferenceFactory.java
@@ -17,6 +17,7 @@ public final class ReferenceFactory
String facet,
int mode,
boolean secure,
+ boolean compress,
Endpoint[] origEndpoints,
Endpoint[] endpoints,
RouterInfo routerInfo,
@@ -30,7 +31,7 @@ public final class ReferenceFactory
//
// Create a new reference
//
- Reference ref = new Reference(_instance, ident, facet, mode, secure,
+ Reference ref = new Reference(_instance, ident, facet, mode, secure, compress,
origEndpoints, endpoints,
routerInfo, reverseAdapter);
@@ -72,7 +73,7 @@ public final class ReferenceFactory
String s = str.trim();
if (s.length() == 0)
{
- throw new Ice.ReferenceParseException();
+ throw new Ice.ProxyParseException();
}
int colon = s.indexOf(':');
@@ -91,6 +92,7 @@ public final class ReferenceFactory
String facet = "";
int mode = Reference.ModeTwoway;
boolean secure = false;
+ boolean compress = false;
int i = 1;
while (i < arr.length)
@@ -98,7 +100,7 @@ public final class ReferenceFactory
String option = arr[i++];
if (option.length() != 2 || option.charAt(0) != '-')
{
- throw new Ice.ReferenceParseException();
+ throw new Ice.ProxyParseException();
}
String argument = null;
@@ -190,9 +192,20 @@ public final class ReferenceFactory
break;
}
+ case 'c':
+ {
+ if (argument != null)
+ {
+ throw new Ice.EndpointParseException();
+ }
+
+ compress = true;
+ break;
+ }
+
default:
{
- throw new Ice.ReferenceParseException();
+ throw new Ice.ProxyParseException();
}
}
}
@@ -217,7 +230,7 @@ public final class ReferenceFactory
{
if (!orig)
{
- throw new Ice.ReferenceParseException();
+ throw new Ice.ProxyParseException();
}
orig = false;
@@ -244,7 +257,7 @@ public final class ReferenceFactory
if (origEndpoints.size() == 0 || endpoints.size() == 0)
{
- throw new Ice.ReferenceParseException();
+ throw new Ice.ProxyParseException();
}
Endpoint[] origEndp = new Endpoint[origEndpoints.size()];
@@ -253,7 +266,7 @@ public final class ReferenceFactory
endpoints.toArray(endp);
RouterInfo routerInfo = _instance.routerManager().get(getDefaultRouter());
- return create(ident, facet, mode, secure, origEndp, endp, routerInfo, null);
+ return create(ident, facet, mode, secure, compress, origEndp, endp, routerInfo, null);
}
public Reference
@@ -274,6 +287,8 @@ public final class ReferenceFactory
boolean secure = s.readBool();
+ boolean compress = s.readBool();
+
Endpoint[] origEndpoints;
Endpoint[] endpoints;
@@ -300,7 +315,7 @@ public final class ReferenceFactory
}
RouterInfo routerInfo = _instance.routerManager().get(getDefaultRouter());
- return create(ident, facet, mode, secure, origEndpoints, endpoints, routerInfo, null);
+ return create(ident, facet, mode, secure, compress, origEndpoints, endpoints, routerInfo, null);
}
public synchronized void