|
|
|
@ -504,24 +504,55 @@ bool plNetLinkingMgr::IProcessVaultNotifyMsg(plVaultNotifyMsg* msg)
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (cVaultLink != nil) |
|
|
|
|
{ |
|
|
|
|
// This is something that Cyan does... >.<
|
|
|
|
|
// It's very useful though...
|
|
|
|
|
if (cVaultLink != nil) { |
|
|
|
|
// Verify that if the Age vault already exists that it matches the requested
|
|
|
|
|
// deferred link. If it doesn't exist, well, I hope you're happy with the result.
|
|
|
|
|
VaultAgeLinkNode accLink(cVaultLink); |
|
|
|
|
accLink.CopyTo(cur); |
|
|
|
|
if (RelVaultNode* rvnInfo = cVaultLink->GetChildNodeIncRef(plVault::kNodeType_AgeInfo, 1)) |
|
|
|
|
{ |
|
|
|
|
if (RelVaultNode* rvnInfo = cVaultLink->GetChildNodeIncRef(plVault::kNodeType_AgeInfo, 1)) { |
|
|
|
|
plAgeInfoStruct dest; |
|
|
|
|
|
|
|
|
|
VaultAgeInfoNode accInfo(rvnInfo); |
|
|
|
|
accInfo.CopyTo(cur->GetAgeInfo()); |
|
|
|
|
accInfo.CopyTo(&dest); |
|
|
|
|
if (!dest.IsEqualTo(fDeferredLink->GetAgeLink()->GetAgeInfo())) { |
|
|
|
|
hsLogEntry( |
|
|
|
|
plNetClientMgr::GetInstance()->DebugMsg( |
|
|
|
|
"Waiting for a deferred link to '%s' but got AgeInfo for '%s' instead.", |
|
|
|
|
fDeferredLink->GetAgeLink()->AsStdString().c_str(), |
|
|
|
|
dest.AsStdString().c_str() |
|
|
|
|
); |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
rvnInfo->DecRef(); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rvnInfo->DecRef(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If we're still here, that means the links match. Set the vault copy as our current
|
|
|
|
|
// AgeLink and AgeInfo. Note this mainly copies the AgeInfo.
|
|
|
|
|
accLink.CopyTo(cur); |
|
|
|
|
hsLogEntry( |
|
|
|
|
plNetClientMgr::GetInstance()->DebugMsg( |
|
|
|
|
"Performing deferred link to '%s'", |
|
|
|
|
cur->AsStdString().c_str() |
|
|
|
|
); |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
// Steals fDeferredLink
|
|
|
|
|
IDoLink(fDeferredLink); |
|
|
|
|
fDeferredLink = nil; |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
cVaultLink->DecRef(); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
hsLogEntry( |
|
|
|
|
plNetClientMgr::GetInstance()->ErrorMsg( |
|
|
|
|
"Waiting for a deferred link to '%s' but got a garbage link?", |
|
|
|
|
fDeferredLink->GetAgeLink()->AsStdString().c_str() |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|