46 atRoot(0), conLevel(0), conNID(-1),
47 numWaiting(0), myStatus(Active)
49 snprintf(buff,
sizeof(buff),
"%d", maxC);
64 if (myStatus !=
Aborted && numWaiting)
65 {
for (
int i = 0; i < maxTMI; i++)
66 if (tmInfo[i].Status ==
Waiting) {tmInfo[i].Level = 0; Redrive(i);}
87 if (myStatus ==
Aborted)
return 0;
94 tmInfo[nID].nodeP = nP;
99 if (tmInfo[nID].Level == 0)
100 {
if (numConn == maxConn)
101 {myStatus =
Connected; conLevel = 0; atRoot = 1;
102 Say.
Emsg(
"ManTree",
"Now connected to", buff,
"root node(s)");
112 for (i = 0; i < maxTMI; i++)
113 if (i != nID && tmInfo[i].Status ==
Connected)
114 {tmInfo[i].nodeP->Send((
char *)&discRequest,
sizeof(discRequest));
118 conLevel = tmInfo[nID].Level;
124 snprintf(mybuff,
sizeof(mybuff),
"%d", conLevel);
125 Say.
Emsg(
"ManTree",
"Now connected to supervisor at level", mybuff);
141 tmInfo[nID].Status =
Active;
142 if (atRoot || (conLevel && conNID == nID)) myStatus =
Active;
143 tmInfo[nID].nodeP = 0;
160 tmInfo[maxTMI].Status=
Active;
161 nID = maxTMI; maxTMI++;
185 tmInfo[nID].Level = lvl;
189 if (myStatus ==
Aborted)
return -1;
193 if (myStatus ==
Connected && conLevel > 0)
195 return (lvl == tmInfo[nID].Level);
204 {
for (i = 0; i < maxTMI; i++)
205 if (i != nID && tmInfo[i].Status ==
Waiting)
206 {tmInfo[i].Level = 0; Redrive(i);}
216 for (i = 0; i < maxTMI; i++)
217 if (i != nID && tmInfo[i].Status ==
Active && tmInfo[i].Level)
break;
218 if (i < maxTMI) Pause(nID);
225 return (lvl == tmInfo[nID].Level);
int Connect(int nID, XrdCmsNode *nP)
int Trying(int nID, int Lvl)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)