aura  0.1
 All Data Structures Functions Variables Modules Pages
transport-packetizer-dummy.c
1 #include <aura/aura.h>
2 #include <aura/private.h>
3 #include <aura/packetizer.h>
4 
5 static int dummy_open(struct aura_node *node, const char *opts)
6 {
7  slog(1, SLOG_INFO, "Opening dummy transport");
8 
9  return 0;
10 }
11 
12 
13 static void dummy_populate_etable(struct aura_node *node)
14 {
15  struct aura_export_table *etbl = aura_etable_create(node, 16);
16  if (!etbl)
17  BUG(node, "Failed to create etable");
18  aura_etable_add(etbl, "echo_str", "s128.", "s128.");
19  aura_etable_add(etbl, "echo_u8", "1", "1");
20  aura_etable_add(etbl, "echo_u16", "2", "2");
21  aura_etable_add(etbl, "echo_i16", "7", "7");
22  aura_etable_add(etbl, "echo_u32", "3", "3");
23  aura_etable_add(etbl, "ping", NULL, "1");
24  aura_etable_add(etbl, "echo_i32", "8", "8");
25  aura_etable_add(etbl, "noargs_func", "", "");
26  aura_etable_add(etbl, "echo_seq", "321", "321");
27  aura_etable_add(etbl, "echo_bin", "s32.s32.", "s32.s32.");
28  aura_etable_add(etbl, "echo_buf", "b", "b");
29  aura_etable_add(etbl, "echo_u64", "4", "4");
30  aura_etable_activate(etbl);
31 }
32 
33 static void dummy_close(struct aura_node *node)
34 {
35  slog(1, SLOG_INFO, "Closing dummy transport");
36 }
37 
38 static void dummy_loop(struct aura_node *node, const struct aura_pollfds *fd)
39 {
40  struct aura_buffer *buf;
41  struct aura_object *o;
42 
43  if (node->status != AURA_STATUS_ONLINE) {
44  dummy_populate_etable(node);
45  aura_set_status(node, AURA_STATUS_ONLINE);
46  }
47 
48  /* queue an event */
49  while(1) {
50  buf = aura_dequeue_buffer(&node->outbound_buffers);
51  if (!buf)
52  break;
53  o = buf->object;
54  slog(1, SLOG_DEBUG, "Dequeued/requeued obj id %d (%s)", o->id, o->name);
55  aura_queue_buffer(&node->inbound_buffers, buf);
56  aura_eventloop_interrupt(aura_eventloop_get_data(node));
57  }
58 }
59 
60 static void dummy_buffer_put(struct aura_buffer *dst, struct aura_buffer *buf)
61 {
62  slog(0, SLOG_DEBUG, "dummy: serializing buf 0x%x", buf);
63  uint64_t ptr = (uintptr_t) buf;
64  aura_buffer_put_u64(dst, ptr);
65 }
66 
67 static struct aura_buffer *dummy_buffer_get(struct aura_buffer *buf)
68 {
69  struct aura_buffer *ret = (struct aura_buffer *) (uintptr_t) aura_buffer_get_u64(buf);
70  slog(0, SLOG_DEBUG, "dummy: deserializing buf 0x%x", ret);
71  return ret;
72 }
73 
74 static struct aura_transport dummy = {
75  .name = "dummy",
76  .open = dummy_open,
77  .close = dummy_close,
78  .loop = dummy_loop,
79  .buffer_overhead = sizeof(struct aura_packet8),
80  .buffer_offset = sizeof(struct aura_packet8),
81  .buffer_get = dummy_buffer_get,
82  .buffer_put = dummy_buffer_put,
83 };
84 AURA_TRANSPORT(dummy);
void aura_set_status(struct aura_node *node, int status)
Definition: aura.c:808
struct aura_buffer * aura_dequeue_buffer(struct list_head *head)
Definition: queue.c:45
const char * name
Required.
Definition: aura.h:168
struct aura_eventloop * aura_eventloop_get_data(struct aura_node *node)
Definition: aura.c:243
void aura_buffer_put_u64(struct aura_buffer *buf, uint64_t value)
Put an unsigned 64 bit integer to aura buffer.
uint64_t aura_buffer_get_u64(struct aura_buffer *buf)
Get an unsigned 64 bit integer from aura buffer.
void aura_queue_buffer(struct list_head *list, struct aura_buffer *buf)
Definition: queue.c:16
struct aura_object * object
Definition: aura.h:341