xorp

xrl_dispatcher.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 // vim:set sts=4 ts=8:
00003 
00004 // Copyright (c) 2001-2011 XORP, Inc and Others
00005 //
00006 // This program is free software; you can redistribute it and/or modify
00007 // it under the terms of the GNU Lesser General Public License, Version
00008 // 2.1, June 1999 as published by the Free Software Foundation.
00009 // Redistribution and/or modification of this program under the terms of
00010 // any other version of the GNU Lesser General Public License is not
00011 // permitted.
00012 // 
00013 // This program is distributed in the hope that it will be useful, but
00014 // WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
00016 // see the GNU Lesser General Public License, Version 2.1, a copy of
00017 // which can be found in the XORP LICENSE.lgpl file.
00018 // 
00019 // XORP, Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
00020 // http://xorp.net
00021 
00022 
00023 #ifndef __LIBXIPC_XRL_DISPATCHER_HH__
00024 #define __LIBXIPC_XRL_DISPATCHER_HH__
00025 
00026 #include "xrl_cmd_map.hh"
00027 
00028 typedef
00029 XorpCallback2<void, const XrlError &, const XrlArgs *>::RefPtr
00030 XrlDispatcherCallback;
00031 
00032 class XrlDispatcher : public XrlCmdMap {
00033 public:
00034     struct XI {
00035     XI(const XrlCmdEntry* c) : _cmd(c), _new(true) {}
00036 
00037     Xrl         _xrl;
00038     const XrlCmdEntry*  _cmd;
00039     bool            _new;
00040     };
00041 
00042     XrlDispatcher(const char* class_name)
00043     : XrlCmdMap(class_name)
00044     {}
00045     virtual ~XrlDispatcher() {}
00046 
00047     virtual XI*        lookup_xrl(const string& name) const;
00048     virtual void dispatch_xrl(const string& method_name,
00049                   const XrlArgs& in,
00050                   XrlDispatcherCallback out) const;
00051     void dispatch_xrl_fast(const XI& xi,
00052                XrlDispatcherCallback out) const;
00053 
00054 private:
00055     void dispatch_cb(const XrlCmdError &, const XrlArgs *,
00056              XrlDispatcherCallback resp) const;
00057 };
00058 
00059 #endif // __LIBXIPC_XRL_DISPATCHER_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations