12 #ifndef ROOT_XrdProofdProofServ
13 #define ROOT_XrdProofdProofServ
18 #if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__APPLE__)
29 #include "Xrd/XrdLink.hh"
30 #include "XrdOuc/XrdOucHash.hh"
51 XrdSrvBuffer(
char *bp=0,
int sz=0,
bool dup=0) {
54 if (dup && bp && sz > 0) {
55 fMembuf = (
char *)malloc(sz);
57 memcpy(fMembuf, bp, sz);
65 ~XrdSrvBuffer() {
if (fMembuf) free(fMembuf);}
85 XrdProofQuery(
const char *t,
const char *n =
"",
long s = 0) : fTag(t), fDSName(n), fDSSize(s) { }
87 const char *GetTag() {
return fTag.c_str(); }
88 const char *GetDSName() {
return fDSName.c_str(); }
89 long GetDSSize() {
return fDSSize; }
104 #define kXPROOFSRVTAGMAX 64
105 #define kXPROOFSRVALIASMAX 256
110 class XrdProofdProofServ
114 XrdProofdProofServ();
115 ~XrdProofdProofServ();
117 void AddWorker(
const char *o, XrdProofWorker *w);
118 inline const char *AdminPath()
const { XrdSysMutexHelper mhp(fMutex);
return fAdminPath.c_str(); }
119 inline const char *Alias()
const { XrdSysMutexHelper mhp(fMutex);
return fAlias.c_str(); }
120 void Broadcast(
const char *msg,
int type = kXPD_srvmsg);
121 int BroadcastPriority(
int priority);
122 inline const char *Client()
const { XrdSysMutexHelper mhp(fMutex);
return fClient.c_str(); }
123 int CheckSession(
bool oldvers,
bool isrec,
124 int shutopt,
int shutdel,
bool changeown,
int &nc);
125 XrdProofQuery *CurrentQuery() { XrdSysMutexHelper mhp(fMutex);
return (fQueries.empty()? 0 : fQueries.front()); }
126 void DeleteStartMsg()
127 { XrdSysMutexHelper mhp(fMutex);
if (fStartMsg)
delete fStartMsg; fStartMsg = 0;}
128 int DisconnectTime();
130 int Enqueue(XrdProofQuery *q) { XrdSysMutexHelper mhp(fMutex);
131 if (q) { fQueries.push_back(q); };
return fQueries.size(); }
132 void ExportBuf(XrdOucString &buf);
133 void ExportWorkers(XrdOucString &wrks);
134 inline const char *Fileout()
const { XrdSysMutexHelper mhp(fMutex);
return fFileout.c_str(); }
135 int FreeClientID(
int pid);
136 XrdClientID *GetClientID(
int cid);
137 int GetNClients(
bool check);
138 XrdProofQuery *GetQuery(
const char *tag);
139 inline const char *Group()
const { XrdSysMutexHelper mhp(fMutex);
return fGroup.c_str(); }
141 inline short int ID()
const { XrdSysMutexHelper mhp(fMutex);
return fID; }
142 inline bool IsPLite()
const { XrdSysMutexHelper mhp(fMutex);
return (fPLiteNWrks > 1); }
143 inline bool IsShutdown()
const { XrdSysMutexHelper mhp(fMutex);
return fIsShutdown; }
144 inline bool IsValid()
const { XrdSysMutexHelper mhp(fMutex);
return fIsValid; }
145 inline bool Match(
short int id)
const { XrdSysMutexHelper mhp(fMutex);
return (
id == fID); }
146 inline const char *Ordinal()
const { XrdSysMutexHelper mhp(fMutex);
return fOrdinal.c_str(); }
147 inline XrdClientID *Parent()
const { XrdSysMutexHelper mhp(fMutex);
return fParent; }
148 inline void PingSem()
const { XrdSysMutexHelper mhp(fMutex);
if (fPingSem) fPingSem->Post(); }
149 inline int PLiteNWrks()
const { XrdSysMutexHelper mhp(fMutex);
return fPLiteNWrks; }
150 inline XrdProofdProtocol *Protocol()
const { XrdSysMutexHelper mhp(fMutex);
return fProtocol; }
151 inline std::list<XrdProofQuery *> *Queries()
const
152 {
return (std::list<XrdProofQuery *> *)&fQueries; }
153 void RemoveQuery(
const char *tag);
154 void RemoveWorker(
const char *o);
156 int Reset(
const char *msg,
int type);
159 inline XrdROOT *ROOT()
const { XrdSysMutexHelper mhp(fMutex);
return fROOT; }
160 inline XrdProofdResponse *Response()
const { XrdSysMutexHelper mhp(fMutex);
return fResponse; }
161 int SendData(
int cid,
void *buff,
int len);
162 int SendDataN(
void *buff,
int len);
163 void SendClusterInfo(
int nsess,
int nacti);
164 int SetAdminPath(
const char *a,
bool assert,
bool setown);
165 void SetAlias(
const char *a) { XrdSysMutexHelper mhp(fMutex); fAlias = a; }
166 void SetClient(
const char *c) { XrdSysMutexHelper mhp(fMutex); fClient = c; }
167 inline void SetConnection(XrdProofdResponse *r) { XrdSysMutexHelper mhp(fMutex); fResponse = r;}
169 void SetFileout(
const char *f) { XrdSysMutexHelper mhp(fMutex); fFileout = f; }
170 inline void SetGroup(
const char *g) { XrdSysMutexHelper mhp(fMutex); fGroup = g; }
172 inline void SetID(
short int id) { XrdSysMutexHelper mhp(fMutex); fID = id;}
173 void SetOrdinal(
const char *o) { XrdSysMutexHelper mhp(fMutex); fOrdinal = o; }
174 inline void SetParent(XrdClientID *cid) { XrdSysMutexHelper mhp(fMutex); fParent = cid; }
175 inline void SetPLiteNWrks(
int n) { XrdSysMutexHelper mhp(fMutex); fPLiteNWrks = n; }
176 inline void SetProtocol(XrdProofdProtocol *p) { XrdSysMutexHelper mhp(fMutex); fProtocol = p; }
177 inline void SetProtVer(
int pv) { XrdSysMutexHelper mhp(fMutex); fProtVer = pv; }
178 inline void SetROOT(XrdROOT *r) { XrdSysMutexHelper mhp(fMutex); fROOT = r; }
180 inline void SetShutdown() { XrdSysMutexHelper mhp(fMutex); fIsShutdown =
true; }
181 inline void SetSkipCheck() { XrdSysMutexHelper mhp(fMutex); fSkipCheck =
true; }
182 void SetSrvPID(
int pid) { XrdSysMutexHelper mhp(fMutex); fSrvPID = pid; }
183 inline void SetSrvType(
int id) { XrdSysMutexHelper mhp(fMutex); fSrvType = id; }
184 inline void SetStartMsg(XrdSrvBuffer *sm) { XrdSysMutexHelper mhp(fMutex);
delete fStartMsg; fStartMsg = sm; }
185 inline void SetStatus(
int st) { XrdSysMutexHelper mhp(fMutex); fStatus = st; }
186 void SetTag(
const char *t) { XrdSysMutexHelper mhp(fMutex); fTag = t; }
187 void SetUNIXSockPath(
const char *s) { XrdSysMutexHelper mhp(fMutex); fUNIXSockPath = s; };
188 void SetUserEnvs(
const char *t) { XrdSysMutexHelper mhp(fMutex); fUserEnvs = t; }
189 inline void SetValid(
bool valid = 1) { XrdSysMutexHelper mhp(fMutex); fIsValid = valid; }
191 inline int SrvPID()
const { XrdSysMutexHelper mhp(fMutex);
return fSrvPID; }
192 inline int SrvType()
const { XrdSysMutexHelper mhp(fMutex);
return fSrvType; }
193 inline XrdSrvBuffer *StartMsg()
const { XrdSysMutexHelper mhp(fMutex);
return fStartMsg; }
194 inline int Status()
const { XrdSysMutexHelper mhp(fMutex);
return fStatus;}
195 inline const char *Tag()
const { XrdSysMutexHelper mhp(fMutex);
return fTag.c_str(); }
196 int TerminateProofServ(
bool changeown);
197 inline const char *UserEnvs()
const { XrdSysMutexHelper mhp(fMutex);
return fUserEnvs.c_str(); }
198 int VerifyProofServ(
bool fw);
199 inline XrdOucHash<XrdProofWorker> *Workers()
const
200 { XrdSysMutexHelper mhp(fMutex);
return (XrdOucHash<XrdProofWorker> *)&fWorkers; }
203 int CreateUNIXSock(XrdSysError *edest);
204 void DeleteUNIXSock();
205 XrdNet *UNIXSock()
const {
return fUNIXSock; }
206 const char *UNIXSockPath()
const {
return fUNIXSockPath.c_str(); }
210 XrdSysRecMutex *fMutex;
211 XrdProofdProtocol *fProtocol;
212 XrdProofdResponse *fResponse;
214 XrdClientID *fParent;
216 std::vector<XrdClientID *> fClients;
217 XrdOucHash<XrdProofWorker> fWorkers;
219 XrdSysSemWait *fPingSem;
221 XrdSrvBuffer *fStartMsg;
223 time_t fDisconnectTime;
231 XrdOucString fFileout;
236 XrdOucString fUNIXSockPath;
243 XrdOucString fClient;
245 XrdOucString fOrdinal;
246 XrdOucString fUserEnvs;
247 XrdOucString fAdminPath;
256 { XrdSysMutexHelper mhp(fMutex); fPingSem =
new XrdSysSemWait(0);}
258 { XrdSysMutexHelper mhp(fMutex);
if (fPingSem)
delete fPingSem; fPingSem = 0;}
259 std::list<XrdProofQuery *> fQueries;