//
//                            Package   : omniORB
// omniConnectionData.idl     Created on: 2006/07/10
//                            Author    : Duncan Grisby
//
//    Copyright (C) 2006 Apasphere Ltd.
//
//    This file is part of the omniORB library
//
//    The omniORB library is free software; you can redistribute it and/or
//    modify it under the terms of the GNU Lesser General Public
//    License as published by the Free Software Foundation; either
//    version 2.1 of the License, or (at your option) any later version.
//
//    This library is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//    Lesser General Public License for more details.
//
//    You should have received a copy of the GNU Lesser General Public
//    License along with this library. If not, see http://www.gnu.org/licenses/
//
//
// Description:
//    IDL definitions used by the omniConnections library

#ifndef _omniConnectionData_idl_
#define _omniConnectionData_idl_

module omniConnectionData {

  //
  // Data stored in an IOR tagged component.
  //

  struct ComponentData {
    octet          version;         // Component version. Must be 1.

    unsigned short flags;           // See below for flags values.

    unsigned long  connection_id;   // Identity of the connection for
				    // calls to this object reference;
				    // all objects with the same
				    // connection id share a
				    // connection.

    unsigned long  max_connections; // The maximum number of
				    // connections the client will
				    // open for the id.

    unsigned long  max_threads;     // The maximum number of
				    // concurrent threads the server
				    // will dispatch for each
				    // connection.
  };

  // Flag values:

  const unsigned short COMP_DATA_BATCH         = 0x0001;
  // If set, enable transport level batching in the client --
  // e.g. Nagle's algorithm.

  const unsigned short COMP_PERMIT_INTERLEAVED = 0x0002;
  // If set, the client can interleave concurrent calls on a single
  // open connection; if not set, all calls on a connection are
  // serialised.

  const unsigned short COMP_SERVER_HOLD_OPEN   = 0x0004;
  // If set, instruct the server to hold connections open, rather than
  // closing them when idle.

  // IOR component tag value:
  const unsigned long TAG_RESTRICTED_CONNECTION = 0x41545404; // ATT\x04


  //
  // Data sent in a GIOP service context
  //

  struct ServiceData {
    octet 	   version;       // Service context version. Must be 1.
    unsigned short flags;         // See below for flag bits.
    unsigned long  connection_id; // Identity of the connection. 
    unsigned long  max_threads;   // Maximum number of threads the
				  // server will dispatch for this
				  // connection.
  };
  // Flag values:

  const unsigned short SVC_HOLD_OPEN = 0x0001;
  // If set, the server will hold the connection open until the client
  // closes it, or the connection fails, rather than scavenging it
  // after a while being idle.

  const unsigned long SVC_RESTRICTED_CONNECTION = 0x41545404; // ATT\x04
  // Service context tag value.

};

#endif // _omniConnectionData_idl_
