diff --git a/system/regnatix/websrv.spin b/system/regnatix/websrv.spin index 51f8bbc..8ef1dc0 100644 --- a/system/regnatix/websrv.spin +++ b/system/regnatix/websrv.spin @@ -41,7 +41,15 @@ CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 -#define __DEBUG +CON 'NVRAM Konstanten -------------------------------------------------------------------------- + +#4, NVRAM_IPADDR +#24, NVRAM_HIVE ' 4 Bytes + +DAT + + strNVRAMFile byte "nvram.sav",0 'contains the 56 bytes of NVRAM, if RTC is not available + VAR @@ -50,6 +58,10 @@ VAR byte reqstr[32] ' request string byte webbuff[128] ' incoming header buffer + byte rtcAvailable + + long hiveid + long cog, random_value PUB main @@ -70,10 +82,12 @@ PUB main ios.lanstart 'LAN-Treiber initialisieren (eigene IP-Adresse usw. setzen) handleidx := $FF -#ifdef __DEBUG - ios.print(@strWaitConnection) -#endif + getcfg + ios.print(@strMsgEnd) + repeat + if ios.keystat > 0 + quit if (handleidx := ios.lan_listen(handleidx,80)) == $FF 'Empfangs-Socket auf Port 80 öffnen ios.print(@strErrorNoSock) quit @@ -110,11 +124,15 @@ PRI webThread | i, j, uri, args sendStr(@ajaxjs) elseif indexOf(@reqstr, string("rand.cgi")) <> -1 ' rand.cgi sendStr(str.trimCharacters(num.ToStr(long[rr_random_ptr], num#DEC))) + elseif indexOf(@reqstr, string("id.cgi")) <> -1 ' id.cgi + sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC))) elseif indexOf(@reqstr, string("img.bin")) <> -1 ' img.bin ios.lan_txdata(handleidx, 0, 32768) else ' default page - sendStr(string("It Works!

Random Number:
")) + sendStr(@strDefPage1) + sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC))) + sendStr(@strDefPage2) return 0 @@ -153,6 +171,109 @@ PRI indexOf(haystack, needle) | i, j return -1 +PRI getcfg 'nvram: IP-Konfiguration anzeigen + + if ios.rtcTest 'RTC chip available? + rtcAvailable := TRUE + else 'use configfile + rtcAvailable := FALSE + ios.sddmset(ios#DM_USER) 'u-marker setzen + ios.sddmact(ios#DM_SYSTEM) 's-marker aktivieren + if ios.sdopen("R",@strNVRAMFile) + ios.print(@strErrorOpen) + ios.sddmact(ios#DM_USER) 'u-marker aktivieren + return + + ios.print(@strAddr) + listaddr(NVRAM_IPADDR) + ios.printnl + + if rtcAvailable + hiveid := ios.getNVSRAM(NVRAM_HIVE) + hiveid += ios.getNVSRAM(NVRAM_HIVE+1) << 8 + hiveid += ios.getNVSRAM(NVRAM_HIVE+2) << 16 + hiveid += ios.getNVSRAM(NVRAM_HIVE+3) << 24 + else + ios.sdseek(NVRAM_HIVE) + hiveid := ios.sdgetc + hiveid += ios.sdgetc << 8 + hiveid += ios.sdgetc << 16 + hiveid += ios.sdgetc << 24 + + ifnot rtcAvailable + ios.sdclose + ios.sddmact(ios#DM_USER) 'u-marker aktivieren + +PRI listaddr (nvidx) | count 'IP-Adresse anzeigen + + ifnot rtcAvailable + ios.sdseek(nvidx) + + repeat count from 0 to 3 + if(count) + ios.print(string(".")) + if rtcAvailable + ios.print(str.trimCharacters(num.ToStr(ios.getNVSRAM(nvidx+count), num#DEC))) + else + ios.print(str.trimCharacters(num.ToStr(ios.sdgetc, num#DEC))) + +DAT ' Locale + +#ifdef __LANG_EN + 'locale: english + + strNoNetwork byte 13,"Administra doesn't provide network functions!",13,"Please load admnet.",13,0 + strWaitConnection byte "Waiting for client connection...",13,0 + strConnected byte "Client connected...",13,0 + strErrorNoSock byte "No free socket.",13,0 + strErrorOpen byte "Can't open configuration file",13,0 + strAddr byte 13,"Webserver startet, please use this URL to connect:",13," http://",0 + strDefPage1 byte "It Works!

Hive-ID: ",0 + strDefPage2 byte "

Random Number:
",0 + strMsgEnd byte 13,13,"Press any key to quit",13,0 + + +#else + 'default locale: german + + strNoNetwork byte 13,"Administra stellt keine Netzwerk-Funktionen zur Verfügung!",13,"Bitte admnet laden.",13,0 + strWaitConnection byte "Warte auf Client-Verbindung...",13,0 + strConnected byte "Client verbunden...",13,0 + strErrorNoSock byte "Kein Socket frei...",13,0 + strErrorOpen byte "Kann Konfigurationsdatei nicht öffnen.",13,0 + strAddr byte 13,"Webserver gestartet, zum Verbinden folgende URL verwenden:",13," http://",0 + strDefPage1 byte "Es funktioniert!

Hive-ID: ",0 + strDefPage2 byte "

Zufallszahl:
",0 + strMsgEnd byte 13,13,"Zum Beenden beliebige Taste drücken",13,0 + +#endif + +ajaxjs byte "var ajaxBusy=false;function ajax(a,b,c){if(ajaxBusy){return}ajaxBusy=true;var d;try{d=new XMLHttpRequest()}catch(e){d=new ActiveXObject('Microsoft.XMLHTTP')}var f=function(){if(d.readyState==4){if(b){document.getElementById(b).innerHTML=d.responseText}ajaxBusy=false;if(c>0){setTimeout('ajax(\''+a+'\',\''+b+'\','+c+')',c)}}};d.open('GET',a+'?'+(new Date()).getTime(),true);d.onreadystatechange=f;d.send(null)}" + byte 0 + +DAT 'lizenz + +{{ + +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ TERMS OF USE: MIT License │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ +│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ +│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ +│is furnished to do so, subject to the following conditions: │ +│ │ +│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ +│ │ +│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ +│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ +│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ +│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +}} + + + DAT {{ ┌───────────────────────────────────────────┬────────────────┬────────────────────────┬───────────────┐ @@ -268,47 +389,3 @@ entry movi ctra,#%00001_111 'set ctra to internal pl _random_value res 1 -DAT -ajaxjs byte "var ajaxBusy=false;function ajax(a,b,c){if(ajaxBusy){return}ajaxBusy=true;var d;try{d=new XMLHttpRequest()}catch(e){d=new ActiveXObject('Microsoft.XMLHTTP')}var f=function(){if(d.readyState==4){if(b){document.getElementById(b).innerHTML=d.responseText}ajaxBusy=false;if(c>0){setTimeout('ajax(\''+a+'\',\''+b+'\','+c+')',c)}}};d.open('GET',a+'?'+(new Date()).getTime(),true);d.onreadystatechange=f;d.send(null)}" - byte 0 - -DAT ' Locale - -#ifdef __LANG_EN - 'locale: english - - strNoNetwork byte 13,"Administra doesn't provide network functions!",13,"Please load admnet.",13,0 - strWaitConnection byte "Waiting for client connection...",13,0 - strConnected byte "Client connected...",13,0 - strErrorNoSock byte "No free socket.",13,0 - -#else - 'default locale: german - - strNoNetwork byte 13,"Administra stellt keine Netzwerk-Funktionen zur Verfügung!",13,"Bitte admnet laden.",13,0 - strWaitConnection byte "Warte auf Client-Verbindung...",13,0 - strConnected byte "Client verbunden...",13,0 - strErrorNoSock byte "Kein Socket frei...",13,0 - -#endif - -DAT 'lizenz - -{{ - -┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ TERMS OF USE: MIT License │ -├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ -│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ -│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ -│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ -│is furnished to do so, subject to the following conditions: │ -│ │ -│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ -│ │ -│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ -│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ -│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ -│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -}}