home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / isdnpm29.zip / tonline.fnc < prev    next >
Text File  |  1998-01-11  |  11KB  |  323 lines

  1. /*--------------------------------------------------------------------------
  2.  
  3.                                   TONLINE.fnc
  4.  
  5.    Version 29.8.1997
  6.      - Die Teilnehmerkennung wird automatisch auf 12 Zeichen aufgefuellt;
  7.      - Die Telekom hat in der Maske den String 'Teilnehmerkennung' auf
  8.        'T-Online-Kennung' geaendert.
  9.    Version 4.6.1997
  10.      - Beruecksichtigung von Teilnehmer- und Mitbenutzer-Abfrage;
  11.        die Teilnehmer- und Mitbenutzer-Nr wird dazu aus 'isdnuser.cfg'
  12.        uebergeben
  13.      - Korrektur bei fehlerhafter Password-Eingabe
  14.    Version 1.5.1997
  15.      - Umschaltung in den VT100 Modus wird von ISDNPM uebernommen
  16.      - die Zugangskennung und das Passwort werden aus dem
  17.      - 'isdnuser.cfg' uebergeben.
  18.    Version 21.4.1997
  19.      - geaendertes Login mit VT100-Fenster
  20.      - geaenderte VT100-Login-Sequenz (wie cfos)
  21.    Version 30.7.1996
  22.      - mit Korrektur nach Senden der Gateway-Seite
  23.        call WAITFOR "ER-Verb" und WAITFOR "SH"
  24.        nun vor WAITFOR prompt_string beim Warten auf Gebuehren-Info
  25.        (ein Tip von Jupp Chudzinski)
  26.  
  27.   --------------------------------------------------------------------------*/
  28.  
  29. call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
  30. call SysLoadFuncs
  31.  
  32. ARG Channel LocalIp HostIp Netmask DefaultIp user pass teiln mitben .
  33.  
  34. say 'TONLINE - SLIP TONLINE login script (channel' channel')'
  35.  
  36. /*--------------------------------------------------------------------------*/
  37. /*      Initialisierung                                                     */
  38. /*--------------------------------------------------------------------------*/
  39. cr   = '0d'x
  40. crlf = '0d0a'x
  41. remain_buffer  = ''
  42. waitfor_buffer = ''
  43. prompt_string = '[?25h'
  44. GatewayPage = "*190144100#"
  45.  
  46. username    = X2C(SUBSTR(user,1,LENGTH(user)-2))
  47. password    = X2C(SUBSTR(pass,1,LENGTH(pass)-2))
  48. teilnehmer  = X2C(SUBSTR(teiln,1,LENGTH(teiln)-2))
  49. mitbenutzer = X2C(SUBSTR(mitben,1,LENGTH(mitben)-2))
  50.  
  51. /*say 'Anschlusskennung :' username    */
  52. /*say 'Teilnehmernummer :' teilnehmer  */
  53. /*say 'Mitbenutzer      :' mitbenutzer */
  54.  
  55. if teilnehmer=""  then teilnehmer=cr
  56. if mitbenutzer="" then mitbenutzer=cr
  57.  
  58. /*--------------------------------------------------------------------------*/
  59. /*      Start Anmeldung im T-Online                                         */
  60. /*--------------------------------------------------------------------------*/
  61.  
  62. call SHOWSTATUS channel,"Warte auf Abfrage Anschlusskennung"
  63. call waitfor prompt_string,20
  64. if RC = 1 then signal failure
  65. call flush_receive
  66. call SHOWSTATUS channel,"Sende Anschlusskennung"
  67. call send username
  68. call SHOWSTATUS channel,"Warte auf Abfrage Teilnehmer / Mitbenutzer"
  69. call waitfor prompt_string,20
  70. if RC = 1 then signal failure
  71. call flush_receive
  72. if Pos('Teilnehmernummer oder # eingeben',waitfor_buffer)>0 then do
  73.   call SHOWSTATUS channel,"Sende Teilnehmernummer"
  74.   call send left(teilnehmer,12)
  75.   call waitfor prompt_string,20
  76.   if RC = 1 then signal failure
  77.   call flush_receive
  78. end
  79. if Pos('T-Online-Nummer oder # eingeben',waitfor_buffer)>0 then do
  80.   call SHOWSTATUS channel,"Sende Teilnehmernummer"
  81.   call send left(teilnehmer,12)
  82.   call waitfor prompt_string,20
  83.   if RC = 1 then signal failure
  84.   call flush_receive
  85. end
  86. if Pos('Mitbenutzer oder # eingeben',waitfor_buffer)>0 then do
  87.   call SHOWSTATUS channel,"Sende Mitbenutzernummer"
  88.   call send mitbenutzer
  89.   call waitfor prompt_string,20
  90.   if RC = 1 then signal failure
  91.   call flush_receive
  92. end
  93. call SHOWSTATUS channel,"Sende Kennwort"
  94. call send left(password,8)
  95. /*if length(password) < 8 then call send cr  */
  96. call waitfor prompt_string,20
  97. if RC = 1 then signal failure
  98. call flush_receive
  99. if Pos('Falsches Kennwort',waitfor_buffer)>0 then do
  100.   call SHOWSTATUS channel,"Fehlerhafte Anmeldung: Falsches Kennwort!"
  101.   say 'Fehlerhafte Anmeldung: Falsches Kennwort!'
  102.   signal failure
  103. end
  104.  
  105. /*--------------------------------------------------------------------------*/
  106. /*      Wechsel zum Internet-Gateway                                        */
  107. /*--------------------------------------------------------------------------*/
  108. call SHOWSTATUS channel,'Gehe zu Internet-Gateway Seite' gatewayPage
  109. call send gatewayPage
  110. call SHOWSTATUS channel,'Warte auf Gebuehren-Info ER-Verb.'
  111. call waitfor "ER-Verb.",20
  112. if rc=1 then signal failure
  113. call SHOWSTATUS channel,"Warte auf SH"
  114. call waitfor "SH",20
  115. if rc=1 then signal failure
  116. call SHOWSTATUS channel,"Warte auf Eingabe-Sequenz"
  117. call waitfor prompt_string,20
  118. if rc=1 then signal failure
  119.  
  120. call SHOWSTATUS channel,"Sende Gebühren-Bestätigung 19"
  121. call send "19"
  122.  
  123. call SHOWSTATUS channel,"Warte auf STATUS OK"
  124. call waitfor "STATUS OK",100
  125. if rc=1 then signal failure
  126. call SHOWSTATUS channel,"Warte auf CR-LF"
  127. call waitfor crlf
  128. call SHOWSTATUS channel,"Sende Systemkennung LIN"
  129. call send "LIN"||cr
  130.  
  131. call SHOWSTATUS channel,"Warten auf Konfigurations-Informationen..."
  132. do forever
  133.   call waitfor crlf
  134.   parse var waitfor_buffer a " " b "0d0a"x
  135.   if a="." ||"0d0a"x then leave
  136.   select
  137.     when a="YOURIP" then yourip=b
  138.     when a="DESTIP" then destip=b
  139.     when a="NETMASK" then netmask=b
  140.     when a="DNS" then dns=b
  141.     when a="DOMAIN_NAME" then domain_name=b
  142.     otherwise /* ignorieren */
  143.   end
  144. end
  145.  
  146. do forever
  147.   call waitfor crlf
  148.   parse var waitfor_buffer a " " b "0d0a"x
  149.   if a="." ||"0d0a"x then leave
  150. end
  151. call SHOWSTATUS channel,"Sende OK zum Start des IP"
  152. call send "OK"||cr
  153. call SHOWSTATUS channel,"Im Internet erfolgreich angekommen"
  154.  
  155. resolv=Value('ETC',,'OS2ENVIRONMENT')'\resolv'
  156. resolv_sik=resolv'.~'
  157. say "alte Resolv-Datei" resolv "sichern in" resolv_sik
  158. say "neue Resolv-Datei" resolv "erzeugen aus DNS und DOMAIN_NAME"
  159.  
  160. if stream(resolv,'c','query exists')<>'' then do
  161.   if stream(resolv_sik,'c','query exists')<>'' then do
  162.     'cmd /c del' resolv_sik
  163.   end
  164.   'cmd /c ren' resolv FileSpec("name",resolv_sik)
  165.   if rc=0 then do
  166.     call lineout resolv,'domain' domain_name
  167.     call lineout resolv,'nameserver' dns
  168.     call stream resolv,'c','close'
  169.   end
  170.   else do
  171.     say 'Kann keine Sicherungskopie von %etc%\resolv-Datei erzeugen'
  172.   end
  173. end
  174. else do
  175.   call lineout resolv,'domain' domain_name
  176.   call lineout resolv,'nameserver' dns
  177.   call stream resolv,'c','close'
  178. end
  179.  
  180. say "IP-Interface und Routing konfigurieren..."
  181.  
  182. rc = SETLOCALIP(channel,yourip)
  183.  
  184.  
  185. /* Die Zeilen fuer die Interfacekonfiguartion mueseen */
  186. /* entfallen, wenn Sie mit fester IP-Adresse und      */
  187. /* IP-Masquerading arbeiten !                         */
  188. /* setzen Sie dafuer 'config = 0 '                    */
  189.  
  190. config = 1
  191.  
  192. if config = 1 then do
  193.  
  194.   "route -fh"
  195.   "ifconfig" "sl0" yourip destip "netmask" netmask "mtu 296"
  196.   "route add" "default" destip "1"
  197.  
  198. end
  199.  
  200. "ifconfig sl0 mtu 296"
  201.  
  202. /* must not be changed ! */
  203.  
  204. say 'REXX DATAMODE'
  205. rc = ISDNDATAMODE(Channel)
  206. say 'REXX DATAMODE END'
  207.  
  208. call SHOWSTATUS channel,"Internet beendet"
  209.  
  210. if stream(resolv_sik,'c','query exists')<>'' then do
  211.   say "alte RESOLV-Datei" resolv_sik "restaurieren"
  212.   if stream(resolv,'c','query exists')<>'' then do
  213.     'cmd /c del' resolv
  214.   end
  215.   'cmd /c ren' resolv_sik FileSpec("name",resolv)
  216.   if rc<>0 then do
  217.     say 'Kann Sicherungskopie von %etc%\resolv-Datei nicht restaurieren'
  218.   end
  219. end
  220.  
  221. if config = 1 then do
  222.   say "Routing-Einträge löschen..."
  223.   "route delete" destip yourip
  224.   "route delete" "default" destip
  225. end
  226.  
  227. exit 0
  228.  
  229. failure:
  230. say "Mist! Schiefgegangen!"
  231.   call ISDNDISCONNECT Channel
  232.   exit 1
  233.  
  234.  
  235. /*--------------------------------------------------------------------------*/
  236. /*                            send ( sendstring)                            */
  237. /*..........................................................................*/
  238. /*                                                                          */
  239. /* Routine to send a character string off to the modem.                     */
  240. /*                                                                          */
  241. /*--------------------------------------------------------------------------*/
  242.  
  243. send:
  244.  
  245.    parse arg sendstring
  246.    call ISDNWRITE channel , sendstring
  247.  
  248.    return
  249.  
  250.  
  251. /*----------------------------------------------------------------------*/
  252. /*  waitfor( waitforstring , [timeout] )                                */
  253. /*......................................................................*/
  254. /*                                                                      */
  255. /*                                                                      */
  256. /*                                                                      */
  257. /*----------------------------------------------------------------------*/
  258.  
  259. waitfor:
  260.  
  261.     parse arg waitstring , timeout
  262.     if timeout = '' then
  263.         timeout = 20        /* wait 20 sec */
  264.  
  265.     timeout = timeout * 10 ;    /* ISDNREAD returns after 1/10 Sek */
  266.  
  267.     waitfor_buffer = '' ; done = -1 ; curpos = 1
  268.     do while (( done = -1) & (timeout > 0))
  269.         if (remain_buffer \= '') then do
  270.             line = remain_buffer
  271.             remain_buffer = ''
  272.         end
  273.         else do
  274.             line = ISDNREAD(Channel)
  275.             if Substr(line,1,1)<>'00'x then do
  276.               say 'ISDNREAD-Fehler'
  277.               signal failure
  278.             end
  279.             line=Substr(line,2)
  280.         end
  281.         waitfor_buffer = waitfor_buffer || line
  282.         if waitstring>='80'x then
  283.           index=1
  284.         else
  285.           index = pos(waitstring,waitfor_buffer)
  286.         if (index > 0 ) then do
  287.             remain_buffer = substr(waitfor_buffer,index+length(waitstring))
  288.             waitfor_buffer = delstr(waitfor_buffer,index+length(waitstring))
  289.             done = 0
  290.         end
  291.         curpos = length(waitfor_buffer)+1
  292.         timeout = timeout - 1
  293.         call SysSleep 0
  294.     end
  295.     if (timeout = 0 ) then do
  296.         say 'WAITFOR : timed out '
  297.         done = 1
  298.     end
  299.     RC = done
  300. return RC
  301. /*----------------------------------------------------------------------*/
  302. /*  flush_receive()                                                     */
  303. /*......................................................................*/
  304. /*                                                                      */
  305. /*                                                                      */
  306. /*                                                                      */
  307. /*----------------------------------------------------------------------*/
  308. flush_receive:
  309.  
  310.     cx = 20
  311.     line = ''
  312.     do while (line \= '') & (cx > 0 )
  313.         line = ISDNREAD(Channel)
  314.         if Substr(line,1,1)<>'00'x then do
  315.           say 'ISDNREAD-Fehler'
  316.           signal failure
  317.         end
  318.         line=Substr(line,2)
  319.         cx = cx - 1
  320.     end
  321.     return
  322.  
  323.