cleanup, sending password added

This commit is contained in:
Jörg Deckert 2013-12-22 18:10:57 +01:00
parent 4451fb0a93
commit 7037fa9979
5 changed files with 101 additions and 374 deletions

View File

@ -1,173 +0,0 @@
{{ LAN-Funktionen für Administra }}
CON 'Signaldefinitionen --------------------------------------------------------------------------
'signaldefinitionen administra (todo: nach glob-con.spin auslagern!!!)
#14, A_NETCS,A_NETSCK,A_NETSI,A_NETSO 'Pins zum ENC28J60
CON 'NVRAM Konstanten --------------------------------------------------------------------------
' todo: nach glob-con.spin auslagern!!!
#4, NVRAM_IPADDR
#8, NVRAM_IPMASK
#12, NVRAM_IPGW
#16, NVRAM_IPDNS
#20, NVRAM_IPBOOT
#24, NVRAM_HIVE ' 4 Bytes
CON
' buffer sizes, must be a power of 2
rxlen = 2048
txlen = 128
VAR
byte ftp_bufrx1[rxlen] ' buffers for connection to server
byte ftp_buftx1[txlen]
byte ftp_bufrx2[rxlen] ' buffers for connection from server
byte ftp_buftx2[txlen]
byte strTemp[128]
OBJ
gc : "glob-con" 'globale konstanten
num : "glob-numbers" 'Number Engine
rtc : "adm-rtc" 'RTC-Engine
com : "adm-com" 'serielle schnittstelle (nur zum Debugging genutzt)
sock : "api_telnet_serial" 'TCP Socket Funktionen
PUB start | hiveid, hivestr, strpos, macpos
ip_addr := rtc.getNVSRAM(NVRAM_IPADDR)
ip_addr[1] := rtc.getNVSRAM(NVRAM_IPADDR+1)
ip_addr[2] := rtc.getNVSRAM(NVRAM_IPADDR+2)
ip_addr[3] := rtc.getNVSRAM(NVRAM_IPADDR+3)
ip_subnet := rtc.getNVSRAM(NVRAM_IPMASK)
ip_subnet[1] := rtc.getNVSRAM(NVRAM_IPMASK+1)
ip_subnet[2] := rtc.getNVSRAM(NVRAM_IPMASK+2)
ip_subnet[3] := rtc.getNVSRAM(NVRAM_IPMASK+3)
ip_gateway := rtc.getNVSRAM(NVRAM_IPGW)
ip_gateway[1] := rtc.getNVSRAM(NVRAM_IPGW+1)
ip_gateway[2] := rtc.getNVSRAM(NVRAM_IPGW+2)
ip_gateway[3] := rtc.getNVSRAM(NVRAM_IPGW+3)
ip_dns := rtc.getNVSRAM(NVRAM_IPDNS)
ip_dns[1] := rtc.getNVSRAM(NVRAM_IPDNS+1)
ip_dns[2] := rtc.getNVSRAM(NVRAM_IPDNS+2)
ip_dns[3] := rtc.getNVSRAM(NVRAM_IPDNS+3)
hiveid := rtc.getNVSRAM(NVRAM_HIVE)
hiveid := hiveid + rtc.getNVSRAM(NVRAM_HIVE+1) << 8
hiveid := hiveid + rtc.getNVSRAM(NVRAM_HIVE+2) << 16
hiveid := hiveid + rtc.getNVSRAM(NVRAM_HIVE+3) << 24
hivestr := num.ToStr(hiveid, num#DEC)
strpos := strsize(hivestr)
macpos := 5
repeat while (strpos AND macpos)
strpos--
if(strpos)
strpos--
mac_addr[macpos] := num.FromStr(hivestr+strpos, num#HEX)
byte[hivestr+strpos] := 0
macpos--
sock.start(A_NETCS,A_NETSCK,A_NETSI,A_NETSO, -1, @mac_addr, @ip_addr)
PUB stop
sock.stop
PUB ftpOpen(addr) : connected 'FTP-Verbindung öffnen
com.str(string("ftpOpen Start",13,10))
repeat 5 'mehrmals probieren, falls z.B. TCP-Engine-Cog noch nicht bereit
sock.connect(addr, 21, @ftp_bufrx1, rxlen, @ftp_buftx1, txlen)
'sock.resetBuffers
if connected := sock.waitConnectTimeout(1500)
'todo: einfügen? if getResponse(string("220"))
if getResponse(string("220 "))
com.str(string("Send: USER anonymous",13,10))
sock.str(string("USER anonymous",13,10))
if getResponse(string("230 "))
quit
else
sock.close
PUB ftpClose 'FTP-Verbindung schließen
com.str(string("Send: QUIT",13,10))
sock.str(string("QUIT",13,10))
getResponse(string("221 "))
sock.close
PUB ftpOpenData(addr,port) : connected
PUB ftpCloseData
PUB ftpBoot 'zum Boot-Server verbinden
ip_boot := rtc.getNVSRAM(NVRAM_IPBOOT) << 24
ip_boot := ip_boot + rtc.getNVSRAM(NVRAM_IPBOOT+1) << 16
ip_boot := ip_boot + rtc.getNVSRAM(NVRAM_IPBOOT+2) << 8
ip_boot := ip_boot + rtc.getNVSRAM(NVRAM_IPBOOT+3)
if ip_boot
if ftpOpen(ip_boot)
ftpClose
PUB ftpListName 'Verzeichniseintrag lesen
return
PRI getResponse (strOk) : respOk | len
respOk := FALSE
repeat
readLine
com.str(@strTemp)
com.str(string(13,10))
if strsize(@strTemp) == 0
quit
'byte[@strTemp+strsize(strOk)] := 0
strTemp[strsize(strOk)] := 0
com.str(string("StrOk: "))
com.str(strOk)
com.str(string("StrComp: "))
com.str(@strTemp)
com.str(string(13,10))
if strcomp(@strTemp, strOk)
respOk := TRUE
return respOk
PRI readLine | i, ch
repeat i from 0 to 126
ch := sock.rxtime(500)
if ch == 13
ch := sock.rxtime(500)
if ch == -1 or ch == 10
quit
strTemp[i] := ch
strTemp[i] := 0
return i
DAT
long ' long alignment for addresses
ip_addr byte 10, 1, 1, 1 'ip
ip_subnet byte 255, 255, 255, 0 'subnet-maske
ip_gateway byte 10, 1, 1, 254 'gateway
ip_dns byte 10, 1, 1, 254 'dns
ip_boot long 0 'boot-server (IP address in long)
mac_addr byte $c0, $de, $ba, $be, $00, $00 'mac-adresse

View File

@ -168,22 +168,11 @@ A_AYS = %00000000_00000000_00000010_00000000
a_lanStop 'Stop Network
a_lanConnect 'ausgehende TCP-Verbindung öffnen
a_lanListen 'auf eingehende TCP-Verbindung lauschen
a_lanReListen 'wieder auf eingehende TCP-Verbindung lauschen
a_lanIsConnected 'Prüfen, ob verbunden
a_lanRXCount 'Anzahl Zeichen im Empfangspuffer
a_lanResetBuffers 'Puffer zurücksetzen
a_lanWaitConnTimeout 'bestimmte Zeit auf Verbindung warten
a_lanClose 'TCP-Verbindung schließen
a_lanRXFlush 'Empfangspuffer leeren
a_lanRXCheck 'warten auf Byte aus Empfangspuffer
a_lanRXTime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
a_lanRXByte 'Byte aus Empfangspuffer lesen
a_lanRXDataTime 'bestimmte Zeit auf daten aus Empfangspuffer warten
a_lanRXData 'Daten aus Empfangspuffer lesen
a_lanTXFlush 'Sendepuffer leeren
a_lanTXCheck 'Verbindung prüfen und Byte senden
a_lanTX 'Byte senden
a_lanTXData '90 'Daten senden
a_lanTXData '79 'Daten senden
' ---------------------------------------------- CHIP-MANAGMENT
#92, a_mgrSetSound 'soundsubsysteme verwalten

View File

@ -1064,39 +1064,25 @@ PUB lan_connect(ipaddr, remoteport): handleidx
bus_putword1(remoteport)
handleidx := bus_getchar1
PUB lan_listen
PUB lan_relisten
PUB lan_isconnected(handleidx): connected
PUB lan_listen(port): handleidx
''funktionsgruppe : lan
''funktion : Abfrage, ob Socket verbunden
''funktion : Port für eingehende TCP-Verbindung öffnen
''eingabe : -
''ausgabe : -
''busprotokoll : [076][sub_putlong.handle][get.connected]
'' : handleidx - lfd. Nr. der zu testenden Verbindung
'' : connected - True, if connected
''busprotokoll : [074][sub_putword.port][get.handleidx]
'' : port - zu öffnende Portnummer
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
bus_putchar1(gc#a_lanIsConnected)
bus_putchar1(handleidx)
connected := bus_getchar1
PUB lan_rxcount
PUB lan_resetbuffers(handleidx)
''funktionsgruppe : lan
''funktion : Sende- und Empfangspuffer zurücksetzen
''eingabe : -
''ausgabe : -
''busprotokoll : [078][put.handleidx]
'' : handleidx - lfd. Nr. der Verbindung
bus_putchar1(gc#a_lanResetBuffers)
bus_putchar1(handleidx)
bus_putchar1(gc#a_lanListen)
bus_putword1(port)
handleidx := bus_getchar1
PUB lan_waitconntimeout(handleidx, timeout): connected
''funktionsgruppe : lan
''funktion : bestimmte Zeit auf Verbindung warten
''eingabe : -
''ausgabe : -
''busprotokoll : [079][put.handleidx][sub_putword.timeout][get.connected]
''busprotokoll : [075][put.handleidx][sub_putword.timeout][get.connected]
'' : handleidx - lfd. Nr. der zu testenden Verbindung
'' : timeout - Timeout in Millisekunden
'' : connected - True, if connected
@ -1111,38 +1097,19 @@ PUB lan_close(handleidx)
''funktion : TCP-Verbindung (ein- oder ausgehend) schließen
''eingabe : -
''ausgabe : -
''busprotokoll : [080][put.handleidx]
''busprotokoll : [076][put.handleidx]
'' : handleidx - lfd. Nr. der zu schließenden Verbindung
bus_putchar1(gc#a_lanClose)
bus_putchar1(handleidx)
PUB lan_rxflush
PUB lan_rxcheck(handleidx): rxbyte
''funktionsgruppe : lan
''funktion : ASCII-Zeichen lesen, wenn vorhanden
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) empfangen wird
'' : (vor allem nicht, wenn -1 und -3 enthalten sein können)
''eingabe : -
''ausgabe : -
''busprotokoll : [082][put.handleidx][get.rxbyte]
'' : handleidx - lfd. Nr. der Verbindung
'' : rxbyte - empfangenes Zeichen (0 - 127) oder
'' : sock#RETBUFFEREMPTY (-1) wenn Puffer leer
'' : sock#ERRSOCKETCLOSED (-3) wenn keine Verbindung mehr
bus_putchar1(gc#a_lanRXCheck)
bus_putchar1(handleidx)
rxbyte := bus_getchar1
rxbyte := ~rxbyte
PUB lan_rxtime(handleidx, timeout): rxbyte
''funktionsgruppe : lan
''funktion : angegebene Zeit auf ASCII-Zeichen warten
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) empfangen wird
''eingabe : -
''ausgabe : -
''busprotokoll : [083][sub_putlong.handleidx][sub_putword.timeout][get.rxbyte]
''busprotokoll : [077][sub_putlong.handleidx][sub_putword.timeout][get.rxbyte]
'' : handleidx - lfd. Nr. der Verbindung
'' : timeout - Timeout in Millisekunden
'' : rxbyte - empfangenes Zeichen (0 - 127) oder
@ -1154,14 +1121,12 @@ PUB lan_rxtime(handleidx, timeout): rxbyte
rxbyte := bus_getchar1
rxbyte := ~rxbyte
PUB lan_rxbyte
PUB lan_rxdatatime
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<len>][get.error]
''busprotokoll : [078][put.handleidx][sub_putlong.len][get.byte1][get.byte<len>][get.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : byte1 ... byte<len> - zu empfangende Bytes
'' : len - Anzahl zu empfangende Bytes
@ -1180,31 +1145,12 @@ PUB lan_rxdata(handleidx, filename, len): error | fnr
error := bus_getchar1
error := ~error
PUB lan_txflush
PUB lan_txcheck(handleidx, txbyte): error
''funktionsgruppe : lan
''funktion : bei bestehender Verbindung ein ASCII-Zeichen zu senden
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) gesendet wird
'' : (vor allem nicht, wenn -1 enthalten sein kann)
''eingabe : -
''ausgabe : -
''busprotokoll : [088][put.handleidx][put.tybyte][get.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : txbyte - zu sendendes Zeichen
'' : error - ungleich Null bei Fehler
bus_putchar1(gc#a_lanTXCheck)
bus_putchar1(handleidx)
bus_putchar1(txbyte)
error := bus_getchar1
PUB lan_tx
PUB lan_txdata(handleidx, ptr, len): error
''funktionsgruppe : lan
''funktion : bei bestehender Verbindung die angegebene Datenmenge senden
''eingabe : -
''ausgabe : -
''busprotokoll : [090][put.handleidx][sub_putlong.len][put.byte1][put.byte<len>][get.error]
''busprotokoll : [079][put.handleidx][sub_putlong.len][put.byte1][put.byte<len>][get.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : byte1 ... byte<len> - zu sendende Bytes
'' : len - Anzahl zu sendender Bytes

View File

@ -1,7 +1,7 @@
{{
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Autor: Ingo Kripahle & Jörg Deckert
│ Copyright (c) 2010 Ingo Kripahle, 2013 Jörg Deckert
│ Autor: Ingo Kripahle & Jörg Deckert │
│ Copyright (c) 2010 Ingo Kripahle, 2013 Jörg Deckert │
│ See end of file for terms of use. │
│ Die Nutzungsbedingungen befinden sich am Ende der Datei │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
@ -50,7 +50,9 @@ Funktion : Diese Codeversion basiert auf admflash.spin und wird um einen
- Wartefunktionen
LAN-Funktionen:
-
- Ethernet-Port mit daten aus NVRAM initialisieren
- ein- und ausgehende Verbindungen öffnen
- Daten übertragen
Komponenten : FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
RTCEngine 11/22/2009 Kwabena W. Agyeman MIT Lizenz
@ -58,9 +60,9 @@ Komponenten : FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
COG's : MANAGMENT 1 COG
FAT/RTC 1 COG
NET 2 COGs
NET 1 COG
-------------------
4 COGs
3 COGs
Logbuch :
@ -115,6 +117,7 @@ Logbuch :
03-12-2010-stepha - RTC Datums- und Zeit Funktionen
04-12-2010-stepha - NVRAM Funktionen
17-04-2013-dr235 - konstanten für administra-funktionen komplett ausgelagert
22-12-2013-joergd - LAN Funktionen
Kommandoliste :
@ -291,21 +294,10 @@ PUB main | cmd,err 'chip: kommandointerpret
gc#a_lanStop:lan_stop 'Stop Network
gc#a_lanConnect: lan_connect 'ausgehende TCP-Verbindung öffnen
gc#a_lanListen: lan_listen 'auf eingehende TCP-Verbindung lauschen
gc#a_lanReListen: lan_relisten 'wieder auf eingehende TCP-Verbindung lauschen
gc#a_lanIsConnected: lan_isconnected 'Prüfen, ob verbunden
gc#a_lanRXCount: lan_rxcount 'Anzahl Zeichen im Empfangspuffer
gc#a_lanResetBuffers: lan_resetbuffers 'Puffer zurücksetzen
gc#a_lanWaitConnTimeout: lan_waitconntimeout 'bestimmte Zeit auf Verbindung warten
gc#a_lanClose: lan_close 'TCP-Verbindung schließen
gc#a_lanRXFlush: lan_rxflush 'Empfangspuffer leeren
gc#a_lanRXCheck: lan_rxcheck 'warten auf Byte aus Empfangspuffer
gc#a_lanRXTime: lan_rxtime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
gc#a_lanRXByte: lan_rxbyte 'Byte aus Empfangspuffer lesen
gc#a_lanRXDataTime: lan_rxdatatime 'bestimmte Zeit auf daten aus Empfangspuffer warten
gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen
gc#a_lanTXFlush: lan_txflush 'Sendepuffer leeren
gc#a_lanTXCheck: lan_txcheck 'Verbindung prüfen und Byte senden
gc#a_lanTX: lan_tx 'Byte senden
gc#a_lanTXData: lan_txdata 'Daten senden
' ---------------------------------------------- CHIP-MANAGMENT
@ -1202,7 +1194,7 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
quit
i++
ifnot (handle := sock.connect(ipaddr, remoteport, @bufrx[i*rxlen], rxlen, @buftx[i*txlen], 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
@ -1210,40 +1202,38 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
else
bus_putchar($FF)
PRI lan_listen
PRI lan_relisten
PRI lan_isconnected | handleidx
PRI lan_listen | port, handle, handleidx, i
''funktionsgruppe : lan
''funktion : Abfrage, ob Socket verbunden
''funktion : Port für eingehende TCP-Verbindung öffnen
''eingabe : -
''ausgabe : -
''busprotokoll : [076][get.handleidx][put.connected]
'' : handleidx - lfd. Nr. der zu testenden Verbindung
'' : connected - True, if connected
''busprotokoll : [074][sub_getword.port][put.handleidx]
'' : port - zu öffnende Portnummer
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
handleidx := bus_getchar
port := sub_getword
bus_putchar(sock.isConnected(sockhandle[handleidx]))
'freien Pufferabschnitt suchen
i := 0
repeat sock#sNumSockets
if bufidx[i] == $FF '0xFF: nicht zugewiesen
quit
i++
PRI lan_rxcount
PRI lan_resetbuffers | handleidx
''funktionsgruppe : lan
''funktion : Sende- und Empfangspuffer zurücksetzen
''eingabe : -
''ausgabe : -
''busprotokoll : [078][sub_getlong.handle]
'' : handleidx - lfd. Nr. der Verbindung
handleidx := bus_getchar
sock.resetBuffers(sockhandle[handleidx])
ifnot (handle := sock.listen(port, @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
bus_putchar(handleidx) 'handleidx senden
else
bus_putchar($FF)
PRI lan_waitconntimeout | handleidx, timeout, t, connected
''funktionsgruppe : lan
''funktion : bestimmte Zeit auf Verbindung warten
''eingabe : -
''ausgabe : -
''busprotokoll : [079][get.handleidx][sub_getword.timeout][put.connected]
''busprotokoll : [075][get.handleidx][sub_getword.timeout][put.connected]
'' : handleidx - lfd. Nr. der zu testenden Verbindung
'' : timeout - Timeout in Millisekunden
'' : connected - True, if connected
@ -1261,7 +1251,7 @@ PRI lan_close | handleidx, i
''funktion : TCP-Verbindung (ein- oder ausgehend) schließen
''eingabe : -
''ausgabe : -
''busprotokoll : [080][get.handleidx]
''busprotokoll : [076][get.handleidx]
'' : handleidx - lfd. Nr. der zu schließenden Verbindung
handleidx := bus_getchar
@ -1276,35 +1266,13 @@ PRI lan_close | handleidx, i
quit
PRI lan_rxflush
PRI lan_rxcheck | handleidx, rxbyte
''funktionsgruppe : lan
''funktion : ASCII-Zeichen lesen, wenn vorhanden
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) empfangen wird
'' : (vor allem nicht, wenn -1 und -3 enthalten sein können)
''eingabe : -
''ausgabe : -
''busprotokoll : [082][get.handleidx][put.rxbyte]
'' : handleidx - lfd. Nr. der Verbindung
'' : rxbyte - empfangenes Zeichen (0 - 127) oder
'' : sock#RETBUFFEREMPTY (-1) wenn Puffer leer
'' : sock#ERRSOCKETCLOSED (-3) wenn keine Verbindung mehr
handleidx := bus_getchar
rxbyte := sock.readByteNonBlocking(sockhandle[handleidx])
if (not sock.isConnected(sockhandle[handleidx])) and (rxbyte == -1)
rxbyte := sock#ERRSOCKETCLOSED
bus_putchar(rxbyte)
PRI lan_rxtime | handleidx, timeout, t, rxbyte
''funktionsgruppe : lan
''funktion : angegebene Zeit auf ASCII-Zeichen warten
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) empfangen wird
''eingabe : -
''ausgabe : -
''busprotokoll : [083][get.handleidx][sub_getword.timeout][put.rxbyte]
''busprotokoll : [077][get.handleidx][sub_getword.timeout][put.rxbyte]
'' : handleidx - lfd. Nr. der Verbindung
'' : timeout - Timeout in Millisekunden
'' : rxbyte - empfangenes Zeichen (0 - 127) oder
@ -1318,14 +1286,12 @@ PRI lan_rxtime | handleidx, timeout, t, rxbyte
bus_putchar(rxbyte)
PRI lan_rxbyte
PRI lan_rxdatatime
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<len>][put.error]
''busprotokoll : [078][get.handleidx][sub_getlong.len][put.byte1][put.byte<len>][put.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : len - Anzahl zu empfangender Bytes
'' : error - ungleich Null bei Fehler
@ -1344,38 +1310,12 @@ PRI lan_rxdata | handleidx, len, rxbyte, error
bus_putchar(error)
PRI lan_txflush
PRI lan_txcheck | handleidx, txbyte
''funktionsgruppe : lan
''funktion : bei bestehender Verbindung ein ASCII-Zeichen zu senden
'' : nicht verwenden, wenn anderes als ASCII (0 - 127) gesendet wird
'' : (vor allem nicht, wenn -1 enthalten sein kann)
''eingabe : -
''ausgabe : -
''busprotokoll : [088][get.handleidx][get.tybyte][put.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : txbyte - zu sendendes Zeichen
'' : error - ungleich Null bei Fehler
handleidx := bus_getchar
txbyte := bus_getchar
ifnot sock.isConnected(sockhandle[handleidx])
bus_putchar(sock#ERRSOCKETCLOSED)
if (sock.writeByteNonBlocking(sockhandle[handleidx], txbyte) == txbyte)
bus_putchar(0)
else
bus_putchar(sock#RETBUFFERFULL)
PRI lan_tx
PRI lan_txdata | handleidx, len, txbyte, error
''funktionsgruppe : lan
''funktion : bei bestehender Verbindung die angegebene Datenmenge senden
''eingabe : -
''ausgabe : -
''busprotokoll : [090][get.handleidx][sub_getlong.len][get.byte1][get.byte<len>][put.error]
''busprotokoll : [079][get.handleidx][sub_getlong.len][get.byte1][get.byte<len>][put.error]
'' : handleidx - lfd. Nr. der Verbindung
'' : len - Anzahl zu sendender Bytes
'' : error - ungleich Null bei Fehler

View File

@ -1,7 +1,7 @@
{{
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Autor: Jörg Deckert │
│ Copyright (c) 2013 Jörg Deckert │
│ Autor: Jörg Deckert
│ Copyright (c) 2013 Jörg Deckert
│ See end of file for terms of use. │
│ Die Nutzungsbedingungen befinden sich am Ende der Datei │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
@ -19,7 +19,7 @@ Komponenten : -
COG's : -
Logbuch :
11.12.2013-joergd - erste Version
22.12.2013-joergd - erste Version
Kommandoliste :
@ -44,6 +44,7 @@ VAR
long ip_addr
byte parastr[64]
byte remdir[64]
byte filename[64]
byte strTemp[128]
byte addrset
@ -53,6 +54,7 @@ VAR
PUB main
ip_addr := 0
remdir[0] := 0
filename[0] := 0
ios.start 'ios initialisieren
@ -64,16 +66,17 @@ PUB main
"?": ios.print(@help)
"s": if ios.paranext(@parastr)
setaddr(@parastr)
"d": if ios.paranext(@parastr)
download(@parastr)
"v": ios.paranext(@remdir)
"d": ios.paranext(@filename)
other: ios.print(@help)
ifnot ftpconnect
ifnot ftplogin(string("anonymous"),string("password"))
ifnot ftpcwd(string("system"))
ifnot byte[filename][0] == 0
if ftppasv
ftpretr
ifnot byte[@remdir][0] == 0
ftpcwd
ifnot byte[@filename][0] == 0
if ftppasv
ftpretr
ftpclose
@ -88,14 +91,13 @@ PRI ftpconnect
ios.print(string("Starte LAN..."))
ios.printnl
ios.lanstart
delay_ms(1000) 'nach ios.lanstart dauert es, bis der Stack funktioniert
delay_ms(800) 'nach ios.lanstart dauert es, bis der Stack funktioniert
ios.print(string("Verbinde mit FTP-Server..."))
ios.printnl
if (handleidx_control := ios.lan_connect(ip_addr, 21)) == $FF
ios.print(string("Kein Socket frei..."))
ios.printnl
return(-1)
'' ios.lan_resetbuffers(handleidx_control)
ifnot (ios.lan_waitconntimeout(handleidx_control, 2000))
ios.print(string("Verbindung mit FTP-Server konnte nicht aufgebaut werden."))
ios.printnl
@ -117,7 +119,10 @@ PRI ftpclose
ios.lan_close(handleidx_data)
handleidx_data := 0
PRI ftplogin(username, password)
PRI ftplogin(username, password) | pwreq, respOK
pwreq := FALSE
respOK := FALSE
ifnot strsize(username)
username := string("anonymous")
@ -125,17 +130,43 @@ PRI ftplogin(username, password)
ios.print(string("Fehler beim Senden des Usernamens"))
ios.printnl
return(-1)
repeat until readLine == -1
ios.print(string(" < "))
ios.print(@strTemp)
ios.printnl
strTemp[4] := 0
if strcomp(@strTemp, string("230 "))
respOk := TRUE
ios.print(string("Antwort korrekt."))
ios.printnl
elseif strcomp(@strTemp, string("331 "))
pwreq := TRUE
respOk := TRUE
ios.print(string("Antwort korrekt."))
ios.printnl
ifnot respOK
ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten."))
ios.printnl
return(-1)
ifnot pwreq
return(0)
if sendStr(string("PASS ")) || sendStr(password) || sendStr(string(13,10))
ios.print(string("Fehler beim Senden des Passworts"))
ios.printnl
return(-1)
ifnot getResponse(string("230 "))
ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten."))
ios.printnl
return(-1)
return(0)
PRI ftpcwd(directory)
PRI ftpcwd
ifnot strsize(directory)
directory := string("/")
if sendStr(string("CWD ")) || sendStr(directory) || sendStr(string(13,10))
if sendStr(string("CWD ")) || sendStr(@remdir) || sendStr(string(13,10))
ios.print(string("Fehler beim Senden des Verzeichnisses"))
ios.printnl
return(-1)
@ -194,7 +225,7 @@ PRI ftppasv : port | i, k, port256, port1
PRI ftpretr | len
if sendStr(string("SIZE ")) || sendStr(filename) || sendStr(string(13,10))
if sendStr(string("SIZE ")) || sendStr(@filename) || sendStr(string(13,10))
ios.print(string("Fehler beim Senden des SIZE-Kommandos"))
ios.printnl
return(-1)
@ -214,7 +245,7 @@ PRI ftpretr | len
ios.printnl
return(-1)
if sendStr(string("RETR ")) || sendStr(filename) || sendStr(string(13,10))
if sendStr(string("RETR ")) || sendStr(@filename) || sendStr(string(13,10))
ios.print(string("Fehler beim Senden des Filenamens"))
return -1
ifnot getResponse(string("150 "))
@ -222,7 +253,7 @@ PRI ftpretr | len
ios.printnl
return(-1)
if ios.lan_rxdata(handleidx_data, filename, len)
if ios.lan_rxdata(handleidx_data, @filename, len)
ios.print(string("Fehler beim Empfang der Datei."))
ios.printnl
return(-1)
@ -232,13 +263,6 @@ PRI ftpretr | len
ios.printnl
return(-1)
PRI download (parameter) | i 'filename kopieren
repeat strsize(parameter)
byte[filename][i] := byte[parameter][i]
i++
byte[filename][i] := 0
PRI setaddr (ipaddr) | pos, count 'IP-Adresse in Variable schreiben
count := 3
@ -294,9 +318,10 @@ PRI delay_ms(Duration)
DAT 'sys: helptext
help byte "/? : Hilfe",13
byte "/s <a.b.c.d> : Server-Adresse",13
byte "/d <filename>: Download <filename>",13
help byte "/? : Hilfe",13
byte "/s <a.b.c.d> : Server-Adresse",13
byte "/v <verzeichnis>: in entferntes Verzeichnis wechseln",13
byte "/d <filename> : Download <filename>",13
byte 0
DAT 'lizenz