[Oberon] Strange problems with WinAOS and WebDAV

John Drake jmdrake_98 at yahoo.com
Sat Sep 6 00:19:28 CEST 2003


Hello all,

After taking a break from trying to get WebDAV to work
right under WinAOS I took another shot at it.  I'm
using the latest WebDAV build (WebDAV.1.0.0.Zip) and
the latest version of WinAOS (Version 1.03, although
for some reason it still says "1.02" in the log and
in the Distribution.Text file.  But I know I 
downloaded from the 1.03 link, and I did this twice
just to make sure).

Anyway on to the strange problem.  Before I could do
everything with WebDAV except download the file.  I
could create/delete folders, upload files ect.  Now
whenever I do the first step (deleting the old
folders)
Oberon locks up hard.  I traced the lock up to a
call to procedure WebHTTP.ParseReply().  

PROCEDURE ParseReply*(VAR in: AosIO.Reader; VAR
header: ResponseHeader; VAR res: LONGINT; log :
TFLog.Log);
VAR s: ARRAY 32 OF CHAR; af: AdditionalField; 
  i :LONGINT; ch :CHAR;
BEGIN
  GetToken(in, s); GetVersion(s, header.maj,
header.min);
  GetToken(in, s); i := 0; GetInt(i, s,
header.statuscode); in.Ln(header.reasonphrase);
  IF header.maj >= 1 THEN
    REPEAT
      GetToken(in, s);
      Utilities.TrimRight(s, ":");
      IF s = "Server" THEN 
        in.Char(ch); 
        in.Ln(header.server) 
      ELSIF s = "Date" THEN 
        in.Char(ch);in.Ln(header.date) 
      ELSIF s = "Content-Type" THEN 
        in.Char(ch); in.Ln(header.contenttype) 
      ELSIF s = "Content-Length" THEN 
        in.Char(ch); in.Ln(s); 
        Utilities.StrToInt(s, header.contentlength)
      ELSIF s = "Transfer-Encoding" THEN 
        in.Char(ch); in.Ln(header.transferencoding)
      ELSE 
        NEW(af); COPY(s, af.key); in.Char(ch);  
        in.Ln(af.value);
        af.next := header.additionalFields;   
        header.additionalFields := af
      END;
    UNTIL (in.res # AosIO.Ok) OR in.EOLN();
    in.SkipLn();
    res := OK
  ELSE
    IF log # NIL THEN 
      log.Enter; 
      log.String("Unsupported HTTP version :"); 
      log.Int(header.maj, 5); log.Exit 
    END;
    res := VersionNotSupported
  END;
END ParseReply;


Upon further inspection I traced the lock up to the
line:

UNTIL (in.res # AosIO.Ok) OR in.EOLN();

Specifically the call to in.EOLN().

So then I looked up in.EOLN().  It checks for the
end of line by calls to in.Peek() to "look" at
the next charecter in the input stream to see if
it's an end-of-line charecter.  So why should
this be a problem?  I have no idea.  I did notice
that the lines:

      IF s = "Server" THEN 
        in.Char(ch); 
        in.Ln(header.server) 

position the input stream past an end of line
charecter.  (The call to in.Ln(header.server)
reads all of the charecter in the input stream
up to and including the end of line charecters).
But if there's nothing else past that, shouldn't
that simply return an in.res = EOF or something
rather than just hanging up?

Another wierd problem.  In the procedure
DCT.CheckIn there is the following
line:

IF resHeader.statuscode # WebHTTP.MultiStatus THEN

This does not compile under the latest WinAOS because
WebHTTP.MultiStatus is not defined.  I changed this
to WebHTTP.OK just to get it to compile.  This
can't be the cause of my other problem though
because I haven't gotten to DCT.CheckIn yet.

I'm not sure what to do next.

Regards,

John M. Drake

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com



More information about the Oberon mailing list