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

Sleepy

Neuer User
Mitglied seit
5 Okt 2005
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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
 

Sleepy

Neuer User
Mitglied seit
5 Okt 2005
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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
 

lo4dro

Mitglied
Mitglied seit
14 Okt 2004
Beiträge
656
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für den Bugfix.
Wird das offizielles?
 

Sleepy

Neuer User
Mitglied seit
5 Okt 2005
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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.
 

lo4dro

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

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

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
234,367
Beiträge
2,045,545
Mitglieder
354,020
Neuestes Mitglied
danies