upl@puff.cs.wisc.edu (Future Unix Gurus) (09/08/89)
Hello, again Ok. I'm trying to do this: I want to create a uucp polling shell script on a UNIX pc. I want to be able to have cron (actually smgr) run this script at various periods in the day. I only have one phone line, so I can't dedicate it to a DATA line. Question: is there some way that I can check to see if ph0 is set to VOICE and if so can I then check if it's active? Here's the plan: if ph0 is set to VOICE and active, don't try to poll anywhere. If ph0 is set to VOICE but not active, then do a phtoggle, and try polling. If ph0 is set to DATA check the LCK..ph0 file If it exists, don't poll, otherwise poll. Currently I've got it set up in my crontab and L.sys files to do all of my sending between midnight and 8am everyday. That's fine for things I send. But when I need to poll a site (for things I might be receiving), I want to be able to do it whenever I'm not using the phone. Any suggestions? I'm reasonably capable in C. I could write a program to look at /dev/kmem, but I don't know how to do something like that. Thanks in advance for any help!! - sparkie p.s. please respond to the following address (not the address listed above) ___ ___ ___ ___ _ _ _ ___ / __\| . \/ . \| . \| |/ /|_|| _ | \___\| __/| || _ /| < | || _[ sparkie@uhura.cs.wisc.edu \___/|_| |_|_||_|\\|_|\_\|_||___|
kls@ditka.UUCP (Karl Swartz) (09/12/89)
In article <2938@puff.cs.wisc.edu> upl@puff.cs.wisc.edu (Future Unix Gurus) writes: >I only have one phone line, so I can't dedicate it to a DATA line. >If ph0 is set to DATA ... I was under the (possibly misguided) impression that due to software bugs ph0 didn't work very well as a data line. I have both of my machines set up with ph0 as VOICE (but no line hooked up since the software isn't terribly useful) and ph1 as the DATA line. -- Karl Swartz |UUCP {ames,lll-winken}!pacbell!ditka!kls 1-505/672-3113 |Internet kls@rt1.lanl.gov |BIX kswartz "I never let my schooling get in the way of my education." (Twain)
cals@cals01.NEWPORT.RI.US (Charles A. Sefranek) (09/14/89)
In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes: >... >I was under the (possibly misguided) impression that due to >software bugs ph0 didn't work very well as a data line. Yup, you're misguided. I *only* use ph0, mostly as a DATA line. It works great, has been for 2 yrs now. Took some tuning up though to find all the error possibilities and take care of them. Use phtoggle to switch ph0 between DATA and VOICE. Phtoggle comes with the ua. Use a program called phstat to check whether the line is currently set up as DATA or VOICE (or VOICE-ACTIVE, or RINGING, etc). Phstat was posted to the net a while back. I suppose I could repost my hacked up version of it if there's enough interest... As I said above, an IMPORTANT part of this is the shell script needed to coordinate the activity of phstat, phtoggle, and uucp (I don't have HDB). There are a number of obscure and subtle conditions that will cause errors if you don't check for them and handle them properly. Email me for more info, I can post if there's enough interest... -- -- Charlie Sefranek cals@cals01.NEWPORT.RI.US UUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals Alt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s
comeau@utoday.UUCP (Greg Comeau) (09/20/89)
In article <512@cals01.NEWPORT.RI.US> cals@cals01.Newport.RI.US (Charles A. Sefranek) writes: >In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes: >>... >>I was under the (possibly misguided) impression that due to >>software bugs ph0 didn't work very well as a data line. > >Yup, you're misguided. I *only* use ph0, mostly as a DATA line. Care to elaborate on that? I was tol many years ago by several AT&T people (I know that may not mean anything) that the ph0 harware was a bit freaky and that I should always use ph1. At the time I was only using the box to dial out and had numerous various problems. I've never changed that set up and to this day (some 4-5 years) have never had another phone problem again.
cals@cals01.NEWPORT.RI.US (Charles A. Sefranek) (09/23/89)
In article <985@utoday.UUCP> comeau@.UUCP (Greg Comeau) writes: >In article <512@cals01.NEWPORT.RI.US> cals@cals01.Newport.RI.US (Charles A. Sefranek) writes: >>In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes: >>>... >>>I was under the (possibly misguided) impression that due to >>>software bugs ph0 didn't work very well as a data line. >> >>Yup, you're misguided. I *only* use ph0, mostly as a DATA line. > >Care to elaborate on that? I was tol many years ago by several AT&T >people (I know that may not mean anything) that the ph0 harware was >a bit freaky and that I should always use ph1. ... Well, I put my machine on line Oct 1987 and have been using only ph0 since then. I have had problems, but the fix disk solved the un- explained machine lock-ups. The inode bug has bit me several times, too, but hopefully the *next* fixdisk will solve that. I have had NO problems traceable to pho hardware. Many people have asked for phstat, my shell script that I use to control uucico transfers, and any other info I can give them. Here it is ... -----------cut here------------cut here----------cut here------------ #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: README phstat.c uusites.poll # Wrapped by cals@cals01 on Fri Sep 22 22:02:56 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f README -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"README\" else echo shar: Extracting \"README\" \(5451 characters\) sed "s/^X//" >README <<'END_OF_README' X=================================== X phstat.c X=================================== X X PHSTAT is called with the device descriptor of the phone Xdevice whose status is desired, ie: X Xphstat /ph0 X Xwill return the status of phone line 0. The status is returned on Xstandard output as a text string indicating the state as follows: X X VOICE-IDLE indicates line is idle in voice mode X X VOICE-ACTIVE indicates line is in voice mode with a X conversation in progress. X X DATA indicates line is data mode. X XCurrently phstat will not detect the RINGING condition as such. I think Xthis is returned as status VOICE-ACTIVE, but I'm not sure. X X PHSTAT will return via an exit(1) if it is called improperly, Xand with an exit(0) otherwise. X X To compile phstat with shared libraries: X Xcc -c -ophstat phstat.c Xld -o phstat phstat.o /lib/crt0s.o /lib/shlib.ifile X X I installed phstat in /usr/local/bin/phstat with user bin, Xgroup bin and permissions 755. X X=================================== X uusites.poll X=================================== X X This file is the shell script I use to initiate the uucp Xconnection to my feed site. There are two things you *HAVE* to Xchange if you want to use this for yourself: X X Change variable SITE to be the name of the site you are calling. X Change variable SITE1 to be the first 6 characters of SITE. X XI put this shell script in /usr/lib/uucp/uusites.poll with user uucp, Xgroup mail, and permissions 755. I modified my crontab file to run this in Xplace of the uudemon.hr script. It is set up so I can also run it as Xan ordinary user for special occasions. X XMy system uses the standard ATT uucp (not HoneyDanBer), and I call my feed Xsite to establish the connection. I also contact only one site. If you Xwant to contact more than one site you will have to modify the script to Xsuit your needs. X X Several important things I have learned in setting this up: X X1) All uucp activity is logged on a file /usr/spool/uucp/LOGFILE. X The standard system setup manages this log file weekly so it X doesn't overflow your disk. Keep an eye on this file regularly X to see what's going on with your uucp connection. Many problems X will first show up here. X X2) If a uucico fails for any reason, it leaves a status file (named X STST<something> laying around in the /usr/spool/uucp directory. X The presence of this file will prevent uucico from attempting a X retry before some default time (usually 1 hour). The script X removes all STST* files from the spool directory to allow a X shorter retry period. X X3) Before you change the state of the phone line, you *must* save X its current status. This is required to decide what to do after X the uucico is completed. Remember that a successful uucp X connection can run for hours! Cron (or you) may invoke this X shell script *several times* during this time period. You X don't want one of these redundant invocations to screw up X a perfectly good phone connection. Uucico will properly X handle multiple invocations of itself, but it doesn't know or X care anything about the phone device. YOU must handle that! X X4) The trap statement is in there to prevent normal things (like X logging out) from messing up a successful connection. It X probably isn't needed if you only run the script from cron, X but I like to be able to run it manually for debugging and X other special occasions (like a power failure right before X cron would normally run it!). The trap protects me from X myself. X X5) The phtoggle program will properly check for all error X conditions regarding the phone line. It won't try to control X it if it is being used by someone else, and it takes care of X all the lock files. Unfortunately, if it does fail for an error X condition it doesn't seem to tell you in a way that can be X detected in the shell script. It just leaves an error window X laying around on the console. That's how I found out what X situations my shell script wasn't handling properly. X X6) I now use a dummy poll file to detect whether or not the uucico X transfer was successful. This is an empty file named so uucico X thinks it is a queued up job waiting to be acted on. When it X discovers the file is empty, it just skips it. This isn't done, X however, until a complete connection has been successfully X established. So, if you had a good connect, the poll file will X disappear. If the connection failed (initially) the poll file X will still be around. If the connection fails after it had X been successfully established, the poll file will also disappear X and the shell script will not retry. This was done at the request X of my feed site, so they can effectively ignore me (by allowing X my login, turning the line around, then killing the connection) X if they have higher priority things to do and don't want my X machine repeatedly beating the door down trying to get in. X This shell script can be painfully persistent in trying to X establish a good connection otherwise! X XGood luck with this. Please let me know if you find any flaws in Xthe above or come across any other problems I haven't seen yet; Xother than that, I make no guarantee or warranty whatsoever for this Xsoftware. Use at your own risk and let the user beware! X X-- X Charlie Sefranek cals@cals01.NEWPORT.RI.US XUUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals XAlt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s END_OF_README if test 5451 -ne `wc -c <README`; then echo shar: \"README\" unpacked with wrong size! fi # end of overwriting check fi if test -f phstat.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"phstat.c\" else echo shar: Extracting \"phstat.c\" \(936 characters\) sed "s/^X//" >phstat.c <<'END_OF_phstat.c' X/* X * X * phstat.c A quick hack to get the status of the phone line so X * we can decide whether or not to toggle it. X * X * At home, I have only one line, so when I leave for work X * I want my phone line set to DATA. I run a shell script X * from cron at 7:00 AM, that goes something like this: X * X * X * Status=`/usr/lbin/phstat /dev/ph0` X * X * if [ "$Status" = "VOICE" ] ; then X * /usr/bin/phtoggle X * fi X * X * X * Robert Rodriguez {inhp4|ptsfa}!pttesac!robert X */ X X#include <sys/phone.h> X#include <fcntl.h> X Xmain( argc, argv ) X Xint argc; Xchar **argv; X X{ X int fd; X struct updata phdata; X X if ( argc != 2 ) X { X printf( "Usage: phstat <device>\n" ); X exit(1); X } X if ( (fd = open( argv[1], O_RDWR | O_NDELAY )) == -1 ) X exit(1); X if ( (ioctl( fd, PIOCGETP, &phdata )) != 0 ) X exit(1); X if ( phdata.c_lineparam & VOICE ) X printf( "VOICE\n" ); X else X printf( "DATA\n" ); X close(fd); X exit(0); X} END_OF_phstat.c if test 936 -ne `wc -c <phstat.c`; then echo shar: \"phstat.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f uusites.poll -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"uusites.poll\" else echo shar: Extracting \"uusites.poll\" \(3157 characters\) sed "s/^X//" >uusites.poll <<'END_OF_uusites.poll' X#-------------------------------------------------------------------------- X# X# Poll known sites for traffic X# X#-------------------------------------------------------------------------- X# X# 27-Jun-88 Modified to only phtoggle if necessary. X# 17-Aug-88 Modified to trap termination to insure DATA line goes back to X# VOICE after manual invocation and logout. X# 20-Aug-88 Modified to use phstat to determine ACTIVE/IDLE status on X# VOICE line. X# 08-Jan-89 Modified to repetitively retry uucico call if previous connection X# failed. Known problems with this implementation: X# After a LOST LINE condition, uustat returns status of the PREVIOUS con- X# versation. X# A successful connection that results in say a half hour conversation X# and then terminates abnormally will retry - it would be better to let X# it go until the next call instead of overrunning the time slot. X# 28-Feb-89 Modified to use a null poll file instead of uustat call to X# determine status of conversation after uucico call. X# 27-Mar-89 Modified to check number of inodes and blocks before doing X# the uucico. Aborts and sends warning message to console and unix.log X# if either is too low. X# 27-Apr-89 Removed debugging stuff used to test null poll file operation. X# Changed retry limit. X# X# Charles A. Sefranek X# cals@cals01.NEWPORT.RI.US X#-------------------------------------------------------------------------- XSITE=smwhere # Change this to the site name you contact XSITE1=smwher # This is SITE truncated to 6 characters XPATH=:/usr/lib/uucp:/bin:/usr/bin XLOGFILE=/usr/spool/uucp/LOGFILE XPOLLFILE=/usr/spool/uucp/C.${SITE1}AD0000 Xcd /usr/lib/uucp Xlimit=12 # Max number of retries Xretry=0 Xwtime=300 # Seconds to wait between retries Xminblks=4000 # Min acceptable number of disk blocks Xmininodes=400 # Min acceptable number of inodes X# X# Find number of blocks and inodes for hard disk X# Xset `df | grep "\/dev\/fp002"` X# X# Send warning to console and unix.log if inodes too low X# Xif [ $5 -lt $mininodes ] Xthen X echo "uusites.poll: Abort - too few inodes \c" >/dev/error X echo "#uusites.poll: Abort - too few inodes \c" >/dev/error X exit 1 Xfi X# X# Send warning to console and unix.log if disk blocks too low X# Xif [ $3 -lt $minblks ] Xthen X echo "uusites.poll: Abort - too few disk blocks \c" >/dev/error X echo "#uusites.poll: Abort - too few disk blocks \c" >/dev/error X exit 2 Xfi Xwhile [ $retry -lt $limit ] Xdo X rm -f /usr/spool/uucp/STST* X status=`/usr/local/bin/phstat /dev/ph0` X trap '' 1 2 3 9 15 X # X # Only toggle if it is voice and it is idle X # VOICE-ACTIVE will be handled by uucico X # X if [ $status = 'VOICE-IDLE' ] X then phtoggle X fi X # X # Create dummy poll file here X # X cp /dev/null $POLLFILE X # X # Initiate the conversation X # X uucico -r1 -s${SITE} X # X # Don't change it if it wasn't toggled before ! X # X if [ $status = 'VOICE-IDLE' ] X then phtoggle X fi X trap 1 2 3 9 15 X # X # Check if a retry is needed X # X if test -f $POLLFILE X then X # Conversation failed - retry X retry=`expr $retry + 1` X sleep $wtime X else X # Conversation succeeded - force exit X retry=`expr $limit + 1` X fi Xdone Xuulog END_OF_uusites.poll if test 3157 -ne `wc -c <uusites.poll`; then echo shar: \"uusites.poll\" unpacked with wrong size! fi chmod +x uusites.poll # end of overwriting check fi echo shar: End of shell archive. exit 0 -- -- Charlie Sefranek cals@cals01.NEWPORT.RI.US UUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals Alt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s