mirror of https://github.com/procxx/kepka.git
Fix key creation for media cluster.
This commit is contained in:
parent
41e13e39bc
commit
e60a9f0943
|
@ -104,9 +104,6 @@ void Dcenter::setConnectionInited(bool connectionInited) {
|
|||
|
||||
CreatingKeyType Dcenter::acquireKeyCreation(TemporaryKeyType type) {
|
||||
QReadLocker lock(&_mutex);
|
||||
if (type == TemporaryKeyType::MediaCluster) {
|
||||
int a = 0;
|
||||
}
|
||||
const auto index = IndexByType(type);
|
||||
auto &key = _temporaryKeys[index];
|
||||
if (key != nullptr) {
|
||||
|
|
|
@ -2245,15 +2245,8 @@ void SessionPrivate::updateAuthKey() {
|
|||
|
||||
DEBUG_LOG(("AuthKey Info: Connection updating key from Session, dc %1"
|
||||
).arg(_shiftedDcId));
|
||||
const auto myKeyType = TemporaryKeyTypeByDcType(_currentDcType);
|
||||
applyAuthKey(_sessionData->getTemporaryKey(myKeyType));
|
||||
|
||||
if (_connection
|
||||
&& !_encryptionKey
|
||||
&& myKeyType == TemporaryKeyType::MediaCluster
|
||||
&& _sessionData->getTemporaryKey(TemporaryKeyType::Regular)) {
|
||||
restart();
|
||||
}
|
||||
applyAuthKey(_sessionData->getTemporaryKey(
|
||||
TemporaryKeyTypeByDcType(_currentDcType)));
|
||||
}
|
||||
|
||||
void SessionPrivate::setCurrentKeyId(uint64 newKeyId) {
|
||||
|
@ -2287,16 +2280,31 @@ void SessionPrivate::applyAuthKey(AuthKeyPtr &&encryptionKey) {
|
|||
setCurrentKeyId(newKeyId);
|
||||
Assert(!_connection->sentEncryptedWithKeyId());
|
||||
|
||||
DEBUG_LOG(("AuthKey Info: Connection update key from Session, dc %1 result: %2").arg(_shiftedDcId).arg(Logs::mb(&_keyId, sizeof(_keyId)).str()));
|
||||
DEBUG_LOG(("AuthKey Info: Connection update key from Session, "
|
||||
"dc %1 result: %2"
|
||||
).arg(_shiftedDcId
|
||||
).arg(Logs::mb(&_keyId, sizeof(_keyId)).str()));
|
||||
if (_keyId) {
|
||||
return authKeyChecked();
|
||||
}
|
||||
|
||||
if (_instance->isKeysDestroyer()) {
|
||||
// We are here to destroy an old key, so we're done.
|
||||
LOG(("MTP Error: No key %1 in updateAuthKey() for destroying.").arg(_shiftedDcId));
|
||||
LOG(("MTP Error: No key %1 in updateAuthKey() for destroying."
|
||||
).arg(_shiftedDcId));
|
||||
_instance->keyWasPossiblyDestroyed(_shiftedDcId);
|
||||
} else if (_keyCreator) {
|
||||
} else if (noMediaKeyWithExistingRegularKey()) {
|
||||
DEBUG_LOG(("AuthKey Info: No key in updateAuthKey() for media, "
|
||||
"but someone has created regular, trying to acquire."));
|
||||
const auto dcType = tryAcquireKeyCreation();
|
||||
if (_keyCreator && dcType != _currentDcType) {
|
||||
DEBUG_LOG(("AuthKey Info: "
|
||||
"Dc type changed for creation, restarting."));
|
||||
restart();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (_keyCreator) {
|
||||
DEBUG_LOG(("AuthKey Info: No key in updateAuthKey(), creating."));
|
||||
_keyCreator->start(
|
||||
BareDcId(_shiftedDcId),
|
||||
|
@ -2304,10 +2312,17 @@ void SessionPrivate::applyAuthKey(AuthKeyPtr &&encryptionKey) {
|
|||
_connection.get(),
|
||||
_instance->dcOptions());
|
||||
} else {
|
||||
DEBUG_LOG(("AuthKey Info: No key in updateAuthKey(), but someone is creating already."));
|
||||
DEBUG_LOG(("AuthKey Info: No key in updateAuthKey(), "
|
||||
"but someone is creating already, waiting."));
|
||||
}
|
||||
}
|
||||
|
||||
bool SessionPrivate::noMediaKeyWithExistingRegularKey() const {
|
||||
return (TemporaryKeyTypeByDcType(_currentDcType)
|
||||
== TemporaryKeyType::MediaCluster)
|
||||
&& _sessionData->getTemporaryKey(TemporaryKeyType::Regular);
|
||||
}
|
||||
|
||||
bool SessionPrivate::destroyOldEnoughPersistentKey() {
|
||||
Expects(_keyCreator != nullptr);
|
||||
|
||||
|
|
|
@ -157,6 +157,7 @@ private:
|
|||
void clearUnboundKeyCreator();
|
||||
void releaseKeyCreationOnFail();
|
||||
void applyAuthKey(AuthKeyPtr &&encryptionKey);
|
||||
[[nodiscard]] bool noMediaKeyWithExistingRegularKey() const;
|
||||
bool destroyOldEnoughPersistentKey();
|
||||
|
||||
void setCurrentKeyId(uint64 newKeyId);
|
||||
|
|
Loading…
Reference in New Issue