/*
 *    @(#) 2.42 src/somd/impldef.idl, somd, som3.0 9/26/96 14:01:55 [12/22/96 21:11:42]
 */
//
//   COMPONENT_NAME: somd
//
//   ORIGINS: 27
//
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,1996
//   All Rights Reserved
//   Licensed Materials - Property of IBM
//   US Government Users Restricted Rights - Use, duplication or
//   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//


//  CLASS SPECIFICATION FOR IMPLEMENTATION DEFINITION.  THIS IS A PUBLIC IDL.
//  All the attributes of an ImplementationDef object along with any new
//  typedefs used by the attributes is listed here.


#ifndef SOM_impldef_idl
#define SOM_impldef_idl


/* new for 3.0 */
#include <somdtype.idl>
#include <somestio.idl>

interface ImplementationDef : CosStream::Streamable
{
    const int SOMD_MAXLEN_IMPL_ID       = 36;
    //# SOMD_MAXLEN_IMPL_ID should always equal definition
    //# of SOM_UUIDSTR_MAXLEN found in private/uuid.h

    const int SOMD_MAXLEN_IMPL_ALIAS    = 255;
    const int SOMD_MAXLEN_IMPL_PROGRAM  = 255;
    const int SOMD_MAXLEN_FILENAME      = 255;
    const int SOMD_MAXLEN_HOSTNAME      =  32;
    const int SOMD_MAXLEN_CLASSNAME     = 255;

    typedef sequence<octet> * octet_seqP;
    // pointer to an octet sequence

    struct prot_response
    {
       string protocol;
       sequence <string> *response;
    };
    // structure containing the protocol along with its responses
    // to form a valid tagged profile.

    typedef sequence<prot_response> seq_prot_responses;

    // ImplementationDef attributes

    attribute string<SOMD_MAXLEN_IMPL_ID>  impl_id;
    // Refers to the unique impl_id of a server.
    // On _get_impl_id, ownership of results are transfered to the caller.

    attribute string<SOMD_MAXLEN_IMPL_ALIAS>  impl_alias;
    // impl_alias refers to the server alias
    // On _get_impl_alias, ownership of results are transfered to the caller.

    attribute string<SOMD_MAXLEN_IMPL_PROGRAM> impl_program;
    // Contains the name of the server process executable. Default is
    // somdsvr.exe.
    // On _get_impl_program, ownership of results are transfered to the caller.

    attribute Flags  impl_flags;
    // Bit vector representing the various server options.

    attribute string<SOMD_MAXLEN_CLASSNAME> impl_server_class;
    // Represents the class of the server object. Default is SOMDServer.
    // On _get_impl_server_class, ownership of results are transfered to the
    // caller.

    attribute string<SOMD_MAXLEN_FILENAME> impl_refdata_file;
    // Contains the name of the file containing ref data.
    // Meaningful only in 2.X environment.
    // On _get_impl_refdata_file, ownership of results are transfered to the
    // caller.

    attribute string<SOMD_MAXLEN_FILENAME> impl_refdata_bkup;
    // Contains the name of the file containing ref data backup.
    // Meaningful only in 2.X environment.
    // On _get_impl_refdata_bkup, ownership of results are transfered to the
    // caller.

    attribute string<SOMD_MAXLEN_HOSTNAME> impl_hostname;
    // Contains the hostname on which the server process would be started.
    // Meaningful only in 2.X environment.
    // On _get_impl_hostname, ownership of results are transfered to the caller.

    attribute string<SOMD_MAXLEN_FILENAME> config_file;
    // Contains the path of the config file which a server process could
    // use to override those provided by the default config file in SOMENV.
    // On _get_config_file, ownership of results are transfered to the caller.

    attribute string<SOMD_MAXLEN_CLASSNAME> impldef_class;
    // Contains the class of the ImplDef object. By default it is
    // ImplementationDef.
    // On _get_impldef_class, ownership of results are transfered to the caller.

    attribute octet_seqP svr_objref;
    // A pointer to a sequence of octets representing the binary form of the
    // server's objref.

    attribute string protocols;
    // This contains the set of space separated protocol names that was used
    // in forming the objref.

    attribute seq_prot_responses *registrar_resp;
    // Represents a sequence of structures where each structure contains the
    // protocol name and a set of responses. This would be used to generate
    // the tagged profile for that specific protocol through a programmatic
    // interface.



#ifdef __SOMIDL__

    implementation
         {
           releaseorder: _set_impl_id,           _get_impl_id,
                             _set_impl_alias,        _get_impl_alias,
                             _set_impl_program,      _get_impl_program,
                             _set_impl_flags,        _get_impl_flags,
                             _set_impl_server_class, _get_impl_server_class,
                             _set_impl_refdata_file, _get_impl_refdata_file,
                             _set_impl_refdata_bkup, _get_impl_refdata_bkup,
                             _set_impl_hostname,     _get_impl_hostname,
                             _set_impl_def_struct,   _get_impl_def_struct,
                             get_impl_winserver_handle,
                             _set_config_file,       _get_config_file,
                             _set_impldef_class,     _get_impldef_class,
                             _set_svr_objref,        _get_svr_objref,
                             _set_protocols,         _get_protocols,
                             _set_registrar_resp,    _get_registrar_resp,
                             _set_impl_version,      _get_impl_version,
                             _set_class_in_NS,       _get_class_in_NS;

                         // memory management policy
                         memory_management = corba;

                         _get_svr_objref: object_owns_result;
                         _set_svr_objref: object_owns_parameters = "svr_objref";
                         _get_protocols: object_owns_result;
                         _set_protocols: object_owns_parameters = "protocols";
                         _get_registrar_resp: object_owns_result;
                         _set_registrar_resp: object_owns_parameters = "registrar_resp";

                         //# Class Modifiers
                         callstyle = idl;
                         dllname = "somd.dll";
                         majorversion = 2;
                         minorversion = 2;
                         functionprefix = "ImplDef_";

                         //# Passthrus
                         #define COMMON_H_PASSTHRU \
                             "" \
                             "/* flags */"               \
                             "#define IMPLDEF_MULTI_THREAD  0x00000001" \
                             "#define IMPLDEF_DISABLE_SVR   0x00000004" \
                             "#define IMPLDEF_IMPLID_SET    0x00000008" \
                             "#define IMPLDEF_SECUREMODE    0x00000020" \
                             "#define IMPLDEF_MANAGED       0x00000040" \
                             ""

//# D23660: Remove include somestrm.h

        passthru C_h_after  = COMMON_H_PASSTHRU
        "#ifndef SOM_IMPORTEXPORT_somd"
        "#if defined(_WIN32) && !defined(SOM_DLL_somd)"
        	"#define SOM_IMPORTEXPORT_somd SOMDLLIMPORT"
        "#else"
        	"#define SOM_IMPORTEXPORT_somd"
        "#endif"
        "#endif"
        "#ifdef SOM_STRICT_IDL"
        "SOMEXTERN SOM_IMPORTEXPORT_somd ImplementationDef  SOMDLINK SOMD_ImplDefObject;"
        "#else"
        "SOMEXTERN SOM_IMPORTEXPORT_somd ImplementationDef*  SOMDLINK SOMD_ImplDefObject;"
        "#endif /* SOM_STRICT_IDL */"
        "";

                         passthru C_xh_after = COMMON_H_PASSTHRU
        "#ifndef SOM_IMPORTEXPORT_somd"
        "#if defined(_WIN32) && !defined(SOM_DLL_somd)"
        	"#define SOM_IMPORTEXPORT_somd SOMDLLIMPORT"
        "#else"
        	"#define SOM_IMPORTEXPORT_somd"
        "#endif"
        "#endif"
        "class ImplementationDef;"
        "SOMEXTERN SOM_IMPORTEXPORT_somd ImplementationDef* SOMDLINK SOMD_ImplDefObject;"
        "";

// D23595: remove passthru C_hh_before="#include <omglc.hh>"


                         //# declared via attributes

                       impl_id:           noget, noset;
                       impl_alias:        noget, noset;
                       impl_program:      noget, noset;
                       impl_flags:        noget, noset;
                       impl_server_class: noget, noset;
                       impl_refdata_file: noget, noset;
                       impl_refdata_bkup: noget, noset;
                       impl_hostname:     noget, noset;
                       config_file:       noget, noset;
                       impldef_class:     noget, noset;
                       svr_objref:        noget, noset;
                       protocols:         noget, noset;
                       registrar_resp:    noget, noset;
                       impl_version:      noget, noset;
                       class_in_NS:       noget, noset;

                         //# Method Modifiers
                       override: somDefaultInit, somDestruct ;
                       override: externalize_to_stream, internalize_from_stream;
                     };

#endif /* __SOMIDL__ */

};

#endif  /* SOM_impldef_idl */


