128 char WorkBuff[4096], *hList, *wP = WorkBuff;
133 Data.
Mode |= CmsLoginData::kYR_blredir;
137 n = sendData(Link, Data);
143 if ((n = Link->
RecvAll((
char *)&LIHdr,
sizeof(LIHdr), timeout)) < 0)
144 return Emsg(Link, (n == -ETIMEDOUT ?
"timed out" :
"rejected"));
148 if ((dataLen =
static_cast<int>(ntohs(LIHdr.datalen))))
149 {
if (dataLen > (
int)
sizeof(WorkBuff))
150 return Emsg(Link,
"login reply too long");
151 if (Link->
RecvAll(WorkBuff, dataLen, timeout) < 0)
152 return Emsg(Link,
"login receive error");
160 dataLen =
static_cast<int>(ntohs(LIHdr.datalen));
161 if (dataLen > (
int)
sizeof(WorkBuff))
162 return Emsg(Link,
"login reply too long");
167 if (!(Data.
Mode & CmsLoginData::kYR_director)
170 return Emsg(Link,
"malformed try host data");
172 if (!(LIHdr.modifier & CmsTryRequest::kYR_permtop))
173 Data.
Mode &= ~CmsLoginData::kYR_blredir;
182 return Emsg(Link,
"invalid error reply");
184 memcpy(&eRC, WorkBuff,
sizeof(eRC));
192 || !
Parser.
Parse(&Data, WorkBuff, WorkBuff+dataLen))
193 return Emsg(Link,
"invalid login response");
static int Identify(XrdLink *Link, XrdCms::CmsRRHdr &inHdr, char *authBuff, int abLen)
int RecvAll(char *buff, int blen, int timeout=-1)
static int Unpack(char **buff, const char *bend, char **data, int &dlen)