2015-04-24 17 views
7

Tôi đang làm việc với pjsip cho iOS, tôi đã cấu hình pjsip và có thể đăng ký và đăng ký lại cho khoảng thời gian cụ thể, nhưng có một kịch bản mà tôi muốn thay đổi chi tiết tài khoản pjsip tại thời điểm đăng ký lại với các chi tiết mới nhưng tôi havent tìm thấy bất cứ điều gì trên google mà có thể hướng dẫn làm thế nào để thay đổi nó.Làm thế nào để thay đổi tài khoản đăng ký pjsip tại thời điểm đăng ký lại?

Nếu ai đó có ý tưởng về điều này, vui lòng hướng dẫn tôi cách thay đổi chi tiết pjsua_acc_config tại thời điểm đăng ký lại, tôi nhận được cuộc gọi phương thức tại thời điểm đăng ký lại.

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

những gì chi tiết tài khoản, bạn có cố gắng thay đổi? – jkr

+0

Giống như lần đầu tiên tôi đã đăng ký người dùng với sip bằng cách sử dụng chi tiết pjsua_acc_config và bây giờ người dùng kết nối, sau đó nếu máy chủ trường hợp bất kỳ bị hỏng, vì vậy tôi muốn cấu hình đó có thể thay đổi. – Retro

Trả lời

2

lấy cấu hình tài khoản cho id tài khoản và đặt trường thành bất kỳ thứ gì được yêu cầu trong hàm 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

Tôi đã thêm acc_cfg.id = pj_str (sipId); acc_cfg.reg_uri = pj_str (regUri); vào khối này bởi vì tôi muốn thay đổi chúng chỉ nhưng chúng không hoạt động, tôi nhận được cùng một công ty đăng ký tất cả các thời gian, không cập nhật một. – Retro

+2

Mã này không hoạt động nhiều ngoại trừ việc sửa đổi một số biến cục bộ (ngăn xếp dựa trên). Gọi pjsua_acc_modify sẽ thực sự làm điều gì đó, mặc dù tôi không chắc liệu sửa đổi tài khoản bên trong tài khoản gọi lại có thực sự hay không - nó có thể hoạt động và an toàn ngay bây giờ (tức là với phiên bản pjsip cụ thể) nhưng tôi muốn đặt cờ ở đây và sau đó thực hiện sửa đổi từ chuỗi ứng dụng. – TMSZ

+1

@TMSZ Tôi đã sử dụng pjsua_acc_modify nhưng vẫn không có may mắn với điều đó, những gì có thể là sự thay thế để xử lý kịch bản này? – Retro

-1

Đây là hướng dẫn cho recomendationabout PJSIP Bạn có thể bấm này PJSIP

0

của nó như giống như tái đăng ký. loại bỏ tài khoản vãng lai và thêm mới một

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."]; 
} 
Các vấn đề liên quan