2016-09-19 6 views
0

Недавно я обновил мою библиотеку Linphone из последней версии, чтобы следить за стандартной поддержкой Apple IPV6. Но он не может создать безопасный вызов. Каждый раз, когда я пытаюсь преобразовать вызов в безопасный вызов, Acknowledgment failed и SAS возвращает null. То же самое работает со старой библиотекой (поддержка IPV4). Я использую шифрование ZRTP для безопасного вызова.Linphone не может создать SAS для ZRTP Безопасный вызов

Я борюсь за последние 15 дней. Ниже строки кода возвращается значение SAS null.

NSString *localLize = NSLocalizedString(@"Confirm the following SAS with peer:\n%s", nil); 
      const char *authToken = linphone_call_get_authentication_token(call); 
      NSLog(@"localize %@ authToken %s",localLize,authToken); 

Ниже приведена полная функция для преобразования вызова в вызов безопасности.

- (IBAction)onSecurityClick:(id)sender { 
if (linphone_core_get_calls_nb(LC)) { 
    LinphoneCall *call = linphone_core_get_current_call(LC); 
    if (call != NULL) { 

     //force encryption ZRTP 
     LinphoneMediaEncryption enc = LinphoneMediaEncryptionZRTP; 

     if (enc == LinphoneMediaEncryptionZRTP) { 

      NSString *localLize = NSLocalizedString(@"Confirm the following SAS with peer:\n%s", nil); 
      const char *authToken = linphone_call_get_authentication_token(call); 
      NSLog(@"localize %@ authToken %s",localLize,authToken); 


      NSString *message = 
       [NSString stringWithFormat:NSLocalizedString(@"Confirm the following SAS with peer:\n%s", nil), 
              linphone_call_get_authentication_token(call)]; 
      if (securityDialog == nil) { 
       __block __strong StatusBarView *weakSelf = self; 
       securityDialog = [UIConfirmationDialog ShowWithMessage:message 
        cancelMessage:NSLocalizedString(@"DENY", nil) 
        confirmMessage:NSLocalizedString(@"ACCEPT", nil) 
        onCancelClick:^() { 
         if (linphone_core_get_current_call(LC) == call) { 
          linphone_call_set_authentication_token_verified(call, NO); 
         } 
         weakSelf->securityDialog = nil; 
        } 
        onConfirmationClick:^() { 
         if (linphone_core_get_current_call(LC) == call) { 
          linphone_call_set_authentication_token_verified(call, YES); 
         } 
         weakSelf->securityDialog = nil; 
        }]; 
      } 
     } 
    } 
    } 
} 

Любая помощь должна быть заметна.

Спасибо заранее.

+0

Эй! Вы выяснили, в чем проблема? У меня такая же проблема. –

ответ

0

Итак, я понял, в чем проблема для меня. Может быть, может быть и полезно для вас.

Я звонил linphone_call_get_authentication_token сразу после того, как состояние звонка было изменено на LinphoneCallOutgoingProgress. Все, что мне нужно было сделать, чтобы исправить это, было запустить Timer, который вызывает метод каждые 1 секунду, когда состояние вызова изменяется на LinphoneCallOutgoingProgress, потому что для создания SAS требуется некоторое время. Вот то, что сработало для меня:

timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { 

    DispatchQueue.main.async { 

     let sas = linphone_call_get_authentication_token(Call.current()) 

     if sas != nil { 

      self!.sasLabel.text = String(cString: sas!) 
      timer.invalidate() 
     } 
    } 
}