You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2009/09/03 01:38:07 UTC

svn commit: r810734 [2/5] - in /qpid/trunk/qpid/wcf: ./ samples/ samples/Channel/ samples/Channel/WCFToWCFDirect/ samples/Channel/WCFToWCFDirect/Client/ samples/Channel/WCFToWCFDirect/Client/Properties/ samples/Channel/WCFToWCFDirect/Service/ samples/C...

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,91 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.AmqpTypes
+{
+    using System;
+    using System.IO;
+    using System.Collections.Generic;
+    using System.Text;
+
+    // for big strings: str16 in 0-10 and str32 in 1.0
+
+    public class AmqpString : AmqpType
+    {
+        string value;
+        Encoding encoding;
+
+        public AmqpString(string s)
+        {
+            this.value = s;
+            this.encoding = Encoding.UTF8;
+        }
+
+        public AmqpString(string s, Encoding enc)
+        {
+            ValidateEncoding(enc);
+            this.value = s;
+            this.encoding = enc;
+        }
+
+        public Encoding Encoding
+        {
+            get { return encoding; }
+            set
+            {
+                ValidateEncoding(value);
+                encoding = value;
+            }
+        }
+
+        private void ValidateEncoding(Encoding enc)
+        {
+            if (value == null)
+            {
+                throw new ArgumentNullException("Encoding");
+            }
+
+            if ((enc != Encoding.UTF8) && (enc != Encoding.Unicode))
+            {
+                throw new ArgumentException("Encoding not one of UTF8 or Unicode");
+            }
+        }
+
+        public override void Encode(byte[] bufer, int offset, int count)
+        {
+            throw new NotImplementedException();
+        }
+
+        public override int EncodedSize
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public override AmqpType Clone()
+        {
+            return new AmqpString(this.value);
+        }
+
+        public string Value
+        {
+            get { return this.value; }
+            set { this.value = value; }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpString.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,33 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.AmqpTypes
+{
+    using System;
+    using System.IO;
+    using System.Collections.Generic;
+    using System.Text;
+
+    public abstract class AmqpType
+    {
+        public abstract void Encode(byte[] bufer, int offset, int count);
+        public abstract int EncodedSize { get; }
+        public abstract AmqpType Clone();
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpType.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpTypes.csproj
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpTypes.csproj?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpTypes.csproj (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpTypes.csproj Wed Sep  2 23:38:03 2009
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{820BFC34-A40F-46BA-B86B-05334854CA17}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Qpid.AmqpTypes</RootNamespace>
+    <AssemblyName>Apache.Qpid.AmqpTypes</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AmqpBoolean.cs" />
+    <Compile Include="AmqpInt.cs" />
+    <Compile Include="AmqpProperties.cs" />
+    <Compile Include="AmqpString.cs" />
+    <Compile Include="AmqpType.cs" />
+    <Compile Include="AmqpUbyte.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="PropertyName.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+<Message Text="yet another debug line" />
+  </Target>
+  <Target Name="AfterBuild"
+    >
+<Message Text="a debug line before banana.netmodule" />
+        <PropertyGroup Condition="('$(TargetFrameworkVersion)' != 'v1.0') and ('$(TargetFrameworkVersion)' != 'v1.1')">
+            <NoWarn>$(NoWarn);1701;1702</NoWarn>
+        </PropertyGroup>
+
+        <Csc
+              AdditionalLibPaths="$(AdditionalLibPaths)"
+              AddModules="@(AddModules)"
+              AllowUnsafeBlocks="$(AllowUnsafeBlocks)"
+              BaseAddress="$(BaseAddress)"
+              CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)"
+              CodePage="$(CodePage)"
+              DebugType="$(DebugType)"
+              DefineConstants="$(DefineConstants)"
+              DelaySign="$(DelaySign)"
+              DisabledWarnings="$(NoWarn)"
+              DocumentationFile="@(DocFileItem)"
+              EmitDebugInformation="$(DebugSymbols)"
+              ErrorReport="$(ErrorReport)"
+              FileAlignment="$(FileAlignment)"
+              GenerateFullPaths="$(GenerateFullPaths)"
+              KeyContainer="$(KeyContainerName)"
+              KeyFile="$(KeyOriginatorFile)"
+              LangVersion="$(LangVersion)"
+              MainEntryPoint="$(StartupObject)"
+              ModuleAssemblyName="banana"
+              NoConfig="true"
+              NoLogo="$(NoLogo)"
+              NoStandardLib="$(NoStdLib)"
+              NoWin32Manifest="$(NoWin32Manifest)"
+              Optimize="$(Optimize)"
+              OutputAssembly="@(IntermediateAssembly)"
+              PdbFile="$(PdbFile)" 
+              Platform="$(PlatformTarget)"
+              References="@(ReferencePath)"
+              Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)"
+              ResponseFiles="$(CompilerResponseFile)"
+              Sources="@(Compile)"
+              TargetType="module"
+              ToolExe="$(CscToolExe)"
+              ToolPath="$(CscToolPath)"
+              TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
+              UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)"
+              Utf8Output="$(Utf8Output)"
+              WarningLevel="$(WarningLevel)"
+              WarningsAsErrors="$(WarningsAsErrors)"
+              WarningsNotAsErrors="$(WarningsNotAsErrors)"
+              Win32Icon="$(ApplicationIcon)"
+              Win32Manifest="$(Win32Manifest)"
+              Win32Resource="$(Win32Resource)"
+              />            
+                
+              <ItemGroup>
+                  <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" />                  
+              </ItemGroup>
+              
+<Message Text="a debug line after banana.netmodule" />
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>cd "$(ProjectDir)bin\$(ConfigurationName)"
+del $(AssemblyName).dll
+del $(AssemblyName).pdb
+cd "$(ProjectDir)obj\$(ConfigurationName)"
+del $(AssemblyName).dll
+del $(AssemblyName).pdb
+cd "$(ProjectDir)"
+CreateNetModule.bat</PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,57 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.AmqpTypes
+{
+    using System;
+    using System.IO;
+    using System.Collections.Generic;
+    using System.Text;
+
+    public class AmqpUbyte : AmqpType
+    {
+        byte value;
+
+        public AmqpUbyte(byte i)
+        {
+            this.value = i;
+        }
+
+        public override void Encode(byte[] bufer, int offset, int count)
+        {
+            throw new NotImplementedException();
+        }
+
+        public override int EncodedSize
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public override AmqpType Clone()
+        {
+            return new AmqpUbyte(this.value);
+        }
+
+        public byte Value
+        {
+            get { return this.value; }
+            set { this.value = value; }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/AmqpUbyte.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat Wed Sep  2 23:38:03 2009
@@ -0,0 +1,19 @@
+
+REM Licensed to the Apache Software Foundation (ASF) under one
+REM or more contributor license agreements.  See the NOTICE file
+REM distributed with this work for additional information
+REM regarding copyright ownership.  The ASF licenses this file
+REM to you under the Apache License, Version 2.0 (the
+REM "License"); you may not use this file except in compliance
+REM with the License.  You may obtain a copy of the License at
+REM 
+REM   http://www.apache.org/licenses/LICENSE-2.0
+REM 
+REM Unless required by applicable law or agreed to in writing,
+REM software distributed under the License is distributed on an
+REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM KIND, either express or implied.  See the License for the
+REM specific language governing permissions and limitations
+REM under the License.
+
+%systemroot%\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"%programfiles%\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"%programfiles%\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:%systemroot%\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:%systemroot%\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:%systemroot%\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"%programfiles%\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\Apache.Qpid.AmqpTypes.netmodule /target:module *.cs
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat
------------------------------------------------------------------------------
    svn:executable = *

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/CreateNetModule.bat
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,55 @@
+/*
+* 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.
+*/
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Apache.Qpid.AmqpTypes")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("79b8b5d9-047d-4f3b-8610-7fe112ce6416")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/Properties/AssemblyInfo.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,35 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.AmqpTypes
+{
+    using System;
+    using System.IO;
+    using System.Collections.Generic;
+    using System.Text;
+
+    public sealed class PropertyName
+    {
+        public const string Priority = "amqpx.priority";
+        public const string ContentType = "amqp.content-type";
+        public const string ReplyTo = "amqp.reply-to";
+        public const string ReplyToExchange = "amqpx.qpid0-10.reply-to-exchange";
+        public const string RoutingKey = "amqpx.qpid0-10.routing-key";
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/AmqpTypes/PropertyName.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,60 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+    using System.Configuration;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.ServiceModel.Configuration;
+
+    using Apache.Qpid.AmqpTypes;
+
+    public class AmqpBinaryBinding : AmqpBinding
+    {
+        public AmqpBinaryBinding()
+: base (new RawMessageEncodingBindingElement())
+        {
+        }
+
+        public AmqpBinaryBinding(string configurationName)
+            : this()
+        {
+            ApplyConfiguration(configurationName);
+        }
+
+        private void ApplyConfiguration(string configurationName)
+        {
+            AmqpBinaryBindingCollectionElement section = (AmqpBinaryBindingCollectionElement)ConfigurationManager.GetSection(AmqpConstants.AmqpBinaryBindingSectionName);
+            AmqpBinaryBindingConfigurationElement element = section.Bindings[configurationName];
+            if (element == null)
+            {
+                throw new ConfigurationErrorsException(string.Format(System.Globalization.CultureInfo.CurrentCulture,
+                    "There is no binding named {0} at {1}.", configurationName, section.BindingName));
+            }
+            else
+            {
+                element.ApplyConfiguration(this);
+            }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBinding.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,29 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    /// <summary>
+    /// Implement application configuration of bindingExtensions for AmqpBinaryBinding
+    /// </summary>
+    public class AmqpBinaryBindingCollectionElement 
+        : System.ServiceModel.Configuration.StandardBindingCollectionElement<AmqpBinaryBinding, AmqpBinaryBindingConfigurationElement>
+    {
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingCollectionElement.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,79 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+    using System.Configuration;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.ServiceModel.Configuration;
+    using Apache.Qpid.AmqpTypes;
+
+    public class AmqpBinaryBindingConfigurationElement : AmqpBindingConfigurationElement
+    {
+        public AmqpBinaryBindingConfigurationElement(string configurationName)
+            : base(configurationName)
+        {
+        }
+
+        public AmqpBinaryBindingConfigurationElement()
+            : this(null)
+        {
+        }
+
+        protected override Type BindingElementType
+        {
+            get { return typeof(AmqpBinaryBinding); }
+        }
+
+        protected override ConfigurationPropertyCollection Properties
+        {
+            get
+            {
+                ConfigurationPropertyCollection properties = base.Properties;
+
+                return properties;
+            }
+        }
+
+        protected override void InitializeFrom(Binding binding)
+        {
+            base.InitializeFrom(binding);
+            AmqpBinaryBinding amqpBinding = (AmqpBinaryBinding)binding;
+        }
+
+        protected override void OnApplyConfiguration(Binding binding)
+        {
+            if (binding == null)
+                throw new ArgumentNullException("binding");
+
+            if (binding.GetType() != typeof(AmqpBinaryBinding))
+            {
+                throw new ArgumentException(string.Format("Invalid type for configuring an AMQP binding. Expected type: {0}. Type passed in: {1}.",
+                    typeof(AmqpBinaryBinding).AssemblyQualifiedName,
+                    binding.GetType().AssemblyQualifiedName));
+            }
+
+            base.OnApplyConfiguration(binding);
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinaryBindingConfigurationElement.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,115 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+    using System.Configuration;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.ServiceModel.Configuration;
+
+    using Apache.Qpid.AmqpTypes;
+
+    public class AmqpBinding : Binding
+    {
+        protected AmqpTransportBindingElement transport;
+        protected MessageEncodingBindingElement encoding;
+
+        public AmqpBinding()
+        {
+            transport = new AmqpTransportBindingElement();
+            encoding = new BinaryMessageEncodingBindingElement();
+        }
+
+        protected AmqpBinding(MessageEncodingBindingElement encoding)
+        {
+            this.encoding = encoding;
+            transport = new AmqpTransportBindingElement();
+        }
+
+        public AmqpBinding(string configurationName)
+            : this()
+        {
+            ApplyConfiguration(configurationName);
+        }
+
+        public string BrokerHost
+        {
+            get { return transport.BrokerHost; }
+            set { transport.BrokerHost = value; }
+        }
+
+        public int BrokerPort
+        {
+            get { return transport.BrokerPort; }
+            set { transport.BrokerPort = value; }
+        }
+
+        public bool Shared
+        {
+            get { return transport.Shared; }
+            set { transport.Shared = value; }
+        }
+
+        public TransferMode TransferMode
+        {
+            get { return transport.TransferMode; }
+            set { transport.TransferMode = value; }
+        }
+
+        public AmqpProperties DefaultMessageProperties
+        {
+            get { return transport.DefaultMessageProperties; }
+            set { transport.DefaultMessageProperties = value; }
+        }
+
+        public override string Scheme
+        {
+            get { return AmqpConstants.Scheme; }
+        }
+
+        public override BindingElementCollection CreateBindingElements()
+        {
+            BindingElementCollection bindingElements = new BindingElementCollection();
+
+            bindingElements.Add(encoding);
+            bindingElements.Add(transport);
+
+            return bindingElements.Clone();
+        }
+
+        private void ApplyConfiguration(string configurationName)
+        {
+            AmqpBindingCollectionElement section = (AmqpBindingCollectionElement)ConfigurationManager.GetSection(AmqpConstants.AmqpBindingSectionName);
+            AmqpBindingConfigurationElement element = section.Bindings[configurationName];
+            if (element == null)
+            {
+                throw new ConfigurationErrorsException(string.Format(System.Globalization.CultureInfo.CurrentCulture,
+                    "There is no binding named {0} at {1}.", configurationName, section.BindingName));
+            }
+            else
+            {
+                element.ApplyConfiguration(this);
+            }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBinding.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,29 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    /// <summary>
+    /// Implement application configuration of bindingExtensions for AmqpBinding
+    /// </summary>
+    public class AmqpBindingCollectionElement 
+        : System.ServiceModel.Configuration.StandardBindingCollectionElement<AmqpBinding, AmqpBindingConfigurationElement>
+    {
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingCollectionElement.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,258 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+    using System.Configuration;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.ServiceModel.Configuration;
+    using Apache.Qpid.AmqpTypes;
+
+    public class AmqpBindingConfigurationElement : StandardBindingElement
+    {
+        // not regular config elements.  See PostDeserialize
+        string brokerHost;
+        int brokerPort;
+
+        public AmqpBindingConfigurationElement(string configurationName)
+            : base(configurationName)
+        {
+            brokerHost = AmqpDefaults.BrokerHost;
+            brokerPort = AmqpDefaults.BrokerPort;
+        }
+
+        public AmqpBindingConfigurationElement()
+            : this(null)
+        {
+        }
+
+        protected override Type BindingElementType
+        {
+            get { return typeof(AmqpBinding); }
+        }
+
+        public string BrokerHost
+        {
+            get { return brokerHost; }
+            set { brokerHost = value; }
+        }
+
+        public int BrokerPort
+        {
+            get { return brokerPort; }
+            set { brokerPort = value; }
+        }
+
+        [ConfigurationProperty(AmqpConfigurationStrings.Shared, DefaultValue = false)]
+        public bool Shared
+        {
+            get { return (bool)base[AmqpConfigurationStrings.Shared]; }
+            set { base[AmqpConfigurationStrings.Shared] = value; }
+        }
+
+        [ConfigurationProperty(AmqpConfigurationStrings.TransferMode, DefaultValue = AmqpDefaults.TransferMode)]
+        public TransferMode TransferMode
+        {
+            get { return (TransferMode)base[AmqpConfigurationStrings.TransferMode]; }
+            set { base[AmqpConfigurationStrings.TransferMode] = value; }
+        }
+
+        [ConfigurationProperty(AmqpConfigurationStrings.Brokers)]
+        public BrokerCollection Brokers
+        {
+            get
+            {
+                return (BrokerCollection)base[AmqpConfigurationStrings.Brokers];
+            }
+            set
+            {
+                base[AmqpConfigurationStrings.Brokers] = value;
+            }
+        }
+
+        protected override ConfigurationPropertyCollection Properties
+        {
+            get
+            {
+                ConfigurationPropertyCollection properties = base.Properties;
+                properties.Add(new ConfigurationProperty(AmqpConfigurationStrings.Shared,
+                    typeof(bool), false, null, null, ConfigurationPropertyOptions.None));
+                properties.Add(new ConfigurationProperty(AmqpConfigurationStrings.TransferMode,
+                    typeof(TransferMode), AmqpDefaults.TransferMode, null, null, ConfigurationPropertyOptions.None));
+                properties.Add(new ConfigurationProperty("brokers", typeof(BrokerCollection), null));
+                return properties;
+            }
+        }
+
+        protected override void InitializeFrom(Binding binding)
+        {
+            base.InitializeFrom(binding);
+            AmqpBinding amqpBinding = (AmqpBinding)binding;
+            this.BrokerHost = amqpBinding.BrokerHost;
+            this.BrokerPort = amqpBinding.BrokerPort;
+            this.TransferMode = amqpBinding.TransferMode;
+            this.Shared = amqpBinding.Shared;
+
+            AmqpProperties props = amqpBinding.DefaultMessageProperties;
+        }
+
+        protected override void OnApplyConfiguration(Binding binding)
+        {
+            if (binding == null)
+                throw new ArgumentNullException("binding");
+
+            if (!(binding is AmqpBinding))
+            {
+                throw new ArgumentException(string.Format("Invalid type for configuring an AMQP binding. Expected type: {0}. Type passed in: {1}.",
+                    typeof(AmqpBinding).AssemblyQualifiedName,
+                    binding.GetType().AssemblyQualifiedName));
+            }
+
+            AmqpBinding amqpBinding = (AmqpBinding)binding;
+            amqpBinding.BrokerHost = this.BrokerHost;
+            amqpBinding.BrokerPort = this.BrokerPort;
+            amqpBinding.TransferMode = this.TransferMode;
+            amqpBinding.Shared = this.Shared;
+        }
+
+        protected override void PostDeserialize()
+        {
+            base.PostDeserialize();
+
+            BrokerCollection brokers = Brokers;
+            if (brokers != null)
+            {
+                if (brokers.Count > 0)
+                {
+                    // just grab the first element until failover is supported
+                    System.Collections.IEnumerator brokersEnum = brokers.GetEnumerator();
+                    // move to first element
+                    brokersEnum.MoveNext();
+                    BrokerElement be = (BrokerElement)brokersEnum.Current;
+                    this.BrokerHost = be.Host;
+                    this.BrokerPort = be.Port;
+                }
+            }
+        }
+    }
+
+    public class BrokerCollection : ConfigurationElementCollection
+    {
+        public BrokerCollection()
+        {
+            //this.AddElementName = "broker";
+        }
+
+        protected override ConfigurationElement CreateNewElement()
+        {
+            return new BrokerElement();
+        }
+
+        protected override void BaseAdd(ConfigurationElement element)
+        {
+            BrokerElement be = (BrokerElement)element;
+            if (this.BaseGet((Object)be.Key) != null)
+            {
+                throw new ConfigurationErrorsException("duplicate broker definition at line " + element.ElementInformation.LineNumber);
+            }
+            base.BaseAdd(element);
+        }
+
+        protected override Object GetElementKey(ConfigurationElement element)
+        {
+            BrokerElement be = (BrokerElement) element;
+            return be.Key;
+        }
+
+        protected override void PostDeserialize()
+        {
+            base.PostDeserialize();
+            if (this.Count == 0)
+            {
+                throw new ArgumentException("Brokers collection requires at least one broker");
+            }
+            if (this.Count > 1)
+            {
+                Console.WriteLine("Warning: multiple brokers not supported, selecting first instance");
+            }
+            BrokerElement be = (BrokerElement)this.BaseGet(0);
+        }
+
+        protected override string ElementName
+        {
+            get
+            {
+                return "broker";
+            }
+        }
+
+        public override ConfigurationElementCollectionType CollectionType
+        {
+            get
+            {
+                return ConfigurationElementCollectionType.BasicMap;
+            }
+        }
+    }
+
+    public class BrokerElement : ConfigurationElement
+    {
+        string key;
+
+        public BrokerElement()
+        {
+            Properties.Add(new ConfigurationProperty(AmqpConfigurationStrings.BrokerHost, 
+                typeof(string), AmqpDefaults.BrokerHost, null, null, ConfigurationPropertyOptions.None));
+            Properties.Add(new ConfigurationProperty(AmqpConfigurationStrings.BrokerPort,
+                typeof(int), AmqpDefaults.BrokerPort, null, null, ConfigurationPropertyOptions.None));
+
+        }
+
+        [ConfigurationProperty(AmqpConfigurationStrings.BrokerHost, DefaultValue = AmqpDefaults.BrokerHost)]
+        public string Host
+        {
+            get { return (string)base[AmqpConfigurationStrings.BrokerHost]; }
+            set { base[AmqpConfigurationStrings.BrokerHost] = value; }
+        }
+
+        [ConfigurationProperty(AmqpConfigurationStrings.BrokerPort, DefaultValue = AmqpDefaults.BrokerPort)]
+        public int Port
+        {
+            get { return (int)base[AmqpConfigurationStrings.BrokerPort]; }
+            set { base[AmqpConfigurationStrings.BrokerPort] = value; }
+        }
+
+        public string Key
+        {
+            get
+            {
+                if (this.key == null)
+                {
+                    this.key = this.Host + ':' + this.Port;
+                }
+                return this.key;
+            }
+        }
+
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpBindingConfigurationElement.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,98 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+
+    class AmqpChannelFactory<TChannel> : ChannelFactoryBase<TChannel>
+    {
+        MessageEncoderFactory messageEncoderFactory;
+        AmqpTransportBindingElement bindingElement;
+        AmqpChannelProperties channelProperties;
+        long maxBufferPoolSize;
+        bool shared;
+
+        internal AmqpChannelFactory(AmqpTransportBindingElement bindingElement, BindingContext context)
+            : base(context.Binding)
+        {
+            this.bindingElement = bindingElement;
+            this.channelProperties = bindingElement.ChannelProperties.Clone();
+            this.shared = bindingElement.Shared;
+            this.maxBufferPoolSize = bindingElement.MaxBufferPoolSize;
+            Collection<MessageEncodingBindingElement> messageEncoderBindingElements
+                = context.BindingParameters.FindAll<MessageEncodingBindingElement>();
+
+            if(messageEncoderBindingElements.Count > 1)
+            {
+                throw new InvalidOperationException("More than one MessageEncodingBindingElement was found in the BindingParameters of the BindingContext");
+            }
+            else if (messageEncoderBindingElements.Count == 1)
+            {
+                this.messageEncoderFactory = messageEncoderBindingElements[0].CreateMessageEncoderFactory();
+            }
+            else
+            {
+                this.messageEncoderFactory = new TextMessageEncodingBindingElement().CreateMessageEncoderFactory();
+            }
+        }
+
+
+        public override T GetProperty<T>()
+        {
+            T mep = messageEncoderFactory.Encoder.GetProperty<T>();
+            if (mep != null)
+            {
+                return mep;
+            }
+
+            if (typeof(T) == typeof(MessageVersion))
+            {
+                return (T)(object)messageEncoderFactory.Encoder.MessageVersion;
+            }
+
+            return base.GetProperty<T>();
+        }
+
+        protected override void OnOpen(TimeSpan timeout)
+        {
+        }
+
+        protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state)
+        {
+            throw new NotImplementedException("AmqpChannelFactory OnBeginOpen");
+            //// return null;
+        }
+
+        protected override void OnEndOpen(IAsyncResult result)
+        {
+            throw new NotImplementedException("AmqpChannelFactory OnEndOpen");
+        }
+
+        protected override TChannel OnCreateChannel(EndpointAddress remoteAddress, Uri via)
+        {
+            return (TChannel)(object) new AmqpTransportChannel(this, this.channelProperties, remoteAddress, this.messageEncoderFactory.Encoder, this.maxBufferPoolSize, this.shared);
+        }
+
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelFactory.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,142 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.Net;
+    using System.Net.Sockets;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.Globalization;
+
+    using Apache.Qpid.AmqpTypes;
+
+    /// <summary>
+    /// Collection of constants used by the Amqp Channel classes
+    /// </summary>
+    static class AmqpConstants
+    {
+        internal const string Scheme = "amqp";
+        internal const string AmqpBindingSectionName = "system.serviceModel/bindings/amqpBinding";
+        internal const string AmqpBinaryBindingSectionName = "system.serviceModel/bindings/amqpBinaryBinding";
+        internal const string AmqpTransportSectionName = "amqpTransport";
+    }
+ 
+    static class AmqpConfigurationStrings
+    {
+        public const string BrokerHost = "host";
+        public const string BrokerPort = "port";
+        public const string TransferMode = "transferMode";
+        public const string Brokers = "brokers";
+        public const string Shared = "shared";
+        public const string MaxBufferPoolSize = "maxBufferPoolSize";
+        public const string MaxReceivedMessageSize = "maxReceivedMessageSize";
+    }
+
+    static class AmqpDefaults
+    {
+        internal const string BrokerHost = "localhost";
+        internal const int BrokerPort = 5672;
+        internal const TransferMode TransferMode = System.ServiceModel.TransferMode.Buffered;
+        internal const byte Priority = 4;
+        internal const long MaxBufferPoolSize = 64 * 1024;
+        internal const int MaxReceivedMessageSize = 5 * 1024 * 1024; //64 * 1024;
+    }
+
+    // parking spot for properties that may be shared by separate channels on a single AMQP connection
+    internal class AmqpChannelProperties
+    {
+        string brokerHost;
+        int brokerPort;
+        TransferMode transferMode;
+        AmqpProperties defaultMessageProperties;
+        
+        long maxBufferPoolSize;
+        int maxReceivedMessageSize;
+
+        internal AmqpChannelProperties()
+        {
+            this.brokerHost = AmqpDefaults.BrokerHost;
+            this.brokerPort = AmqpDefaults.BrokerPort;
+            this.transferMode = AmqpDefaults.TransferMode;
+            this.defaultMessageProperties = null;
+            this.maxBufferPoolSize = AmqpDefaults.MaxBufferPoolSize;
+            this.maxReceivedMessageSize = AmqpDefaults.MaxReceivedMessageSize;
+        }
+
+        public AmqpChannelProperties Clone()
+        {
+            AmqpChannelProperties props = (AmqpChannelProperties) this.MemberwiseClone();
+            if (this.defaultMessageProperties != null)
+            {
+                props.defaultMessageProperties = this.defaultMessageProperties.Clone();
+            }
+
+            return props;
+        }
+
+        internal string BrokerHost
+        {
+            get { return this.brokerHost; }
+            set { this.brokerHost = value; }
+        }
+
+        internal int BrokerPort
+        {
+            get { return this.brokerPort; }
+            set { this.brokerPort = value; }
+        }
+
+        internal TransferMode TransferMode
+        {
+            get { return this.transferMode; }
+            set { this.transferMode = value; }
+        }
+
+        internal AmqpProperties DefaultMessageProperties
+        {
+            get { return this.defaultMessageProperties; }
+            set { this.defaultMessageProperties = value; }
+        }
+
+        internal long MaxBufferPoolSize
+        {
+            get { return this.maxBufferPoolSize; }
+            set { this.maxBufferPoolSize = value; }
+        }
+
+        internal int MaxReceivedMessageSize
+        {
+            get { return this.maxReceivedMessageSize; }
+            set { this.maxReceivedMessageSize = value; }
+        }
+    }
+
+    static class AmqpChannelHelpers
+    {
+        internal static void ValidateTimeout(TimeSpan timeout)
+        {
+            if (timeout < TimeSpan.Zero)
+            {
+                throw new ArgumentOutOfRangeException("timeout", timeout, "Timeout must be greater than or equal to TimeSpan.Zero. To disable timeout, specify TimeSpan.MaxValue.");
+            }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelHelpers.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,174 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.Threading;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+
+    class AmqpChannelListener : ChannelListenerBase<IInputChannel>
+    {
+        MessageEncoderFactory messageEncoderFactory;
+        AmqpTransportBindingElement bindingElement;
+        AmqpChannelProperties channelProperties;
+        bool shared;
+        long maxBufferPoolSize;
+        Uri uri;
+        AmqpTransportChannel amqpTransportChannel;
+        delegate IInputChannel AsyncOnAcceptCaller (TimeSpan timeout);
+        AsyncOnAcceptCaller asyncOnAcceptCaller;
+        ManualResetEvent acceptWaitEvent;
+
+        internal AmqpChannelListener(AmqpTransportBindingElement bindingElement, BindingContext context)
+            : base(context.Binding)
+        {
+            this.bindingElement = bindingElement;
+            this.channelProperties = bindingElement.ChannelProperties.Clone();
+            this.shared = bindingElement.Shared;
+
+            this.maxBufferPoolSize = bindingElement.MaxBufferPoolSize;
+
+            // TODO: review this.  Should be unique hostname based
+            this.uri = context.ListenUriBaseAddress;
+            this.asyncOnAcceptCaller = new AsyncOnAcceptCaller(this.OnAcceptChannel);
+            this.acceptWaitEvent = new ManualResetEvent(false);
+
+            Collection<MessageEncodingBindingElement> messageEncoderBindingElements
+                = context.BindingParameters.FindAll<MessageEncodingBindingElement>();
+
+            if(messageEncoderBindingElements.Count > 1)
+            {
+                throw new InvalidOperationException("More than one MessageEncodingBindingElement was found in the BindingParameters of the BindingContext");
+            }
+            else if (messageEncoderBindingElements.Count == 1)
+            {
+                this.messageEncoderFactory = messageEncoderBindingElements[0].CreateMessageEncoderFactory();
+            }
+            else
+            {
+                this.messageEncoderFactory = new TextMessageEncodingBindingElement().CreateMessageEncoderFactory();
+            }
+        }
+
+        public override Uri Uri
+        {
+            get
+            {
+                return this.uri;
+            }
+        }
+
+
+
+        public override T GetProperty<T>()
+        {
+            T mep = messageEncoderFactory.Encoder.GetProperty<T>();
+            if (mep != null)
+            {
+                return mep;
+            }
+
+            if (typeof(T) == typeof(MessageVersion))
+            {
+                return (T)(object)messageEncoderFactory.Encoder.MessageVersion;
+            }
+
+            return base.GetProperty<T>();
+        }
+
+        protected override void OnOpen(TimeSpan timeout)
+        {
+        }
+
+        protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnBeginOpen");
+            //// return null;
+        }
+
+        protected override void OnEndOpen(IAsyncResult result)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnEndOpen");
+        }
+
+        protected override bool OnWaitForChannel(TimeSpan timeout)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnWaitForChannel");
+        }
+
+        protected override IAsyncResult OnBeginWaitForChannel(TimeSpan timeout, AsyncCallback callback, object state)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnBeginWaitForChannel");
+        }
+
+        protected override bool OnEndWaitForChannel(IAsyncResult result)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnEndWaitForChannel");
+        }
+
+        protected override IInputChannel OnAcceptChannel(TimeSpan timeout)
+        {
+            if (amqpTransportChannel == null)
+            {
+                amqpTransportChannel = new AmqpTransportChannel(this, this.channelProperties,
+                        new EndpointAddress(uri), messageEncoderFactory.Encoder,
+                        maxBufferPoolSize, this.shared);
+                return (IInputChannel)(object) amqpTransportChannel;
+            }
+
+            // TODO: remove "max one channel" restriction,  add timeout processing
+            acceptWaitEvent.WaitOne();
+            return null;
+        }
+
+        protected override IAsyncResult OnBeginAcceptChannel(TimeSpan timeout, AsyncCallback callback, object state)
+        {
+            return asyncOnAcceptCaller.BeginInvoke(timeout, callback, state);
+        }
+
+        protected override IInputChannel OnEndAcceptChannel(IAsyncResult result)
+        {
+            return asyncOnAcceptCaller.EndInvoke(result);
+        }
+
+        protected override void OnClose(TimeSpan timeout)
+        {
+            // TODO: (+ OnAbort)
+        }
+
+        protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnBeginClose");
+        }
+
+        protected override void OnEndClose(IAsyncResult result)
+        {
+            throw new NotImplementedException("AmqpChannelListener OnEndClose");
+        }
+
+        protected override void OnAbort()
+        {
+            // TODO:
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpChannelListener.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,145 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Channel
+{
+    using System;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.ServiceModel.Description;
+    using Apache.Qpid.AmqpTypes;
+
+    public class AmqpTransportBindingElement : TransportBindingElement
+    {
+        AmqpChannelProperties channelProperties;
+        bool shared;
+
+        public AmqpTransportBindingElement()
+        {
+            // start with default properties
+            channelProperties = new AmqpChannelProperties();
+        }
+
+        protected AmqpTransportBindingElement(AmqpTransportBindingElement other)
+            : base(other)
+        {
+            this.channelProperties = other.channelProperties.Clone();
+            this.shared = other.shared;
+        }
+
+        public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
+        {
+            if (context == null)
+            {
+                throw new ArgumentNullException("context");
+            }
+
+            return (IChannelFactory<TChannel>)(object)new AmqpChannelFactory<TChannel>(this, context);
+        }
+
+        public override IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
+        {
+            if (context == null)
+            {
+                throw new ArgumentNullException("context");
+            }
+
+            return (IChannelListener<TChannel>)(object)new AmqpChannelListener(this, context);
+        }
+
+
+
+        public override bool CanBuildChannelFactory<TChannel>(BindingContext context)
+        {
+            return ((typeof(TChannel) == typeof(IOutputChannel)) ||
+                    (typeof(TChannel) == typeof(IInputChannel)));
+        }
+
+        public override bool CanBuildChannelListener<TChannel>(BindingContext context)
+        {
+            return ((typeof(TChannel) == typeof(IInputChannel)));
+        }
+
+        public override BindingElement Clone()
+        {
+            return new AmqpTransportBindingElement(this);
+        }
+
+        internal AmqpChannelProperties ChannelProperties
+        {
+            get { return channelProperties; }
+        }
+
+        public string BrokerHost
+        {
+            get { return this.channelProperties.BrokerHost; }
+            set { this.channelProperties.BrokerHost = value; }
+        }
+
+        public int BrokerPort
+        {
+            get { return this.channelProperties.BrokerPort; }
+            set { this.channelProperties.BrokerPort = value; }
+        }
+
+        public bool Shared
+        {
+            get { return this.shared; }
+            set { this.shared = value; }
+        }
+
+        public TransferMode TransferMode
+        {
+            get { return this.channelProperties.TransferMode; }
+            set { this.channelProperties.TransferMode = value; }
+        }
+
+        public AmqpProperties DefaultMessageProperties
+        {
+            get { return this.channelProperties.DefaultMessageProperties; }
+
+            set { this.channelProperties.DefaultMessageProperties = value; }
+        }
+
+        public override T GetProperty<T>(BindingContext context)
+        {
+            if (context == null)
+            {
+                throw new ArgumentNullException("context");
+            }
+
+            if (typeof(T) == typeof(MessageVersion))
+            {
+                return (T)(object)MessageVersion.Default;
+            }
+
+
+            return context.GetInnerProperty<T>();
+        }
+
+        public override string Scheme
+        {
+            get
+            {
+                return AmqpConstants.Scheme;
+            }
+        }
+
+    }
+}

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Channel/AmqpTransportBindingElement.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org