Asterisk 1.4.x spandsp und app_rxfax

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
Folgende Anleitung ausprobiert mit:
Asterisk 1.4.2 , 1.4.4, 1.4.7, 1.4.7.1
spandsp-0.0.3 (final)
app_rxfax.c / app_txfax.c Januar & Juni 2007 für Asterisk 1.4
asterisk.patch September 2006
Zielgruppe: alpha Tester ;)
Wozu: u.a. damit ich es nicht bis zur nächsten Asteriskversion wieder vergessen habe :rolleyes: und auch Tipps von anderen zu bekommen...


Spandsp
Als erstes installiert man spandsp, Infos dazu auf der spandsp Seite. Vorher sollte man aber noch die ältere Versionen deinstallieren. Bei Problemen vor ./configure noch autoconf auführen.

Unbedingt auch die Hinweise zur libtiff beachten; außerdem benötigt man noch autoconf (2.6) und automake. Ich selber habe keine extra Version installiert, sondern die von Debian 4.0 genommen.

Im [wiki=software:asterisk:anleitungen]IPPF Wiki[/wiki] gibt es dazu auch eine [wiki=software:asterisk:ein_fax_mit_astersik_entgegennehmen]Anleitung[/wiki]


App Inst
Danach entpackt man Asterisk und ändert die Buildskripte nach der Datei asterisk.patch von Hand, was recht einfach ist, es sind nur 3 Dateien: build_tools/menuselect-deps.in, configure.ac und makeopts.in.orig.
Oder man nimmt die von mir erstellte Datei (getestet mit Asterisk 1.4.4 und 1.4.7):
Anhang anzeigen spandsp_asterisk_1.4.4.patch.gz
und wendet diesen wie folgt an:
Code:
gunzip spandsp_asterisk_1.4.4.patch.gz
cd asterisk-1.4.7
patch -p0 < ../spandsp_asterisk_1.4.4.patch
(Asterisk und patch Pfad ggf. Anpassen)


Als nächstes kopiert man die Dateien app_txfax.c und app_rxfax.c nach asterisk-1.4.x/apps.
Zusätzlich muss noch die C Header Datei plc.h aus dem spandsp Quellverzeichnis in das Asteriskverzeichnis kopiert werden, z.B. so:
Code:
cp spandsp-0.0.3/src/spandsp/plc.h asterisk-1.4.7/include/asterisk

Ist das erledigt, kann man Asterisk kompilieren :
(alle Befehle im Asterisk Quellenverzeichnis)
Edit: Bei Asterisk 1.4.7.1 vor bootstrap.sh noch make distclean ausführen
Code:
./bootstrap.sh
und danach dann
Code:
./configure
Eventuell muss man noch den Pfad zu den spandsp Dateien angeben mit --with-spandsp=PATH , was bei mir nicht nötig war (Debian 4.0).

Nun mit
Code:
make menuselect
Asterisk anpassen. Hier muss unter Applications app_txfax und app_rxfax erscheinen und ausgewählt sein ( [*] ).
Mit
Code:
make
Asterisk kompilieren.
Danach kann man mit
Code:
ldd apps/app_rxfax.so
überprüfen, ob die Module auch gegen die spandsp Lib gelinkt wurden, was ungefähr so aussehen sollte:
Code:
ldd asterisk-1.4.7/apps/app_rxfax.so
        linux-gate.so.1 =>  (0xffffe000)
        libspandsp.so.0 => /usr/local/lib/libspandsp.so.0 (0xb7ec2000)
        libtiff.so.4 => /usr/lib/libtiff.so.4 (0xb7e6e000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7e5c000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d2b000)
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d05000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb7ce5000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7cd1000)
        /lib/ld-linux.so.2 (0x80000000)
Nun noch Asterisk installieren und fertig.

Quellen:
http://www.voip-info.org/wiki/view/app_rxfax+and+app_txfax
(s. Kommentare)
http://soft-switch.org/

Todo:
- app_txfax und app_rxfax trennen die Verbindung nicht (immer), mini patch von callweaver und/oder TIMEOUT(absolute) beschreiben.
-- s. nächster Beitrag
- tiff probleme, kurz: z.Zt. verwende ich:
Code:
/usr/bin/gs -dQUIET -dBATCH -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/tmp/fax.tif /tmp/fax.pdf
- das ganze nochmal überarbeiten :-Ö
(und dann kann das vielleicht mal ins Wiki)
 
Zuletzt bearbeitet:
Testpatche für ein und nur ein einziges Symtom des Hangup Problem.
Die Zeile stammt aus dem callweaver Quelltext, jeweils aus app_rxfax.c und app_txfax.c
(c) s. dort (GPL)

Die Logausgabe kann man auch entfernen, sie dient lediglich zum Testen.
(oder LOG_WARNING durch LOG_NOTICE ersetzten)

app_txfax.c
Code:
--- app_txfax.c.org 2007-01-22 17:25:30.000000000 +0100
+++ app_txfax.c 2007-07-09 12:51:29.000000000 +0200
@@ -221,7 +221,13 @@
         t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
         while (ast_waitfor(chan, -1) > -1)
         {
-            inf = ast_read(chan);
+            if ((fax.current_rx_type == T30_MODEM_DONE) || (fax.current_tx_type == T30_MODEM_DONE))
+           {
+               ast_log(LOG_WARNING, "FAX T30_MODEM_DONE \n");
+               break;
+           }
+
+           inf = ast_read(chan);
             if (inf == NULL)
             {
                 res = -1;

app_rxfax.c

Code:
--- app_rxfax.c.org 2007-01-22 17:25:08.000000000 +0100
+++ app_rxfax.c 2007-07-09 12:56:37.000000000 +0200
@@ -293,7 +293,13 @@
         t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
         while (ast_waitfor(chan, -1) > -1)
         {
-            inf = ast_read(chan);
+
+           if ((fax.current_rx_type == T30_MODEM_DONE) || (fax.current_tx_type == T30_MODEM_DONE))
+           {
+               ast_log(LOG_WARNING, "FAX T30_MODEM_DONE \n");
+               break;
+           }
+           inf = ast_read(chan);
             if (inf == NULL)
             {
                 res = -1;


Das ist nur ein Test, funktioniert bei mir im Test (!) Betrieb mit ein paar wenigen Faxen gut.

Wenn man sich denn callweaver Quelltext anschaut, sieht man, das noch einiges in den Asterisk app_t/rxfax Dateien fehlt (auch wenn man T38 weglässt.)
Dass dürfte wohl auch der Grund sein, wieso die Asterisk Dateien "test-apps-asterisk-x" heißen.
 
Zuletzt bearbeitet:
Ich habe das ganze nochmal überarbeitet, u.a.
- alle Patche getestet und mit Asterisk 1.4.7 kompiliert & ausgeführt.
- auch mehrseitige Faxe getestet (...)

Wer das ganze dauerhaft einsetzten will, sollte Asterisk mit safe_asterisk oder ähnlichem starten (z.B. Überwachung cron)


x
Setzt noch jemand spandsp+app_r/txfax+Asterisk-1.4 ein?
Wenn ja, wie gut/schlecht funktioniert es?
 
Ggf. eine dumme aber dafür auch kurze Frage: Funktioniert diese Lösung nur mit isdn oder auch SIP?
 
Theoretisch geht das mit jedem Kanal, also auch mit SIP und a/ulaw.
Aber T.38 wird nicht unterstützt, das geht nur mit callweaver.org
 
@cibi:
Bin haargenau Deiner Beschreibung nachgegangen, wie auch zuvor der VoIP-Info-Site.
Kompilieren lässt sich spandsp - wie auch r/txfax - einwandfrei, beim Aufruf von app_rxfax schmiert * aber gnadenlos ab.

Code:
ldd apps/app_rxfax.so
Genau dort scheint mein Problem zu liegen, denn bei mir will es zum verrecken nicht richtig verlinken - warum auch immer
Code:
ldd apps/app_rxfax.so
        linux-gate.so.1 =>  (0xffffe000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7f67000)
        libc.so.6 => /lib/libc.so.6 (0xb7e1d000)
        /lib/ld-linux.so.2 (0x80000000)
ist alles, was bei mir verlinkt wird.

Einziger Unterschied zum Ablauf bei mir im Gegensatz zu Dir ist, dass r/txfax bei menuselect unter apps nicht auftaucht...
Dennoch kompiliert * sie mit. Bei ./configure wird spandsp ja auch gefunden und (scheinbar) verwendet.

Getestet mit * v1.4.7.1 und 1.4.11.1 unter gentoo-x86

Was mach' ich bloß falsch? Unter * v0.9.x und v1.2.x hatte ich seinerzeit das Problem mit spandsp und r/txfax nicht. Lief auf 40 Kisten 2 Jahre lang sehr stabil im Dauerbetrieb.

edit: Mit * v1.4.11.1 hat's dann doch noch hingehauen, nachdem ich make distclean ausgeführt habe ;)
Beim "frischen" 1.4.7.1 nicht. Dafür geht's wiederum beim nagelneuen 1.4.12.1
 
Zuletzt bearbeitet:
Jemand schrieb mir mal in einer EMail das passende:
on my server spandsp is working every other version ;)

War leider in letzter Zeit nicht allzu oft auf ippf, daher konte ich leider nicht helfen.
BTW: Vielen Dank das du 1.4.12.1 schon getestet hast

Lief auf 40 Kisten 2 Jahre lang sehr stabil im Dauerbetrieb.
Sehr schön zu hören (ich setzte das nicht gerade unter Last ein ;)
Meiner Meinung ist das Problem meistens app_t/rxfax+Asteriskintegration und nicht spandsp selbst - letzteres wird nämlich auch bei IAXmodem verwendet.
 
BTW: Vielen Dank das du 1.4.12.1 schon getestet hast
Jo, gerne; rxfax schmiert zwar nicht mehr ab, dafür kommt es über die Trainingsphase aber wohl nicht hinaus (getestet via Tobit David).
Da ich mittlerweile aber auch die Faxen dicke habe ;) bin ich heute auf die Lösung spandsp/iaxmodem/hylafax umgestiegen. Nun klappt alles wie es sollte und das auch aus dem LAN heraus.

Quellen:
http://www.das-asterisk-buch.de/unstable/faxserver-mit-iaxmodem-und-hylafax.html
http://de.gentoo-wiki.com/FAX_Server

Bisher hatte ich einen Mix aus AVM-USB (chan-capi/TE) und HFC-USB/NT (chan-misdn), der Faxe über capicommand sehr zuverlässig empfing, wollte aber das AVM-Teil mangels Kernel-Support seitens AVM einmotten.
Nun geht alles prima über HFC-USB/TE, die Phones sind jetzt nur noch SIP und SCCP und gut ist.
 
Ich will aber keine Hylafax :heul: ;)
Ich hatte das vor Urzeiten mal ausprobiert und war nicht allzu begeistert...

Na ja, z.Zt. läuft läuft es bei mir noch, da aber der Entwickler von spandsp/app_..fax eher an callweaver arbeitet ist wohl nicht mit einer Besserung unter Asterisk zu rechnen.
 
Ich will aber keine Hylafax
Ich hatte das vor Urzeiten mal ausprobiert und war nicht allzu begeistert
Du, so ging mir das auch laaaaange Zeit. Und so wirklich überzeugt bin ich immer noch nicht von Hylafax, aber die vielen Tests gestern haben mich fast schon eines besseren belehrt; Hylafax war nicht aus der Ruhe zu bringen und versorgte eingehende, wie ausgehende Faxe (auch aus dem LAN inkl. Windoof) sehr stabil und zuverlässig mit bis zu 14.400 Baud inkl. Zustellung per Mail - ohne dass ich dabei groß etwas dazu beigetragen habe (Dank des prima Buchs von Stefan! :huhu: )
 
Spandsp / rxfax

Also bei mir läuft Spandsp mit Asterisk 1.4.13 eigentlich ziemlich gut, nur
beim Empfang muss der Sender zum Teil 4 bis 5 mal senden bis es erfolgreich bei uns ankommt. Hat das auch schon jemand festgestellt?
 
Bei mir läuft das Fax-Programm in der Kombination

mISDN-1.1.6/spandsp-0.0.3/asterisk-1.4.12

recht stabil. Dennoch sind mir bei callweaver einige Änderungen aufgefallen, die die Stabilität vielleicht positiv beeinflussen könnten. Dort wurde die eigentliche Empfangsfunktion aus der Schleife in rxfax_exec () herausgenommen und in die separate Funktion rxfax_t38() gelegt. In dieser Funktion wird an einigen Stellen nachgefragt, ob der Kanal aktiv ist und die Funktion sonst verlassen.

Zentrale Vorgehensweise beim Faxempfang ist wohl die Abfrage der Funktion ast_waitfor () bzw. opbx_waitfor () in einer while-Schleife. Hier wurde bei Asterisk als Timeout -1 gewählt, was sicher das Aufhängen der Funktion zu Folge haben kann. callweaver wählte 20 ms. Das ist vielleicht etwas kurz?

Zudem wird bei callweaver die Funktion t38_terminal_send_timeout (), was die Stabilität weiter erhöhen dürfte.

Da meine Erfahrung mit Asterisk-Programmierung gleich Null ist, würde ich mich freuen, wenn andere diese Anregung aufgreifen würden.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,840
Beiträge
2,219,268
Mitglieder
371,543
Neuestes Mitglied
Brainbanger
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.