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