/* * Copyright 2000-2001 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. * */ #ifndef _MESSAGE_ #define _MESSAGE_ // These are the commands sent from the server to the child processes // over the child processes' stdin pipes. A subset of the commands // understood by the overall system, these require responses from the // child process. Having a data structure rather than sending text // simplifies parsing on the child side. The child replies by sending // back fully-formatted replies which are copied by the server process // to the clients' sockets. struct PeekArg { DWORD address; DWORD numBytes; }; // NOTE: when sending a PokeArg to the child process, we handle the // buffer specially struct PokeArg { DWORD address; DWORD numBytes; void* data; }; // Used for continueevent struct BoolArg { bool val; }; // Used for duphandle, closehandle, and getcontext struct HandleArg { HANDLE handle; }; // Used for setcontext const int NUM_REGS_IN_CONTEXT = 22; struct SetContextArg { HANDLE handle; DWORD Eax; DWORD Ebx; DWORD Ecx; DWORD Edx; DWORD Esi; DWORD Edi; DWORD Ebp; DWORD Esp; DWORD Eip; DWORD Ds; DWORD Es; DWORD Fs; DWORD Gs; DWORD Cs; DWORD Ss; DWORD EFlags; DWORD Dr0; DWORD Dr1; DWORD Dr2; DWORD Dr3; DWORD Dr6; DWORD Dr7; }; // Used for selectorentry struct SelectorEntryArg { HANDLE handle; DWORD selector; }; struct Message { typedef enum { ATTACH, DETACH, LIBINFO, PEEK, POKE, THREADLIST, DUPHANDLE, CLOSEHANDLE, GETCONTEXT, SETCONTEXT, SELECTORENTRY, SUSPEND, RESUME, POLLEVENT, CONTINUEEVENT } Type; Type type; union { PeekArg peekArg; PokeArg pokeArg; BoolArg boolArg; HandleArg handleArg; SetContextArg setContextArg; SelectorEntryArg selectorArg; }; }; #endif // #defined _MESSAGE_