
import ::PortableInterceptor;

module Test000_Idl {

    interface TestInterface {

        exception TestException {};

        void Proc () raises (TestException);

        //  Special operations for setting up client behavior.
        void Process_Normal ();
        void Raise_Exception ();
    };

    enum Interceptor_Behavior {
        Do_Nothing,
        Raise_Exception,
        Forward};

    local interface ClientInterceptor :
        PortableInterceptor::ClientRequestInterceptor
    {
        enum Client_Interception_Point {
            Client_Send_Request,
            Client_Send_Poll,
            Client_Receive_Reply,
            Client_Receive_Exception,
            Client_Receive_Other};

        void Set_Behavior (
            in Client_Interception_Point Point,
            in Interceptor_Behavior Behavior);
        void Enable ();
        void Disable ();
    };

    local interface ServerInterceptor :
        PortableInterceptor::ServerRequestInterceptor
    {
        enum Server_Interception_Point {
            Server_Receive_Request_Service_Contexts,
            Server_Receive_Request,
            Server_Send_Reply,
            Server_Send_Exception,
            Server_Send_Other};

        void Set_Behavior (
            in Server_Interception_Point Point,
            in Interceptor_Behavior Behavior);
        void Enable ();
        void Disable ();
    };

    local interface ORBInitializer :
        PortableInterceptor::ORBInitializer
    {
    };

};
