2015-04-24 25 views
7

Sto lavorando con pjsip per iOS, ho configurato il pjsip e sono in grado di registrarlo e registrarlo per un intervallo di tempo specifico, ma c'è uno scenario in cui voglio cambiare i dettagli dell'account pjsip al momento della registrazione con nuovi dettagli ma non ho trovato nulla su google che possa guidare come cambiarlo.Come cambiare l'account del registro pjsip al momento della ri-registrazione?

Se qualcuno ha un'idea su questo per favore mi guidi attraverso come modificare i dettagli di pjsua_acc_config al momento della re registrazione, ottengo la chiamata al metodo al momento della re registrazione.

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

ciò dettagli conto, stai cercando di cambiare? – jkr

+0

Come la prima volta che ho registrato un utente con sip usando i dettagli di pjsua_acc_config e ora l'utente connesso, quindi se il server dei casi va giù così voglio che la configurazione possa cambiare. – Retro

risposta

2

configurazione get conto per conto id, e impostare i campi a qualsiasi richiesta in on_reg_state2 funzione.

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

Ho aggiunto acc_cfg.id = pj_str (sipId); acc_cfg.reg_uri = pj_str (regUri); in questo blocco perché voglio cambiarli solo ma non funzionano, sto ricevendo sempre lo stesso registrar, non uno aggiornato. – Retro

+2

Questo codice non sta facendo molto salvo la modifica di alcune variabili locali (basate sullo stack). Chiamare pjsua_acc_modify in realtà farebbe qualcosa, anche se non sono sicuro che la modifica dell'account all'interno del callback dell'account sia effettivamente una buona idea - potrebbe funzionare ed essere al sicuro ora (cioè con specifica versione di pjsip) ma preferirei impostare qualche flag qui e poi fare effettivamente modifica dal thread dell'applicazione. – TMSZ

+1

@TMSZ Ho usato pjsua_acc_modify ma ancora non ho avuto fortuna con quello, quale potrebbe essere l'alternativa per gestire questo scenario? – Retro

-1

Questa guida consente di recomendationabout PJSIP È possibile fare clic su questo PJSIP

0

'come stesso registro re. rimuovere conto corrente e aggiungere uno nuovo

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."]; 
}