private void IFindNode() { pnCli2Auth_VaultNodeFind req = new pnCli2Auth_VaultNodeFind(); req.Read(fStream); // Why find a node if you know the NodeID? bool allowed = (req.fPattern[pnVaultNodeFields.NodeIdx] == null); // Don't allow regular users to search for important nodes... if (fPermissions < pnAcctPerms.CCR && allowed) { switch (req.fPattern.NodeType) { case ENodeType.kNodeAdmin: case ENodeType.kNodeCCR: case ENodeType.kNodeGameServer: case ENodeType.kNodeInvalid: case ENodeType.kNodePlayer: case ENodeType.kNodeSDL: // Easy way to find AgeGlobalSDLs case ENodeType.kNodeUNUSED: case ENodeType.kNodeVaultServer: case ENodeType.kNodeVNodeMgrHigh: case ENodeType.kNodeVNodeMgrLow: allowed = false; break; case ENodeType.kNodeAgeInfoList: pnVaultAgeInfoListNode ages = new pnVaultAgeInfoListNode(req.fPattern); if (ages.FolderType == EStandardNode.kPublicAgesFolder) // Currently unused allowed = false; break; case ENodeType.kNodeFolder: // Yay, moar switching pnVaultFolderNode folder = new pnVaultFolderNode(req.fPattern); switch (folder.FolderType) { case EStandardNode.kAllAgeGlobalSDLNodesFolder: case EStandardNode.kGameScoresFolder: // Currently unused case EStandardNode.kVaultMgrGlobalDataFolder: allowed = false; break; } break; case ENodeType.kNodePlayerInfoList: pnVaultPlayerInfoListNode players = new pnVaultPlayerInfoListNode(req.fPattern); switch (players.FolderType) { case EStandardNode.kAllPlayersFolder: case EStandardNode.kCCRPlayersFolder: // Currently unused allowed = false; break; } break; } } if (allowed) // FIXME: VaultCli hangs after the callack is fired. fVaultCli.FindNode(req.fPattern, new pnCallback(new pnVaultNodeFound(IOnNodeFound), req.fTransID)); else { pnAuth2Cli_VaultNodeFindReply reply = new pnAuth2Cli_VaultNodeFindReply(); reply.fResult = ENetError.kNetErrInvalidParameter; reply.fTransID = req.fTransID; reply.Send(fStream); } }
private void IOnNodeFound(ENetError result, uint[] nodeIDs, object param) { pnAuth2Cli_VaultNodeFindReply reply = new pnAuth2Cli_VaultNodeFindReply(); reply.fNodeIDs = nodeIDs; reply.fResult = result; reply.fTransID = (uint)param; lock (fStream) reply.Send(fStream); }