// $Id$
//
// Copyright 2007-2008 Cisco Systems Inc.
//
// Licensed 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;
namespace Etch.Util
{
///
/// Out-of-band query, control, and notification interface for transports.
///
public interface Transport where S:Session
{
///
/// Gets a configuration or operational value from the transport. The
/// request is passed down the chain of transports until some transport
/// recognises the query, whereupon it returns the requested value.
///
/// an object representing a query, which could be as
/// simple as a string, integer, or enum, or more complex such as
/// a class with instance variables for query terms.
/// the requested value, or null if not defined.
/// Exception:
/// throws Exception if the query is not recognised
/// by any transport (which is to say, if the last transport in the transport
/// chain does not recognise it, it should throw this exception). Typically
/// this would be some sort of transport mechanism such as tcp, udp, jms,\
/// http, sip, etc.
///
Object TransportQuery( Object query );
///
/// Sets a configuration or operational value in the transport. The
/// request is passed down the chain of transports until some transport
/// recognises the control, whereupon it stores the specified value
/// and returns.
///
/// an object representing a control, which could be as
/// simple as a string, integer, or enum, or more complex such as
/// a class with instance variables for control terms.
/// the value to be set
/// Exception:
/// throws ArgumentException if the value is not the right
/// type or if the value is inappropriate.
///
/// throws Exception if the query is not recognised
/// by any transport (which is to say, if the last transport in the transport
/// chain does not recognise it, it should throw this exception). Typically
/// this would be some sort of transport mechanism such as tcp, udp, jms,\
/// http, sip, etc.
///
void TransportControl( Object control, Object value );
///
/// Notifies the chain of transports of the specified event. Unlike query
/// and control operations above, events are always passed down to the
/// bottom to allow all transports to notice them (though it is possible
/// that an event might be delayed for a bit).
///
/// a class which represents the event, possibly with
/// parameters. The simplest event could be a string, integer, or enum,
/// but any class instance will do (as long as some transport in the
/// chain expects it).
///
void TransportNotify( Object eventObj );
void SetSession(S session);
S GetSession();
}
}