#!xchat # @(#) Login.PortSelUnix V1.0 Tue Sep 1 14:57:05 1992 (Bob Denny) # # NOTE: Untested with xchat V1.1. Taken from DECUS UUCP. # # From: "Kent C. Brodie" # uucp: {uunet!marque,csd4.milw.wisc.edu}!moocow!brodie # special script for "uwmcsd4", have to go through a port selector (and then # log in via standard Unix procedures). # # Also included is the ability to wait in the port selector queue. # Be forwarned that the debug log can get pretty big depending on # how many times you "wait" in the queue. # (C) 1989 Kent C. Brodie - Medical College of Wisconsin # P0 is systemname , P1 is username, P2 is password. zero # send a CR to get the selector's attention. Sleep a little bit # due to large login text of selector. It sends "Which System?" # when it's ready. getprtslct: count ifgtr noprtslct 6 break send \r sleep 2000 flush expect prtslctok ystem? timeout getprtslct 15000 noprtslct: logerr Sent cr, no "Which System?" from port selector failed # Send the system name. We either get "OK" (connected), or we # get "No ports available, would you like to wait?" (wait in queue) prtslctok: zero sendstr 0 send \r expect connected OK expect prtslctwait wait? timeout noconnect 10000 # Usually we get "nn Your place in queue" messages. JUST in case we # get a free port right away, check for 'Are you ready?' as well. prtslctwait: zero send Y\r expect prtslctque queue expect prtslctrdy ready? timeout prtwaitbad 70000 prtwaitbad: logerr Sent "Y" to wait in queue, did not get valid response. failed # Here's where we wait in the queue. The port selector sends us a status # message about once a minute. We either get "nn Your place in queue" # or we get "System Available. Are you Ready?". # If something goes wrong, we time out waiting for either response. # The reason we don't sleep for 40-50 seconds is because as SOON as the # port is ready, it informs us. If we wait too long, it drops us. # This setup is laid out for a maximum of 20 "tries" which is ABOUT # 20 minutes. Note: This constant retrying can make log files # kind of big.... prtslctque: count ifgtr prtslcttry 20 expect prtslctque queue expect prtslctrdy ready? timeout noportwait 70000 prtslcttry: logerr Too many (20) wait/retries -- queue too busy. failed prtslctrdy: send Y\r expect connected OK timeout noconnect 20000 noportwait: logerr Timed out awaiting place in port queue failed noconnect: logerr Sent system name, no "OK" from selector failed # standard Unix login stuff. Send cr, expect "ogin:", if no, send a break # (which tells Unix to try the next bit rate) and try again. connected: send \r zero goto waitlogin sendbreak: count ifgtr nolgi 6 flush break waitlogin: expect gotlogin ogin: timeout sendbreak 5000 nolgi: logerr No login: prompt failed gotlogin: sendstr 1 send \r expect gotword word: timeout nopwd 10000 nopwd: logerr No password: prompt failed gotword: sendstr 2 send \r success