// **********************************************************************
//
// 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 "trs_skel.h"

//
// IDL:trs/RouteServerCallback:1.0
//
OBDispatchStatus
trs_RouteServerCallback_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, "routeSelection") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_LinkNumberList _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);
        trs_DTLstackList _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);
        CORBA_ULong _ob_a2;
        OBUnmarshal(_ob_a2, _ob_co, _ob_sw);

        routeSelection(_ob_a0, _ob_a1, _ob_a2);

        CORBA_ULong _ob_cnt = _ob_offOut;

        _ob_buf.alloc(_ob_cnt);

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

//
// IDL:trs/RouteServer:1.0
//
OBDispatchStatus
trs_RouteServer_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, "registerNode") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Node _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);

        try
        {
            registerNode(_ob_a0);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const trs_InvalidAddress& _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, "unregisterNode") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Node _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);

        try
        {
            unregisterNode(_ob_a0);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const trs_InvalidAddress& _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, "addLinks") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Node _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);
        trs_LinkList _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);

        try
        {
            addLinks(_ob_a0, _ob_a1);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const trs_InvalidAddress& _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, "removeLinks") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Node _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);
        trs_LinkList _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);

        try
        {
            removeLinks(_ob_a0, _ob_a1);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const trs_InvalidAddress& _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, "updateLinks") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Node _ob_a0;
        OBUnmarshal(_ob_a0, _ob_co, _ob_sw);
        trs_LinkList _ob_a1;
        OBUnmarshal(_ob_a1, _ob_co, _ob_sw);

        try
        {
            updateLinks(_ob_a0, _ob_a1);

            CORBA_ULong _ob_cnt = _ob_offOut;

            _ob_buf.alloc(_ob_cnt);

            return OBDispatchStatusOK;
        }
        catch(const trs_InvalidAddress& _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, "selectRoute") == 0)
    {
        const CORBA_Octet* _ob_co = _ob_buf.data + _ob_offIn;
        trs_Address_var _ob_a0;
        OBUnmarshal(_ob_a0.inout(), _ob_co, _ob_sw);
        trs_Address_var _ob_a1;
        OBUnmarshal(_ob_a1.inout(), _ob_co, _ob_sw);
        trs_DTLstack _ob_a2;
        OBUnmarshal(_ob_a2, _ob_co, _ob_sw);
        trs_ParameterList _ob_a3;
        OBUnmarshal(_ob_a3, _ob_co, _ob_sw);
        trs_RouteServerCallback_var _ob_a4;
        OBUnmarshal(_ob_a4.inout(), _ob_co, _ob_sw);
        CORBA_ULong _ob_a5;
        OBUnmarshal(_ob_a5, _ob_co, _ob_sw);

        selectRoute(_ob_a0.in(), _ob_a1.in(), _ob_a2, _ob_a3, _ob_a4.in(), _ob_a5);

        CORBA_ULong _ob_cnt = _ob_offOut;

        _ob_buf.alloc(_ob_cnt);

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