blob: 8f4684c1a1484b52d90beb474c202e3c8573ccf8 [file] [log] [blame]
/*
*
* 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.Configuration;
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace org.apache.qpid.wcf.model
{
public sealed class QpidBinding : Binding
{
private string _host;
private int _port;
private string _username;
private string _password;
private string _virtuaHost;
private readonly CompositeDuplexBindingElement _compositeDuplex;
private readonly MessageEncodingBindingElement _encoding;
private bool _oneWayOnly;
private readonly ReliableSessionBindingElement _session;
private readonly TransactionFlowBindingElement _transactionFlow;
private bool _transactionsEnabled;
private readonly QpidTransportBindingElement _transport;
public QpidBinding() : this("localhost", 5672, "guest", "guest", "test")
{
}
public QpidBinding(string host, int port ) : this (host, port, "guest", "guest", "test")
{
}
public QpidBinding(string host, int port, string username, string password, string virtualhost)
{
Host = host;
PortNumber = port;
UserName = username;
Password = password;
VirtualHost = virtualhost;
_transport = new QpidTransportBindingElement();
_transport.Host = host;
_transport.PortNumber = port;
_transport.Password = password;
_transport.UserName = username;
_transport.VirtualHost = virtualhost;
_encoding = new TextMessageEncodingBindingElement();
_session = new ReliableSessionBindingElement();
_compositeDuplex = new CompositeDuplexBindingElement();
_transactionFlow = new TransactionFlowBindingElement();
}
public override BindingElementCollection CreateBindingElements()
{
var elements = new BindingElementCollection();
if (_transactionsEnabled)
{
elements.Add(_transactionFlow);
}
if (!OneWayOnly)
{
elements.Add(_session);
elements.Add(_compositeDuplex);
}
elements.Add(_encoding);
elements.Add(_transport);
return elements;
}
/// <summary>
/// Gets the scheme used by the binding, soap.amqp
/// </summary>
public override string Scheme
{
get { return "soap.amqp"; }
}
/// <summary>
/// Specifies the broker host
/// </summary>
[ConfigurationProperty("host")]
public string Host
{
get { return _host; }
set { _host = value; }
}
/// <summary>
/// Specifies the broker port
/// </summary>
public int PortNumber
{
get { return _port; }
set { _port = value; }
}
/// <summary>
/// Specifies the username
/// </summary>
public string UserName
{
get { return _username; }
set { _username = value; }
}
/// <summary>
/// Specifies the password
/// </summary>
public string Password
{
get { return _password; }
set { _password = value; }
}
/// <summary>
/// Specifies the virtualhost
/// </summary>
public string VirtualHost
{
get { return _virtuaHost; }
set { _virtuaHost = value; }
}
/// <summary>
/// Gets the AMQP _transport binding element
/// </summary>
public QpidTransportBindingElement Transport
{
get { return _transport; }
}
/// <summary>
/// Gets the reliable _session parameters for this binding instance
/// </summary>
public ReliableSession ReliableSession
{
get { return new ReliableSession(_session); }
}
/// <summary>
/// Determines whether or not the TransactionFlowBindingElement will
/// be added to the channel stack
/// </summary>
public bool TransactionFlow
{
get { return _transactionsEnabled; }
set { _transactionsEnabled = value; }
}
/// <summary>
/// Specifies whether or not the CompositeDuplex and ReliableSession
/// binding elements are added to the channel stack.
/// </summary>
public bool OneWayOnly
{
get { return _oneWayOnly; }
set { _oneWayOnly = value; }
}
}
}