From ab197c648354f4cab72ddb989945c940c5e48d95 Mon Sep 17 00:00:00 2001 From: Ruben Shekspir Date: Sun, 5 May 2019 12:29:16 +0400 Subject: [PATCH] http fianly works, not for bin files, unfortunately --- http.Mod | 41 ++++++++++++++++++++++++++++++++++++----- logger.Mod | 12 +++++++++--- makefile | 12 ++++++++++-- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/http.Mod b/http.Mod index cc1aa5b..d49b88a 100644 --- a/http.Mod +++ b/http.Mod @@ -8,7 +8,35 @@ TYPE PSTRING = POINTER TO ARRAY OF CHAR; VAR - buff: ARRAY MAXARRAYNUMBEREXTENDED OF CHAR; + buff, buff2: ARRAY MAXARRAYNUMBEREXTENDED OF CHAR; + +PROCEDURE getClean(buff: ARRAY OF CHAR; VAR clean: ARRAY OF CHAR); +VAR + i: INTEGER; + newLine: ARRAY 2 OF CHAR; + lineIsHeader, EOL, notFirstLine: BOOLEAN; +BEGIN + i := 0; + notFirstLine := FALSE; + lineIsHeader := FALSE; + EOL := FALSE; + + REPEAT + IF EOL THEN + lineIsHeader := FALSE; + EOL := FALSE; + notFirstLine := TRUE + END; + + IF buff[i] = ":" THEN lineIsHeader := TRUE END; + + IF ((buff[i - 1] = 0DX) & (buff[i] = 0AX)) THEN EOL := TRUE END; + + INC(i); + UNTIL (i + 2 > Strings.Length(buff)) OR (~lineIsHeader & EOL & notFirstLine); + + Strings.Extract(buff, i, Strings.Length(buff), clean); +END getClean; PROCEDURE AppendEOLAndClean(buff: ARRAY OF CHAR; VAR buffClean: PSTRING); VAR i: LONGINT; @@ -40,12 +68,12 @@ VAR positionStart, valPositionStart, i: LONGINT; BEGIN positionStart := Strings.Pos(key, buff, 0); - valPositionStart := positionStart + Strings.Length(key); + valPositionStart := positionStart + Strings.Length(key) + 1; i := 0; REPEAT val[i] := buff[valPositionStart + i]; INC(i); - UNTIL val[i]; (* TODO: check value char number *) + UNTIL ORD(val[i]) = 10; (* 0DX number(newline)*) END getHeader; PROCEDURE get(host, path, port: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR); @@ -90,13 +118,16 @@ BEGIN Strings.Append(tmpBuff, buff); getHeader(buff, "Content-Length", valueContentLengthString); Strings.StrToReal(valueContentLengthString, valueContentLength); - Out.Real(valueContentLength, 20); + (* Out.Real(valueContentLength, 6); Out.Ln; + Logger.LogIntLn(Strings.Length(buff)); + Logger.Log(buff); *) UNTIL ~connectionFlag OR (Strings.Length(buff) > valueContentLength); Internet.Disconnect(socket); END get; BEGIN get("norayr.am", "/tmp/", "80", buff); - Logger.Log(buff); + getClean(buff, buff2); + Logger.Log(buff2); END http. \ No newline at end of file diff --git a/logger.Mod b/logger.Mod index 70ea588..844044e 100644 --- a/logger.Mod +++ b/logger.Mod @@ -1,5 +1,5 @@ MODULE Logger; -IMPORT time, Out; +IMPORT time, Out, Strings; CONST deca = 10; @@ -45,7 +45,7 @@ END LogNormalized; PROCEDURE Log*(buff: ARRAY OF CHAR); VAR - year, month, day, hour, min, sec: LONGINT; + year, month, day, hour, min, sec, i: LONGINT; BEGIN time.Now(year, month, day, hour, min, sec); @@ -61,7 +61,13 @@ BEGIN Out.String("-"); LogNormalized(sec, 2); Out.String(" :- "); - Out.String(buff); + FOR i:=0 TO Strings.Length(buff) DO + (* Out.Char(" "); + Out.Int(ORD(buff[i]), 4); + Out.Char("-"); *) + Out.Char(buff[i]); + (* Out.Char(" ");Out.Char(" ");Out.Char(" "); *) + END; Out.Ln; END Log; diff --git a/makefile b/makefile index 6bc76a4..4257108 100644 --- a/makefile +++ b/makefile @@ -27,5 +27,13 @@ run: ./builds/opium install -http: - $(VOC) -s time.Mod logger.Mod types.Mod sockets.Mod netdb.Mod Internet.Mod http.Mod -m \ No newline at end of file +http: clean + cd builds && \ + $(VOC) -s ../time.Mod \ + ../logger.Mod \ + ../types.Mod \ + ../sockets.Mod \ + ../netdb.Mod \ + ../Internet.Mod \ + ../http.Mod -m \ + && ./http \ No newline at end of file