// **********************************************************************
//
// Generated by the ORBacus IDL-to-C++ Translator
//
// Copyright (c) 1998
// Object-Oriented Concepts, Inc.
// Billerica, MA, USA
//
// Copyright (c) 1998
// Object-Oriented Concepts GmbH
// Ettlingen, Germany
//
// All Rights Reserved
//
// **********************************************************************

// Version: 3.0.1
// License: non-commercial

#include <OB/CORBA.h>
#include "msg_skel.h"

//
// IDL:otMessage:1.0
//
OBDispatchStatus
otMessage_skel::_OB_dispatch(const char* _ob_op,
                             OBBuffer& _ob_buf,
                             bool _ob_sw,
                             CORBA_ULong _ob_offIn,
                             CORBA_ULong _ob_offOut)
{
    if(strcmp(_ob_op, "send") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        CORBA_String_var _ob_a0;
        OBUnmarshal(_ob_a0.inout(), _ob_co, _ob_sw);
        SerializedMessage _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);

        try
        {
            send(_ob_a0.in(), _ob_a1);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const NotImplemented& _ob_except)
        {
            CORBA_ULong _ob_cnt = _ob_offOut;
            OBMarshalCount(_ob_except, _ob_cnt);

            _ob_buf.alloc(_ob_cnt);
            CORBA_Octet* _ob_o = _ob_buf.data + _ob_offOut;
            OBMarshal(_ob_except, _ob_o);

            return OBDispatchStatusExcept;
        }
        catch(const DecodeError& _ob_except)
        {
            CORBA_ULong _ob_cnt = _ob_offOut;
            OBMarshalCount(_ob_except, _ob_cnt);

            _ob_buf.alloc(_ob_cnt);
            CORBA_Octet* _ob_o = _ob_buf.data + _ob_offOut;
            OBMarshal(_ob_except, _ob_o);

            return OBDispatchStatusExcept;
        }
    }
    else if(strcmp(_ob_op, "sendTwoWay") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        CORBA_String_var _ob_a0;
        OBUnmarshal(_ob_a0.inout(), _ob_co, _ob_sw);
        ParameterList _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);

        try
        {
            SerializedMessage_var _ob_r = sendTwoWay(_ob_a0.in(), _ob_a1);

            CORBA_ULong _ob_cnt = _ob_offOut;
            OBMarshalCount(_ob_r.in(), _ob_cnt);

            _ob_buf.alloc(_ob_cnt);
            CORBA_Octet* _ob_o = _ob_buf.data + _ob_offOut;
            OBMarshal(_ob_r.in(), _ob_o);

            return OBDispatchStatusOK;
        }
        catch(const NotImplemented& _ob_except)
        {
            CORBA_ULong _ob_cnt = _ob_offOut;
            OBMarshalCount(_ob_except, _ob_cnt);

            _ob_buf.alloc(_ob_cnt);
            CORBA_Octet* _ob_o = _ob_buf.data + _ob_offOut;
            OBMarshal(_ob_except, _ob_o);

            return OBDispatchStatusExcept;
        }
        catch(const DecodeError& _ob_except)
        {
            CORBA_ULong _ob_cnt = _ob_offOut;
            OBMarshalCount(_ob_except, _ob_cnt);

            _ob_buf.alloc(_ob_cnt);
            CORBA_Octet* _ob_o = _ob_buf.data + _ob_offOut;
            OBMarshal(_ob_except, _ob_o);

            return OBDispatchStatusExcept;
        }
    }
    else
        return CORBA_Object_skel::_OB_dispatch(_ob_op, _ob_buf, _ob_sw, _ob_offIn, _ob_offOut);
}
