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...

[hr]Spandsp[/hr]

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]

[hr]App Inst[/hr]

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:

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
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:

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
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)

[hr]x[/hr]

Setzt noch jemand spandsp+app_r/txfax+Asterisk-1.4 ein?
Wenn ja, wie gut/schlecht funktioniert es?
 

hurricane

Neuer User
Mitglied seit
30 Mrz 2005
Beiträge
53
Punkte für Reaktionen
0
Punkte
0
Ggf. eine dumme aber dafür auch kurze Frage: Funktioniert diese Lösung nur mit isdn oder auch SIP?
 

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
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
 

Larry

Neuer User
Mitglied seit
30 Aug 2004
Beiträge
96
Punkte für Reaktionen
0
Punkte
0
@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:

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
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.
 

Larry

Neuer User
Mitglied seit
30 Aug 2004
Beiträge
96
Punkte für Reaktionen
0
Punkte
0
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.
 

cibi

Mitglied
Mitglied seit
6 Apr 2005
Beiträge
561
Punkte für Reaktionen
0
Punkte
0
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.
 

Larry

Neuer User
Mitglied seit
30 Aug 2004
Beiträge
96
Punkte für Reaktionen
0
Punkte
0
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: )
 

patrickv

Neuer User
Mitglied seit
26 Okt 2006
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
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?
 

akreisel

Neuer User
Mitglied seit
25 Okt 2004
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
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.