renaming defines
[barrelfish] / lib / octopus / client / trigger.c
1 /**
2  * \file
3  * \brief Handler function for asynchronous triggers sent by server.
4  */
5
6 /*
7  * Copyright (c) 2011, ETH Zurich.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15 #include <stdio.h>
16
17 #include <barrelfish/barrelfish.h>
18 #include <barrelfish/threads.h>
19
20 #include <octopus/init.h>
21 #include <octopus/trigger.h>
22
23 #include "handler.h"
24 #include "common.h"
25
26 void trigger_handler(struct octopus_binding* b, octopus_trigger_id_t id,
27         uint64_t t, octopus_mode_t mode, char* record, uint64_t st)
28 {
29     assert(t != 0);
30     trigger_handler_fn trigger_fn = (trigger_handler_fn) t;
31     void* state = (void*) st;
32
33     if (trigger_fn != NULL) {
34         trigger_fn(mode, record, state);
35     }
36     else {
37         fprintf(stderr, "Incoming trigger(%lu) for %s with unset handler function.",
38                 id, record);
39         free(record);
40     }
41 }
42
43 octopus_trigger_t oct_mktrigger(errval_t in_case, octopus_binding_type_t send_to,
44         octopus_mode_t mode, trigger_handler_fn fn, void* state)
45 {
46     return (octopus_trigger_t) {
47                 .in_case = in_case,
48                 .m = mode,
49                 .send_to = send_to,
50                 // TODO: bad uint64_t here!
51                 .trigger = (uint64_t) fn,
52                 .st = (uint64_t) state
53             };
54 }
55
56 /**
57  * \brief Removes a trigger in the octopus server.
58  *
59  * In any case a valid watch id is specified this
60  * causes a trigger event to be sent with the
61  * OCT_REMOVED flag set. After this event it's safe
62  * to clean up any memory associated with the event handler.
63  *
64  * \param trigger_id ID of trigger we want to remove
65  *
66  * \retval SYS_ERR_OK
67  * \retval OCT_INVALID_ID
68  */
69 errval_t oct_remove_trigger(octopus_trigger_id_t trigger_id)
70 {
71     errval_t err = SYS_ERR_OK;
72     struct octopus_thc_client_binding_t* cl = oct_get_thc_client();
73     assert(cl != NULL);
74
75     errval_t error_code;
76     err = cl->call_seq.remove_trigger(cl, trigger_id, &error_code);
77     if (err_is_ok(err)) {
78         err = error_code;
79     }
80
81     return err;
82 }