/* dialnet.rexx */ /* */ /* Version 1.0, 11 December 1993, by P.J. Rovero */ /* 1.2, 19 December 1993 */ /* 1.3, 30 December 1993, by K. Raquel Sanborn (raquels@uhunix) */ /* 1.4, 3 January 1994, Fix reboot Amiga without lose of CSLIP */ /* 1.5, 5 January 1994, Fix mounting of APIPE: */ /* 1.6, 6 January 1994, Add BREAK C support and "PROTECT +S" */ /* 1.7, 6 January 1994, Add FAILTAT 21 for mount >NIL: APIPE: */ /* 2.0, 20 December 1994, Redesign by Wes Tatters */ /* for AmiTCP 4.0 */ /* Now uses parameter passing instead of */ /* script building. */ /* Calls dialnet.connect to launch AmiTCP */ /* 2.1, 1 March 1995, Configured for AUSNET @ world.net */ /* This service needs Login: before Slip: */ /* 2.2, 30 October 1995, Configured for more phone numbers by */ /* Peta */ /* */ /* An ARexx script that will dial a terminal server, connect, determine */ /* the dynamically assigned IP address, and start the proper components */ /* of AmiTCP 4.x. The script uses rexxserdev.library v5.x by Joseph M. */ /* Stivaletta. */ /* */ /* Inspired by Dave Bolen's REXX/2 SLIPUP.CMD for IBM OS/2 TCPIP 1.2.1 */ /* */ /* and AmiTCP_dialup10 by K. Raquel Sanborn */ /* */ /* ---------------------------------------------------------------------- */ /* Define general strings and other initialization stuff */ say 'Setting Control Variables...' cr = '0d'x crlf = '0d0a'x lf = '0a'x say 'Setting User Variables...' dtimeout = 500 /* Dial time out in Seconds */ ctimeout = 500 /* Connect time out in Secs */ /************************ SITE INFORMATION ****************************/ /* These variables should be altered to reflect your local connection */ slip_ip = '0.0.0.0' /* Assigned at Login */ host_name = 'ms.mff.cuni.cz' /* ??? Ausnet Domain Name */ host_ip = '194.50.16.200' /* Ausnet - World.net */ dialstr = 'ATDP 530305'||cr /* Put your Telephone Number */ logprompt = 'sername:' /* Put your Login Prompt here */ passprompt = 'assword:' /* Put your Password Prompt here */ slipprompt = '>' /* Put your Server Prompt here */ slip_cmd = 'slip /compressed default'||cr /* Slip start command goes here */ iptype = 'cslip0' /* slip0 for SLIP sites */ /* cslip0 for CSLIP sites */ /************************ USER INFORMATION *****************************/ /* */ /* AUSNET USERS ONLY NEED TO SET THESE LINES */ amiganame = 'peta' /* put your Amiga user name here */ username = 'pmit2218'||cr /* Ausnet user name here - same as amigname*/ passwd = 'my password :-)'||cr /* Put Ausnet passwd here */ /* */ /**************************************************************************/ say 'Setting Modem Variables...' at_cmd = 'AT'||cr response = 'OK' modeminit = 'ATx3m1&d0b7s10=250'||cr modemescape = '+++' connectstr = 'CONNECT' busystr = 'BUSY' nocarrierstr = 'NO CARRIER' nodialtonestr = 'NO DIALTONE' /**************************************************************************/ /* Start the required libraries */ say 'Opening libraries...' check = addlib('rexxsupport.library', 0, -30, 0) if (check == 0) then say 'rexxsupport library did not open...' check = addlib('rexxserdev.library', 0, -30, 0) if (check == 0) then say 'rexxserdev did not open...' /* Open the serial device and talk to the modem */ say 'Setting up serial device...' serhandle = SerOpen('serial.device', 0) check = SerClear(serhandle) check = SerSetParms( serhandle, 19200, 8, N, 1, 0 ) /* Clean up on "BREAK C" */ buffer = allocmem( 4096 ) junk = c2d( buffer ) signal on break_c /* Dial & wait for a connection and the modem status string */ dtime = 0 check = 0 do forever if (check == 0) then do /* Dialing numbers choice */ say 'Dialing MFF UK Terminal Server' say ' 1.) 530305 slow (14.4)' say ' 2.) 530366 slow (14.4)' say ' 3.) 532854 fast (28.8)' say ' 4.) 539991 fast (28.8)' say 'otherwise 530305 fast (14.4)' say 'Enter the number of your choice :' pull cislo select /* Assign of number and init string for each choice*/ when (cislo == 1) then do modeminit = 'ATx3m1&d0b5s10=250&c0'||cr dialstr = 'ATDP ,530305'||cr end when (cislo == 2) then do modeminit = 'ATx3m1&d0b5s10=250'||cr dialstr = 'ATDP ,530366'||cr end when (cislo == 3) then do modeminit = 'ATx3m1&d0b5s10=250'||cr dialstr = 'ATDP ,532854'||cr end when (cislo == 4) then do modeminit = 'ATx3m1&d0b5s10=250'||cr dialstr = 'ATDP ,539991'||cr end otherwise do modeminit = 'ATx3m1&d0b1s10=250'||cr dialstr = 'ATDP ,530305'||cr end end /* Initialize Modem */ say 'Initializing Modem' result = SerWrite( serhandle, '+++', length( '+++' ) ) check = delay(200) result = SerWrite( serhandle, modeminit, length( modeminit ) ) say 'Waiting for '||response call wait_str( response ) /* Dialing number */ say 'Dialing the terminal server... ' result = SerWrite( serhandle, dialstr, length( dialstr)) check = 1 totalstr = '' end status = SerQuery( serhandle ) parse upper var status valid bytes_read status_bits . rcvdstr = SerRead( serhandle, junk, bytes_read ) totalstr = totalstr||rcvdstr dtime = dtime + 1 if ( dtime >= dtimeout ) then do say Dialer timed out !!! result = break_c() end say "Dialing: "||totalstr test = pos(connectstr, totalstr) if (test ~= 0) then leave test = pos(busystr, totalstr) if (test ~= 0) then do result = delay( 500 ) check = 0 end test = pos(nocarrierstr, totalstr) if (test ~= 0) then exit 20 test = pos(nodialtonestr, totalstr) if (test ~= 0) then exit 20 result = delay(100) end totalstr = '' say 'Modem has connected to the terminal server...' check = delay(50) check = SerFlush( serhandle, 'R') check = delay(50) /* send CR to wake up terminal server */ say 'Sent CR to server...' check = SerWrite( serhandle, cr, length( cr )) say 'Waiting for CSLIP Server... ' check = 0 online = 0 totalstr = '' ctime = 0 do forever status = SerQuery( serhandle ) parse upper var status valid bytes_read status_bits . rcvdstr = SerRead( serhandle, junk, bytes_read ) totalstr = totalstr||rcvdstr say totalstr ctime = ctime + 1 if ( ctime >= ctimeout ) then do say Dialer could not negotiate connection !!! result = break_c() end test = pos( 'No response', totalstr ) if ( test ~= 0 ) then do say 'Connection failed ...' result = break_c() end test = pos( logprompt, totalstr ) if ( test ~= 0 ) then do ctime = 0 totalstr = '' online = online + 1 say 'Received user prompt...' check = SerWrite( serhandle, username, length( username )) check = SerRead( serhandle, junk, length(username)) say 'Sent Username, now waiting for password prompt...' end test = pos( passprompt, totalstr ) if ( test ~= 0 ) then do ctime = 0 totalstr = '' online = online + 2 say 'Received password prompt...' check = SerWrite( serhandle, passwd, length( passwd )) say 'Sent password, now waiting for Terminal...' end test = pos( slipprompt, totalstr ) if ( test ~= 0 ) then do ctime = 0 totalstr = '' online = online + 3 say 'Received Connection prompt sending CSlip Command ...' check = SerWrite( serhandle, slip_cmd, length( slip_cmd ) ) check = SerRead( serhandle, junk, length( slip_cmd ) ) end if (online == 6) then leave result = delay(100) end totalstr = '' say 'Connection completed, now wait for IP addresses...' address command 'wait 2 secs' call wait_str('address') say 'CSLIP address received from Host system...' /* Ok, now we have all the data we need to start Cslip */ /* Close down the serial port but leave the line up (ignore DTR) */ check = SerClose( serhandle ) result = startslip() check = freemem(buffer,4096) exit result /* ------------------------------------------------------------- */ /* Exit point for "Break C" or ^C */ /* ------------------------------------------------------------- */ break_c: say 'Cleaning up before exit...' say 'Initializing Modem' result = SerWrite( serhandle, '+++', length( '+++' ) ) check = delay(200) result = SerWrite( serhandle, modeminit, length( modeminit ) ) check = SerClose( serhandle ) say 'Serial Port closed' check = freemem(buffer,4096) exit /* ------------------------------------------------------------- */ /* procedure startslip */ /* */ /* Start and configure AmiTCP for SLIP */ /* ------------------------------------------------------------- */ startslip: parse var rcvdstr . 'IP address is ' a '.' b '.' c '.' d '.'. slip_ip = a||'.'||b||'.'||c||'.'||d say 'AmiTCP:bin/netdial.connect starting' 'AmiTCP:bin/netdial.connect '||host_name||' '||host_ip||' '||slip_ip||' '||amiganame||' '||iptype return 0 /* ------------------------------------------------------------- */ /* Subroutine wait_str returns when argument string is received */ /* ------------------------------------------------------------- */ wait_str: teststr = arg(1) check = 0 do until (check ~= 0) status = SerQuery( serhandle ) parse upper var status valid bytes_read status_bits . rcvdstr = SerRead( serhandle, junk, bytes_read ) check = pos(teststr,rcvdstr) test = delay(50) end return