Annotation of elwix/config/etc/default/mpd5/mpd.script.sample, revision 1.1

1.1     ! misho       1: #################################################################
        !             2: #
        !             3: # $Id: mpd.script.sample,v 1.1.2.1 2010/05/07 21:41:02 misho Exp $
        !             4: #
        !             5: # Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
        !             6: # See ``COPYRIGHT.whistle''
        !             7: #
        !             8: #################################################################
        !             9: 
        !            10: ##
        !            11: ## MPD Modem script variables:
        !            12: ##
        !            13: ##  $DialPrefix                Modem dialing prefix (eg. "DT")
        !            14: ##  $Telephone         Telephone number to dial (not duplicated using &)
        !            15: ##  $ConnectTimeout    Wait-for-connect timeout, in seconds (default 45 secs)
        !            16: ##  $SpeakerOff                Set to "yes" to quiet modem speakers
        !            17: ##  $Serial230K                If "yes", we can support 230K serial port speed
        !            18: ##  $CountryCode       Country code for Winmodem
        !            19: ##  $InitString                External initialization string
        !            20: ##  $LoginScript       If "yes", look for script login
        !            21: ##
        !            22: ## ISDN Terminal Adapter specific variables (all start with "TA_"):
        !            23: ##
        !            24: ##  $TA_Bonding                Bonding on TA: "yes" or "no"
        !            25: ##  $TA_NoDoubleTelno  When $TA_Bonding, don't double the dialed number
        !            26: ##  $TA_56K            Restrict to 56K on TA: "yes" or "no"
        !            27: ##  $TA_VoiceCall      Originate calls using voice mode
        !            28: ##  $TA_AuthChap       Tell TA to use CHAP: "yes" or "no"
        !            29: ##  $TA_Dirno1         TA directory #1
        !            30: ##  $TA_Dirno2         TA directory #2
        !            31: ##  $TA_SPID1          SPID #1
        !            32: ##  $TA_SPID2          SPID #2
        !            33: ##  $TA_SwitchType     One of these values
        !            34: ##                             "NI-1"
        !            35: ##                             "DMS-100"
        !            36: ##                             "5ESS P2P"
        !            37: ##                             "5ESS MP"
        !            38: ##  $TA_NewSwitch      Means the switch type is new, initiate auto-detect
        !            39: ##                     (3Com Impact IQ only)
        !            40: ##
        !            41: ## We set $OptimizeNextTime to "yes" after a successful connection so we
        !            42: ## can avoid verifing configuration when things are working good.
        !            43: ##
        !            44: ## Internal variables:
        !            45: ##
        !            46: ##  $ModemSetupFunc    Routine to set up modem for dialing out
        !            47: ##  $ModemAnsSetupFunc Routine to set up modem for answer mode (if different)
        !            48: ##  $ModemDetectRing   Routine to detect an incoming call for ringback
        !            49: ##  $ModemIsAnalog     If "yes" modem is analog (ie, not terminal adapter)
        !            50: ##
        !            51: 
        !            52: #################################################################
        !            53: #
        !            54: #      MODEM DIALING
        !            55: #
        !            56: #################################################################
        !            57: 
        !            58: DialPeer:
        !            59:        set $CallingID ""
        !            60:        set $CalledID $Telephone
        !            61:        if $Telephone == "00000" goto DialNullModem
        !            62:        set $optimize $OptimizeNextTime
        !            63:        set $OptimizeNextTime "no"
        !            64: 
        !            65:        if $optimize == "yes" goto DialPeer2
        !            66:        call ModemFind
        !            67:        if $ErrorMsg == "" goto DialPeer1
        !            68:        log $ErrorMsg
        !            69:        failure
        !            70: DialPeer1:
        !            71:        set $ModTelephone $Telephone
        !            72:        call ModemIdent
        !            73:        if $ModemDescription != "" goto DialPeer2
        !            74:        log "The modem is not responding."
        !            75:        failure
        !            76: 
        !            77: DialPeer2:
        !            78:        log "Detected $ModemDescription."
        !            79:        call $ModemSetupFunc
        !            80:        log "Dialing server at $Telephone..."
        !            81:        call ModemDial
        !            82:        if $dialResult == "OK" goto DialPeerOK
        !            83:        set $optimize "no"
        !            84:        failure
        !            85: 
        !            86: DialPeerOK:
        !            87:        if $ConnectionSpeed == "" log "Connected at an unknown speed."
        !            88:        if $ConnectionSpeed == "" goto DialPeer3
        !            89:        log "Connected at $ConnectionSpeed."
        !            90: DialPeer3:
        !            91:        if $LoginScript == "yes" call AutoLogin
        !            92:        set $OptimizeNextTime "yes"
        !            93:        success
        !            94: 
        !            95: # Null-modem connection
        !            96: 
        !            97: DialNullModem:
        !            98:        log "Connected via null modem connection."
        !            99:        success
        !           100: 
        !           101: ##
        !           102: ## Dial modem
        !           103: ##
        !           104: ## Variables:
        !           105: ##
        !           106: ##  $DialPrefix                Modem dialing prefix (eg. "DT")
        !           107: ##  $ModTelephone      Telephone number to dial
        !           108: ##  $ConnectTimeout    Wait-for-connect timeout, in seconds (default 45 secs)
        !           109: ##  $noDialToneSubr    (optional) Subroutine to call if NO DIALTONE
        !           110: ##  $dialErrorSubr     (optional) Subroutine to call if ERR
        !           111: ##
        !           112: ## Returns:
        !           113: ##
        !           114: ##  $dialResult                "OK" or "FAIL"
        !           115: ##  $ConnectionSpeed   Connection speed reported by modem (possibly empty)
        !           116: ##
        !           117: 
        !           118: ModemDial:
        !           119:        set $dialResult "FAIL"
        !           120:        set $ConnectionSpeed ""
        !           121:        if $ConnectTimeout == "" set $ConnectTimeout 45
        !           122:        print "AT${DialPrefix}${ModTelephone}\r\n"
        !           123:        match "NO CARRIER" DialAbortNoCar
        !           124:        match "NO DIAL" DialAbortNoDial
        !           125:        match "BUSY" DialAbortBusy
        !           126:        regex "CONNECT *([0-9]*).*$" DialConnect
        !           127:        match "ERR" DialError
        !           128:        wait $ConnectTimeout
        !           129:        log "No response from the modem after dialing."
        !           130:        return
        !           131: DialAbortNoCar:
        !           132:        log "The remote modem did not answer."
        !           133:        return
        !           134: DialAbortNoDial:
        !           135:        if $noDialToneSubr != "" goto $noDialToneSubr
        !           136:        log "No dialtone. Is the modem plugged in?"
        !           137:        return
        !           138: DialError:
        !           139:        if ${ModTelephone} != "" goto DialErrorInit
        !           140:        log "Invalid empty telephone number."
        !           141:        return
        !           142: DialErrorInit:
        !           143:        if $dialErrorSubr != "" goto $dialErrorSubr
        !           144:        log "Invalid dial init string."
        !           145:        return
        !           146: DialAbortBusy:
        !           147:        log "The line was busy."
        !           148:        return
        !           149: DialConnect:
        !           150:        set $ConnectionSpeed $matchedString1
        !           151:        set $dialResult "OK"
        !           152:        return
        !           153: 
        !           154: #################################################################
        !           155: #
        !           156: #      MODEM ANSWERING
        !           157: #
        !           158: #################################################################
        !           159: 
        !           160: ##
        !           161: ## This is an idle script that waits for an incoming call and answers it
        !           162: ##
        !           163: ## Variables:
        !           164: ##
        !           165: ##  $RingTimeout       How long to wait for a RING before giving up
        !           166: ##  $ConnectTimeout    Wait-for-connect timeout, in seconds (default 45 secs)
        !           167: ##
        !           168: 
        !           169: AnswerCall:
        !           170:        set $CallingID ""
        !           171:        set $CalledID ""
        !           172:        set $optimize $OptimizeNextTime
        !           173:        set $OptimizeNextTime "no"
        !           174: 
        !           175: # Skip modem detection if we connected successfully last time
        !           176: 
        !           177:        if $optimize == "yes" goto AnswerCall2
        !           178:        call ModemFind
        !           179:        if $ErrorMsg == "" goto AnswerCall0
        !           180:        log $ErrorMsg
        !           181:        failure
        !           182: AnswerCall0:
        !           183:        call ModemIdent
        !           184:        if $ModemDescription != "" goto AnswerCall1
        !           185:        log "The modem is not responding."
        !           186:        failure
        !           187: AnswerCall1:
        !           188:        log "Detected $ModemDescription."
        !           189: 
        !           190: AnswerCall2:
        !           191:        if $ModemAnsSetupFunc == "" set $ModemAnsSetupFunc $ModemSetupFunc
        !           192:        call $ModemAnsSetupFunc
        !           193:        log "Waiting for ring..."
        !           194:        call ModemAnswer
        !           195:        if $answerReturn == "OK" goto AnswerCallOK
        !           196:        set $IdleResult ""
        !           197:        set $optimize "no"
        !           198:        failure
        !           199: 
        !           200: AnswerCallOK:
        !           201:        log "Connected at $ConnectionSpeed."
        !           202:        set $OptimizeNextTime "yes"
        !           203:        set $IdleResult "answer"
        !           204:        success
        !           205: 
        !           206: #################################################################
        !           207: #
        !           208: #      MODEM RINGBACK
        !           209: #
        !           210: #################################################################
        !           211: 
        !           212: ##
        !           213: ## This is an idle script that implements the ringback feature.
        !           214: ## When we're idle, and we detect an incoming call, then call back
        !           215: ## to bring up the link. For analog modems, we have to wait until
        !           216: ## the ringing stops before dialing back (otherwise we'd answer the
        !           217: ## call, which we don't want to do).
        !           218: ##
        !           219: ## Variables:
        !           220: ##
        !           221: ##  $RingbackTimeout   How long before giving up (reset and try again).
        !           222: ##                     Default: 60 minutes
        !           223: ##  $RingStoppedTime   Max time between consecutive "RING"s (if analog)
        !           224: ##                     Default: 8 seconds
        !           225: ##
        !           226: 
        !           227: Ringback:
        !           228:        set $CallingID ""
        !           229:        set $CalledID ""
        !           230:        if $RingbackTimeout == "" set $RingbackTimeout "3600"
        !           231:        if $RingStoppedTime == "" set $RingStoppedTime "8"
        !           232:        set $ModemDetectRing RingbackWait
        !           233:        call ModemFind
        !           234:        if $ErrorMsg == "" goto Ringback1
        !           235:        log $ErrorMsg
        !           236:        failure
        !           237: Ringback1:
        !           238:        call ModemIdent
        !           239:        if $ModemDescription != "" goto Ringback2
        !           240:        log "The modem is not responding."
        !           241:        failure
        !           242: 
        !           243: Ringback2:
        !           244:        log "Detected $ModemDescription."
        !           245:        goto $ModemDetectRing
        !           246: 
        !           247: # Detect an incoming call by waiting for a "RING" indication
        !           248: # On an analog modem, we have to wait for the ringing to stop
        !           249: 
        !           250: RingbackWait:
        !           251:        match "RING\r\n" RingbackGotRings
        !           252:        log "Remote Dial-Back mode enabled; waiting for incoming call."
        !           253:        wait $RingbackTimeout
        !           254:        failure
        !           255: 
        !           256: # We saw it ring; wait for the ringing to stop (analog modems only).
        !           257: 
        !           258: RingbackGotRings:
        !           259:        log "Incoming call detected..."
        !           260:        if $ModemIsAnalog != "yes" goto RingbackDone
        !           261: RingbackWaitStop:
        !           262:        match "RING\r\n" RingbackWaitStop
        !           263:        wait $RingStoppedTime
        !           264: RingbackDone:
        !           265:        set $IdleResult "ringback"
        !           266:        success
        !           267: 
        !           268: # Strip leading and trailing spaces and log calling party number
        !           269: 
        !           270: RingbackDetectCID:
        !           271:        if $cid match " *(.*) *" nop
        !           272:        set $cid $matchedString1
        !           273:        if $cid == "" goto RingbackDetectNoCID
        !           274:        log "Incoming call detected from $cid..."
        !           275:        success
        !           276: 
        !           277: # We couldn't determine calling party number
        !           278: 
        !           279: RingbackDetectNoCID:
        !           280:        log "Incoming call detected..."
        !           281:        success
        !           282: 
        !           283: #################################################################
        !           284: #
        !           285: #      MODEM IDENTIFICATION
        !           286: #
        !           287: #################################################################
        !           288: 
        !           289: ##
        !           290: ## Identify
        !           291: ##
        !           292: ## This is meant to be called from the top level, to just identify
        !           293: ## what's on the serial port and print out some info about it.
        !           294: ##
        !           295: 
        !           296: Identify:
        !           297:        call ModemFind
        !           298:        if $ErrorMsg == "" goto Identify1
        !           299:        failure
        !           300: Identify1:
        !           301:        call ModemIdent
        !           302:        if $ModemDescription == "" failure
        !           303:        log "ANALOG=$ModemIsAnalog"
        !           304:        log "DESCRIPTION=$ModemDescription"
        !           305:        success
        !           306: 
        !           307: ##
        !           308: ## ModemIdent
        !           309: ##
        !           310: ## This identifies the type of modem and sets these variables accordingly:
        !           311: ##
        !           312: ##     $ModemDescription
        !           313: ##     $ModemSetupFunc
        !           314: ##     $ModemAnsSetupFunc
        !           315: ##     $ModemDetectRing
        !           316: ##     $ModemIsAnalog
        !           317: ##
        !           318: ## If no response seen, this sets $ModemDescription to the empty string.
        !           319: ##
        !           320: 
        !           321: ModemIdent:
        !           322:        set $ModemDescription ""
        !           323:        set $ModemSetupFunc ""
        !           324:        set $ModemAnsSetupFunc ""
        !           325:        set $ModemDetectRing ""
        !           326:        set $ModemIsAnalog "yes"
        !           327:        if $InitString != "" goto ModemIdentCustom
        !           328:        print "ATI8\r\n"
        !           329:        match "BitSURFR PRO\r" ModemIdentBitsurfr
        !           330:        match "BitSURFR PRO EZ" ModemIdentBitsurfrEZ
        !           331:        match "3C882" ModemIdentImpactIQ
        !           332:        match "ERR"
        !           333:        match "OK\r\n"
        !           334:        wait 3
        !           335:        print "ATI3\r\n"
        !           336:        match "Courier" ModemIdentUsr
        !           337:        match "Sportster" ModemIdentUsr
        !           338:        match "3ComImpact IQ" ModemIdentImpactIQ
        !           339:        match "U.S. Robotics 56K" ModemIdentUsr
        !           340:        match "ZOOM V.90" ModemIdentZoom56
        !           341:        match "LT V.90" ModemIdentLucent
        !           342:        match "ERR"
        !           343:        match "OK\r\n"
        !           344:        wait 3
        !           345:        print "ATI4\r\n"
        !           346:        match "AtermIT NEC Corporation" ModemIdentAterm
        !           347:        match "INSMATEV-7 NTT Corporation" ModemIdentAterm
        !           348:        match "MNP Class 10 V.34 Modem" ModemIdentDeskPorte
        !           349:        match "Smart One 56" ModemIdentSmartOne
        !           350:        match "ERR"
        !           351:        match "OK\r\n"
        !           352:        wait 3
        !           353:        print "ATI\r\n"
        !           354:        match "ADTRAN EXPRESS XR" ModemIdentAdtranXRT
        !           355:        match "ERR" ModemIdentGeneric
        !           356:        match "OK\r\n" ModemIdentGeneric
        !           357:        wait 3
        !           358:        print "ATI1\r\n"
        !           359:        match "NTK omni.net" ModemIdentNTK
        !           360:        match "ERR" ModemIdentGeneric
        !           361:        match "OK\r\n" ModemIdentGeneric
        !           362:        wait 3
        !           363:        log "The modem is not responding."
        !           364:        failure
        !           365: 
        !           366: ModemIdentGeneric:
        !           367:        set $ModemDescription "Hayes compatible modem"
        !           368:        set $ModemSetupFunc GenericSetup
        !           369:        return
        !           370: 
        !           371: ModemIdentCustom:
        !           372:        set $ModemDescription "Custom modem"
        !           373:        set $ModemSetupFunc CustomSetup
        !           374:        return
        !           375: 
        !           376: ModemIdentUsr:
        !           377:        set $SportsterHack "no"
        !           378:        if $matchedString == "Sportster" set $SportsterHack "yes"
        !           379:        set $ModemDescription "USR $matchedString modem"
        !           380:        call GetOK
        !           381:        set $ModemSetupFunc UsrSetup
        !           382:        return
        !           383: 
        !           384: ModemIdentBitsurfrEZ:
        !           385:        set $bitsEZ "yes"
        !           386: ModemIdentBitsurfr:
        !           387:        set $ModemDescription "Motorola $matchedString"
        !           388:        call GetOK
        !           389:        set $ModemSetupFunc BitsurfrSetup
        !           390:        set $ModemIsAnalog "no"
        !           391:        set $ModemDetectRing BitsurfrDetectRing
        !           392:        return
        !           393: 
        !           394: ModemIdentImpactIQ:
        !           395:        set $matchedString "3ComImpact IQ"
        !           396:        set $ModemDescription "$matchedString"
        !           397:        call GetOK
        !           398:        set $ModemSetupFunc ImpactIQSetup
        !           399:        set $ModemIsAnalog "no"
        !           400:        set $ModemDetectRing ImpactIQDetectRing
        !           401:        return
        !           402: 
        !           403: ModemIdentAdtranXRT:
        !           404:        set $ModemDescription "AdTran Express XR/XRT"
        !           405:        call GetOK
        !           406:        set $ModemSetupFunc AdtranXRTSetup
        !           407:        set $ModemIsAnalog "no"
        !           408:        return
        !           409: 
        !           410: ModemIdentAterm:
        !           411:        set $ModemDescription "NEC Aterm TA"
        !           412:        call GetOK
        !           413:        set $ModemSetupFunc AtermSetup
        !           414:        set $ModemIsAnalog "no"
        !           415:        return
        !           416: 
        !           417: ModemIdentNTK:
        !           418:        set $ModemDescription "$matchedString"
        !           419:        call GetOK
        !           420:        set $ModemSetupFunc NTKSetup
        !           421:        set $ModemIsAnalog "no"
        !           422:        return
        !           423: 
        !           424: ModemIdentDeskPorte:
        !           425:        set $ModemDescription "$matchedString"
        !           426:        call GetOK
        !           427:        set $ModemSetupFunc DeskPorteSetup
        !           428:        return
        !           429: 
        !           430: ModemIdentZoom56:
        !           431: ModemIdentSmartOne:
        !           432:        set $ModemDescription "$matchedString"
        !           433:        call GetOK
        !           434:        set $ModemSetupFunc Modem56Setup
        !           435:        return
        !           436: 
        !           437: # Support the Lucent Winmodem, Xircom 56k
        !           438: ModemIdentLucent:
        !           439:        set $ModemDescription "$matchedString"
        !           440:        call GetOK
        !           441:        set $ModemSetupFunc ModemLucentSetup
        !           442:        return
        !           443: 
        !           444: #################################################################
        !           445: #
        !           446: #      GENERIC MODEM SETUP
        !           447: #
        !           448: #################################################################
        !           449: 
        !           450: GenericSetup:
        !           451:        set $noDialToneSubr GenericNoDialtone
        !           452:        set $temp "M1"
        !           453:        if $SpeakerOff == "yes" set $temp "M0"
        !           454:        set $modemCmd "&F&C1&D2E0S0=0${temp}"
        !           455:        call ModemCmd2
        !           456:        return
        !           457: 
        !           458: CustomSetup:
        !           459:        set $noDialToneSubr GenericNoDialtone
        !           460:        set $modemCmd "${InitString}"
        !           461:        call ModemCmd2
        !           462:        return
        !           463: 
        !           464: GenericNoDialtone:
        !           465:        log "No dialtone. Is the modem plugged in?"
        !           466:        return
        !           467: 
        !           468: #################################################################
        !           469: #
        !           470: #      USR MODEM SETUP
        !           471: #
        !           472: #################################################################
        !           473: 
        !           474: UsrSetup:
        !           475: # Lower baudrate to 57600 for crappy internal Sportster modem
        !           476:        if $SportsterHack != "yes" goto UsrSetup2
        !           477:        if $modemDevice != "/dev/cuad2" goto UsrSetup2
        !           478:        set $Baudrate 57600
        !           479:        set $modemCmd ""
        !           480:        call ModemCmd2
        !           481: UsrSetup2:
        !           482:        set $noDialToneSubr GenericNoDialtone
        !           483:        set $temp "M1"
        !           484:        if $SpeakerOff == "yes" set $temp "M0"
        !           485:        set $modemCmd "&F1&C1&D2E0S0=0S13.0=1L0S6=5${temp}"
        !           486:        call ModemCmd2
        !           487:        return
        !           488: 
        !           489: #################################################################
        !           490: #
        !           491: #      GENERAL 56K MODEM SETUP
        !           492: #
        !           493: #################################################################
        !           494: 
        !           495: Modem56Setup:
        !           496:        set $noDialToneSubr GenericNoDialtone
        !           497:        set $temp "M1"
        !           498:        if $SpeakerOff == "yes" set $temp "M0"
        !           499:        set $modemCmd "&FL2W2E0${temp}"
        !           500:        call ModemCmd2
        !           501:        return
        !           502: 
        !           503: #################################################################
        !           504: #
        !           505: #      LUCENT WINMODEM AND XIRCOM 56K SETUP
        !           506: #
        !           507: #################################################################
        !           508: 
        !           509: ModemLucentSetup:
        !           510:        set $noDialToneSubr GenericNoDialtone
        !           511:        set $temp "M1"
        !           512:        if $SpeakerOff == "yes" set $temp "M0"
        !           513:        set $tempCountryCode ""
        !           514:        if $CountryCode != "" set $tempCountryCode "+GCI=${CountryCode}"
        !           515:        if $CountryCode != "" log "Use country ${CountryCode}"
        !           516:        set $modemCmd "&FL2W2E0${temp}${tempCountryCode}"
        !           517:        call ModemCmd2
        !           518:        return
        !           519: 
        !           520: #################################################################
        !           521: #
        !           522: #      BITSURFR PRO AND BITSURFR PRO EZ SETUP
        !           523: #
        !           524: #################################################################
        !           525: 
        !           526: BitsurfrSetup:
        !           527:        set $noDialToneSubr BitsurfrNoDialtone
        !           528:        set $factory "1"
        !           529:        if $bitsEZ == "yes" set $factory "0"
        !           530:        set $modemCmd "Z&F${factory}&C1&D2E0W1X2%A2=95S0=0"
        !           531:        call ModemCmd2
        !           532: 
        !           533: # Set to 230K baud if we support it
        !           534: 
        !           535:        if $bitsEZ != "yes" goto BitsurfrSetup1
        !           536:        set $modemCmd "@P2=230400"
        !           537:        set $newBaudrate "230400"
        !           538:        call SetBaudrate
        !           539: 
        !           540: # Check software revision and ISDN settings
        !           541: 
        !           542: BitsurfrSetup1:
        !           543:        if $optimize == "yes" goto BitsurfrSetup2
        !           544:        if $bitsEZ != "yes" call BitsurfrCheckRev
        !           545:        call BitsurfrCheckConfig
        !           546: 
        !           547: # Set the PAP/CHAP, multi-link, and 56K/64K settings, and return
        !           548: 
        !           549: BitsurfrSetup2:
        !           550:        set $authCmd "@M2=P"
        !           551:        if $TA_AuthChap == "yes" set $authCmd "@M2=C"
        !           552:        set $bondCmd "@B0=1"
        !           553:        if $TA_Bonding == "yes" set $bondCmd "@B0=2"
        !           554:        set $bearCmd "%A4=0"
        !           555:        if $TA_56K == "yes" set $bearCmd "%A4=1"
        !           556:        if $TA_VoiceCall == "yes" set $bearCmd "%A4=1"
        !           557:        set $voiceCmd "%A98=D%A96=0"
        !           558:        if $TA_VoiceCall == "yes" set $voiceCmd "%A98=S%A96=1"
        !           559: 
        !           560: # BS PRO EZ changes
        !           561: 
        !           562:        if $bitsEZ == "yes" set $authCmd "${authCmd}@M20=\"\""
        !           563:        set $modemCmd "$authCmd$bondCmd$bearCmd$voiceCmd"
        !           564:        call ModemCmd2
        !           565:        if $TA_NoDoubleTelno == "yes" return
        !           566:        if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}"
        !           567:        return
        !           568: 
        !           569: ##
        !           570: ## What to do when NO DIALTONE
        !           571: ##
        !           572: 
        !           573: BitsurfrNoDialtone:
        !           574:        log "ISDN initialization failed (or BitSURFR restarting). Please verify proper line connection and ISDN settings."
        !           575:        return
        !           576: 
        !           577: ##
        !           578: ## BitsurfrCheckConfig
        !           579: ##
        !           580: ## Verify and adjust ISDN configuration as necessary
        !           581: ##
        !           582: 
        !           583: BitsurfrCheckConfig:
        !           584:        log "Checking the BitSURFR's ISDN configuration..."
        !           585:        set $valueChanged "no"
        !           586: 
        !           587: # Check switch type
        !           588: 
        !           589:        set $checkCmd "!C0"
        !           590:        set $checkValue "000"
        !           591:        set $checkValueNew "0"
        !           592:        if $TA_SwitchType == "DMS-100" set $checkValue "001"
        !           593:        if $TA_SwitchType == "DMS-100" set $checkValueNew "1"
        !           594:        if $TA_SwitchType == "NI-1" set $checkValue "002"
        !           595:        if $TA_SwitchType == "NI-1" set $checkValueNew "2"
        !           596:        set $checkMsg "Reprogramming switch type ($TA_SwitchType)..."
        !           597:        call ModemCheckValue
        !           598: 
        !           599:        set $checkCmd "!C1"
        !           600:        set $checkValue "004"
        !           601:        set $checkValueNew "4"
        !           602:        if $TA_SwitchType == "DMS-100" set $checkValue "003"
        !           603:        if $TA_SwitchType == "DMS-100" set $checkValueNew "3"
        !           604:        if $TA_SwitchType == "5ESS P2P" set $checkValue "000"
        !           605:        if $TA_SwitchType == "5ESS P2P" set $checkValueNew "0"
        !           606:        if $TA_SwitchType == "5ESS MP" set $checkValue "001"
        !           607:        if $TA_SwitchType == "5ESS MP" set $checkValueNew "1"
        !           608:        set $checkMsg "Reprogramming switch software version..."
        !           609:        call ModemCheckValue
        !           610: 
        !           611: # Check directory numbers
        !           612: 
        !           613:        set $checkCmd "*1!N1"
        !           614:        set $checkValue $TA_Dirno1
        !           615:        set $checkValueNew $TA_Dirno1
        !           616:        set $checkMsg "Reprogramming voice line #1 directory number..."
        !           617:        call ModemCheckValue
        !           618: 
        !           619:        set $checkCmd "*2!N1"
        !           620:        set $checkValue $TA_Dirno2
        !           621:        set $checkValueNew $TA_Dirno2
        !           622:        set $checkMsg "Reprogramming voice line #2 directory number..."
        !           623:        call ModemCheckValue
        !           624:        set $checkCmd "!N1"
        !           625:        set $checkMsg "Reprogramming data line directory number..."
        !           626:        call ModemCheckValue
        !           627: 
        !           628: # Check SPIDs
        !           629: 
        !           630:        set $checkCmd "*1!C6"
        !           631:        set $checkValue $TA_SPID1
        !           632:        set $checkValueNew $TA_SPID1
        !           633:        set $checkMsg "Reprogramming voice line #1 SPID..."
        !           634:        call ModemCheckValue
        !           635: 
        !           636:        set $checkCmd "*2!C6"
        !           637:        set $checkValue $TA_SPID2
        !           638:        set $checkValueNew $TA_SPID2
        !           639:        set $checkMsg "Reprogramming voice line #2 SPID..."
        !           640:        call ModemCheckValue
        !           641:        set $checkCmd "!C6"
        !           642:        set $checkMsg "Reprogramming data line SPID..."
        !           643:        call ModemCheckValue
        !           644: 
        !           645: # Restart if necessary
        !           646: 
        !           647:        if $valueChanged == "no" return
        !           648:        log "Restarting BitSURFR Pro with new configuration..."
        !           649:        set $modemCmd ">W"
        !           650:        call ModemCmd2
        !           651:        set $modemCmd ">Z"
        !           652:        call ModemCmd2
        !           653:        failure
        !           654: 
        !           655: ##
        !           656: ## Verify the BitSURFR's software revision. Only do this
        !           657: ## once, the first time we try to dial.
        !           658: ##
        !           659: 
        !           660: BitsurfrCheckRev:
        !           661:        log "Checking the BitSURFR's software revision..."
        !           662:        print "ATI3\r\n"
        !           663:        match "-1A" BitsurfrCheckRevOld
        !           664:        match "-1B" BitsurfrCheckRevOld
        !           665:        match "-1C" BitsurfrCheckRevOld
        !           666:        match "-1D" BitsurfrCheckRevOld
        !           667:        match "-1E" BitsurfrCheckRevOld
        !           668:        match "-1F" BitsurfrCheckRevOld
        !           669:        match "-1G" BitsurfrCheckRevOld
        !           670:        match "-1H" BitsurfrCheckRevOld
        !           671:        match "-1I" BitsurfrCheckRevOld
        !           672:        match "OK\r\n" BitsurfrCheckRevOK
        !           673:        match "ERR"
        !           674:        wait 5
        !           675:        log "The BitSURFR did not properly answer ATI3."
        !           676:        failure
        !           677: BitsurfrCheckRevOK:
        !           678:        return
        !           679: BitsurfrCheckRevOld:
        !           680:        log "The BitSURFR Pro has an old software revision $matchedString. Please upgrade according to the manufacturer's instructions."
        !           681:        call GetOK
        !           682:        failure
        !           683: 
        !           684: # This is how we detect an incoming call with a BitSURFR
        !           685: 
        !           686: BitsurfrDetectRing:
        !           687: # First, we need to be properly configured
        !           688:        call BitsurfrSetup
        !           689: # Enable Caller-ID logging
        !           690:        set $modemCmd "@N0=1*1@N0=1*2@N0=1"
        !           691:        call ModemCmd
        !           692:        if $modemCmdResult != "OK" goto RingbackWait
        !           693: # A "RING" at any time is good enough
        !           694:        match ringset "RING\r\n" RingbackDone
        !           695: # Clear Caller-ID buffers
        !           696:        set $modemCmd "@L0*1@L0*2@L0"
        !           697:        call ModemCmd2
        !           698: # Read each buffer
        !           699:        call BitsurfrDetectReadCID
        !           700:        log "Remote Dial-Back mode enabled; waiting for incoming call."
        !           701: # Now wait indefinitely for one of those buffers to change
        !           702: BitsurfrDetectLoop:
        !           703:        wait 5
        !           704:        set $oldDataCID $dataCID
        !           705:        set $oldVoice1CID $voice1CID
        !           706:        set $oldVoice2CID $voice2CID
        !           707:        call BitsurfrDetectReadCID
        !           708:        if $oldDataCID != $dataCID goto BitsurfrDetectDone
        !           709:        if $oldVoice1CID != $voice1CID goto BitsurfrDetectDone
        !           710:        if $oldVoice2CID != $voice2CID goto BitsurfrDetectDone
        !           711:        goto BitsurfrDetectLoop
        !           712: 
        !           713: # Examine the CID from each port
        !           714: BitsurfrDetectDone:
        !           715:        set $cid $dataCID
        !           716:        call BitsurfrDetectTryCID
        !           717:        set $cid $voice1CID
        !           718:        call BitsurfrDetectTryCID
        !           719:        set $cid $voice2CID
        !           720:        call BitsurfrDetectTryCID
        !           721:        goto RingbackDetectNoCID
        !           722: 
        !           723: # Try to extract the calling party number
        !           724: BitsurfrDetectTryCID:
        !           725: # Strip the log number
        !           726:        if $cid match "[0-9] (.*)" set $cid $matchedString1
        !           727: # Check for various strings
        !           728:        if $cid match "BLOCKED" return
        !           729:        if $cid match "NO NUMBER" return
        !           730:        if $cid match "NO CID SERVICE" return
        !           731:        if $cid match "OUT OF AREA" return
        !           732:        goto RingbackDetectCID
        !           733: 
        !           734: # Read Caller-ID buffers
        !           735: BitsurfrDetectReadCID:
        !           736:        set $modemCmd "@L1"
        !           737:        call ModemQueryStrip
        !           738:        set $dataCID $modemQuery
        !           739:        set $modemCmd "*1@L1"
        !           740:        call ModemQueryStrip
        !           741:        set $voice1CID $modemQuery
        !           742:        set $modemCmd "*2@L1"
        !           743:        call ModemQueryStrip
        !           744:        set $voice2CID $modemQuery
        !           745:        return
        !           746: 
        !           747: #################################################################
        !           748: #
        !           749: #      3COM IMPACT IQ SETUP
        !           750: #
        !           751: #################################################################
        !           752: 
        !           753: ImpactIQSetup:
        !           754:        set $noDialToneSubr ImpactIQNoDialtone
        !           755:        set $modemCmd "Z&F%C2E0"
        !           756:        call ModemCmd2
        !           757: 
        !           758: # Set to 230K baud if we support it
        !           759: 
        !           760:        set $modemCmd "$$B230400"
        !           761:        set $newBaudrate "230400"
        !           762:        call SetBaudrate
        !           763: 
        !           764: # Check ISDN config and link status (XXX should we check revision too?)
        !           765: 
        !           766: ImpactIQSetup1:
        !           767:        if $optimize == "yes" goto IQInitSetup2
        !           768:        call ImpactIQCheckConfig
        !           769:        call ImpactIQCheckLink
        !           770: 
        !           771: # Now set the PAP/CHAP setting and voice/data originate mode setting
        !           772: 
        !           773: IQInitSetup2:
        !           774:        set $authCmd "S84=1"
        !           775:        if $TA_AuthChap == "yes" set $authCmd "S84=0"
        !           776:        set $voiceCmd "S61=0"
        !           777:        if $TA_VoiceCall == "yes" set $voiceCmd "S61=1"
        !           778:        set $modemCmd "$authCmd$voiceCmd"
        !           779:        call ModemCmd2
        !           780:        if $TA_NoDoubleTelno == "yes" return
        !           781:        if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}"
        !           782:        return
        !           783: 
        !           784: ##
        !           785: ## What to do when NO DIALTONE
        !           786: ##
        !           787: 
        !           788: ImpactIQNoDialtone:
        !           789:        log "ISDN config problem (or modem restart). Check your ISDN switch type, directory numbers, and SPID settings."
        !           790:        return
        !           791: 
        !           792: ##
        !           793: ## ImpactIQCheckLink
        !           794: ##
        !           795: ## Check the link status registers
        !           796: ##
        !           797: 
        !           798: ImpactIQCheckLink:
        !           799:        log "Checking the ISDN modem's link status..."
        !           800:        print "ATS59?\r\n"
        !           801:        match "000" IQSyncFail
        !           802:        match "001" IQSyncOK
        !           803:        match "ERR"
        !           804:        match "OK\r\n"
        !           805:        wait 3
        !           806:        call GetOK
        !           807:        log "The ISDN modem did not properly answer ATS59?"
        !           808:        failure
        !           809: IQSyncOK:
        !           810:        call GetOK
        !           811:        goto ImpactIQCheckInit
        !           812: IQSyncFail:
        !           813:        log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line."
        !           814:        call GetOK
        !           815:        failure
        !           816: 
        !           817: ImpactIQCheckInit:
        !           818:        set $impactInitReg "57"
        !           819:        call IQInitCheck
        !           820:        if $TA_Bonding == "yes" return
        !           821:        set $impactInitReg "58"
        !           822:        call IQInitCheck
        !           823:        return
        !           824: 
        !           825: # A little subroutine
        !           826: 
        !           827: IQInitCheck:
        !           828:        print "ATS${impactInitReg}?\r\n"
        !           829:        match "000" IQInitOK
        !           830:        match "001" IQInitOK
        !           831:        match "002" IQInitFail
        !           832:        match "ERR"
        !           833:        match "OK\r\n"
        !           834:        wait 3
        !           835:        call GetOK
        !           836:        log "The ISDN modem did not properly answer ATS${impactInitReg}?"
        !           837:        failure
        !           838: IQInitOK:
        !           839:        call GetOK
        !           840:        return
        !           841: IQInitFail:
        !           842:        log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings."
        !           843:        call GetOK
        !           844:        failure
        !           845: 
        !           846: ##
        !           847: ## ImpactIQCheckConfig
        !           848: ##
        !           849: ## Verify and adjust ISDN configuration as necessary
        !           850: ##
        !           851: 
        !           852: ImpactIQCheckConfig:
        !           853:        log "Checking the ISDN modem's ISDN configuration..."
        !           854:        set $valueChanged "no"
        !           855: 
        !           856: # Check switch type XXX
        !           857: #
        !           858: # NOTE: The Impact IQ changes the value of this field as it auto-detects.
        !           859: # Not only that, but it cycles through each switch type as it is "trying
        !           860: # out" that type, so that reading this field is pretty much useless...
        !           861: # Our strategy is just to hope that auto-detect works!
        !           862: 
        !           863:        if $TA_NewSwitch != "yes" goto ImpactIQCheckDirnos
        !           864:        log "Initiating switch type auto-detect..."
        !           865:        set $modemCmd "S50=0"
        !           866:        call ModemCmd2
        !           867:        set $TA_NewSwitch ""
        !           868:        set $valueChanged "yes"
        !           869:        set $iq_new_switch "yes"
        !           870: 
        !           871: # Check directory numbers
        !           872: 
        !           873: ImpactIQCheckDirnos:
        !           874:        set $checkCmd "S51"
        !           875:        set $checkValue $TA_Dirno1
        !           876:        set $checkValueNew $TA_Dirno1
        !           877:        set $checkMsg "Reprogramming line #1 directory number..."
        !           878:        call ModemCheckValue
        !           879: 
        !           880:        set $checkCmd "S53"
        !           881:        set $checkValue $TA_Dirno2
        !           882:        set $checkValueNew $TA_Dirno2
        !           883:        set $checkMsg "Reprogramming line #2 directory number..."
        !           884:        call ModemCheckValue
        !           885: 
        !           886: # Check SPIDs
        !           887: 
        !           888:        set $checkCmd "S52"
        !           889:        set $checkValue $TA_SPID1
        !           890:        set $checkValueNew $TA_SPID1
        !           891:        set $checkMsg "Reprogramming line #1 SPID..."
        !           892:        call ModemCheckValue
        !           893: 
        !           894:        set $checkCmd "S54"
        !           895:        set $checkValue $TA_SPID2
        !           896:        set $checkValueNew $TA_SPID2
        !           897:        set $checkMsg "Reprogramming line #2 SPID..."
        !           898:        call ModemCheckValue
        !           899: 
        !           900: # Check 56K/64K setting
        !           901: 
        !           902:        set $checkValue "064"
        !           903:        set $checkValueNew "64"
        !           904:        if $TA_56K == "yes" set $checkValue "056"
        !           905:        if $TA_56K == "yes" set $checkValueNew "56"
        !           906:        set $checkCmd "S60"
        !           907:        set $checkMsg "Reprogramming B channel data rate to ${checkValueNew}K..."
        !           908:        call ModemCheckValue
        !           909:        set $checkValueNew ""
        !           910: 
        !           911: # Check Multi-link setting
        !           912: 
        !           913:        set $checkValue "000"
        !           914:        set $checkValueNew "0"
        !           915:        if $TA_Bonding == "yes" set $checkValue "001"
        !           916:        if $TA_Bonding == "yes" set $checkValueNew "1"
        !           917:        set $checkCmd "S80"
        !           918:        set $checkMsg "Reprogramming mutli-link PPP setting..."
        !           919:        call ModemCheckValue
        !           920: 
        !           921: # Restart if necessary, and wait extra long if the switch type changed
        !           922: 
        !           923:        if $valueChanged == "no" return
        !           924:        log "Restarting ISDN modem with the new configuration..."
        !           925:        set $modemCmd "Z"
        !           926:        call ModemCmd2
        !           927:        failure
        !           928: 
        !           929: ##
        !           930: ## Detect an incoming call with the 3Com
        !           931: ##
        !           932: 
        !           933: ImpactIQDetectRing:
        !           934:        call ImpactIQSetup
        !           935:        if $modemCmdResult != "OK" goto RingbackWait
        !           936:        match ringset "RING\r\n" RingbackDone
        !           937: # Clear Caller-ID buffers
        !           938:        set $modemCmd "\\N0"
        !           939: # We don't care if this command fails...
        !           940:        call ModemCmd
        !           941: # Read most recent incoming call
        !           942:        call ImpactIQDetectReadCID
        !           943:        log "Remote Dial-Back mode enabled; waiting for incoming call."
        !           944: # Now wait for a change
        !           945: ImpactIQDetectLoop:
        !           946:        wait 5
        !           947:        set $oldIncomingCall $incomingCall
        !           948:        call ImpactIQDetectReadCID
        !           949:        if $oldIncomingCall != $incomingCall goto ImpactIQDetectDone
        !           950:        goto ImpactIQDetectLoop
        !           951: 
        !           952: # Examine the CID from each port
        !           953: ImpactIQDetectDone:
        !           954:        if $incomingCall !match "((.{14}).{10}) ((.{14}).{10}) ((.{14}).{10})" goto RingbackDetectNoCID
        !           955:        set $dataCID $matchedString2
        !           956:        set $voice1CID $matchedString4
        !           957:        set $voice2CID $matchedString6
        !           958:        set $cid $dataCID
        !           959:        call ImpactIQDetectTryCID
        !           960:        set $cid $voice1CID
        !           961:        call ImpactIQDetectTryCID
        !           962:        set $cid $voice2CID
        !           963:        call ImpactIQDetectTryCID
        !           964:        goto RingbackDetectNoCID
        !           965: 
        !           966: # Look for a valid CID string
        !           967: ImpactIQDetectTryCID:
        !           968:        if $cid match " *" return
        !           969:        if $cid match " *N/A" return
        !           970:        goto RingbackDetectCID
        !           971: 
        !           972: # Read first line of incoming call log (it's the 14th line of output)
        !           973: ImpactIQDetectReadCID:
        !           974:        set $modemCmd "\\N"
        !           975:        call ModemCmdSend
        !           976:        call ReadLine
        !           977: # Older version of the 3Com don't support this command
        !           978:        if $matchedString == "OK" return
        !           979:        if $matchedString match "ERR(O)?(R)?" return
        !           980:        call ReadLine
        !           981:        call ReadLine
        !           982:        call ReadLine
        !           983:        call ReadLine
        !           984:        call ReadLine
        !           985:        call ReadLine
        !           986:        call ReadLine
        !           987:        call ReadLine
        !           988:        call ReadLine
        !           989:        call ReadLine
        !           990:        call ReadLine
        !           991:        call ReadLine
        !           992:        call ReadLine
        !           993:        set $incomingCall $matchedString
        !           994:        call GetOK
        !           995:        return
        !           996: 
        !           997: #################################################################
        !           998: #
        !           999: #      NEC ATERM SETUP
        !          1000: #
        !          1001: #################################################################
        !          1002: 
        !          1003: AtermSetup:
        !          1004:        if $AtermHardReset == "yes" goto AtermSetup2
        !          1005: 
        !          1006: # Do hardware reset, which takes a while and doesn't give back "OK"
        !          1007: 
        !          1008:        log "Initializing modem..."
        !          1009:        print "ATZ98\r\n"
        !          1010:        wait 6
        !          1011:        set $AtermHardReset "yes"
        !          1012:        failure
        !          1013: 
        !          1014: AtermSetup2:
        !          1015: 
        !          1016: # Set to 230K baud if we support it
        !          1017: 
        !          1018:        set $modemCmd ""
        !          1019:        set $newBaudrate "230400"
        !          1020:        call SetBaudrate
        !          1021: 
        !          1022: # Is this an IT55 or IT65?
        !          1023: 
        !          1024:        set $atermIT65 ""
        !          1025:        set $modemCmd "$$N14=0"
        !          1026:        call ModemCmd
        !          1027:        if $modemCmdResult == "OK" set $atermIT65 "yes"
        !          1028: 
        !          1029: # Set normal stuff, PPP mode
        !          1030: 
        !          1031:        set $modemCmd "&C1&D0&K3X4$$N1=1$$N9=0"
        !          1032:        call ModemCmd2
        !          1033: 
        !          1034: # Set the multi-link setting
        !          1035: 
        !          1036:        set $bondCmd "$$N11=0"
        !          1037:        if $TA_Bonding == "yes" set $bondCmd "$$N11=1"
        !          1038:        set $modemCmd "$bondCmd"
        !          1039:        call ModemCmd2
        !          1040: 
        !          1041: # Additional settings for the IT65 go here...
        !          1042: 
        !          1043:        if $atermIT65 != "yes" return
        !          1044:        return
        !          1045: 
        !          1046: #################################################################
        !          1047: #
        !          1048: #      MICROCOM DESKPORTE SETUP
        !          1049: #
        !          1050: #################################################################
        !          1051: 
        !          1052: DeskPorteSetup:
        !          1053:        set $noDialToneSubr GenericNoDialtone
        !          1054:        set $temp "M1"
        !          1055:        if $SpeakerOff == "yes" set $temp "M0"
        !          1056:        set $modemCmd "Z&F&C1&D2X3E0S0=0${temp}"
        !          1057:        call ModemCmd2
        !          1058:        return
        !          1059: 
        !          1060: #################################################################
        !          1061: #
        !          1062: #      KOREAN TERMINAL ADAPTER SETUP
        !          1063: #
        !          1064: #################################################################
        !          1065: 
        !          1066: NTKSetup:
        !          1067:        set $noDialToneSubr GenericNoDialtone
        !          1068:        set $modemCmd "ZB40&J3"
        !          1069:        call ModemCmd2
        !          1070:        return
        !          1071: 
        !          1072: #################################################################
        !          1073: #
        !          1074: #      ADTRAN EXPRESS XRT SETUP
        !          1075: #
        !          1076: #################################################################
        !          1077: 
        !          1078: AdtranXRTSetup:
        !          1079:        set $noDialToneSubr ImpactIQNoDialtone
        !          1080:        set $dialErrorSubr AdtranXRTDialError
        !          1081:        set $bonding "&F1"
        !          1082:        if $TA_Bonding == "yes" set $bonding "&F2"
        !          1083:        set $chap "S118=0"
        !          1084:        if $TA_AuthChap == "yes" set $chap "S118=32"
        !          1085:        set $origCmd "S53=3"
        !          1086:        if $TA_56K == "yes" set $origCmd "S53=2"
        !          1087:        if $TA_VoiceCall == "yes" set $origCmd "S53=0"
        !          1088:        set $modemCmd "ZE0${bonding}&C1&D2${chap}${origCmd}"
        !          1089:        call ModemCmd2
        !          1090: 
        !          1091: # Check ISDN config and link status (XXX should we check revision too?)
        !          1092: 
        !          1093:        if $optimize == "yes" return
        !          1094:        call AdtranXRTCheckConfig
        !          1095:        call AdtranXRTCheckLink
        !          1096:        return
        !          1097: 
        !          1098: ##
        !          1099: ## What to do when ERROR when dialing
        !          1100: ##
        !          1101: ## This is what the Adtran returns if the line is not ready yet.
        !          1102: ## So we look into the status buffer to see if we recognize the
        !          1103: ## error condition.
        !          1104: ##
        !          1105: 
        !          1106: AdtranXRTDialError:
        !          1107:        call AdtranXRTDiagnose
        !          1108:        failure
        !          1109: 
        !          1110: ##
        !          1111: ## Check the last status bufffer entry for what the problem is
        !          1112: ## XXX Figure out more stuff to look for and when it can happen
        !          1113: ##
        !          1114: 
        !          1115: AdtranXRTDiagnose:
        !          1116:        log "Checking the Adtran status buffer..."
        !          1117:        print "AT!S\r\n"
        !          1118:        match "\r\n\r\n" AdtranXRTDiagBlank
        !          1119:        match "END OF STATUS BUFFER" AdtranXRTDiagBlank
        !          1120:        match "L1 not up." AdtranXRTDiagL1
        !          1121:        match "FACILITY_NOT_SUBSCRIBED" AdtranXRTDiagFNS
        !          1122:        match "Unknown AT cmd" IQSyncOK
        !          1123:        match "ERR"
        !          1124:        match "OK\r\n"
        !          1125:        wait 3
        !          1126:        call GetOK
        !          1127:        log "The ISDN modem did not properly answer ATS59?"
        !          1128:        failure
        !          1129:        goto ImpactIQCheckInit
        !          1130: 
        !          1131: AdtranXRTDiagFNS:
        !          1132:        log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings."
        !          1133:        failure
        !          1134: 
        !          1135: AdtranXRTDiagL1:
        !          1136:        log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line."
        !          1137:        failure
        !          1138: 
        !          1139: AdtranXRTDiagBlank:
        !          1140:        log "ISDN initialization failed or restarting link. Please verify proper line connection and ISDN settings."
        !          1141:        failure
        !          1142: 
        !          1143: ##
        !          1144: ## AdtranXRTCheckLink
        !          1145: ##
        !          1146: ## Check the link status registers
        !          1147: ##
        !          1148: 
        !          1149: AdtranXRTCheckLink:
        !          1150:        log "Checking the ISDN modem's link status..."
        !          1151:        print "AT!S1\r\n"
        !          1152:        match "Link In Sync" AdtranXRTSyncReg
        !          1153:        match "Getting" AdtranXRTSyncReg
        !          1154:        match "Register" AdtranXRTSyncReg
        !          1155:        match "Ready" AdtranXRTSyncOK
        !          1156:        match "Down" AdtranXRTSyncFail
        !          1157:        match "ERR"
        !          1158:        match "OK\r\n"
        !          1159:        wait 3
        !          1160:        call GetOK
        !          1161:        log "The ISDN modem did not properly answer AT!S1."
        !          1162:        failure
        !          1163: AdtranXRTSyncOK:
        !          1164:        return
        !          1165: AdtranXRTSyncFail:
        !          1166:        print "ATDT1\r\n"
        !          1167:        wait 1
        !          1168:        goto AdtranXRTDiagnose
        !          1169: AdtranXRTSyncReg:
        !          1170:        log "The ISDN modem is initializing itself."
        !          1171:        failure
        !          1172: 
        !          1173: ##
        !          1174: ## AdtranXRTCheckConfig
        !          1175: ##
        !          1176: ## Verify and adjust ISDN configuration as necessary
        !          1177: ##
        !          1178: 
        !          1179: AdtranXRTCheckConfig:
        !          1180:        log "Checking the ISDN modem's ISDN configuration..."
        !          1181:        set $valueChanged "no"
        !          1182: 
        !          1183:        set $checkCmd "S52"
        !          1184:        set $checkValue "000"
        !          1185:        set $checkValueNew "0"
        !          1186:        if $TA_SwitchType == "DMS-100" set $checkValue "001"
        !          1187:        if $TA_SwitchType == "DMS-100" set $checkValueNew "1"
        !          1188:        if $TA_SwitchType == "NI-1" set $checkValue "002"
        !          1189:        if $TA_SwitchType == "NI-1" set $checkValueNew "2"
        !          1190:        set $checkMsg "Reprogramming switch type ($TA_SwitchType)..."
        !          1191:        call ModemCheckValue
        !          1192: 
        !          1193: # Check directory numbers
        !          1194: 
        !          1195: AdtranXRTCheckDirnos:
        !          1196:        set $checkCmd "SS62"
        !          1197:        set $checkValue $TA_Dirno1
        !          1198:        set $checkValueNew $TA_Dirno1
        !          1199:        set $checkMsg "Reprogramming line #1 directory number..."
        !          1200:        call ModemCheckValue
        !          1201: 
        !          1202:        set $checkCmd "SS63"
        !          1203:        set $checkValue $TA_Dirno2
        !          1204:        set $checkValueNew $TA_Dirno2
        !          1205:        set $checkMsg "Reprogramming line #2 directory number..."
        !          1206:        call ModemCheckValue
        !          1207: 
        !          1208: # Check SPIDs
        !          1209: 
        !          1210:        set $checkCmd "SS60"
        !          1211:        set $checkValue $TA_SPID1
        !          1212:        set $checkValueNew $TA_SPID1
        !          1213:        set $checkMsg "Reprogramming line #1 SPID..."
        !          1214:        call ModemCheckValue
        !          1215: 
        !          1216:        set $checkCmd "SS61"
        !          1217:        set $checkValue $TA_SPID2
        !          1218:        set $checkValueNew $TA_SPID2
        !          1219:        set $checkMsg "Reprogramming line #2 SPID..."
        !          1220:        call ModemCheckValue
        !          1221: 
        !          1222: # Restart if necessary
        !          1223: 
        !          1224:        if $valueChanged == "no" return
        !          1225:        log "Restarting ISDN modem with the new configuration..."
        !          1226:        set $modemCmd "&W"
        !          1227:        call ModemCmd2
        !          1228:        set $modemCmd "Z"
        !          1229:        call ModemCmd2
        !          1230:        failure
        !          1231: 
        !          1232: #################################################################
        !          1233: #
        !          1234: #      BASIC MODEM STUFF
        !          1235: #
        !          1236: #################################################################
        !          1237: 
        !          1238: ##
        !          1239: ## ModemAnswer
        !          1240: ##
        !          1241: ## Wait for a RING and answer it. Variables:
        !          1242: ##
        !          1243: ##  $RingTimeout       How long for a RING before giving up (default 10 min)
        !          1244: ##  $ConnectTimeout    How long for connect after answering (default 45 secs)
        !          1245: ##
        !          1246: ## Returns:
        !          1247: ##
        !          1248: ##  $answerReturn      "OK" or "FAIL"
        !          1249: ##  $ConnectionSpeed   Connection speed reported by modem (possibly empty)
        !          1250: ##
        !          1251: 
        !          1252: ModemAnswer:
        !          1253:        if $RingTimeout == "" set $RingTimeout 600
        !          1254:        if $ConnectTimeout == "" set $ConnectTimeout 45
        !          1255:        match "RING\r" ModemAnswerGotRing
        !          1256:        wait $RingTimeout
        !          1257:        log "No RING detected after $RingTimeout seconds."
        !          1258:        set $answerReturn "FAIL"
        !          1259:        return
        !          1260: ModemAnswerGotRing:
        !          1261:        log "Incoming call detected..."
        !          1262:        print "ATA\r\n"
        !          1263:        regex "CONNECT *([0-9]*).*$" ModemAnswerConnect
        !          1264:        wait $ConnectTimeout
        !          1265:        log "Failed to connect incoming call."
        !          1266:        set $answerReturn "FAIL"
        !          1267:        return
        !          1268: ModemAnswerConnect:
        !          1269:        set $ConnectionSpeed $matchedString1
        !          1270:        set $answerReturn "OK"
        !          1271:        return
        !          1272: 
        !          1273: ##
        !          1274: ## ModemFind
        !          1275: ##
        !          1276: ## Just try to get where we are talking to the modem.
        !          1277: ## Returns with $ErrorMsg equal to the empty string if
        !          1278: ## we found the modem, or else some error message if not.
        !          1279: ##
        !          1280: 
        !          1281: ModemFind:
        !          1282: 
        !          1283: # Do a quick check first...
        !          1284: 
        !          1285:        set $ErrorMsg ""
        !          1286:        call ModemFind4
        !          1287:        if $modemCmdResult == "OK" return
        !          1288:        if $Serial230K != "yes" goto ModemFind1
        !          1289:        set $newBaudrate 230400
        !          1290:        if $Baudrate == "230400" set $newBaudrate 115200
        !          1291:        set $Baudrate $newBaudrate
        !          1292:        call ModemFind4
        !          1293:        if $modemCmdResult == "OK" return
        !          1294: 
        !          1295: # Now try possible baud rates more extensively
        !          1296: 
        !          1297: ModemFind1:
        !          1298:        set $Baudrate 115200
        !          1299:        call ModemFind2
        !          1300:        if $modemCmdResult == "OK" return
        !          1301:        if $Serial230K != "yes" return
        !          1302:        set $Baudrate 230400
        !          1303:        wait 1
        !          1304:        call ModemFind2
        !          1305:        if $modemCmdResult == "OK" return
        !          1306:        set $ErrorMsg "The modem is not responding."
        !          1307:        return
        !          1308: 
        !          1309: # This tries the +++ sequence in case the modem is in "on-line" mode
        !          1310: 
        !          1311: ModemFind2:
        !          1312:        call ModemFind3
        !          1313:        if $modemCmdResult == "OK" return
        !          1314:        call SendTriplePlus
        !          1315:        call ModemFind3
        !          1316:        return
        !          1317: 
        !          1318: # This tries a few commands to see if the modem responds with "OK"
        !          1319: 
        !          1320: ModemFind3:
        !          1321:        set $modemCmd ""
        !          1322:        set $modemCmdTimeout 1
        !          1323:        call ModemCmd0
        !          1324:        if $modemCmdResult == "OK" return
        !          1325:        set $modemCmd "Z"
        !          1326:        set $modemCmdTimeout 2
        !          1327:        call ModemCmd0
        !          1328:        if $modemCmdResult == "OK" return
        !          1329: ModemFind4:
        !          1330:        set $modemCmd ""
        !          1331:        set $modemCmdTimeout 1
        !          1332:        call ModemCmd0
        !          1333:        return
        !          1334: 
        !          1335: ##
        !          1336: ## SetBaudrate
        !          1337: ##
        !          1338: ## Change baud rates (as allowed) and verify modem is still there.
        !          1339: ## If not, then fail the script.
        !          1340: ##
        !          1341: ##   $newBaudrate      New baud rate; if we don't support it, just return.
        !          1342: ##   $modemCmd         Command to send modem to jump to the new baud rate.
        !          1343: ##
        !          1344: 
        !          1345: SetBaudrate:
        !          1346:        if $Baudrate == $newBaudrate return
        !          1347:        if $newBaudrate != 230400 goto SetBaudrate2
        !          1348:        if $Serial230K != "yes" return
        !          1349: SetBaudrate2:
        !          1350:        log "Setting serial port speed to $newBaudrate..."
        !          1351:        print "AT$modemCmd\r\n"
        !          1352:        wait 1
        !          1353:        set $Baudrate $newBaudrate
        !          1354:        wait 1
        !          1355:        set $modemCmd ""
        !          1356:        goto ModemCmd2
        !          1357: 
        !          1358: ##
        !          1359: ## ModemCheckValue 
        !          1360: ##
        !          1361: ## Check the value in an S-register (or equivalent). If it is
        !          1362: ## not what we want, then change it and set $valueChanged to "yes",
        !          1363: ## and log $checkMsg (if not empty). The value $checkValueNew is
        !          1364: ## what we program the S-register to equal if it doesn't match.
        !          1365: ##
        !          1366: ## The $checkValue must match exactly on the first line of output.
        !          1367: ## If we get any wierd error, then fail the script.
        !          1368: ##
        !          1369: 
        !          1370: ModemCheckValue:
        !          1371:        set $modemCmd "${checkCmd}?"
        !          1372:        call ModemQuery
        !          1373:        if $modemQuery == $checkValue return
        !          1374:        set $valueChanged "yes"
        !          1375:        set $checkValueMyNew $checkValueNew
        !          1376:        if $checkValueNew == "" set $checkValueMyNew $checkValue
        !          1377:        set $modemCmd "${checkCmd}=${checkValueMyNew}"
        !          1378:        if $checkMsg != "" log $checkMsg
        !          1379:        goto ModemCmd2
        !          1380: 
        !          1381: ##
        !          1382: ## ModemCmd
        !          1383: ##
        !          1384: ## Do the modem command in $modemCmd. Set $modemCmdResult to
        !          1385: ##
        !          1386: ##     OK      The modem returned "OK"
        !          1387: ##     ERROR   The modem returned "ERR" or "ERROR"
        !          1388: ##     TIMEOUT The modem did not respond within three seconds
        !          1389: ##
        !          1390: ## If ERR or TIMEOUT, also set $ErrorMsg to an appropriate message
        !          1391: ##
        !          1392: 
        !          1393: ModemCmd:
        !          1394:        set $modemCmdTimeout 3
        !          1395: ModemCmd0:
        !          1396:        print "AT$modemCmd\r\n"
        !          1397:        match "OK\r\n" ModemCmdOk
        !          1398:        match "ERR" ModemCmdErr
        !          1399:        wait $modemCmdTimeout
        !          1400:        set $modemCmdResult "TIMEOUT"
        !          1401: ModemCmdTimeout:
        !          1402:        set $ErrorMsg "The modem is not responding."
        !          1403:        return
        !          1404: ModemCmdOk:
        !          1405:        set $modemCmdResult "OK"
        !          1406:        return
        !          1407: ModemCmdErr:
        !          1408:        set $modemCmdResult "ERROR"
        !          1409:        set $ErrorMsg "The modem did not accept the command AT$modemCmd."
        !          1410:        return
        !          1411: 
        !          1412: ##
        !          1413: ## ModemCmd2
        !          1414: ##
        !          1415: ## Do the modem command in $modemCmd. If we don't get OK back,
        !          1416: ## fail the script and log an error message.
        !          1417: ##
        !          1418: 
        !          1419: ModemCmd2:
        !          1420:        call ModemCmd
        !          1421:        if $modemCmdResult == "OK" return
        !          1422:        log $ErrorMsg
        !          1423:        failure
        !          1424: 
        !          1425: ##
        !          1426: ## ModemCmdSend
        !          1427: ##
        !          1428: ## Send a modem command and read the echo'ed CR-LF
        !          1429: ##
        !          1430: 
        !          1431: ModemCmdSend:
        !          1432:        print "AT$modemCmd\r\n"
        !          1433:        match "\r\n" ModemCmdSend2
        !          1434:        wait 3
        !          1435:        goto ModemCmdTimeout
        !          1436: ModemCmdSend2:
        !          1437:        return
        !          1438: 
        !          1439: ##
        !          1440: ## ModemQuery
        !          1441: ##
        !          1442: ## Do the $modemCmd and expect exactly one line of response, then OK.
        !          1443: ## Return the response in $modemQuery. If anything goes wrong, die.
        !          1444: ##
        !          1445: 
        !          1446: ModemQuery:
        !          1447:        call ModemCmdSend
        !          1448:        call ReadLine
        !          1449:        set $modemQuery $matchedString
        !          1450:        if $modemQuery == "ERR" goto ModemQueryError
        !          1451:        if $modemQuery == "ERROR" goto ModemQueryError
        !          1452:        goto GetOK
        !          1453: ModemQueryError:
        !          1454:        call ModemCmdErr
        !          1455:        failure
        !          1456: 
        !          1457: # Same thing, but strip leading and trailing blanks
        !          1458: 
        !          1459: ModemQueryStrip:
        !          1460:        call ModemQuery
        !          1461:        if $modemQuery match " *(.*) *" nop
        !          1462:        set $modemQuery $matchedString1
        !          1463:        return
        !          1464: 
        !          1465: ##
        !          1466: ## ReadLine
        !          1467: ##
        !          1468: ## Read the next line of output. It should come within $modemCmdTimeout
        !          1469: ## seconds, or else we fail. Return it in $matchedString.
        !          1470: ##
        !          1471: 
        !          1472: ReadLine:
        !          1473:        regex "^.*$" ReadLineDone
        !          1474:        wait $modemCmdTimeout
        !          1475:        set $ErrorMsg "The modem is not responding."
        !          1476:        log $ErrorMsg
        !          1477:        failure
        !          1478: ReadLineDone:
        !          1479:        return
        !          1480: 
        !          1481: ##
        !          1482: ## Get an OK within 3 seconds or die
        !          1483: ##
        !          1484: 
        !          1485: GetOK:
        !          1486:        match "OK\r\n" GotOK
        !          1487:        wait 3
        !          1488:        log "The modem is not responding."
        !          1489:        failure
        !          1490: GotOK
        !          1491:        return
        !          1492: 
        !          1493: ##
        !          1494: ## Send "+++" to get modem attention if on-line
        !          1495: ##
        !          1496: 
        !          1497: SendTriplePlus:
        !          1498:        print "\r\n"
        !          1499:        wait 2
        !          1500:        print "+++"
        !          1501:        wait 2
        !          1502:        return
        !          1503: 
        !          1504: #################################################################
        !          1505: #
        !          1506: #      LOGIN AUTO-SCRIPTING
        !          1507: #
        !          1508: #################################################################
        !          1509: 
        !          1510: ##
        !          1511: ## AutoLogin
        !          1512: ##
        !          1513: ## Here we attempt to figure out what the remote server wants
        !          1514: ## from us. We do this by checking for bytes that correspond
        !          1515: ## to PPP packets (in which case we are done) as well as common
        !          1516: ## login type stuff like "name:", "ogin:", etc.
        !          1517: ##
        !          1518: ## This always returns. The hope is that when it returns, the
        !          1519: ## remote side has reached PPP mode.
        !          1520: ##
        !          1521: ## This has been crafted from empirical evidence. Lots of terminal
        !          1522: ## servers have various intelligent/stupid features which we
        !          1523: ## take advantage of/have to work around.
        !          1524: ##
        !          1525: ## Variables (set automatically by mpd):
        !          1526: ##
        !          1527: ##  $Login             Authorization login
        !          1528: ##  $Password          Authorization password
        !          1529: ##
        !          1530: 
        !          1531: AutoLogin:
        !          1532:        log "Initiating auto-login..."
        !          1533: 
        !          1534: # Spend at most this long doing auto-login before giving up
        !          1535: 
        !          1536:        timer autoLogin 5 AutoLoginTimeout
        !          1537: 
        !          1538: # At any time if we see an LCP frame (not our own echo) then we're done
        !          1539: 
        !          1540:        match autoLogin "\x7e\xff\x03\xc0\x21" AutoLoginFrame
        !          1541:        match autoLogin "\x7e\xff\x7d\x23\xc0\x21\x7d\x21" AutoLoginFrame
        !          1542:        match autoLogin "\x7e\xc0\x21" AutoLoginFrame
        !          1543: 
        !          1544: # Now send a "fake" PPP frame (this is an empty config-reject with id# 172).
        !          1545: # This should trigger any auto-detecting servers to jump into PPP mode,
        !          1546: # which is good because it's faster (by avoiding human readable messages)
        !          1547: # and more reliable (PPP framing).
        !          1548: 
        !          1549:        print "\x7e\xff\x7d\x23\xc0\x21\x7d\x24\xac\x7d\x20\x7d\x24\x2e\x2b\x7e"
        !          1550: 
        !          1551: # Wait one second for server to auto-detect PPP or send a login prompt.
        !          1552: # After one second of neither, try sending a carriage return (some servers
        !          1553: # require this). After that, we have to see something recognizable from
        !          1554: # the peer, otherwise we'll just timeout.
        !          1555: 
        !          1556:        match "ogin" AutoLoginPrompt
        !          1557:        match "name" AutoLoginPrompt
        !          1558:        wait 1
        !          1559:        print "\r"
        !          1560:        match "ogin" AutoLoginPrompt
        !          1561:        match "name" AutoLoginPrompt
        !          1562:        wait
        !          1563: 
        !          1564: # At this point we've seen a login prompt; do the manual login
        !          1565: 
        !          1566: AutoLoginPrompt:
        !          1567:        log "Sending login..."
        !          1568:        print "${Login}\r"
        !          1569:        match "word"
        !          1570:        wait
        !          1571:        log "Sending password..."
        !          1572:        print "${Password}\r"
        !          1573:        match "\r"
        !          1574:        wait
        !          1575:        if $didLogin != "yes" match "ogin:" LoginAgain
        !          1576:        match ">"
        !          1577:        match "%"
        !          1578:        match ":"
        !          1579:        wait
        !          1580:        log "Enabling PPP..."
        !          1581:        print "ppp\r"
        !          1582:        cancel all
        !          1583:        return
        !          1584: 
        !          1585: LoginAgain:
        !          1586:        set $didLogin "yes"
        !          1587:        goto AutoLoginPrompt
        !          1588: 
        !          1589: # We saw a PPP frame
        !          1590: 
        !          1591: AutoLoginFrame:
        !          1592:        log "Detected PPP frame."
        !          1593:        cancel all
        !          1594:        return
        !          1595: 
        !          1596: # We timed out before seeing a PPP frame. Cross your fingers and pray.
        !          1597: 
        !          1598: AutoLoginTimeout:
        !          1599:        log "Auto-login timeout."
        !          1600:        cancel all
        !          1601:        return
        !          1602: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>