diff options
author | hm <hm@FreeBSD.org> | 2001-05-25 13:25:59 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2001-05-25 13:25:59 +0000 |
commit | 81340c4ffbfe0321432c769b3e28b58a260a7d71 (patch) | |
tree | cca105186b1dedb6528d6c90ca9e04afab89791c /share/examples/isdn/contrib/answer.c | |
parent | 71a2c9473e41ba207660ffe8ae03ce8220a6344c (diff) | |
download | FreeBSD-src-81340c4ffbfe0321432c769b3e28b58a260a7d71.zip FreeBSD-src-81340c4ffbfe0321432c769b3e28b58a260a7d71.tar.gz |
Add the contributed directory from the i4b tarball and the files from it
which would be nice to have.
Move isdnd_acct and isdnctl to the contrib directory where they belong to.
Diffstat (limited to 'share/examples/isdn/contrib/answer.c')
-rw-r--r-- | share/examples/isdn/contrib/answer.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/share/examples/isdn/contrib/answer.c b/share/examples/isdn/contrib/answer.c new file mode 100644 index 0000000..da19aa9 --- /dev/null +++ b/share/examples/isdn/contrib/answer.c @@ -0,0 +1,178 @@ +// $FreeBSD$ +// changed ".g711a" to ".al" (-hm) +// Tue Mar 3 02:42:14 MET 1998 dave@turbocat.de +// started + +#define BLK_SIZE 2048 +#define SOX "/usr/local/bin/sox" +#define ALAWULAW "/usr/local/bin/alaw2ulaw" + +#include <stdio.h> +#include <time.h> + + FILE *device; + FILE *logfile; + char srcNum[30]; + char destNum[30]; + char argbuf[255]; + char tmpBuf[1024] = ""; + + +void writeToPhone (char *path) +{ + char buf[BLK_SIZE]; + FILE *srcfile; + int i = 0; + int readcount = 0; + + srcfile = fopen(path,"r"); + if (srcfile) { + for (i=0;i<BLK_SIZE;i++) { + buf[i] = '\0'; + } + readcount = BLK_SIZE; + i = 0; + do { + readcount = fread(buf,1, BLK_SIZE, srcfile); + fwrite(buf, 1, readcount, device); + i = readcount + i; +// fprintf(logfile,"%d read (%d)\n",i,readcount); + } while (readcount == BLK_SIZE); + + fclose(srcfile); + } else { + fprintf(logfile,"Can't open file '%s'\n",path); + } +} + +void readFromPhone (char *path) +{ + char buf[BLK_SIZE]; + FILE *destfile; + int i = 0; + int readcount = 0; + + destfile = fopen(path,"a"); + if (destfile) { + for (i=0;i<BLK_SIZE;i++) { + buf[i] = '\0'; + } + readcount = BLK_SIZE; + i = 0; + do { + readcount = fread(buf,1, BLK_SIZE, device); + fwrite(buf, 1, readcount, destfile); + i = readcount + i; +// fprintf(logfile,"%d read (%d)\n",i,readcount); + } while (readcount == BLK_SIZE); + + fclose(destfile); + } else { + fprintf(logfile,"Can't open file '%s'\n",path); + } +} + +void usage (void) +{ + fprintf(stderr,"Usage: answer -D device -d destination -s source\n"); + exit(1); +} + +const char * argWithName (const char* aName) +{ + // '-D /dev/null -d 82834 -s 3305682834' + int i = 0; + int optionSeen = 0; + int startpos = 0; + + for (i = 0; i < sizeof(tmpBuf);i++) { + tmpBuf[i] = '\0'; + } + + for (i = 0; i<strlen(argbuf);i++) { + if (optionSeen) { + for (;(i<strlen(argbuf) && (argbuf[i] != ' '));i++) { + } + i++; + startpos = i; + + for (;(i<strlen(argbuf) && (argbuf[i] != ' '));i++) { + } + strncpy(tmpBuf,&argbuf[startpos], i-startpos); + + return tmpBuf; + } + if (0 == strncmp(aName,&argbuf[i], strlen(aName))) { + optionSeen = 1; + } + } + + usage(); + return NULL; +} + +int main (int argc, const char *argv[]) { + + int i,pos = 0; + extern char *optarg; + extern int optind; + int bflag, ch; + char timeStr[50]; + char outfileName[1024] = ""; + char cmdStr[2048] = ""; + time_t now; + + now=time(NULL); + + strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now)); + + logfile = fopen("/var/log/answer.log","a"); + + fprintf(logfile,"%s Started\n",timeStr); + + pos=0; + for (i=1;i<argc;i++) { + sprintf(&argbuf[strlen(argbuf)],"%s ",argv[i]); + } + if (strlen(argbuf) > 2) { + argbuf[strlen(argbuf)-1] = '\0'; + } + + + device = fopen(argWithName("-D"),"r+"); + strcpy(destNum, argWithName("-d")); + strcpy(srcNum, argWithName("-s")); + + fprintf(logfile,"device '%s'\n", argWithName("-D")); + fprintf(logfile,"srcNum '%s'\n", srcNum); + fprintf(logfile,"destNum '%s'\n", destNum); + + + if (device) { + + strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now)); + + sprintf(outfileName,"/var/isdn/%s_%s_%s", timeStr, srcNum, destNum); + + writeToPhone ("/usr/local/lib/isdn/msg.al"); + readFromPhone (outfileName); + + sprintf(cmdStr,"/bin/cat %s | %s | %s -t raw -U -b -r 8000 - -t .au %s.snd", outfileName, ALAWULAW, SOX, outfileName); + fprintf(logfile,"%s\n",cmdStr); + system(cmdStr); + unlink(outfileName); + + fclose(device); + } else { + fprintf(logfile,"Can't open file '%s'\n",argWithName("-D")); + } + + now=time(NULL); + + strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now)); + + fprintf(logfile,"%s Done\n",timeStr); + fclose(logfile); + exit(0); // insure the process exit status is 0 + return 0; // ...and make main fit the ANSI spec. +} |