archie/prospero/lib/pfs/in_forwarded.c
2024-05-27 16:13:40 +02:00

53 lines
1.8 KiB
C

/*
* Copyright (c) 1992, 1993 by the University of Southern California
*
* For copying and distribution information, please see the file <usc-copyr.h>
*/
#include <usc-copyr.h>
#include <pfs.h>
#include <pparse.h>
#include <pprot.h>
#include <perrno.h>
/* Assumes next_word points to the word following a FORWARDED response. */
int
in_forwarded_data(INPUT in, char *command, char *next_word, VLINK dlink)
{
int tmp;
int moretext; /* flag we use to check if there's more text on
the line to examine. */
int retval = PSUCCESS; /* return value from functions */
tmp = qsscanf(next_word,"%~%'&s %'&s %'&s %'&s %ld %r",
&dlink->hosttype, &dlink->host,
&dlink->hsonametype, &dlink->hsoname,
&dlink->version, &next_word);
/* Log and return a better message */
if(tmp < 5) {
p_err_string = qsprintf_stcopyr(p_err_string, "Too few arguments: %'s",
command, 0);
return perrno = PARSE_ERROR;
}
moretext = (tmp == 6);
/* search for DEST_EXP, if set. */
if (moretext) {
AUTOSTAT_CHARPP(t_destexpp);
tmp = qsscanf(next_word, "DEST-EXP %'&s %r", t_destexpp, &next_word);
if (tmp >= 1)
dlink->dest_exp = asntotime(*t_destexpp);
moretext = (tmp == 2);
}
if (moretext) {
p_err_string = qsprintf_stcopyr(p_err_string,
"Unknown tokens at end of FORWARDED specification: %'s",
command);
return perrno = PARSE_ERROR;
}
/* Look for any and all following ID lines and merge them with the link. */
retval = in_id(in, &dlink->f_magic_no);
if (retval) return perrno = retval;
return PSUCCESS;
}