Setting the encryption secret
End-to-End-verschlüsselte Sitzungen werden mit Hilfe von Server-APIs erstellt (siehe Aktivieren der Verschlüsselung mit dem REST-API).
Bevor der Client publiziert oder abonniert, rufen Sie die otc_session_set_encryption_secret() Methode:
otc_session_set_encryption_secret(session, secret);
otc_session_connect(session, TOKEN);
Ein gültiges Geheimnis ist eine Zeichenfolge zwischen 8 und 256 Zeichen. Sie können das Geheimnis ändern, indem Sie die Funktion otc_session_set_encryption_secret() Funktion wieder.
Das Setzen eines ungültigen Geheimnisses führt zu einer OTC_SESSION_INVALID_ENCRYPTION_SECRET Fehler.
Events and errors
Ereignisse und Fehler sind wesentlich für die Verwaltung des benutzergesteuerten Verschlüsselungsverhaltens. Bei der Ende-zu-Ende-Verschlüsselung wird das Modell des gemeinsamen Geheimnisses verwendet: Es wird erwartet, dass alle Teilnehmer der Sitzung dasselbe Geheimnis verwenden, um ihre Medien zu verschlüsseln und die der anderen zu entschlüsseln.
Der neue Fehlercode lautet OTC_SESSION_INVALID_ENCRYPTION_SECRET und wird als Ergebniscode des Befehls set_encryption_secret Methode, nicht in dem on_error-Callback.
Wenn ein Client versucht, ein ungültiges Verschlüsselungsgeheimnis für eine Sitzung festzulegen, wird der otc_session_callbacks.on_error() gibt einen Fehlercode zurück, der auf OTC_SESSION_INVALID_ENCRYPTION_SECRET. Im folgenden Beispiel wird eine Sitzung mit einem leeren (und damit ungültigen) Verschlüsselungsgeheimnis initialisiert:
int result = otc_session_set_encryption_secret(session, "");
if (result == OTC_SESSION_INVALID_ENCRYPTION_SECRET) {
// Report error...
}
Wenn ein Benutzer versucht, in einer Ende-zu-Ende-verschlüsselten Sitzung zu veröffentlichen, ohne ein Verschlüsselungsgeheimnis angegeben zu haben, wird der Aufruf der otc_session_publish() Funktion führt zu der otc_publisher_callbacks.on_error() Funktion, die mit einem Fehler aufgerufen wird, bei dem der Code auf OTC_SESSION_ENCRYPTION_SECRET_MISSING. Für eine optimale Benutzerfreundlichkeit sollte die Anwendung ein vom Benutzer eingegebenes Geheimnis validieren, bevor sie die otc_session_publish() Funktion:
static void on_publisher_error(otc_publisher *publisher,
void *user_data,
const char* error_string,
enum otc_publisher_error_code error_code) {
if (otc_publisher_error_code == OTC_SESSION_ENCRYPTION_SECRET_MISSING) {
// The application should communicate that the secret was not set.
}
}
struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.on_error = on_publisher_error;
session = otc_session_new(API_KEY, SESSION_ID, &session_callbacks);
otc_publisher *publisher = otc_publisher_new("Joe",
nullptr,
&publisher_callbacks);
otc_session_publish(session, publisher);
Wenn ein Teilnehmer aufgrund eines falschen Verschlüsselungsgeheimnisses nicht in der Lage ist, die Medien eines Streams zu entschlüsseln, wird der subscriber_callbacks.on_error() Funktion mit einem Fehler aufgerufen wird, dessen Code auf OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH. Es ist wichtig, dem Benutzer mitzuteilen, dass die Medien aufgrund eines Verschlüsselungsfehlers und nicht aufgrund eines Verbindungsfehlers oder eines Audio-/Videoproblems nicht empfangen werden können:
static void on_subscriber_error(otc_subscriber *subscriber,
void *user_data,
const char* error_string,
enum otc_subscriber_error_code error_code) {
if (otc_subscriber_error_code == OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH) {
// Activate a UI element communicating that there's been an encryption secret mismatch.
}
}
struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.on_error = on_subscriber_error;
otc_subscriber *subscriber = otc_subscriber_new(stream,
&subscriber_callbacks);
otc_session_subscribe(session, subscriber);
Wenn ein Teilnehmer bei der Entschlüsselung eines Pakets auf einen internen Fehler stößt, wird der subscriber_callbacks.on_error() Funktion mit einem Fehler aufgerufen wird, dessen Code auf OTC_SUBSCRIBER_DECRYPTION_INTERNAL_ERROR.