36 #include <sys/types.h>
66 void XrdFrmXfrAgent::Add(
XrdOucStream &Request,
char *Tok,
77 memset(&myReq, 0,
sizeof(myReq));
85 if (!(tp = Request.
GetToken())) Miss =
"request id";
89 {
if (!(tp = Request.
GetToken())) Miss =
"notify path";
94 {
if (!(tp = Request.
GetToken())) Miss =
"priority";
95 else {myReq.
Prty = atoi(tp);
103 {
if (!(tp = Request.
GetToken())) Miss =
"mode";
107 if (!Miss && !(tp = Request.
GetToken())) Miss =
"path";
111 if (Miss) {
Say.
Emsg(
"Agent_Add", Miss,
"missing in '+' request.");
118 if ((op = index(tp,
'?'))) {myReq.
Opaque = op-tp+1; *op =
'\0';}
122 Say.
Emsg(
"Agent_Add",
"Invalid url -", myReq.
LFN);
123 else Server.
Add(myReq);
124 if ((tp = Request.
GetToken())) memset(myReq.
LFN, 0,
sizeof(myReq.
LFN));
138 {
case 0 :
return &StgAgent;
139 case '+':
return &StgAgent;
141 case '&':
return &MigAgent;
142 case '<':
return &GetAgent;
144 case '>':
return &PutAgent;
154 void XrdFrmXfrAgent::Del(
XrdOucStream &Request,
char *Tok,
161 if (!(*Tok) && (!(Tok = Request.
GetToken()) || !(*Tok)))
162 {
Say.
Emsg(
"Del",
"request id missing in cancel request.");
168 memset(&myReq, 0,
sizeof(myReq));
177 void XrdFrmXfrAgent::List(
XrdOucStream &Request,
char *Tok)
189 if (!(*Tok)) {StgAgent.
List(Items, n); GetAgent.List(Items, n);}
190 else do {
if ((agentP = Agent(*Tok))) agentP->
List(Items, n);
192 std::cout <<std::endl;
218 {
case '+': Add(Request, tp, StgAgent);
break;
219 case '<': Add(Request, tp, GetAgent);
break;
221 case '>': Add(Request, tp, PutAgent);
break;
223 case '^': Add(Request, tp, MigAgent);
break;
224 case '-': Del(Request, tp+1, StgAgent);
225 Del(Request, tp+1, GetAgent);
227 case '~': Del(Request, tp+1, MigAgent);
228 Del(Request, tp+1, PutAgent);
230 case '?':
List(Request, tp+1);
break;
231 case '!': GetAgent.Ping(tp);
break;
232 default:
Say.
Emsg(
"Agent",
"Invalid request, '", tp,
"'.");
251 || !PutAgent.Start(
Config.QPath,
Config.AdminMode))
return 2;
255 Request.
Attach(STDIN_FILENO, 8*1024);
259 while((tp = Request.
GetLine()))
260 {
DEBUG (
"Request: '" <<tp <<
"'");
266 Say.
Emsg(
"Agent",
"Exiting; lost request connection!");
void Add(XrdFrcRequest &Request)
void Del(XrdFrcRequest &Request)
int List(XrdFrcRequest::Item *Items, int Num)
static int chkURL(const char *Url)
static int MapV2I(const char *Opc, XrdFrcRequest::Item &ICode)
static int MapM2O(const char *Nop, const char *Pop)
static void Process(XrdOucStream &Request)
int Attach(int FileDescriptor, int bsz=2047)
char * GetToken(int lowcase=0)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
ZipListImpl< false > List(Ctx< ZipArchive > zip)
Factory for creating ZipStatImpl objects.