/******************************************************************************/
/* */
/* X r d C m s R o u t i n g . c c */
/* */
/* (c) 2007 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include "XrdCms/XrdCmsNode.hh"
#include "XrdCms/XrdCmsRouting.hh"
using namespace XrdCms;
/******************************************************************************/
/* G l o b a l O b j e c t s */
/******************************************************************************/
/******************************************************************************/
/* R o u t e r T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouter::theRoute initRouter[] =
{{kYR_login, "login", static_cast(0)},
{kYR_chmod, "chmod", &XrdCmsNode::do_Chmod},
{kYR_locate, "locate", &XrdCmsNode::do_Locate},
{kYR_mkdir, "mkdir", &XrdCmsNode::do_Mkdir},
{kYR_mkpath, "mkpath", &XrdCmsNode::do_Mkpath},
{kYR_mv, "mv", &XrdCmsNode::do_Mv},
{kYR_prepadd, "prepadd",&XrdCmsNode::do_PrepAdd},
{kYR_prepdel, "prepdel",&XrdCmsNode::do_PrepDel},
{kYR_rm, "rm", &XrdCmsNode::do_Rm},
{kYR_rmdir, "rmdir", &XrdCmsNode::do_Rmdir},
{kYR_select, "select", &XrdCmsNode::do_Select},
{kYR_statfs, "statfs", &XrdCmsNode::do_StatFS},
{kYR_stats, "stats", &XrdCmsNode::do_Stats},
{kYR_trunc, "trunc", &XrdCmsNode::do_Trunc},
/* Server */
{kYR_avail, "avail", &XrdCmsNode::do_Avail},
{kYR_disc, "disc", &XrdCmsNode::do_Disc},
{kYR_gone, "gone", &XrdCmsNode::do_Gone},
{kYR_have, "have", &XrdCmsNode::do_Have},
{kYR_load, "load", &XrdCmsNode::do_Load},
{kYR_ping, "ping", &XrdCmsNode::do_Ping},
{kYR_pong, "pong", &XrdCmsNode::do_Pong},
{kYR_space, "space", &XrdCmsNode::do_Space},
{kYR_state, "state", &XrdCmsNode::do_State},
{kYR_status, "status", &XrdCmsNode::do_Status},
{kYR_try, "try", &XrdCmsNode::do_Try},
{kYR_update, "update", &XrdCmsNode::do_Update},
{kYR_usage, "usage", &XrdCmsNode::do_Usage},
{0, 0, 0}};
}
// Request Name and Method Routing Table
//
XrdCmsRouter XrdCms::Router(initRouter);
/******************************************************************************/
/* M a n a g e r R o u t i n g T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouting::theRouting initMANrouting[] =
{{kYR_disc, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_ping, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_prepadd, XrdCmsRouting::isSync},
{kYR_prepdel, XrdCmsRouting::isSync | XrdCmsRouting::Forward},
{kYR_space, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_state, XrdCmsRouting::isSync},
{kYR_stats, XrdCmsRouting::AsyncQ0 | XrdCmsRouting::noArgs},
{kYR_try, XrdCmsRouting::isSync},
{kYR_usage, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{0, 0}};
}
// Manager routing by valid request. Note that this routing applies to
// meta-manager requests only. We prohibit a meta-manager from requesting
// potentially destructive actions.
//
XrdCmsRouting XrdCms::manVOps(initMANrouting);
/******************************************************************************/
/* R e d i r e c t o r R o u t i n g T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouting::theRouting initRDRrouting[] =
{{kYR_chmod, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_locate, XrdCmsRouting::AsyncQ0
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_mkdir, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_mkpath, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_mv, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_prepadd, XrdCmsRouting::isSync
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_prepdel, XrdCmsRouting::isSync | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_rm, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_rmdir, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_select, XrdCmsRouting::AsyncQ0
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_statfs, XrdCmsRouting::AsyncQ0
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_stats, XrdCmsRouting::AsyncQ0
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_trunc, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward
| XrdCmsRouting::Repliable | XrdCmsRouting::Delayable},
{kYR_update, XrdCmsRouting::isSync | XrdCmsRouting::noArgs
| XrdCmsRouting::Repliable},
{0, 0}};
}
// Redirector routing by valid request
//
XrdCmsRouting XrdCms::rdrVOps(initRDRrouting);
/******************************************************************************/
/* R e s p o n s e R o u t i n g T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouting::theRouting initRSProuting[] =
{{kYR_avail, XrdCmsRouting::isSync},
{kYR_disc, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_gone, XrdCmsRouting::isSync},
{kYR_have, XrdCmsRouting::AsyncQ0},
{kYR_load, XrdCmsRouting::isSync},
{kYR_pong, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_status, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{0, 0}};
}
// Response routing by valid request
//
XrdCmsRouting XrdCms::rspVOps(initRSProuting);
/******************************************************************************/
/* S e r v e r R o u t i n g T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouting::theRouting initSRVrouting[] =
{{kYR_chmod, XrdCmsRouting::AsyncQ1},
{kYR_disc, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_mkdir, XrdCmsRouting::AsyncQ1},
{kYR_mkpath, XrdCmsRouting::AsyncQ1},
{kYR_mv, XrdCmsRouting::AsyncQ1},
{kYR_ping, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_prepadd, XrdCmsRouting::isSync},
{kYR_prepdel, XrdCmsRouting::isSync},
{kYR_rm, XrdCmsRouting::AsyncQ1},
{kYR_rmdir, XrdCmsRouting::AsyncQ1},
{kYR_space, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_state, XrdCmsRouting::AsyncQ0},
{kYR_stats, XrdCmsRouting::AsyncQ0 | XrdCmsRouting::noArgs},
{kYR_trunc, XrdCmsRouting::AsyncQ1},
{kYR_try, XrdCmsRouting::isSync},
{kYR_usage, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{0, 0}};
}
// Server routing by valid request
//
XrdCmsRouting XrdCms::srvVOps(initSRVrouting);
/******************************************************************************/
/* S u p e r v i s o r R o u t i n g T a b l e */
/******************************************************************************/
namespace XrdCms
{
XrdCmsRouting::theRouting initSUProuting[] =
{{kYR_chmod, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_disc, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_mkdir, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_mkpath, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_mv, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_ping, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_prepadd, XrdCmsRouting::isSync},
{kYR_prepdel, XrdCmsRouting::isSync | XrdCmsRouting::Forward},
{kYR_rm, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_rmdir, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_space, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{kYR_state, XrdCmsRouting::isSync},
{kYR_stats, XrdCmsRouting::AsyncQ0 | XrdCmsRouting::noArgs},
{kYR_trunc, XrdCmsRouting::AsyncQ1 | XrdCmsRouting::Forward},
{kYR_try, XrdCmsRouting::isSync},
{kYR_usage, XrdCmsRouting::isSync | XrdCmsRouting::noArgs},
{0, 0}};
}
// Supervisor routing by valid request
//
XrdCmsRouting XrdCms::supVOps(initSUProuting);