[visdn] Ziffern werden doppelt gewählt

lo4dro

Mitglied
Mitglied seit
14 Okt 2004
Beiträge
656
Punkte für Reaktionen
0
Punkte
0
Hallo Leute.

Ich wähle an meinem ISDN-Telefon 0123456
visdn wählt:

Code:
-- Executing Dial("VISDN/visdn0/122.I", "VISDN/visdn1/00112233445566|90|Ttr") in new stack
    -- Called visdn1/00112233445566

Hat jemad ne Idee?
Ich nutze zwei HFC-Karten, eine im NT- und die andere im TE- Modus.

Auserdem wird die "CALLERIDNUM" meines Endgerätes nicht übermittelt, es wird immer dieser default CLIP eingetragen.
 
Zuletzt bearbeitet:
Hallo,

das gleiche Problem habe ich auch, aber ich konnte feststellen,
dass die Ziffern nur doppelt kommen, wenn ich über meine EUMEX504PC wähle.
Wenn ich über ein ISDN-Telefon am S0-Bus wähle, interpretiert er die gewählte Nummer richtig.

Bei aktiviertem "debug visdn generic" sieht es so aus als ob er auch jeweils nur eine Ziffer erkennt.

Das Problem mit der CALLERID hab ich auch... aber sonst funktionierts ganz gut.

ich habe auf einem Debian Sarge aus den xorcom Quellen:

deb http://rapid.dotsrc.org/ unstable/
deb http://rapid.dotsrc.org/ experimental/

asterisk-classic (1.2.4) und amportal installiert

und vISDN:

http://www.visdn.org/download/snapshots/visdn-devel-20060307.tar.bz2

visdn.conf
Code:
[general]

[global]
tei = dynamic
network_role = private
tones_option = yes
outbound_called_ton = unknown
force_outbound_cli =
force_outbound_cli_ton = no
clir_mode = default_off
overlap_sending = Yes
overlap_receiving = No
cli_rewriting = No
national_prefix = 0
international_prefix = 00
network_specific_prefix =
subscriber_prefix =
abbreviated_prefix =
autorelease_dlc = 10

[visdn0]
network_role = private
context = from-internal
tones_option = yes
clir_mode = default_off
clip_enabled = yes
clip_default_number =
clip_numbers = _X.
cli_rewriting = no
language=nl
T302=6

_____________________

Sleepy
 
gelöst: Man nehme einen Editor ......

... und mache sich ans Werk.

Das hat mich so richtig aufgeregt, aber jetzt tuts.

Zur Erklärung wie ich drauf gekommen bin:

Ich habe ein paar zusätzliche Ausgaben in die Wählfunktion reingeschrieben, und dabei ist mir aufgefallen, dass mehrere DTMF-Frames mit der gleichen Ziffer ankommen.

Mein Programmcode wartet nach einem gültigen DTMF-Frame bis irgendein andersartiger Frame ankommt. (z.B. Pause zwischen den Tönen)

Und so gehts:

Also im Editor die Datei .../visdn-0.0.0/chan_visdn/overlap.c öffnen und folgende Funktion suchen:
Code:
static int visdn_exec_overlap_dial(struct ast_channel *chan, void *data)
{
        struct localuser *u;
        int retval = -1;
        int do_exit = FALSE;
        LOCAL_USER_ADD(u);

        char called_number[32] = "";

        while(ast_waitfor(chan, -1) > -1 && !do_exit) {
                struct ast_frame *f;
                f = ast_read(chan);
                if (!f)
                        break;

                if (f->frametype == AST_FRAME_DTMF)
                         do_exit = new_digit(chan, called_number,
                                         sizeof(called_number),
                                         f->subclass, &retval);

                ast_frfree(f);
        }

        LOCAL_USER_REMOVE(u);
        return retval;
}


und daraus machen wir dann:
Code:
static int visdn_exec_overlap_dial(struct ast_channel *chan, void *data)
{
        struct localuser *u;
        int retval = -1;
        int do_exit = FALSE;
        LOCAL_USER_ADD(u);
        int val;

        char called_number[32] = "";


        while(ast_waitfor(chan, -1) > -1 && !do_exit) {
                struct ast_frame *f;
                f = ast_read(chan);
                if (!f)
                        break;

                if (f->frametype == AST_FRAME_DTMF)
                {        do_exit = new_digit(chan, called_number,
                                         sizeof(called_number),
                                         f->subclass, &retval);
                }

                ast_frfree(f);

                do {
                    struct ast_frame *g;
                    g = ast_read(chan);
                    if (!g)
                        break;
                    val = g->frametype;
                    ast_frfree(g);

                } while (val == AST_FRAME_DTMF);
        }

        LOCAL_USER_REMOVE(u);
        return retval;
}

.... dann noch im Verzeichnis .../visdn-0.0.0/chan_visdn/
Code:
make
make install

... Asterisk neu starten und schon ist das Problem gelöst. ;)


Viel Spaß

wünscht Sleepy
 
Vielen Dank für den Bugfix.
Wird das offizielles?
 
lo4dro schrieb:
Vielen Dank für den Bugfix.
Wird das offizielles?

Gern geschehen.
Ich hab dem Herrn Daniele Orlandi auch ne mail zukommen lassen,
da sich in der Datei noch weitere kleine Fehler eingeschlichen haben.

Ich hoffe mal, dass ers übernimmt.
 
Hallo Sleepy.

Bei mir hat das nicht funktioniert.
Kannst du mir das File zukommen lassen?
Vielleicht liegt es noch an was anderem.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,696
Beiträge
2,216,700
Mitglieder
371,316
Neuestes Mitglied
realbluethunder
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.