PJ_DECL(pj_status_t) csipsimple_set_acc_user_data(pjsua_acc_id acc_id, csipsimple_acc_config* css_acc_cfg){ csipsimple_acc_config *additional_acc_cfg = PJ_POOL_ZALLOC_T(css_var.pool, csipsimple_acc_config); pj_memcpy(additional_acc_cfg, css_acc_cfg, sizeof(csipsimple_acc_config)); pj_strdup(css_var.pool, &additional_acc_cfg->p_preferred_identity, &css_acc_cfg->p_preferred_identity); pjsua_acc_set_user_data(acc_id, additional_acc_cfg); return PJ_SUCCESS; }
SipAccount::~SipAccount() { Logger::debug("SipAccount::~SipAccount()..."); m_pPhone = NULL; if (m_accId == -1) { return; } (void)pjsua_acc_set_user_data(m_accId, NULL); pj_status_t status = pjsua_acc_del(m_accId); m_accId = -1; if (status != PJ_SUCCESS) { Logger::warn("pjsua_acc_del() failed (%s)", Helper::getPjStatusAsString(status).c_str()); } }
bool SipAccount::add(struct SettingSipAccount* pSettings) { Logger::debug("SipAccount::add(%s)...", pSettings->toString().c_str()); m_settings = *pSettings; // strcut copy // prepare account configuration pjsua_acc_config cfg; pjsua_acc_config_default(&cfg); std::ostringstream user_url_ss; user_url_ss << "sip:" << m_settings.fromUsername << "@" << m_settings.fromDomain; std::string user_url = user_url_ss.str(); std::ostringstream provider_url_ss; provider_url_ss << "sip:" << m_settings.fromDomain; std::string provider_url = provider_url_ss.str(); // create and define account cfg.id = pj_str((char*)user_url.c_str()); cfg.reg_uri = pj_str((char*)provider_url.c_str()); cfg.cred_count = 1; cfg.cred_info[0].realm = pj_str((char*)m_settings.fromDomain.c_str()); cfg.cred_info[0].scheme = pj_str((char*)"digest"); cfg.cred_info[0].username = pj_str((char*)m_settings.fromUsername.c_str()); cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; cfg.cred_info[0].data = pj_str((char*)m_settings.fromPassword.c_str()); // add account pj_status_t status = pjsua_acc_add(&cfg, PJ_TRUE, &m_accId); if (status != PJ_SUCCESS) { Logger::error("pjsua_acc_add() failed (%s)", Helper::getPjStatusAsString(status).c_str()); return false; } status = pjsua_acc_set_user_data(m_accId, this); if (status != PJ_SUCCESS) { Logger::error("pjsua_acc_set_user_data() failed (%s)", Helper::getPjStatusAsString(status).c_str()); return false; } return true; }