freebsd-nq/share/examples/isdn/contrib/answer.c
Hellmuth Michaelis 9210280057 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.
2001-05-25 13:25:59 +00:00

179 lines
3.6 KiB
C

// $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.
}