root/rat/trunk/mbus_control.c @ 3127

Revision 3127, 3.2 KB (checked in by ucacoxh, 14 years ago)

- Fix typo in recognizing our byes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/*
2 * FILE:    mbus_control.c
3 * PROGRAM: RAT - controller
4 * AUTHOR:  Colin Perkins
5 *
6 * Copyright (c) 1999-2000 University College London
7 * All rights reserved.
8 */
9 
10#ifndef HIDE_SOURCE_STRINGS
11static const char cvsid[] =
12        "$Id$";
13#endif /* HIDE_SOURCE_STRINGS */
14
15#include "config_unix.h"
16#include "config_win32.h"
17#include "debug.h"
18#include "mbus.h"
19#include "mbus_parser.h"
20#include "mbus_control.h"
21
22extern int       should_exit;
23extern char     *u_addr, *e_addr;
24extern pid_t     pid_ui, pid_engine;
25
26/* Mbus command reception function type */
27typedef void (*mbus_rx_proc)(char *srce, char *args, void *data);
28
29/* Tuple to associate string received with it's parsing fn */
30typedef struct {
31        const char   *rxname;
32        mbus_rx_proc  rxproc;
33} mbus_cmd_tuple;
34
35static char *wait_token;
36static char *wait_addr;
37
38void mbus_control_wait_init(char *token)
39{
40        wait_token = token;
41        wait_addr  = NULL;
42}
43
44char *mbus_control_wait_done(void)
45{
46        return wait_addr;
47}
48
49static void rx_mbus_quit(char *srce, char *args, void *data)
50{
51        UNUSED(srce);
52        UNUSED(args);
53        UNUSED(data);
54
55        debug_msg("Got quit %s\n", srce);
56
57        /* We mark ourselves as ready to exit. The main() will */
58        /* cleanup and terminate all our subprocesses.         */
59        should_exit = TRUE;
60}
61
62static void rx_mbus_bye(char *srce, char *args, void *data)
63{
64        pid_t pid_msgsrc;
65        char *lc;
66        int   i;
67
68        /* Find last colon */
69        for (i = 0, lc = NULL; srce[i] != 0; i++) {
70                if (srce[i] == ':') {
71                        lc = srce + i;
72                }
73        }
74        assert(lc != NULL);
75        /* Skip past colon, next char should okay for atoi */
76        pid_msgsrc = atoi(lc + 1);
77        if (pid_msgsrc == getpid() ||
78            pid_msgsrc == pid_ui   ||
79            pid_msgsrc == pid_engine) {
80                /* We mark ourselves as ready to exit. The main() will */
81                /* cleanup and terminate all our subprocesses.         */
82                should_exit = TRUE;
83        }
84        UNUSED(args);
85        UNUSED(data);
86}
87
88static void rx_mbus_waiting(char *srce, char *args, void *data)
89{
90        UNUSED(srce);
91        UNUSED(args);
92        UNUSED(data);
93}
94
95static void rx_mbus_go(char *srce, char *args, void *data)
96{
97        struct mbus_parser      *mp;
98        char                    *t;
99
100        UNUSED(data);
101
102        mp = mbus_parse_init(args);
103        mbus_parse_str(mp, &t);
104        if (strcmp(mbus_decode_str(t), wait_token) == 0) {
105                wait_addr = xstrdup(srce);
106        }
107        mbus_parse_done(mp);
108}
109
110static void rx_mbus_hello(char *srce, char *args, void *data)
111{
112        UNUSED(srce);
113        UNUSED(args);
114        UNUSED(data);
115}
116
117static const mbus_cmd_tuple control_cmds[] = {
118        { "mbus.quit",                             rx_mbus_quit },
119        { "mbus.bye",                              rx_mbus_bye },
120        { "mbus.waiting",                          rx_mbus_waiting },
121        { "mbus.go",                               rx_mbus_go },
122        { "mbus.hello",                            rx_mbus_hello },
123};
124
125#define NUM_CONTROL_CMDS sizeof(control_cmds)/sizeof(control_cmds[0])
126
127void mbus_control_rx(char *srce, char *cmnd, char *args, void *data)
128{
129        uint32_t i;
130
131        for (i=0; i < NUM_CONTROL_CMDS; i++) {
132                if (strcmp(control_cmds[i].rxname, cmnd) == 0) {
133                        control_cmds[i].rxproc(srce, args, data);
134                        return;
135                }
136        }
137        debug_msg("Unknown mbus command: %s (%s)\n", cmnd, args);
138}
Note: See TracBrowser for help on using the browser.