Author: tabish
Date: Thu Dec 28 11:36:57 2006
New Revision: 490775

URL: http://svn.apache.org/viewvc?view=rev&rev=490775
Log:
http://issues.apache.org/activemq/browse/AMQCPP-37

Modified:
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h
    
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h

Modified: 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h
URL: 
http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h?view=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h
 Thu Dec 28 11:36:57 2006
@@ -654,6 +654,20 @@
          */
         virtual void writeString( const std::string& value ) throw ( 
cms::CMSException );
 
+        /**
+         * Reads an UTF String from the BytesMessage stream
+         * @returns String from stream
+         * @throws CMSException
+         */
+        virtual std::string readUTF() throw ( cms::CMSException );
+
+        /**
+         * Writes an UTF String to the BytesMessage stream
+         * @param value - String to write to the stream
+         * @throws CMSException
+         */
+        virtual void writeUTF( const std::string& value ) throw ( 
cms::CMSException );
+
     public:  // ActiveMQMessage
 
         /**

Modified: 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h
URL: 
http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h?view=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h
 Thu Dec 28 11:36:57 2006
@@ -457,6 +457,26 @@
             checkWriteOnly();
             dataOutputStream.writeBytes( value );
         }
+
+        /**
+         * Reads an UTF String from the BytesMessage stream
+         * @returns String from stream
+         * @throws CMSException
+         */
+        virtual std::string readUTF() throw ( cms::CMSException ){
+            checkReadOnly();
+            return dataInputStream.readUTF();
+        }
+        
+        /**
+         * Writes an UTF String to the BytesMessage stream
+         * @param value The string to be written to the stream.
+         * @throws CMSException
+         */
+        virtual void writeUTF( const std::string& value ) throw ( 
cms::CMSException ){
+            checkWriteOnly();
+            dataOutputStream.writeUTF( value );
+        }
         
     protected:
     

Modified: 
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=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp
 Thu Dec 28 11:36:57 2006
@@ -237,7 +237,11 @@
 std::string DataInputStream::readUTF() 
     throw ( io::IOException, io::EOFException ) {
     try {
-        return "";
+        std::string buffer;
+        unsigned short len = readUnsignedShort();
+        buffer.resize(len);
+        readFully( (unsigned char*)buffer.c_str(), 0, len );
+        return buffer;
     }
     AMQ_CATCH_RETHROW( IOException )
     AMQ_CATCHALL_THROW( IOException )    

Modified: 
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=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h
 Thu Dec 28 11:36:57 2006
@@ -252,7 +252,9 @@
             throw ( io::IOException, io::EOFException );
         
         /**
-         * 
+         * Reads an null terminated ASCII string to the stream and returns the
+         * string to the caller. 
+         * @returns string object containing the string read.
          * @throws IOException
          * @throws EOFException
          */
@@ -260,7 +262,10 @@
             throw ( io::IOException, io::EOFException );
             
         /**
-         * 
+         * Reads a UTF8 encoded string in ASCII format and returns it, this is
+         * only useful if you know for sure that the string that is to be read
+         * was a string that contained all ascii values, and not uncide chars.
+         * @returns string read from stream.
          * @throws IOException
          * @throws EOFException
          */

Modified: 
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=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp
 Thu Dec 28 11:36:57 2006
@@ -180,3 +180,13 @@
     AMQ_CATCH_RETHROW( IOException )
     AMQ_CATCHALL_THROW( IOException )
 }
+
+////////////////////////////////////////////////////////////////////////////////
+void DataOutputStream::writeUTF( const std::string& value ) throw ( 
IOException ) {
+    try {
+        this->writeUnsignedShort( value.length() );
+        this->write( (const unsigned char*)value.c_str(), value.length() );
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}

Modified: 
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=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h
 Thu Dec 28 11:36:57 2006
@@ -199,6 +199,14 @@
          */
         virtual void writeChars( const std::string& value ) throw ( 
IOException ) {};
 
+        /**
+         * Writes out the string to the underlying output stream as a
+         * unsigned short indicating its length followed by the rest of
+         * the string.
+         * @param value the value to write.
+         * @throws IOException
+         */
+        virtual void writeUTF( const std::string& value ) throw ( 
io::IOException );
     };
 
 }}

Modified: 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h
URL: 
http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h?view=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h 
(original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h 
Thu Dec 28 11:36:57 2006
@@ -273,6 +273,20 @@
          */
         virtual void writeString( const std::string& value ) throw ( 
cms::CMSException ) = 0;
 
+        /**
+         * Reads an UTF String from the BytesMessage stream
+         * @returns String from stream
+         * @throws CMSException
+         */
+        virtual std::string readUTF() throw ( cms::CMSException ) = 0;
+
+        /**
+         * Writes an UTF String to the BytesMessage stream
+         * @param value - String to write to the stream
+         * @throws CMSException
+         */
+        virtual void writeUTF( const std::string& value ) throw ( 
cms::CMSException ) = 0;
+
         virtual BytesMessage* clone() const = 0;
    };
 }

Modified: 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h
URL: 
http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h?view=diff&rev=490775&r1=490774&r2=490775
==============================================================================
--- 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h
 (original)
+++ 
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h
 Thu Dec 28 11:36:57 2006
@@ -60,6 +60,8 @@
                        unsigned char arrayVal[3] = {
                                'a', 'b', 'c'
                        };
+            std::string stringVal1 = "ASCII_String";
+            std::string stringVal2 = "UTF8_String";
                        
                        int size = sizeof(char);
                        memcpy( (char*)(buffer+ix), (char*)&byteVal, size );
@@ -93,6 +95,16 @@
                        size = 3;
                        memcpy( (char*)(buffer+ix), (char*)&arrayVal, size );
                        ix += size;
+            
+            memcpy( (char*)(buffer+ix), stringVal1.c_str(), stringVal1.size() 
+ 1 );
+            ix += stringVal1.size() + 1;
+
+            size = sizeof(uint16_t);
+            uint16_t tempShort2 = util::Endian::byteSwap((unsigned 
short)stringVal2.size());
+            memcpy( (char*)(buffer+ix), (char*)&tempShort2, size );
+            ix += size;
+            memcpy( (char*)(buffer+ix), stringVal2.c_str(), stringVal2.size() 
);
+            ix += stringVal2.size();
 
                        // Create the stream with the buffer we just wrote to.
                        ByteArrayInputStream myStream( buffer, 1000 );
@@ -120,6 +132,13 @@
                        CPPUNIT_ASSERT( arrayVal[0] == 'a' );
                        CPPUNIT_ASSERT( arrayVal[1] == 'b' );
                        CPPUNIT_ASSERT( arrayVal[2] == 'c' );
+            
+            std::string resultStrVal1 = reader.readString();
+            CPPUNIT_ASSERT( resultStrVal1 == stringVal1 );
+
+            std::string resultStrVal2 = reader.readUTF();
+            CPPUNIT_ASSERT( resultStrVal2 == stringVal2 );
+
                }
 
        };


Reply via email to