Direct IP Call

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Hallo, ich muss doch dieses Thema noch mal aufwühlen. Ich habe eine 7170 und ein bekannter hat eine 7050. Zwischen unseren Boxen ist ein VPN - Tunnel aufgebaut und es funktioniert alles ausgezeichnet. Alle Rechner sehen sich gegenseitig ...

Nun sind wir schon seit einiger Zeit dabei, per Direct IP Calling eine Telefonverbindungüber den VPN Tunnel aufzubauen. Hierzu haben wir schon alle Möglichkeiten, die wir über die Suchfunktion gefunden haben, ausprobiert. --> über Kurzwahlliste die Direktwahl anlegen (z.B. [email protected] oder sip:[email protected] oder [email protected] ... und alles mal mit dem Portangabe :5060, also alle möglichen Varianten. Die für "nick" stehenden User sind auch jeweils auf den Boxen eingerichtet (Registrar beliebig).
Wir bekommen so auch eine Telefonverbindung hin, allerdings läuft diese nicht über den VPN Tunnel. Hier hatte schon mal jemand das gleiche Problem mit seiner 7050. Im Log des Anrufers steht interesaanterweise "change 10.0.0.1 to 'öffentliche IP-Adresse'" und beim Empfänger erscheint dann auch der Anrufer als [email protected]

Vielleicht hat ja diesbezüglich jemand noch einen Rat.


Die nächste Frage wäre dann, ob man nicht einen einfachen kleinen SIP-Server in die Fritzbox bzw. in den DS-Mod integrieren könnte, der dann oben aufgeführtes Problem beseitigt ???
 
Hiermit sollte doch was zu machen sein:

http://sarwiki.informatik.hu-berlin...orks#Cross-Compilation_vom_SIP_Express_Router



*Schnipp*

Cross-Compilation vom SIP Express Router
Der SIP Express Router ist ein freier, vergleichsweise kleiner in C geschriebener SIP-Server. Er stellt einen SIP registrar, proxy und redirect server dar.

Das SIPatH-Projekt hat bereits fertige ipkgs für OpenWRT-Router.

Welche Tools zum Bauen verwendet werden sollen, kann man über die Umgebungsvariablen mitgeteilen. Z.B.

TARGET_CROSS=/home/foobar/wrt/buildroot/build_mipsel/staging_dir/bin/mipsel-linux-
export AR=${TARGET_CROSS}ar
export AS=${TARGET_CROSS}as
export LD=${TARGET_CROSS}ld
export NM=${TARGET_CROSS}nm
export CC=${TARGET_CROSS}gcc
export GCC=${TARGET_CROSS}gcc
export CXX=${TARGET_CROSS}g++
export RANLIB=${TARGET_CROSS}ranlib

*Schnapp*

--> Könnte hier jemand Entwicklungshelfer spielen ? ;-)
 
So, ich bin mal nach der Anleitung auf der Seite vorgegangen:

1. Umgebungsvariablen gesetzt (auf die Target Toolchain)
2. Libflex Sourcen heruntergeladen und die flexbinary erzeugt
3. SER-Sourcen runtergeladen, Makfile.defs angepasst

Beim Kompilieren bricht der Compiler dann irgendwann mit unten angefügert Fehlermeldung ab.
Kompiliere ich jedoch nicht mit der Target Toolchain, sondern der Kernel Toolchain, so läuft der Compiler durch!!! Allerdings läuft dann der SER nicht auf der ds-mod Fritzbox.
Also, hat jemand ein Tip ?


/home/avm/ds-0.2.6/toolchain/build/gcc-4.1.0-uClibc-0.9.26/mipsel-linux-uclibc/bin/mipsel-linux-gcc -Wl,-O2 -Wl,-E action.o crc.o daemonize.o data_lump.o data_lump_rpl.o dprint.o dset.o error.o fifo_server.o flags.o forward.o hash_func.o ip_addr.o main.o md5.o md5utils.o modparam.o msg_translator.o pass_fd.o proxy.o qvalue.o re.o receive.o resolve.o route.o route_struct.o script_cb.o socket_info.o sr_module.o stats.o tcp_main.o tcp_read.o timer.o tsend.o udp_server.o unixsock_server.o usr_avp.o mem/f_malloc.o mem/mem.o mem/memtest.o mem/q_malloc.o mem/shm_mem.o mem/vq_malloc.o parser/hf.o parser/msg_parser.o parser/parse_allow.o parser/parse_content.o parser/parse_cseq.o parser/parse_disposition.o parser/parse_diversion.o parser/parse_event.o parser/parse_expires.o parser/parse_fline.o parser/parse_from.o parser/parse_hname2.o parser/parse_hostport.o parser/parse_methods.o parser/parse_nameaddr.o parser/parse_param.o parser/parser_f.o parser/parse_rpid.o parser/parse_rr.o parser/parse_sipifmatch.o parser/parse_to.o parser/parse_uri.o parser/parse_via.o parser/digest/digest.o parser/digest/digest_parser.o parser/digest/param_parser.o parser/contact/contact.o parser/contact/parse_contact.o db/db.o db/db_fifo.o lex.yy.o cfg.tab.o /home/avm/ser-0.9.4/flex-2.5.4/libfl.a -ldl -lresolv -o ser
resolve.o: In function `get_record':resolve.c:(.text+0xe50): undefined reference to `__res_search'
collect2: ld returned 1 exit status
gmake: *** [ser] Fehler 1
avm@avm:~/ser-0.9.4>
 
deller schrieb:
resolve.o: In function `get_record':resolve.c:(.text+0xe50): undefined reference to `__res_search'

Schau dir mal diesen Kommentar an. Evtl. bringt dich das ja weiter.

EDIT: Irgendwie ist bei dem Archiv gerade was schief. Google-Cache zeigt aber noch die richtige Seite.

MFG pTweety
 
Zuletzt bearbeitet:
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver
 
olistudent schrieb:
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver


Kommt denn beim Starten auf der Box irgendeine Fehlermeldung?
 
Klar, kommt da ne Fehlermeldung.
Und zwar von der uac.c im Modul tm:
Code:
[I][COLOR=#b22222]/*
 * Initialize UAC
 */[/COLOR][/I]
[COLOR=#228b22][B]int[/B][/COLOR] [B][COLOR=#0000ff]uac_init[/COLOR][/B]([COLOR=#228b22][B]void[/B][/COLOR]) 
{
    str src[3];
    [COLOR=#228b22][B]struct[/B][/COLOR] socket_info *si;

    [B][COLOR=#a020f0]if[/COLOR][/B] (RAND_MAX < TM_TABLE_ENTRIES) {
        LOG(L_WARN, [COLOR=#bc8f8f][B]"Warning: uac does not spread "[/B][/COLOR]
            [COLOR=#bc8f8f][B]"across the whole hash table\n"[/B][/COLOR]);
    }
    [I][COLOR=#b22222]/* on tcp/tls bind_address is 0 so try to get the first address we listen
     * on no matter the protocol */[/COLOR][/I]
    si=bind_address?[B][COLOR=#5f9ea0]bind_address[/COLOR][/B]:get_first_socket();
    [B][COLOR=#a020f0]if[/COLOR][/B] (si==0){
        LOG(L_CRIT, [COLOR=#bc8f8f][B]"BUG: uac_init: null socket list\n"[/B][/COLOR]);
        [B][COLOR=#a020f0]return[/COLOR][/B] -1;
    }

    [I][COLOR=#b22222]/* calculate the initial From tag */[/COLOR][/I]
    src[0].s = [COLOR=#bc8f8f][B]"Long live SER server"[/B][/COLOR];
    src[0].len = strlen(src[0].s);
    src[1].s = si->address_str.s;
    src[1].len = strlen(src[1].s);
    src[2].s = si->port_no_str.s;
    src[2].len = strlen(src[2].s);

    MDStringArray(from_tag, src, 3);
    from_tag[MD5_LEN] = [COLOR=#bc8f8f][B]'-'[/B][/COLOR];
    [B][COLOR=#a020f0]return[/COLOR][/B] 1;
}
Fehlermeldung: BUG: uac_init: null socket list
socket_info.h:
Code:
...
[COLOR=#228b22][B]struct[/B][/COLOR] socket_info* tcp_listen;
[I][COLOR=#b22222]/* gets first non-null socket_info structure
 * (useful if for. e.g we are not listening on any udp sockets )
 */[/COLOR][/I]
inline [COLOR=#228b22][B]static[/B][/COLOR] [COLOR=#228b22][B]struct[/B][/COLOR] socket_info* [B][COLOR=#0000ff]get_first_socket[/COLOR][/B]()
{
    [B][COLOR=#a020f0]if[/COLOR][/B] (udp_listen) [B][COLOR=#a020f0]return[/COLOR][/B] udp_listen;
#[B][COLOR=#5f9ea0]ifdef[/COLOR][/B] [COLOR=#b8860b]USE_TCP[/COLOR]
    [B][COLOR=#a020f0]else[/COLOR][/B] [B][COLOR=#a020f0]if[/COLOR][/B] (tcp_listen) [B][COLOR=#a020f0]return[/COLOR][/B] tcp_listen;
#[B][COLOR=#5f9ea0]ifdef[/COLOR][/B] [COLOR=#b8860b]USE_TLS[/COLOR]
    [B][COLOR=#a020f0]else[/COLOR][/B] [B][COLOR=#a020f0]if[/COLOR][/B] (tls_listen) [B][COLOR=#a020f0]return[/COLOR][/B] tls_listen;
#[B][COLOR=#5f9ea0]endif[/COLOR][/B]
#[B][COLOR=#5f9ea0]endif[/COLOR][/B]
    [B][COLOR=#a020f0]return[/COLOR][/B] 0;
}
...
Leider kapier ich nicht wo tcp_listen einen Wert zugewiesen bekommt. Daher kann ich da auch nix machen...

MfG Oliver
 
olistudent schrieb:
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver

Wie hast das denn kompiliert bekommen? Muss da in make menuconfig etwas umgestellt werden. Oder wie funktioniert das mit der Verwendung einer anderen uClibc?
 
Ich hab die Funktion aus einer neuen uClibc geklaut und in die resolve.c eingefügt.

MfG Oliver
 
Unter welchen Bedingungen laufen denn Programme, die mit der Kernel-Toolchain bzw.(???) mit der glibc erstellt worden sind, auf der Fritzbox.

Momentan verwende ich die Originalfirmware und habe meine zusätzliche Software auf einem USB Stick (mit Startscript)

Einzige Änderung ist dann in der debug.cfg --> Aufruf des Startscripts auf dem USB-Stick.
 
Du musst das Programm statisch gegen die glibc linken.
Das könnte sehr groß werden!

MfG Oliver
 
hmm

Habe jetzt die libc.a gelinkt aber es kommt nach wie vor die Fehlermeldung

-sh: ./openser: not found


Nachtrag: kann man nicht auch eine neuere uclibc statisch linken?
 
Hi.
Klar kannst du auch gegen eine uClibc statisch linken.
Du hast den richtigen Compiler genommen und auch ein "chmod +x openser" ausgeführt?

MfG Oliver
 
Ich habe die Umgebungsvariablen hierher gesetzt:

.../ds-0.2.6/toolchain/build/gcc-3.3.2-glibc-2.3.2/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/bin

und diesen Complier verwendet er dann auch. Chmod + x habe ich auch gemacht
 
hmm, jetzt funktioniert es auf einmal *g* --> Buchstabendreher.

Und 2 MB statisch gelinkt ist ja nun nicht die Welt.
 
Mal am Rande eine Idee: Durch das VPN bekommt (zumindest eine) FB doch eine zusätzliche/andere IP. Außerdem wird der voipd doch vor dem VPN gestartet. Horcht der vielleicht nicht auf einer VPN-IP oder kommt mit den Routen nicht klar und läuft deshalb etwas Amok?

Ich weiß nicht, ob es auf der FBox überhaupt geht, trotzdem: Hast du mal ein VPN mit tap (also Ethernet Tunnel) probiert?
 
Also voip funktioniert einwandfrei. Jeder bekommt nur die Anrufe, die er auch bekommen soll. Die voip-Anrufe über den Tunnel funktionieren ebenfalls einwandfrei.

Mit openvpn haben wir eine Ethernetbrücke eingerichtet (udp und tap). Hierbei kommt keine IP-Adresse hinzu.

openser habe ich zwar in diversen lauffähigen Versionen übersetzt bekommen, allerdings kommt dann spätestens auf der Fritzbox Fehlermeldungen wie

undefined symbol 'tcp_children_no'

Mit einer uclibc0.9.28 kompilierten Version SIGSEGV. Was gibt es denn für Möglichkeiten, eine 0.9.28 er Version oder Openser aus dem openwrt Package auf der Fritzbox zum laufen zu bringen (chroot Umgebung / sqf Package ???)


Momentan habe ich den sip-server auf dem PC laufen. Wie gesagt, beide Fritzboxen melden sich hier sauber an und voip über den Tunnel funktioniert.

Die alten Tricks mit der Sipadresse im Telefonbuch laufen bei der Fritzbox 7170 leider nicht mehr. --> daher der Sipserver
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,695
Beiträge
2,216,692
Mitglieder
371,315
Neuestes Mitglied
jack-mack
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.