home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Ronny Ziegler
Vertaald door: Guus Snijders
Languages: en de cn
Help Ons!
 

Web2fax gateway

Fax-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:

Fax formulier

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 restart
  
of, 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>";
  


(download faxout en hernoem deze naar faxout.cgi)

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.cgi
  
De 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_jobs
  
Dan maken we een script genaamd htmlfax.sh

File /root/.cron_jobs/htmlfax.sh
  

#!/bin/sh /tmp/.fax/fax_script.* sleep 2 rm /tmp/.fax/fax_script.* rm /tmp/.fax/fax_test.* #END



Dan maken we het script uitvoerbaar:

  >> chmod u+x /root/.cron_jobs/htmlfax.sh
  
Dit 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
  

0-55/15 * * * * /root/.cron_scripts/htmlfax.sh > /dev/null



De crontab kun je bewerken met grafische frontends, zoals VCron of Kcrontab of met de commando-regel instructie (als root!)

  >> crontab -e
  
Deze 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).