Web2fax gateway
Als je een modem hebt, wil je misschien ook faxen versturen vanaf je PC.
Een web frontend maakt het mogelijk om alle gebruikers op het lokale
netwerk dezelde modem te laten gebruiken.
faxen versturen over het netwerk
Er zijn meerdere software oplossingen om faxen vanuit het hele netwerk met een Hylafax server te versturen. De server kan, via special clients, een fax versturen of een inkomende lezen.
Er is een enorm aantal beschikbare clients, de SuSE java client lijkt een van de beste oplossingen, omdat deze onafhankelijk van het besturingssyteem kan worden gebruikt. Het nadeel is dat dit client programma op iedere computer moet worden geïnstalleerd en dat de admin vragen van gebruikers kan verwachten omdat het programma niet snel een prijs zal winnen voor het gebruiksgemak.
De eenvoudigste oplossing voor de gebruiker is een eenvoudig web frontend waar je de tekst en telefoonnummer opgeeft en de rest automatisch gaat.
Een zelfgemaakt frontend
Wij zijn ambitieus genoeg om zo'n web frontend helemaal zelf te schrijven,
in plaats van bestaande oplossingen.
Als al moe wordt bij het idee van zoveel werk, kun je jezelf geruststellen
omdat we niet code noig hebben.
Als de webserver en de hylafax server op dezelfde computer hoef je de
netwerk-mogelijkheden van hylax niet te gebruiken; je kunt de fax direct
overhandigen.
Note: In de volgende instructies gaan we er vanuit
dat er reeds een werkende hylafax server is geïnstalleerd.
Step I: De web pagina
We beginnen met het maken een pagina waar de gebruiker de tekst voor de fax opgeeft. Hiervoor maken we een subdirectory Fax op de webserver en daaronder een tweede, genaamd cgi-bin, hierin komt het script:
>> mkdir /usr/local/httpd/htdocs/Fax >> mkdir /usr/local/httpd/htdocs/Fax/cgi-bin(Onder SuSE is de directory van de webserver /usr/local/httpd/htdocs/ . Dit kan per distributie anders zijn, zoals /var/www of /home/www .)
Dan maken we het volgende web formulier:
| File /usr/local/httpd/htdocs/Fax/index.html |
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<title>Homepage</title>
</head>
<body>
<form METHOD=POST action="/Fax/cgi-bin/faxout.cgi">
<pre>
Ontvanger <input type="text" name="ToName" size=30>
Fax nummer <input type="text" name="ToNumber" size=20>
<input type="hidden" name="ToCompany" value=" "
size=20>
<input type="hidden" name="FromName"
value="my@email.de" size=30>
<hr>
Onderwerp <input type="text" name="Regarding" size=30>
<center>
Tekst:
<textarea name="Comments" rows=10 cols=60></textarea>
</center>
</pre>
<center>
<input type="submit" value="Send fax!"> <input type="reset"
value="Delete">
</center>
</body>
</html>
|
Het resultaat ziet er uit als:
Grafische decoratie is natuurlijk toegestaan, zolang de <input>-tags maar blijven staan.
Stap II: Apache aanpassen
Omdat het cgi script, dat de ingevoerde tekst doorgeeft aan de fax server,
zich in dezelfde subdirectory bevindt voor beter overzicht, moet je Apache
vertellen dat cgi scripts ook in die directory mogen worden gestart.
Hiervoor voeg je de volgende entry toe in het bestand /etc/httpd/srm.conf,
bij de bestaande entries:
| File /etc/httpd/srm.conf |
#ScriptAlias: geeft aan welke directories server scripts bevatten. #Format: ScriptAlias nepnaam echtenaam ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" ScriptAlias /Fax/cgi-bin/ "/usr/local/httpd/htdocs/Fax/cgi-bin" |
Vervolgens moet je de Apache server herstarten voor de nieuwe voorkeuren:
(In SuSE)
>> /sbin/init.d/apache restart(In RedHat)
>> /etc/rc.d/init.d/apache restartof, als dat niet werkt: Reboot (al is het pijnlijk dit aan te raden).
Stap III: Het cgi script
Het eigenlijke script is snel geschreven, hij hoeft alleen maar de
geschreven data op teslaan in de directory /tmp/.fax, vanwaar
de tekst aan de server wordt gegeven door middel van een cronjob in de
volgende stap.
Het script "faxout.cgi zou zich altijd in de subdirectory
"cgi-bin in de directory Fax moeten bevinden.
| File /usr/local/httpd/htdocs/Fax/cgi-bin/faxout.cgi |
#!/usr/bin/perl
require "flush.pl";
$| = 1;
$tmpfaxcover="/tmp/.fax/faxcover.$$";
$faxcover='faxcover'; # location of faxcover binary
use CGI;
$query = new CGI;
require "ctime.pl";
$tt = &ctime(time());
chop($tt);
$sendfax = "/usr/bin/sendfax";
print STDOUT "\n\n";
print $query->dump;
print"<pre>";
@fax = $query->param('fax');
$to = $query->param('ToName');
$phone = $query->param('ToNumber');
$company = $query->param('ToCompany');
$from = $query->param('FromName');
$cover = $query->param('Cover');
$regard = $query->param('Regarding');
$comments = $query->param('Comments');
$comment =~ s/\n//g;
$comment =~ s/\r//g;
push(@args, '-P', 'high');
push(@args, '-m', '-D');
push(@args, '-f', "$from");
push(@args, '-d', "$phone");
push(@args, '-n');
push(@args, "@fax");
push(@args, "/tmp/.fax/fax_test.$$");
print"Performing $sendfax @args\n";
open(TEST, ">>/tmp/.fax/fax_test.$$");
print TEST "$comments";
close(TEST);
open(LOG, ">>/var/spool/fax/log/sendlog");
print LOG "$tt web $sendfax @args\n";
close(LOG);
open(SCR, ">>/tmp/.fax/fax_script.$$");
print SCR "#!/bin/sh\n";
print SCR "$sendfax @args\n";
close(SCR);
&flush(STDOUT);
system("chmod og+x /tmp/.fax/fax_script.$$");
&flush(STDOUT);
print "</pre>";
print "<p><hr><p><center><h1>Fax was
sent!</h1></center>";
|
Dit script moet van de juiste permissies worden voorzien, zodat de webgebruikers het kunnen starten. Gebruik hiervoor (als root):
>> chmod og+x /usr/local/httpd/htdocs/Fax/cgi-bin/faxout.cgiDe subdirectory /tmp/.fax moet worden aangemaakt: hier worden de geschreven teksten tijdelijk opgeslagen:
>> mkdir /tmp/.fax
Stap IV: De cron job
Het eigenlijk werk wordt gedaan door een ander script dat wordt gestart
met een cron job.
Met dit script worden de geschreven teksten in de directory
/tmp/.fax aan de Hylafax server gegeven.
Om beveiligingsredenen zou je dit script in de /root directory
moeten plaatsen.
Ook zou je daar de subdirectory .cron_jobs moeten maken, om daar
regelmatig alle scripts op te slaan die door root gestart moeten worden.
>> mkdir /root/.cron_jobsDan maken we een script genaamd htmlfax.sh
| File /root/.cron_jobs/htmlfax.sh |
|
Dan maken we het script uitvoerbaar:
>> chmod u+x /root/.cron_jobs/htmlfax.shDit script zal regelmatig naar te-versturen faxen zoeken in de de directory /tmp/fax.
Hiervoor gebruik je een entry in de crontab:
| Entry in crontab |
|
De crontab kun je bewerken met grafische frontends, zoals VCron of Kcrontab of met de commando-regel instructie (als root!)
>> crontab -eDeze entry verstuurt iedere 15 minuten alle nieuwe faxen naar hun ontvangers.
Met een iets aangepaste entry is het ook mogelijk om de faxen alleen op bepaalde tijden te laten verzenden (18.00u 's middags bijvoorbeeld), om zo gebruik te maken van lagere telefoon tarieven.
Stap V: Veel plezier
De web2fax gateway is nu klaar voor gebruik en kan direct getest worden.
Natuurlijk biedt deze eenvoudige oplossing niet veel comfort, maar is wel
erg robuust. In dit voorbeeld kun je goed zien hoe verschillende
onderdelen van een UNIX systeem kunnen samenwerken.
Met een kleine investering in programmeren kun je een hoop functionaliteit
krijgen.
Sommige "besturingssystemen" zouden een voorbeeld moeten nemen aan deze les in gemak (vooral op het gebied van services).