From 4451fb0a93909d76278d09bd29c9e395e5d5eb13 Mon Sep 17 00:00:00 2001 From: Joerg Deckert Date: Sun, 22 Dec 2013 10:44:16 +0100 Subject: [PATCH] fixes --- lib/reg-ios.spin | 25 ++++++++++++- system/administra/admnet/admnet.spin | 30 +++++++++++++--- system/regnatix/ftp.spin | 53 +++++++++++++++++++++++++--- 3 files changed, 98 insertions(+), 10 deletions(-) diff --git a/lib/reg-ios.spin b/lib/reg-ios.spin index 9d72a7f..e2ba93a 100644 --- a/lib/reg-ios.spin +++ b/lib/reg-ios.spin @@ -1156,7 +1156,30 @@ PUB lan_rxtime(handleidx, timeout): rxbyte PUB lan_rxbyte PUB lan_rxdatatime -PUB lan_rxdata +PUB lan_rxdata(handleidx, filename, len): error | fnr +''funktionsgruppe : lan +''funktion : bei bestehender Verbindung die angegebene Datenmenge empfangen +''eingabe : - +''ausgabe : - +''busprotokoll : [086][put.handleidx][sub_putlong.len][get.byte1][get.byte][get.error] +'' : handleidx - lfd. Nr. der Verbindung +'' : byte1 ... byte - zu empfangende Bytes +'' : len - Anzahl zu empfangende Bytes +'' : error - ungleich Null bei Fehler + + rd_newfile(filename,len) + fnr := rd_open(filename) + ifnot fnr == -1 + bus_putchar1(gc#a_lanRXData) + bus_putchar1(handleidx) + bus_putlong1(len) + repeat len + rd_put(fnr,bus_getchar1) + rd_close(fnr) + + error := bus_getchar1 + error := ~error + PUB lan_txflush PUB lan_txcheck(handleidx, txbyte): error ''funktionsgruppe : lan diff --git a/system/administra/admnet/admnet.spin b/system/administra/admnet/admnet.spin index 0de6840..42155a2 100644 --- a/system/administra/admnet/admnet.spin +++ b/system/administra/admnet/admnet.spin @@ -1202,7 +1202,7 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i quit i++ - ifnot (handle := sock.connect(ipaddr, remoteport, @bufrx[i*sock#sNumSockets], rxlen, @buftx[i*sock#sNumSockets], txlen)) ==-102 + ifnot (handle := sock.connect(ipaddr, remoteport, @bufrx[i*rxlen], rxlen, @buftx[i*txlen], txlen)) ==-102 handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern bufidx[i] :=handleidx @@ -1320,7 +1320,30 @@ PRI lan_rxtime | handleidx, timeout, t, rxbyte PRI lan_rxbyte PRI lan_rxdatatime -PRI lan_rxdata +PRI lan_rxdata | handleidx, len, rxbyte, error +''funktionsgruppe : lan +''funktion : bei bestehender Verbindung die angegebene Datenmenge empfangen +''eingabe : - +''ausgabe : - +''busprotokoll : [086][get.handleidx][sub_getlong.len][put.byte1][put.byte][put.error] +'' : handleidx - lfd. Nr. der Verbindung +'' : len - Anzahl zu empfangender Bytes +'' : error - ungleich Null bei Fehler + + error := FALSE + handleidx := bus_getchar + len := sub_getlong + + repeat len + ifnot error + repeat while (rxbyte := sock.readByteNonBlocking(sockhandle[handleidx])) < 0 + ifnot sock.isConnected(sockhandle[handleidx]) + error := sock#ERRSOCKETCLOSED + quit + bus_putchar(rxbyte) + + bus_putchar(error) + PRI lan_txflush PRI lan_txcheck | handleidx, txbyte ''funktionsgruppe : lan @@ -1371,9 +1394,6 @@ PRI lan_txdata | handleidx, len, txbyte, error bus_putchar(error) - - - DAT long ' long alignment for addresses ip_addr byte 10, 1, 1, 1 'ip diff --git a/system/regnatix/ftp.spin b/system/regnatix/ftp.spin index 15b7043..b2721de 100644 --- a/system/regnatix/ftp.spin +++ b/system/regnatix/ftp.spin @@ -71,11 +71,12 @@ PUB main ifnot ftpconnect ifnot ftplogin(string("anonymous"),string("password")) ifnot ftpcwd(string("system")) - ifnot filename[0] == 0 + ifnot byte[filename][0] == 0 if ftppasv ftpretr + ftpclose ios.stop PRI ftpconnect @@ -107,6 +108,15 @@ PRI ftpconnect return(-1) return(0) +PRI ftpclose + + if handleidx_control + ios.lan_close(handleidx_control) + handleidx_control := 0 + if handleidx_data + ios.lan_close(handleidx_data) + handleidx_data := 0 + PRI ftplogin(username, password) ifnot strsize(username) @@ -182,17 +192,52 @@ PRI ftppasv : port | i, k, port256, port1 ios.printnl return(0) -PRI ftpretr +PRI ftpretr | len + + if sendStr(string("SIZE ")) || sendStr(filename) || sendStr(string(13,10)) + ios.print(string("Fehler beim Senden des SIZE-Kommandos")) + ios.printnl + return(-1) + ifnot getResponse(string("213")) + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) + ios.printnl + return(-1) + ifnot(len := num.FromStr(@strTemp+4, num#DEC)) + return(-1) + + if sendStr(string("TYPE I",13,10)) + ios.print(string("Fehler beim Senden des Types")) + ios.printnl + return(-1) + ifnot getResponse(string("200 ")) + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) + ios.printnl + return(-1) if sendStr(string("RETR ")) || sendStr(filename) || sendStr(string(13,10)) ios.print(string("Fehler beim Senden des Filenamens")) return -1 + ifnot getResponse(string("150 ")) + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) + ios.printnl + return(-1) + + if ios.lan_rxdata(handleidx_data, filename, len) + ios.print(string("Fehler beim Empfang der Datei.")) + ios.printnl + return(-1) + + ifnot getResponse(string("226 ")) + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) + ios.printnl + return(-1) PRI download (parameter) | i 'filename kopieren - repeat strsize(filename) - filename[i] := parameter[i] + repeat strsize(parameter) + byte[filename][i] := byte[parameter][i] i++ + byte[filename][i] := 0 PRI setaddr (ipaddr) | pos, count 'IP-Adresse in Variable schreiben