Author: chug
Date: Wed Aug  5 20:44:18 2015
New Revision: 1694323

URL: http://svn.apache.org/r1694323
Log:
QPID-6680: .NET Binding allows UTF-8 string messages - patch from 
https://github.com/gaborsulyok 

This closes #8

Modified:
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
    
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp?rev=1694323&r1=1694322&r2=1694323&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp Wed Aug  5 
20:44:18 2015
@@ -441,7 +441,7 @@ namespace Messaging {
 
         try
         {
-            result = gcnew String(nativeObjPtr->getContent().c_str());
+            result = 
QpidMarshal::ToManaged(nativeObjPtr->getContent().c_str());
         }
         catch (const ::qpid::types::Exception & error)
         {

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h?rev=1694323&r1=1694322&r2=1694323&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h Wed Aug  5 
20:44:18 2015
@@ -60,6 +60,23 @@ public:
         std::string native((char *) pinnedBuf, mbytes->Length);
         return native;
     }
+
+
+    static System::String^ ToManaged( std::string native )
+    {
+        if( native.length() == 0 )
+        {
+            return gcnew System::String( "" );
+        }
+
+        pin_ptr<unsigned char> pinnedBuf = (unsigned char *)native.c_str();
+        array<unsigned char>^ mbytes = gcnew array<unsigned char>( 
(int)native.length() );
+
+        for( unsigned int idx = 0; idx < native.length(); idx++ )
+            mbytes[ idx ] = pinnedBuf[ idx ];
+
+        return Encoding::UTF8->GetString( mbytes );
+    }
 };
 
 }}}}

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp?rev=1694323&r1=1694322&r2=1694323&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp Wed Aug  5 
20:44:18 2015
@@ -280,7 +280,7 @@ namespace Messaging {
         //  create a .NET object and add it to the dictionary.
         for (::qpid::types::Variant::Map::const_iterator i = qpidMap.begin(); 
i != qpidMap.end(); ++i)
         {
-            System::String ^ elementName = gcnew String(i->first.c_str());
+            System::String ^ elementName = 
QpidMarshal::ToManaged(i->first.c_str());
             ::qpid::types::Variant variant = i->second;
             dict[elementName] = NativeToManagedObject(variant);
         }
@@ -394,7 +394,7 @@ namespace Messaging {
 
         case ::qpid::types::VAR_STRING:
             {
-                System::String ^ elementValue = gcnew 
System::String(nativeObject.asString().c_str());
+                System::String ^ elementValue = 
QpidMarshal::ToManaged(nativeObject.asString().c_str());
                 managedObject = elementValue;
                 break;
             }

Modified: 
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs?rev=1694323&r1=1694322&r2=1694323&view=diff
==============================================================================
--- 
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
 (original)
+++ 
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
 Wed Aug  5 20:44:18 2015
@@ -58,6 +58,15 @@ namespace Org.Apache.Qpid.Messaging.Unit
         }
 
         [Test]
+        public void Utf8MessageStringContent()
+        {
+            Message m2 = new Message("€");
+            string mString = m2.GetContent();
+
+            StringAssert.IsMatch("€", mString);
+        }
+
+        [Test]
         public void MessageReceiveContentAsByteArray()
         {
             Message m2 = new Message("while");



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to