You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2006/10/02 20:12:58 UTC

svn commit: r452154 - in /incubator/activemq/activemq-cpp/trunk/activemq-cpp: ./ .settings/ src/main/activemq/io/ src/main/activemq/wireformat/ src/test/activemq/connector/openwire/utils/

Author: tabish
Date: Mon Oct  2 11:12:57 2006
New Revision: 452154

URL: http://svn.apache.org/viewvc?view=rev&rev=452154
Log: (empty)

Added:
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/.cdtproject
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/org.eclipse.cdt.core.prefs
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp   (with props)
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h   (with props)
Modified:
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile.cfg

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/.cdtproject
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/.cdtproject?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/.cdtproject (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/.cdtproject Mon Oct  2 11:12:57 2006
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.make.core.make">
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.SOM" point="org.eclipse.cdt.core.BinaryParser">
+<attribute key="addr2line" value="addr2line"/>
+<attribute key="c++filt" value="c++filt"/>
+</extension>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.XCOFF32" point="org.eclipse.cdt.core.BinaryParser">
+<attribute key="addr2line" value="addr2line"/>
+<attribute key="c++filt" value="c++filt"/>
+</extension>
+<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser">
+<attribute key="addr2line" value="addr2line"/>
+<attribute key="c++filt" value="c++filt"/>
+</extension>
+<extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser">
+<attribute key="addr2line" value="addr2line"/>
+<attribute key="cygpath" value="cygpath"/>
+<attribute key="c++filt" value="c++filt"/>
+<attribute key="nm" value="nm"/>
+</extension>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="false"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="false"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="false"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="false"/>
+</scannerInfoProvider>
+</profile>
+</item>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
+</item>
+</data>
+</cdtproject>

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project Mon Oct  2 11:12:57 2006
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>activemq-trunk-cpp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.make.core.makeBuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.arguments</key>
+					<value>-e</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.core.errorOutputParser</key>
+					<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.environment</key>
+					<value>OSTYPE=windows|CONFIG=debug|MAKESUPPORT_HOME=${project_loc}|</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.inc</key>
+					<value>all</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.clean</key>
+					<value>clean</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.command</key>
+					<value>mingw32-make.exe</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.auto</key>
+					<value>all</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>false</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.make.core.makeNature</nature>
+		<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+	</natures>
+</projectDescription>

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/.project
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/org.eclipse.cdt.core.prefs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/org.eclipse.cdt.core.prefs?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/org.eclipse.cdt.core.prefs (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/.settings/org.eclipse.cdt.core.prefs Mon Oct  2 11:12:57 2006
@@ -0,0 +1,3 @@
+#Mon Oct 02 09:05:02 EDT 2006
+eclipse.preferences.version=1
+indexerId=org.eclipse.cdt.core.fastIndexer

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile?view=diff&rev=452154&r1=452153&r2=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile Mon Oct  2 11:12:57 2006
@@ -26,6 +26,12 @@
     \
 	$(OUTDIR)/main/activemq/connector/stomp/marshal/Marshaler.o \
     \
+	$(OUTDIR)/main/activemq/connector/openwire/utils/BooleanStream.o \
+	$(OUTDIR)/main/activemq/connector/openwire/OpenWireFormatFactory.o \
+	$(OUTDIR)/main/activemq/connector/openwire/OpenWireFormat.o \
+    \
+	$(OUTDIR)/main/activemq/connector/openwire/commands/WireFormatInfo.o \
+    \
 	$(OUTDIR)/main/activemq/core/ActiveMQConnectionFactory.o \
 	$(OUTDIR)/main/activemq/core/ActiveMQConnection.o \
 	$(OUTDIR)/main/activemq/core/ActiveMQSession.o \
@@ -34,8 +40,8 @@
 	$(OUTDIR)/main/activemq/core/ActiveMQTransaction.o \
 	$(OUTDIR)/main/activemq/core/ActiveMQConstants.o \
 	\
-	$(OUTDIR)/main/activemq/io/EndianReader.o \
-	$(OUTDIR)/main/activemq/io/EndianWriter.o \
+	$(OUTDIR)/main/activemq/io/DataInputStream.o \
+	$(OUTDIR)/main/activemq/io/DataOutputStream.o \
 	$(OUTDIR)/main/activemq/io/BufferedInputStream.o \
 	$(OUTDIR)/main/activemq/io/BufferedOutputStream.o \
 	$(OUTDIR)/main/activemq/io/ByteArrayInputStream.o \
@@ -59,7 +65,53 @@
     $(OUTDIR)/main/activemq/concurrent/Thread.o \
     $(OUTDIR)/main/activemq/concurrent/Mutex.o \
     $(OUTDIR)/main/activemq/concurrent/ThreadPool.o \
-    $(OUTDIR)/main/activemq/concurrent/PooledThread.o 
+    $(OUTDIR)/main/activemq/concurrent/PooledThread.o \
+    \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/BrokerInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConnectionControl.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConnectionError.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConnectionId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConnectionInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConsumerControl.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConsumerId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ConsumerInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ControlCommand.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/DataArrayResponse.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/DataResponse.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/DestinationInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/DiscoveryEvent.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ExceptionResponse.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/FlushCommand.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/IntegerResponse.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/JournalQueueAck.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/JournalTopicAck.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/JournalTrace.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/JournalTransaction.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/KeepAliveInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/LastPartialCommand.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/LocalTransactionId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/Message.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/MessageAck.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/MessageDispatch.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/MessageDispatchNotification.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/MessageId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/MessagePull.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/NetworkBridgeFilter.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/PartialCommand.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ProducerId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ProducerInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/RemoveInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/RemoveSubscriptionInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ReplayCommand.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/Response.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/SessionId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/SessionInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/ShutdownInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/SubscriptionInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/TransactionId.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/TransactionInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/WireFormatInfo.o \
+    $(OUTDIR)/main/activemq/connector/openwire/commands/XATransactionId.o 
 
 OTESTFILES = \
     $(OUTDIR)/test/main.o \
@@ -100,14 +152,16 @@
     $(OUTDIR)/test/activemq/connector/ConnectorFactoryMapRegistrarTest.o \
     $(OUTDIR)/test/activemq/connector/ConnectorFactoryMapTest.o \
     \
+    $(OUTDIR)/test/activemq/connector/openwire/utils/BooleanStreamTest.o \
+    \
     $(OUTDIR)/test/activemq/exceptions/ActiveMQExceptionTest.o \
     \
     $(OUTDIR)/test/activemq/io/BufferedInputStreamTest.o \
 	$(OUTDIR)/test/activemq/io/BufferedOutputStreamTest.o \
 	$(OUTDIR)/test/activemq/io/ByteArrayInputStreamTest.o \
 	$(OUTDIR)/test/activemq/io/ByteArrayOutputStreamTest.o \
-	$(OUTDIR)/test/activemq/io/EndianReaderTest.o \
-	$(OUTDIR)/test/activemq/io/EndianWriterTest.o \
+	$(OUTDIR)/test/activemq/io/DataInputStreamTest.o \
+	$(OUTDIR)/test/activemq/io/DataOutputStreamTest.o \
 	\
 	$(OUTDIR)/test/activemq/logger/LoggerTest.o \
 	\

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile.cfg
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile.cfg?view=diff&rev=452154&r1=452153&r2=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile.cfg (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/makefile.cfg Mon Oct  2 11:12:57 2006
@@ -138,6 +138,12 @@
 	     $(MD) $(OUTDIR)/main/activemq/connector/stomp; \
 	     $(MD) $(OUTDIR)/main/activemq/connector/stomp/commands; \
 	     $(MD) $(OUTDIR)/main/activemq/connector/stomp/marshal; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire/commands; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire/marshal; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire/marshal/v1; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire/marshal/v2; \
+	     $(MD) $(OUTDIR)/main/activemq/connector/openwire/utils; \
 	     $(MD) $(OUTDIR)/main/activemq/core; \
 	     $(MD) $(OUTDIR)/main/activemq/io; \
 	     $(MD) $(OUTDIR)/main/activemq/logger; \
@@ -163,6 +169,12 @@
 	     $(MD) $(OUTDIR)/test/activemq/connector/stomp; \
 	     $(MD) $(OUTDIR)/test/activemq/connector/stomp/commands; \
 	     $(MD) $(OUTDIR)/test/activemq/connector/stomp/marshal; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire/commands; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire/marshal; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire/marshal/V1; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire/marshal/V2; \
+	     $(MD) $(OUTDIR)/test/activemq/connector/openwire/utils; \
 	     $(MD) $(OUTDIR)/test/activemq/core; \
 	     $(MD) $(OUTDIR)/test/activemq/io; \
 	     $(MD) $(OUTDIR)/test/activemq/logger; \

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp Mon Oct  2 11:12:57 2006
@@ -0,0 +1,267 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <activemq/io/DataInputStream.h>
+#include <activemq/util/Endian.h>
+
+using namespace std;
+using namespace activemq;
+using namespace activemq::io;
+using namespace activemq::util;
+using namespace activemq::exceptions;
+
+////////////////////////////////////////////////////////////////////////////////
+DataInputStream::DataInputStream( InputStream* inputStream, bool own )
+ : FilterInputStream( inputStream, own ) {}
+
+////////////////////////////////////////////////////////////////////////////////
+DataInputStream::~DataInputStream() {}
+
+////////////////////////////////////////////////////////////////////////////////
+int DataInputStream::read( std::vector<unsigned char>& buffer ) 
+    throw ( io::IOException ) {
+        
+    try {
+        return this->read( &buffer[0], 0, buffer.size() );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+int DataInputStream::read( unsigned char* buffer, int offset, int length ) 
+    throw ( io::IOException, exceptions::IndexOutOfBoundsException, exceptions::NullPointerException ) {
+
+    if( length < 0 || offset < 0 ) {
+        throw IndexOutOfBoundsException( 
+            __FILE__, __LINE__,
+            "DataInputStream::read - len or offset params invalid" );
+    }
+    
+    if( buffer == NULL ) {
+        throw NullPointerException( 
+            __FILE__, __LINE__,
+            "DataInputStream::read - Buffer is null" );
+    }
+    
+    try {
+        int read = 0;
+        
+        try {
+            read = inputStream->read( &buffer[offset], length );
+        } catch( io::EOFException& ex ){
+            if( read == 0 ) 
+                return -1;
+        }
+
+        if( read == 0 ){
+            throw IOException( 
+                __FILE__, __LINE__,
+                "DataInputStream::read - failed to extract data, not EOF." );
+        }
+        
+        return read;
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool DataInputStream::readBoolean() 
+    throw( io::IOException, io::EOFException ) {
+
+    try {
+        char value = 0;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( char ) );
+        return (char)( value != 0 );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+char DataInputStream::readByte() 
+    throw ( io::IOException, io::EOFException ) {
+    
+    try {
+        char value = 0;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( char ) );
+        return (char)( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+unsigned char DataInputStream::readUnsignedByte() 
+    throw ( io::IOException, io::EOFException ) {
+
+    try {
+        unsigned char value = 0;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( unsigned char ) );
+        return (char)( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+} 
+
+////////////////////////////////////////////////////////////////////////////////
+char DataInputStream::readChar() throw ( io::IOException, io::EOFException ) {
+    try {
+        char value = 0;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( char ) );
+        return (char)( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+short DataInputStream::readShort() throw ( io::IOException, io::EOFException ) {
+    try {
+        unsigned short value = 0;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( unsigned short ) );
+        return (short)Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+unsigned short DataInputStream::readUnsignedShort() 
+    throw ( io::IOException, io::EOFException ) {
+    try {
+        unsigned short value;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( unsigned short ) );
+        return Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+int DataInputStream::readInt() throw ( io::IOException, io::EOFException ) {
+    try {
+        unsigned int value;    
+        this->readFully( ( unsigned char* )&value, 0, sizeof( unsigned int ) );
+        return (int)Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+double DataInputStream::readDouble() throw ( io::IOException, io::EOFException ) {
+    try {
+        double value;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( double ) );
+        return Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+float DataInputStream::readFloat() throw ( io::IOException, io::EOFException ) {
+    try {
+        float value;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( float ) );
+        return Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+long long DataInputStream::readLong()
+    throw ( io::IOException, io::EOFException ) {
+    try {
+        unsigned long long value;
+        this->readFully( ( unsigned char* )&value, 0, sizeof( unsigned long long ) );
+        return (long long)Endian::byteSwap( value );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string DataInputStream::readUTF() 
+    throw ( io::IOException, io::EOFException ) {
+    try {
+        return "";
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )    
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataInputStream::readFully( std::vector< unsigned char >& buffer ) 
+    throw ( io::IOException, io::EOFException ) {
+    try {
+        readFully( &buffer[0], 0, buffer.size() );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataInputStream::readFully( unsigned char* buffer, int offset, int length ) 
+    throw ( io::IOException, io::EOFException, exceptions::IndexOutOfBoundsException, exceptions::NullPointerException ) {
+    try {
+        if( length < 0 || offset < 0 ) {
+            throw IndexOutOfBoundsException(
+                __FILE__, __LINE__,
+                "DataInputStream::readFully - Len or Offset were invalid" );
+        }
+        
+        if( buffer == NULL ) {
+            throw NullPointerException( 
+                __FILE__, __LINE__,
+                "DataInputStream::read - Buffer is null" );
+        }
+    
+        int n = 0;
+        while( n < length ) {
+            int count = inputStream->read( &buffer[offset + n], length - n );
+            if( count < 0 ) {
+                throw EOFException(
+                    __FILE__, __LINE__,
+                    "DataInputStream::readFully - Reached EOF" );
+            }
+            n += count;
+        }
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )    
+}
+
+////////////////////////////////////////////////////////////////////////////////
+int DataInputStream::skipBytes( int num ) throw( io::IOException ) {
+    try {
+        int total = 0;
+        int cur = 0;
+
+        while( ( total < num ) && 
+               ( ( cur = (int)inputStream->skip( num-total ) ) > 0 ) ) {
+            total += cur;
+        }
+
+        return total;
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h Mon Oct  2 11:12:57 2006
@@ -0,0 +1,330 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#ifndef _ACTIVEMQ_IO_DATAINPUTSTREAM_H_
+#define _ACTIVEMQ_IO_DATAINPUTSTREAM_H_
+
+#include <activemq/io/FilterInputStream.h>
+#include <activemq/io/IOException.h>
+#include <activemq/io/EOFException.h>
+#include <activemq/exceptions/NullPointerException.h>
+#include <activemq/exceptions/IndexOutOfBoundsException.h>
+
+namespace activemq{
+namespace io{
+
+    /**
+     * A data input stream lets an application read primitive Java data 
+     * types from an underlying input stream in a machine-independent way. 
+     * An application uses a data output stream to write data that can 
+     * later be read by a data input stream.
+     * 
+     * Due to the lack of garbage collection in C++ a design decision was 
+     * made to add a boolean parameter to the constructor indicating if the
+     * wrapped <code>InputStream</code> is owned by this object.  That way
+     * creation of the underlying stream can occur in a Java like way. Ex:
+     * 
+     *  DataInputStream os = new DataInputStream( new InputStream(), true )
+     */
+    class DataInputStream : public FilterInputStream
+    {
+    public:
+    
+        /**
+         * Creates a DataInputStream that uses the specified underlying 
+         * InputStream.
+         * @param inputStream the InputStream instance to wrap.
+         * @param own, indicates if this class owns the wrapped string
+         * defaults to false.
+         */
+        DataInputStream( InputStream* inputStream, bool own = false );
+        
+        virtual ~DataInputStream();
+
+        /**
+         * Reads some number of bytes from the contained input stream and 
+         * stores them into the buffer array b. The number of bytes actually
+         * read is returned as an integer. This method blocks until input 
+         * data is available, end of file is detected, or an exception is 
+         * thrown.
+         * <p>
+         * If the length of buffer is zero, then no bytes are read and 0 is 
+         * returned; otherwise, there is an attempt to read at least one 
+         * byte. If no byte is available because the stream is at end of 
+         * file, the value -1 is returned; otherwise, at least one byte is 
+         * read and stored into buffer.
+         * <p>
+         * The first byte read is stored into element buffer[0], the next one 
+         * into buffer[1], and so on. The number of bytes read is, at most, 
+         * equal to the length of buffer. Let k be the number of bytes actually 
+         * read; these bytes will be stored in elements b[0] through b[k-1],
+         * leaving elements buffer[k] through buffer[buffer.length-1] 
+         * unaffected.
+         * <p>
+         * If the first byte cannot be read for any reason other than end 
+         * of file, then an IOException is thrown. In particular, an 
+         * IOException is thrown if the input stream has been closed.
+         * <p>
+         * The read( buffer ) method has the same effect as:
+         *      read( buffer, 0, b.length )
+         * @param buffer - byte array to insert read data into
+         * @returns the total number of bytes read, or -1 if there is no
+         *          more data because the stream is EOF.
+         * @throws IOException 
+         */   
+        virtual int read( std::vector< unsigned char >& buffer ) 
+            throw ( io::IOException );
+
+        /**
+         * Reads up to len bytes of data from the contained input stream 
+         * into an array of bytes. An attempt is made to read as many as 
+         * len bytes, but a smaller number may be read, possibly zero. The 
+         * number of bytes actually read is returned as an integer.
+         * <p>
+         * This method blocks until input data is available, end of file is
+         * detected, or an exception is thrown.
+         * <p>
+         * If buffer is null, a NullPointerException is thrown.
+         * <p>
+         * If off is negative, or len is negative then an 
+         * IndexOutOfBoundsException is thrown, if off + len is greater that
+         * the allocated length of the array, an IOException will result
+         * depending on the platform and compiler settings.
+         * <p>
+         * If len is zero, then no bytes are read and 0 is returned; 
+         * otherwise, there is an attempt to read at least one byte. If no 
+         * byte is available because the stream is at end of file, the 
+         * value -1 is returned; otherwise, at least one byte is read and 
+         * stored into buffer.
+         * <p>
+         * The first byte read is stored into element b[off], the next one 
+         * into buffer[off+1], and so on. The number of bytes read is, at most, 
+         * equal to len. Let k be the number of bytes actually read; these 
+         * bytes will be stored in elements buffer[off] through buffer[off+k-1], 
+         * leaving elements buffer[off+k] through buffer[off+len-1] unaffected.
+         * <p>
+         * In every case, elements buffer[0] through buffer[off] and elements 
+         * buffer[off+len] through buffer[buffer.length-1] are unaffected.
+         * <p>
+         * If the first byte cannot be read for any reason other than end of 
+         * file, then an IOException is thrown. In particular, an IOException 
+         * is thrown if the input stream has been closed.
+         * @param buffer - byte array to insert read data into
+         * @param offset - location in buffer to start writing
+         * @param length - number of bytes to read 
+         * @returns the total number of bytes read, or -1 if there is no
+         *          more data because the stream is EOF.
+         * @throws IOException 
+         */
+        virtual int read( unsigned char* buffer, int offset, int length ) 
+            throw ( io::IOException, exceptions::IndexOutOfBoundsException, exceptions::NullPointerException );
+        
+        /**
+         * Reads one input byte and returns true if that byte is nonzero, 
+         * false if that byte is zero.
+         * @returns the boolean value read.
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual bool readBoolean() 
+            throw( io::IOException, io::EOFException );
+        
+        /**
+         * Reads and returns one input byte. The byte is treated as a 
+         * signed value in the range -128 through 127, inclusive.
+         * @returns the 8-bit value read.
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual char readByte() 
+            throw ( io::IOException, io::EOFException ); 
+
+        /**
+         * Reads one input byte, zero-extends it to type int, and returns 
+         * the result, which is therefore in the range 0  through 255. 
+         * @returns the 8 bit unsigned value read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual unsigned char readUnsignedByte() 
+            throw ( io::IOException, io::EOFException );
+        
+        /**
+         * Reads an input char and returns the char value. A ascii char 
+         * is made up of one bytes.  This returns the same result as 
+         * <code>readByte</code>
+         * @returns the 8 bit char read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual char readChar() throw ( io::IOException, io::EOFException );
+        
+        /**
+         * Reads eight input bytes and returns a double value. It does this
+         * by first constructing a long long  value in exactly the manner of 
+         * the readlong  method, then converting this long  value to a double
+         * in exactly the manner of the method Double.longBitsToDouble.
+         * @returns the double value read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual double readDouble() 
+            throw ( io::IOException, io::EOFException );
+        
+        /**
+         * Reads four input bytes and returns a float value. It does this 
+         * by first constructing an int  value in exactly the manner of the 
+         * readInt  method, then converting this int  value to a float in 
+         * exactly the manner of the method Float.intBitsToFloat.
+         * @returns the float value read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual float readFloat() throw ( io::IOException, io::EOFException );
+
+        /**
+         * Reads four input bytes and returns an int value. Let a  be the 
+         * first byte read, b be the second byte, c be the third byte, and 
+         * d be the fourth byte. The value returned is: <p>
+         *  (((a & 0xff) << 24) | ((b & 0xff) << 16) |
+         *   ((c & 0xff) << 8) | (d & 0xff))
+         * @returns the int value read
+         * @throws IOException 
+         * @throws EOFException
+         */
+        virtual int readInt() throw ( io::IOException, io::EOFException );
+        
+        /**
+         * Reads eight input bytes and returns a long value. Let a  be the 
+         * first byte read, b be the second byte, c be the third byte, d  
+         * be the fourth byte, e be the fifth byte, f  be the sixth byte, 
+         * g be the seventh byte, and h be the eighth byte. The value 
+         * returned is:
+         *  (((long)(a & 0xff) << 56) |
+         *   ((long)(b & 0xff) << 48) |
+         *   ((long)(c & 0xff) << 40) |
+         *   ((long)(d & 0xff) << 32) |
+         *   ((long)(e & 0xff) << 24) |
+         *   ((long)(f & 0xff) << 16) |
+         *   ((long)(g & 0xff) <<  8) |
+         *   ((long)(h & 0xff)))
+         * @returns the 64 bit long long read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual long long readLong() 
+            throw ( io::IOException, io::EOFException );
+
+        /**
+         * Reads two input bytes and returns a short value. Let a  be the 
+         * first byte read and b  be the second byte. The value returned is:
+         *   (short)((a << 8) | (b & 0xff))
+         * @returns the 16 bit short value read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual short readShort() throw ( io::IOException, io::EOFException );
+
+        /**
+         * Reads two input bytes and returns an int value in the range 0 
+         * through 65535. Let a  be the first byte read and b  be the 
+         * second byte. The value returned is:
+         *   (((a & 0xff) << 8) | (b & 0xff))
+         * @returns the 16 bit unsigned short read
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual unsigned short readUnsignedShort() 
+            throw ( io::IOException, io::EOFException );
+        
+        /**
+         * 
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual std::string readUTF() 
+            throw ( io::IOException, io::EOFException );
+
+        /**
+         * Reads some bytes from an input stream and stores them into the 
+         * buffer array buffer. The number of bytes read is equal to the length 
+         * of buffer.<p>
+         * This method blocks until one of the following conditions occurs:
+         *    * buffer.size() bytes of input data are available, in which case 
+         *      a normal return is made.
+         *    * End of file is detected, in which case an EOFException is 
+         *      thrown.
+         *    * An I/O error occurs, in which case an IOException other than 
+         *      EOFException is thrown. 
+         * <p>
+         * If buffer.size() is zero, then no bytes are read. Otherwise, the 
+         * first byte read is stored into element b[0], the next one into 
+         * buffer[1], and so on. If an exception is thrown from this method, 
+         * then it may be that some but not all bytes of buffer have been 
+         * updated with data from the input stream. 
+         * @param buffer - vector of char that is read to its size()
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual void readFully( std::vector< unsigned char >& buffer ) 
+            throw ( io::IOException, io::EOFException );
+                
+        /**
+         * Reads length bytes from an input stream.
+         * <p>
+         * This method blocks until one of the following conditions occurs:
+         *    * length bytes of input data are available, in which case a 
+         *      normal return is made.
+         *    * End of file is detected, in which case an EOFException is 
+         *      thrown.
+         *    * An I/O error occurs, in which case an IOException other 
+         *      than EOFException is thrown. 
+         * <p>
+         * If buffer is null, a NullPointerException is thrown. If offset is 
+         * negative, or len is negative, or offset+length is greater than the 
+         * length of the array buffer, then an IndexOutOfBoundsException is 
+         * thrown. If len is zero, then no bytes are read. Otherwise, the 
+         * first byte read is stored into element buffer[off], the next one into 
+         * buffer[offset+1], and so on. The number of bytes read is, at most, 
+         * equal to len. 
+         * @param buffer - byte array to insert read data into
+         * @param offset - location in buffer to start writing
+         * @param length - number of bytes to read 
+         * @throws IOException
+         * @throws EOFException
+         */
+        virtual void readFully( unsigned char* buffer, int offset, int length ) 
+            throw ( io::IOException, io::EOFException, exceptions::IndexOutOfBoundsException, exceptions::NullPointerException );
+
+        /**
+         * Makes an attempt to skip over n bytes of data from the input 
+         * stream, discarding the skipped bytes. However, it may skip over 
+         * some smaller number of bytes, possibly zero. This may result from
+         * any of a number of conditions; reaching end of file before n 
+         * bytes have been skipped is only one possibility. This method 
+         * never throws an EOFException. The actual number of bytes skipped
+         * is returned.
+         * @param num - number of bytes to skip
+         * @return the total number of bytes skipped
+         */
+        virtual int skipBytes( int num ) throw( io::IOException );
+
+    };
+
+}}
+
+#endif /*_ACTIVEMQ_IO_DATAINPUTSTREAM_H_*/

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp Mon Oct  2 11:12:57 2006
@@ -0,0 +1,149 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include "DataOutputStream.h"
+#include <activemq/util/Endian.h>
+
+using namespace activemq;
+using namespace activemq::io;
+using namespace activemq::util;
+
+////////////////////////////////////////////////////////////////////////////////
+DataOutputStream::DataOutputStream( OutputStream* outputStream, bool own )
+ : FilterOutputStream( outputStream, own )
+{
+    // Init the written count
+    written = 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+DataOutputStream::~DataOutputStream()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::write( const unsigned char c ) throw ( IOException ) {
+    try {
+        outputStream->write( c );
+        written++;
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::write( const unsigned char* buffer, const int len )
+    throw ( IOException ) {
+
+    try {
+        outputStream->write( buffer, len );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeBoolean( bool value ) throw ( IOException ) {
+    try {
+        unsigned char ivalue = 0;
+        value == true ? ivalue = 1 : ivalue = 0;
+        ivalue = Endian::byteSwap( ivalue );
+        write( ( unsigned char* )&ivalue, sizeof( ivalue ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeByte( unsigned char value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeShort( short value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( ( unsigned short )value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeChar( char value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( ( unsigned char )value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeInt( int value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( ( unsigned int )value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeLong( long long value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( ( unsigned long long )value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeFloat( float value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeDouble( double value ) throw ( IOException ) {
+    try {
+        value = Endian::byteSwap( value );
+        write( ( unsigned char* )&value, sizeof( value ) );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeBytes( const std::string& value ) throw ( IOException ) {
+    try {
+        // add one so that we write the NULL
+        this->write( (const unsigned char*)value.c_str(), value.length() + 1 );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h Mon Oct  2 11:12:57 2006
@@ -0,0 +1,181 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#ifndef _ACTIVEMQ_IO_DATAOUTPUTSTREAM_H_
+#define _ACTIVEMQ_IO_DATAOUTPUTSTREAM_H_
+
+#include <activemq/io/FilterOutputStream.h>
+
+namespace activemq{
+namespace io{
+
+    /**
+     * A data output stream lets an application write primitive Java data 
+     * types to an output stream in a portable way. An application can then
+     * use a data input stream to read the data back in.
+     */
+    class DataOutputStream : public FilterOutputStream
+    {
+    protected:
+    
+        // The number of bytes written to the data output stream so far.
+        unsigned int written;
+        
+    public:
+    
+        /**
+         * Creates a new data output stream to write data to the specified 
+         * underlying output stream.
+         * @param outputStream a stream to wrap with this one.
+         * @param own true if this objects owns the stream that it wraps.
+         */
+        DataOutputStream( OutputStream* outputStream, bool own = false );
+
+        virtual ~DataOutputStream();
+        
+        /**
+         * Returns the current value of the counter written, the number of 
+         * bytes written to this data output stream so far. If the counter 
+         * overflows, it will be wrapped to Integer.MAX_VALUE.
+         * @return the value of the written field.
+         */
+        virtual unsigned int size() const {
+            return written;
+        }
+
+        /**
+         * Writes a single byte to the output stream.  If no exception is 
+         * thrown, the counter written is incremented by 1.
+         * @param c the byte.
+         * @throws IOException thrown if an error occurs.
+         */
+        virtual void write( const unsigned char c ) throw ( IOException );
+        
+        /**
+         * Writes an array of bytes to the output stream.  the counter 
+         * written is incremented by len.
+         * @param buffer The array of bytes to write.
+         * @param len The number of bytes from the buffer to be written.
+         * @throws IOException thrown if an error occurs.
+         */
+        virtual void write( const unsigned char* buffer, const int len )
+            throw ( IOException );
+        
+        /**
+         * Writes a boolean to the underlying output stream as a 1-byte value. The 
+         * value true is written out as the value (byte)1; the value false 
+         * is written out as the value (byte)0. If no exception is thrown, 
+         * the counter written is incremented by 1.
+         * @param value the boolean to write.
+         * @throws IOException
+         * 
+         */
+        virtual void writeBoolean( bool value ) throw ( IOException );
+        
+        /**
+         * Writes out a byte to the underlying output stream as a 1-byte 
+         * value. If no exception is thrown, the counter written is 
+         * incremented by 1.
+         * @param value the unsigned char value to write.
+         * @throws IOException
+         */
+        virtual void writeByte( unsigned char value ) throw ( IOException );
+
+        /**
+         * Writes a short to the underlying output stream as two bytes, high 
+         * byte first. If no exception is thrown, the counter written is 
+         * incremented by 2.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeShort( short value ) throw ( IOException );
+        
+        /**
+         * Writes out a char to the underlying output stream as a one byte 
+         * value If no exception is thrown, the counter written is 
+         * incremented by 1.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeChar( char value ) throw ( IOException );
+
+        /**
+         * Writes an int to the underlying output stream as four bytes, high 
+         * byte first. If no exception is thrown, the counter written is 
+         * incremented by 4.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeInt( int value ) throw ( IOException );
+
+        /**
+         * Writes an 64 bit long to the underlying output stream as eight 
+         * bytes, high byte first. If no exception is thrown, the counter 
+         * written is incremented by 8.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeLong( long long value ) throw ( IOException );
+
+        /**
+         * Converts the float argument to an int using the floatToIntBits 
+         * method in class Float, and then writes that int value to the 
+         * underlying output stream as a 4-byte quantity, high byte first. 
+         * If no exception is thrown, the counter written is incremented 
+         * by 4.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeFloat( float value ) throw ( IOException );
+
+        /**
+         * Converts the double argument to a long using the doubleToLongBits 
+         * method in class Double, and then writes that long value to the 
+         * underlying output stream as an 8-byte quantity, high byte first. 
+         * If no exception is thrown, the counter written is incremented 
+         * by 8.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeDouble( double value ) throw ( IOException );
+
+        /**
+         * Writes out the string to the underlying output stream as a 
+         * sequence of bytes. Each character in the string is written out, 
+         * in sequence, by discarding its high eight bits. If no exception 
+         * is thrown, the counter written is incremented by the length of 
+         * value.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeBytes( const std::string& value ) throw ( IOException );
+
+        /**
+         * Writes a string to the underlying output stream as a sequence of 
+         * characters. Each character is written to the data output stream 
+         * as if by the writeChar method. If no exception is thrown, the 
+         * counter written is incremented by twice the length of value.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeChars( const std::string& value ) throw ( IOException ) {};
+
+    };
+
+}}
+
+#endif /*_ACTIVEMQ_IO_DATAOUTPUTSTREAM_H_*/

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h Mon Oct  2 11:12:57 2006
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ACTIVEMQ_WIREFORMAT_WIREFORMAT_H_
+#define _ACTIVEMQ_WIREFORMAT_WIREFORMAT_H_
+
+#include <activemq/io/DataInputStream.h>
+#include <activemq/io/DataOutputStream.h>
+#include <activemq/io/IOException.h>
+
+#include <activemq/transport/Command.h>
+
+namespace activemq{
+namespace wireformat{
+
+    /**
+     * Provides a mechanism to marshal commands into and out of packets
+     * or into and out of streams, Channels and Datagrams.
+     *
+     * @version $Revision: 1.1 $
+     */
+    class WireFormat
+    {
+    public:
+
+        virtual ~WireFormat() {}
+    
+        /**
+         * Stream based marshaling
+         * @param command - The Command to Marshal
+         * @param out - the output stream to write the command to.
+         * @throws IOException 
+         */
+        virtual void marshal( transport::Command* command, io::DataOutputStream* out ) 
+            throw ( io::IOException ) = 0;
+
+        /**
+         * Packet based un-marshaling 
+         * @param in - the input stream to read the command from.
+         * @returns the newly marshaled Command, caller owns the pointer
+         * @throws IOException 
+         */
+        virtual transport::Command* unmarshal( io::DataInputStream* in ) throw ( io::IOException ) = 0;
+        
+        /**
+         * Set the Version
+         * @param the version of the wire format
+         */
+        virtual void setVersion( int version ) = 0;
+        
+        /**
+         * Get the Version
+         * @return the version of the wire format
+         */
+        virtual int getVersion() const = 0;
+    
+    };
+
+}}
+
+#endif /*_ACTIVEMQ_WIREFORMAT_WIREFORMAT_H_*/

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormat.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h Mon Oct  2 11:12:57 2006
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ACTIVEMQ_WIREFORMAT_WIREFORMATFACTORY_H_
+#define _ACTIVEMQ_WIREFORMAT_WIREFORMATFACTORY_H_
+
+#include <activemq/wireformat/WireFormat.h>
+#include <activemq/util/Properties.h>
+#include <activemq/exceptions/IllegalStateException.h>
+
+namespace activemq{
+namespace wireformat{
+
+    /**
+     * The WireFormatFactory is the interface that all WireFormatFactory
+     * classes must extend.  The Factory creates a WireFormat Object based on 
+     * the properties that are set in the passed <code>Properties</code> 
+     * object.  
+     */
+    class WireFormatFactory
+    {
+    public:
+
+        virtual ~WireFormatFactory() {}
+
+        /**    
+         * Creates a new WireFormat Object passing it a set of
+         * properties from which it can obtain any optional settings
+         * @param properties - the Properties for this WireFormat
+         */
+        virtual WireFormat* createWireFormat( const util::Properties& properties ) 
+            throw ( exceptions::IllegalStateException ) = 0; 
+
+    };
+
+}}
+
+#endif /*_ACTIVEMQ_WIREFORMAT_WIREFORMATFACTORY_H_*/

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/WireFormatFactory.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp Mon Oct  2 11:12:57 2006
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "BooleanStreamTest.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::connector::openwire::utils::BooleanStreamTest );

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h?view=auto&rev=452154
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h (added)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h Mon Oct  2 11:12:57 2006
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ACTYIVEMQ_CONNECTOR_OPENWIRE_UTIL_BOOLEANSTREAMTEST_H_
+#define _ACTYIVEMQ_CONNECTOR_OPENWIRE_UTIL_BOOLEANSTREAMTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <activemq/connector/openwire/utils/BooleanStream.h>
+
+#include <activemq/io/ByteArrayOutputStream.h>
+#include <activemq/io/ByteArrayInputStream.h>
+#include <activemq/io/DataOutputStream.h>
+#include <activemq/io/DataInputStream.h>
+
+namespace activemq{
+namespace connector{
+namespace openwire{
+namespace utils{
+
+    class BooleanStreamTest : public CppUnit::TestFixture {
+
+      CPPUNIT_TEST_SUITE( BooleanStreamTest );
+      CPPUNIT_TEST( test );
+      CPPUNIT_TEST( test2 );
+      CPPUNIT_TEST_SUITE_END();
+
+    public:
+    
+        BooleanStreamTest() {}
+        virtual ~BooleanStreamTest() {}
+        
+        void test(){
+
+            BooleanStream b1Stream;
+
+            io::ByteArrayOutputStream baoStream;
+            io::DataOutputStream daoStream( &baoStream );
+
+            b1Stream.writeBoolean( false );
+            b1Stream.writeBoolean( true );
+            b1Stream.writeBoolean( false );
+            b1Stream.writeBoolean( false );
+            b1Stream.writeBoolean( true );
+            b1Stream.writeBoolean( false );
+            b1Stream.writeBoolean( true );
+            b1Stream.writeBoolean( true );
+            
+            b1Stream.marshal( &daoStream );
+            
+            BooleanStream b2Stream;
+            io::ByteArrayInputStream baiStream( baoStream.getByteArray(),
+                                                baoStream.getByteArraySize() );
+            io::DataInputStream daiStream( &baiStream );
+
+            b2Stream.unmarshal( &daiStream );
+            
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == false );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == true );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == false );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == false );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == true );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == false );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == true );
+            CPPUNIT_ASSERT( b2Stream.readBoolean() == true );
+
+        }
+
+        void test2(){
+
+            BooleanStream b1Stream;
+
+            io::ByteArrayOutputStream baoStream;
+            io::DataOutputStream daoStream( &baoStream );
+
+            bool value = false;
+            for( int i = 0; i < 65536; i++ ) {
+                b1Stream.writeBoolean( value );
+                value = !value;
+            }
+
+            b1Stream.marshal( &daoStream );
+            
+            BooleanStream b2Stream;
+            io::ByteArrayInputStream baiStream( baoStream.getByteArray(),
+                                                baoStream.getByteArraySize() );
+            io::DataInputStream daiStream( &baiStream );
+
+            b2Stream.unmarshal( &daiStream );
+
+            value = false;
+            for( int i = 0; i < 65536; i++ ) {
+                CPPUNIT_ASSERT( b2Stream.readBoolean() == value );
+                value = !value;
+            }
+        }
+
+    };
+
+}}}}
+
+#endif /*BOOLEANSTREAMTEST_H_*/

Propchange: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/openwire/utils/BooleanStreamTest.h
------------------------------------------------------------------------------
    svn:eol-style = native