PATH:
opt
/
bitninja-threat-hunting
/
node_modules
/
node-pty
/
deps
/
winpty
/
src
/
agent
// Copyright (c) 2011-2015 Ryan Prichard // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. #ifndef INPUT_MAP_H #define INPUT_MAP_H #include <stdint.h> #include <stdlib.h> #include <string.h> #include <string> #include "SimplePool.h" #include "../shared/WinptyAssert.h" class InputMap { public: struct Key { uint16_t virtualKey; uint32_t unicodeChar; uint16_t keyState; std::string toString() const; }; private: struct Node; struct Branch { Branch() { memset(&children, 0, sizeof(children)); } Node *children[256]; }; struct Node { Node() : childCount(0) { Key zeroKey = { 0, 0, 0 }; key = zeroKey; } Key key; int childCount; enum { kTinyCount = 8 }; union { Branch *branch; struct { unsigned char values[kTinyCount]; Node *children[kTinyCount]; } tiny; } u; bool hasKey() const { return key.virtualKey != 0 || key.unicodeChar != 0; } }; private: SimplePool<Node, 256> m_nodePool; SimplePool<Branch, 8> m_branchPool; Node m_root; public: void set(const char *encoding, int encodingLen, const Key &key); int lookupKey(const char *input, int inputSize, Key &keyOut, bool &incompleteOut) const; void dumpInputMap() const; private: Node *getChild(Node &node, unsigned char ch) { return const_cast<Node*>(getChild(static_cast<const Node&>(node), ch)); } const Node *getChild(const Node &node, unsigned char ch) const { if (node.childCount <= Node::kTinyCount) { for (int i = 0; i < node.childCount; ++i) { if (node.u.tiny.values[i] == ch) { return node.u.tiny.children[i]; } } return NULL; } else { return node.u.branch->children[ch]; } } void setHelper(Node &node, const char *encoding, int encodingLen, const Key &key); Node &getOrCreateChild(Node &node, unsigned char ch); void dumpInputMapHelper(const Node &node, std::string &encoding) const; }; const InputMap::Key kKeyZero = { 0, 0, 0 }; void dumpInputMap(InputMap &inputMap); #endif // INPUT_MAP_H
[-] DebugShowInput.h
[edit]
[-] ConsoleLine.cc
[edit]
[-] LargeConsoleRead.cc
[edit]
[-] NamedPipe.h
[edit]
[-] ConsoleInput.h
[edit]
[-] Win32Console.cc
[edit]
[-] DsrSender.h
[edit]
[-] ConsoleFont.h
[edit]
[+]
..
[-] Coord.h
[edit]
[-] main.cc
[edit]
[-] Scraper.h
[edit]
[-] DebugShowInput.cc
[edit]
[-] InputMap.cc
[edit]
[-] DefaultInputMap.h
[edit]
[-] Scraper.cc
[edit]
[-] SmallRect.h
[edit]
[-] AgentCreateDesktop.h
[edit]
[-] LargeConsoleRead.h
[edit]
[-] subdir.mk
[edit]
[-] EventLoop.h
[edit]
[-] InputMap.h
[edit]
[-] Win32ConsoleBuffer.cc
[edit]
[-] SimplePool.h
[edit]
[-] UnicodeEncoding.h
[edit]
[-] Terminal.cc
[edit]
[-] Win32Console.h
[edit]
[-] Win32ConsoleBuffer.h
[edit]
[-] EventLoop.cc
[edit]
[-] NamedPipe.cc
[edit]
[-] DefaultInputMap.cc
[edit]
[-] ConsoleInputReencoding.cc
[edit]
[-] ConsoleInput.cc
[edit]
[-] UnicodeEncodingTest.cc
[edit]
[-] Terminal.h
[edit]
[-] Agent.h
[edit]
[-] Agent.cc
[edit]
[-] ConsoleFont.cc
[edit]
[-] ConsoleInputReencoding.h
[edit]
[-] AgentCreateDesktop.cc
[edit]
[-] ConsoleLine.h
[edit]