summaryrefslogtreecommitdiff
path: root/qpid/cpp/bindings
diff options
context:
space:
mode:
authorCharles E. Rolke <chug@apache.org>2015-08-05 20:44:18 +0000
committerCharles E. Rolke <chug@apache.org>2015-08-05 20:44:18 +0000
commitce527fbfdfe99ec862e01073c9b524c186f47e2b (patch)
tree3448be7146cd7fc2b5f2ba2a3b0c3746d88b3dbc /qpid/cpp/bindings
parenta5bbf426a07a13c5a60acc274c08d7fd07a62b7c (diff)
downloadqpid-python-ce527fbfdfe99ec862e01073c9b524c186f47e2b.tar.gz
QPID-6680: .NET Binding allows UTF-8 string messages - patch from https://github.com/gaborsulyok
This closes #8 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1694323 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/bindings')
-rw-r--r--qpid/cpp/bindings/qpid/dotnet/src/Message.cpp2
-rw-r--r--qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h17
-rw-r--r--qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp4
-rw-r--r--qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs9
4 files changed, 29 insertions, 3 deletions
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
index cbf477bcaa..3409db5a63 100644
--- a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
+++ b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
@@ -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)
{
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h b/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h
index 60f40afe04..f4aa342eac 100644
--- a/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h
+++ b/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h
@@ -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 );
+ }
};
}}}}
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
index 01ec8056c6..4f9a1638ca 100644
--- a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
+++ b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
@@ -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;
}
diff --git a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
index bf9620d785..eb842bb03b 100644
--- a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
+++ b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
@@ -58,6 +58,15 @@ namespace Org.Apache.Qpid.Messaging.UnitTest
}
[Test]
+ public void Utf8MessageStringContent()
+ {
+ Message m2 = new Message("€");
+ string mString = m2.GetContent();
+
+ StringAssert.IsMatch("€", mString);
+ }
+
+ [Test]
public void MessageReceiveContentAsByteArray()
{
Message m2 = new Message("while");