I sent this message before, but since I have not seen it
I have unsubscribed and resubscribed under a new account, and am sending it 
again!

Here's a script I cobbled together yesterday so that I can
experiment with a web server behind an ADSL modem with NAT.

Since it's been a year since I last looked at Rebol, I've
forgotten the niceties of this language and I would appreciate
suggestions on how to improve it.  I would also like to know how
to trap the break signal so that I can update the web page status
before quitting.

Run from command line as

    rebol -s dynamicip.r

REBOL [
    Title: "Maintain webserver on dynamic IP address allocation behind ADSL 
modem using NAT"
    File:  %dynamicip.r
    Date:  20-Nov-1999
    Author: "Graham Chiu"
    Purpose: {

        Maintains a web page which redirects users to a dynamic IP address 
or a static web page.
        Since we are behind NAT, we don't know what our IP address is, and 
we have to go to an external
        website that can tell us this.  A simple PHP3 or SSI script can do this.

        We are assuming here that this address will be written on that page 
enclosed by a couple of
        tags such as

        <IPAddress>1234.5678.9012.1234</IPAddress>

        so that our script can parse it out.  We take this address and write it via 
ftp to our own
        static web page which can then direct users to our dynamic web site.

        This should also work for running a web site on a dial up line - though in 
that case, you shouldn't
        need to use an external utility to determine what your IP address is.

        Sample SSI script - http://www.compkarori.com/oracle.shtml
        <html><body>
        <IPAddress><!--#echo var="REMOTE_ADDR" --></IPAddress>
        </body></html>
    }

]

notOften: 00:05:00
nowFrequently: 00:00:30
awhile: notOften

defaultIP: http://www.somewhere.com
currentIP: http://www.somewhere.com
newIP: defaultIP
oracle: http://www.compkarori.com/oracle.shtml ; this page should actually 
work

statusPage: ftp://userid:[EMAIL PROTECTED]/redirect.html

defaultText: join join "<html><body>My current web address is <a href=" 
defaultIP ">Static</a> </body></html>"
dynamicText-part1: "<html><body>My current address is <a href=http://"
dynamicText-part2: ">Dynamic</a></body><p></html>"

statusText: defaultText

ReadingIP: [
    page: read Oracle
    parse page [ thru <IPAddress> copy newIP to </IPAddress> ]
]

UpdateStatus: [
    write statusPage statusText
]

ResetToOffline: [
     currentIP: defaultIP    statusText: defaultText    awhile: 
nowFrequently
]

SetToOnline: [
     currentIP: newIP
     statusText: join join dynamicText-part1 newIP dynamicText-part2
]

while [ true ] [
    either error? try ReadingIP [
        print join "Unable to determine current IP address - resetting to " 
defaultIP
        ResetToOffline
        either error? try UpdateStatus [
            print join "Unable to update status page at " now
        ][
            print join join join "Updated status page with " defaultIP " at 
" now
        ]
    ][
        ; read the IP address okay
        awhile: notoften
        either newIP == currentIP [
            print join "No change as of " now
        ][
            print join "IP address changed and is now " newIP
            SetToOnline
            either error? try updateStatus [
                print join "Unable to update status page at " now
                ResetToOffline
            ][
                print join join join "Updated status page with new IP address of " 
currentIP " at " now
            ]
        ]
    ]
    wait awhile
]

______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com

Reply via email to