コード例 #1
0
ファイル: SessionVault.cs プロジェクト: branan/PlasmaDotNet
        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);
            }
        }
コード例 #2
0
ファイル: SessionVault.cs プロジェクト: branan/PlasmaDotNet
 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);
 }