2015-04-24 674 views
7

Pracuję z pjsip dla iOS, skonfigurowałem program pjsip i mogę się zarejestrować i zarejestrować ponownie w określonym przedziale czasu, ale jest scenariusz, w którym chcę zmienić szczegóły konta pjsip w momencie ponownego rejestrowania się z nowymi danymi ale nie znalazłem nic na google, które może wskazywać, jak to zmienić.Jak zmienić konto rejestru pjsip w momencie ponownej rejestracji?

Jeśli ktoś ma pomysł na ten temat, poproś mnie o zmianę danych pjsua_acc_config w czasie ponownej rejestracji. Otrzymuję wywołanie metody w momencie ponownego zarejestrowania.

static void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info *info) { 
    PJ_LOG(3,(__FILE__, "%s: Account %d Reason %.*s Status %d code %d CurrentOp %d", 
       __FUNCTION__, acc_id, info->cbparam->reason.slen, info->cbparam->reason.ptr, 
       info->cbparam->status,info->cbparam->code, info->cbparam->regc)); 
} 
+0

co dane konto, starasz się zmienić? – jkr

+0

Po raz pierwszy zarejestrowałem użytkownika z sip przy użyciu szczegółów pjsua_acc_config, a teraz użytkownik jest podłączony, a następnie, jeśli jakikolwiek serwer przypadków zostanie wyłączony, chcę, aby ta konfiguracja mogła się zmienić. – Retro

Odpowiedz

2

uzyskać konfigurację konta dla identyfikatora konta i ustawić pola na dowolne wymagane w funkcji on_reg_state2.

if (pjsua_acc_is_valid(acc_id)) 
{ 
    pjsua_acc_set_default(acc_id); 
    pjsua_acc_config acc_cfg; 
    pj_status_t status; 
    pjsua_acc_config_default(&acc_cfg); 

    acc_cfg.id = pj_str(id); 
    acc_cfg.reg_uri = pj_str(registrar); 
    acc_cfg.cred_count = 1; 
    acc_cfg.cred_info[0].scheme = pj_str("Digest"); 
    acc_cfg.cred_info[0].realm = pj_str(realm); 
    acc_cfg.cred_info[0].username = pj_str(uname); 
    acc_cfg.cred_info[0].data_type = 0; 
    acc_cfg.cred_info[0].data = pj_str(passwd); 

    acc_cfg.publish_enabled = PJ_TRUE; 

    } 
+1

Dodałem acc_cfg.id = pj_str (sipId); acc_cfg.reg_uri = pj_str (regUri); do tego bloku, ponieważ chcę je tylko zmienić, ale nie działają, cały czas otrzymuję ten sam rejestrator, a nie aktualizowany. – Retro

+2

Ten kod nie robi wiele oprócz modyfikowania niektórych zmiennych lokalnych (opartych na stosach). Wywołanie pjsua_acc_modify faktycznie coś zrobiłoby, chociaż nie jestem pewien, czy modyfikowanie konta wewnątrz oddzwaniania na konto jest naprawdę dobrym pomysłem - może działać i być teraz bezpieczne (tj. Z konkretną wersją pjsip), ale wolałbym ustawić tutaj pewną flagę, a potem zrobić modyfikacja z wątku aplikacji. – TMSZ

+1

@ TMSZ Użyłem pjsua_acc_modify, ale wciąż nie mam z tym szczęścia, jaka może być alternatywa dla obsługi tego scenariusza? – Retro

-1

Jest to przewodnik dla recomendationabout PJSIP Możesz kliknąć ten PJSIP

0

jej jak sama jak rejestru re. usunąć konto bieżące i dodać nowy

if (_sip_acc_id != PJSUA_INVALID_ID){ 

    //  pjsua_acc_info info; 
    //  pjsua_acc_get_info(_sip_acc_id, &info); 
    // 
    //  if (info.has_registration){ 
    pj_status_t statusDelete = pjsua_acc_del(_sip_acc_id); 
    if (statusDelete != PJ_SUCCESS) 
    { 
     pjsua_perror(THIS_FILE, "Error removing new account", status); 
     [app displayParameterError: @"Error removing new account."]; 
    } 
    //  } 
} 

status = pjsua_acc_add(&acc_cfg, PJ_TRUE, &_sip_acc_id); 
if (status != PJ_SUCCESS) 
{ 
    pjsua_perror(THIS_FILE, "Error adding new account", status); 
    [app displayParameterError: @"Error adding new account."]; 
}