2017-05-11 3 views
1

Ich entwickle eine IOS App mit pjsip-2.6 und IPV4 sip server. Erste Build pjsip mit dem folgenden Code in configsite.hPJSIP Registrierung zu IPV4 Server von Nat64 Netzwerk in IOS

#define PJ_HAS_IPV6 1 

build bekam erfolgreich. Dann habe ich die Bibliotheken in mein Projekt hinzugefügt. Starten Sie die Anwendung in IPV4 network.Its erfolgreich registriert und Sprachanruf funktioniert gut. Dann wechselte ich das Netzwerk zu Apple Nat64 Netzwerk .. Nichts funktioniert. Hier ist mein Code-Schnipsel.

Zum Erstellen udp Transport auf IPV4 habe ich den folgenden Code verwendet.

pjsua_transport_config cfg; 
    pjsua_transport_config_default(&cfg); 
    cfg.port = 5060; 
    // Add UDP transport. 
    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, &transport_id); 
    if (status != PJ_SUCCESS) error_exit("Error creating transport", status); 

Für auf IPV6 Erstellen Transport verwendet i den folgenden Code ..

pjsua_transport_config cfg; 
    pjsua_transport_config_default(&cfg); 
    cfg.port = 5070; 
    // Add UDP transport for ipv6 
    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP6, &cfg, &transport_id_udp6); 
    if (status != PJ_SUCCESS) error_exit("Error creating transport", status); 

für das Konto in IPV6 Netzwerk zu schaffen i hinzugefügt ..

acc_cfg.cred_info[0].username = pj_str((char*)uname); 
    acc_cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; 
    acc_cfg.cred_info[0].data = pj_str((char *)passwd); 
    acc_cfg.cred_info[0].realm = pj_str("*"); 
    acc_cfg.cred_info[0].scheme=pj_str((char*)"Digest"); 

    char regUri[PJSIP_MAX_URL_SIZE]; 
    sprintf(regUri, "sip:%s", sip_server); 
    acc_cfg.reg_uri = pj_str(regUri); 

    acc_cfg.ipv6_media_use = PJSUA_IPV6_ENABLED; 
    acc_cfg.transport_id = transport_id_udp6; 

Es wäre besser, wenn jemand kann mich auf das Problem hinweisen. Jede Hilfe würde geschätzt werden.

+0

Ich denke, Sie müssen einige Protokolle bereitstellen. PJSIP stellt eine Vielzahl von Informationen zu Protokollen zur Verfügung, was zur Untersuchung von Problemen beitragen kann. –

Antwort

2

Ich denke, Sie sind nicht in der Lage, den Transport im IPV6-Netzwerk zu erstellen.

Ein Patch verfügbar für diese (Link: https://github.com/johanlantz/pj-nat64) Sie müssen diesen Patch für NAT64 Problem unten sind die folgenden Schritte zu integrieren.

1) Laden Sie die pj-nat64-Quelle von oben Link.

2) Entpacken die Datei zu kopieren und pj-nat64.c Datei Einfügen in die pjproject (bedeutet pjsip Quelle) (Pfad: pjsip/src/pjsua-lib)

3) Kopieren pj-nat64.h Datei einfügen in das pjproject (bedeutet pjsip source) (Pfad ist: pjsip/include/pjsua-lib)

4) Müssen die pj-nat64.o im Makefile von pjsip hinzufügen (Make Dateipfad ist: pjsip/bauen)

5) die Make-Datei öffnen und für die Zeichenfolge im Doppel Anführungszeichen „Definiert für den Aufbau PJSUA-LIB-Bibliothek“ dort suchen fügen Sie den pj-nat64.o nach pjsua_vid.o

6) Kompilieren Sie die pjsip Quelle für alle Architektur und nehmen Sie die Bibliothek-Dateien und Header-Dateien

7) Nach Pjsua_start Methode zurück Erfolg hat. Fügen Sie die folgenden Zeilen ein.

# if definiert (PJ_HAS_IPV6) & & PJ_HAS_IPV6 == 1

pj_nat64_enable_rewrite_module();

#endif

8) Fügen Sie den folgenden Code in on_reg_state2() -Methode für Anrufe.

the_transport = rp->rdata->tp_info.transport; 
    NSLog(@"transport called %s",the_transport->factory->type_name); 

    if (the_transport->factory->type & PJSIP_TRANSPORT_IPV6) 
    { 
     ipv4=FALSE; 
     NSLog(@"enter into the ipv6 loop "); 
     pjsua_var.acc[0].cfg.ipv6_media_use=PJSUA_IPV6_ENABLED ; 
     nat64_options option=NAT64_REWRITE_INCOMING_SDP | NAT64_REWRITE_ROUTE_AND_CONTACT; 
     pj_nat64_set_options(option); 
    } 
+0

das github projekt du sagst mir zu fügen ist es nicht für laden methode ... transport schafft in ipv6 netzwerk..wird bereitgestellt info arbeit für die registrierung? –

+0

Geben Sie die Registrierungs-SIP-Protokolle an. Damit ich nachschaue, was falsch läuft –

Verwandte Themen