1 /* 2 * Copyright 2000-2001 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 * 23 */ 24 25 #include <stdio.h> 26 #include <string.h> 27 #include "dispatcher.hpp" 28 29 const char* CMD_ASCII = "ascii"; 30 const char* CMD_UNICODE = "unicode"; 31 const char* CMD_PROCLIST = "proclist"; 32 const char* CMD_ATTACH = "attach"; 33 const char* CMD_DETACH = "detach"; 34 const char* CMD_LIBINFO = "libinfo"; 35 const char* CMD_PEEK = "peek"; 36 const char* CMD_POKE = "poke"; 37 const char* CMD_THREADLIST = "threadlist"; 38 const char* CMD_DUPHANDLE = "duphandle"; 39 const char* CMD_CLOSEHANDLE = "closehandle"; 40 const char* CMD_GETCONTEXT = "getcontext"; 41 const char* CMD_SETCONTEXT = "setcontext"; 42 const char* CMD_SELECTORENTRY = "selectorentry"; 43 const char* CMD_SUSPEND = "suspend"; 44 const char* CMD_RESUME = "resume"; 45 const char* CMD_POLLEVENT = "pollevent"; 46 const char* CMD_CONTINUEEVENT = "continueevent"; 47 const char* CMD_EXIT = "exit"; 48 49 // Uncomment the #define below to get messages on stderr 50 // #define DEBUGGING 51 52 void 53 Dispatcher::dispatch(char* cmd, Handler* handler) { 54 if (!strncmp(cmd, CMD_ASCII, strlen(CMD_ASCII))) { 55 handler->ascii(cmd + strlen(CMD_ASCII)); 56 57 } else if (!strncmp(cmd, CMD_UNICODE, strlen(CMD_UNICODE))) { 58 handler->unicode(cmd + strlen(CMD_UNICODE)); 59 60 } else if (!strncmp(cmd, CMD_PROCLIST, strlen(CMD_PROCLIST))) { 61 handler->procList(cmd + strlen(CMD_PROCLIST)); 62 63 } else if (!strncmp(cmd, CMD_ATTACH, strlen(CMD_ATTACH))) { 64 handler->attach(cmd + strlen(CMD_ATTACH)); 65 66 } else if (!strncmp(cmd, CMD_DETACH, strlen(CMD_DETACH))) { 67 handler->detach(cmd + strlen(CMD_DETACH)); 68 69 } else if (!strncmp(cmd, CMD_LIBINFO, strlen(CMD_LIBINFO))) { 70 handler->libInfo(cmd + strlen(CMD_LIBINFO)); 71 72 } else if (!strncmp(cmd, CMD_PEEK, strlen(CMD_PEEK))) { 73 handler->peek(cmd + strlen(CMD_PEEK)); 74 75 } else if (!strncmp(cmd, CMD_POKE, strlen(CMD_POKE))) { 76 handler->poke(cmd + strlen(CMD_POKE)); 77 78 } else if (!strncmp(cmd, CMD_THREADLIST, strlen(CMD_THREADLIST))) { 79 handler->threadList(cmd + strlen(CMD_THREADLIST)); 80 81 } else if (!strncmp(cmd, CMD_DUPHANDLE, strlen(CMD_DUPHANDLE))) { 82 handler->dupHandle(cmd + strlen(CMD_DUPHANDLE)); 83 84 } else if (!strncmp(cmd, CMD_CLOSEHANDLE, strlen(CMD_CLOSEHANDLE))) { 85 handler->closeHandle(cmd + strlen(CMD_CLOSEHANDLE)); 86 87 } else if (!strncmp(cmd, CMD_GETCONTEXT, strlen(CMD_GETCONTEXT))) { 88 handler->getContext(cmd + strlen(CMD_GETCONTEXT)); 89 90 } else if (!strncmp(cmd, CMD_SETCONTEXT, strlen(CMD_SETCONTEXT))) { 91 handler->setContext(cmd + strlen(CMD_SETCONTEXT)); 92 93 } else if (!strncmp(cmd, CMD_SELECTORENTRY, strlen(CMD_SELECTORENTRY))) { 94 handler->selectorEntry(cmd + strlen(CMD_SELECTORENTRY)); 95 96 } else if (!strncmp(cmd, CMD_SUSPEND, strlen(CMD_SUSPEND))) { 97 handler->suspend(cmd + strlen(CMD_SUSPEND)); 98 99 } else if (!strncmp(cmd, CMD_RESUME, strlen(CMD_RESUME))) { 100 handler->resume(cmd + strlen(CMD_RESUME)); 101 102 } else if (!strncmp(cmd, CMD_POLLEVENT, strlen(CMD_POLLEVENT))) { 103 handler->pollEvent(cmd + strlen(CMD_POLLEVENT)); 104 105 } else if (!strncmp(cmd, CMD_CONTINUEEVENT, strlen(CMD_CONTINUEEVENT))) { 106 handler->continueEvent(cmd + strlen(CMD_CONTINUEEVENT)); 107 108 } else if (!strcmp(cmd, CMD_EXIT)) { 109 handler->exit(cmd + strlen(CMD_EXIT)); 110 } 111 112 #ifdef DEBUGGING 113 else fprintf(stderr, "Ignoring illegal command \"%s\"\n", cmd); 114 #endif 115 }