domain-control: added domain-control plugin (modified decision-proto).
[profile/ivi/murphy.git] / src / plugins / decision-proto / message.h
1 #ifndef __MURPHY_DECISION_MESSAGE_H__
2 #define __MURPHY_DECISION_MESSAGE_H__
3
4 #include <murphy/common/msg.h>
5
6 #include "decision-types.h"
7 #include "client.h"
8
9
10 #define MRP_PEPMSG_UINT16(tag, value) \
11     MRP_MSG_TAG_UINT16(MRP_PEPTAG_##tag, value)
12
13 #define MRP_PEPMSG_SINT16(tag, value) \
14     MRP_MSG_TAG_SINT16(MRP_PEPTAG_##tag, value)
15
16 #define MRP_PEPMSG_UINT32(tag, value) \
17     MRP_MSG_TAG_UINT32(MRP_PEPTAG_##tag, value)
18
19 #define MRP_PEPMSG_SINT32(tag, value) \
20     MRP_MSG_TAG_SINT32(MRP_PEPTAG_##tag, value)
21
22 #define MRP_PEPMSG_DOUBLE(tag, value) \
23     MRP_MSG_TAG_DOUBLE(MRP_PEPTAG_##tag, value)
24
25 #define MRP_PEPMSG_STRING(tag, value) \
26     MRP_MSG_TAG_STRING(MRP_PEPTAG_##tag, value)
27
28 /*
29  * message types
30  */
31
32 typedef enum {
33     MRP_PEPMSG_REGISTER   = 0x1,         /* client: register me */
34     MRP_PEPMSG_UNREGISTER = 0x2,         /* client: unregister me */
35     MRP_PEPMSG_SET        = 0x3,         /* client: set table data */
36     MRP_PEPMSG_NOTIFY     = 0x4,         /* server: table changes */
37     MRP_PEPMSG_ACK        = 0x5,         /* server: ok */
38     MRP_PEPMSG_NAK        = 0x6,         /* server: request failed */
39 } mrp_pepmsg_type_t;
40
41
42 /*
43  * message-specific tags
44  */
45
46 typedef enum {
47     /*
48      * fixed common tags
49      */
50     MRP_PEPTAG_MSGTYPE = 0x1,            /* message type */
51     MRP_PEPTAG_MSGSEQ  = 0x2,            /* sequence number */
52
53     /*
54      * fixed tags in registration messages
55      */
56     MRP_PEPTAG_NAME     = 0x3,           /* enforcement point name */
57     MRP_PEPTAG_NTABLE   = 0x4,           /* number of owned tables */
58     MRP_PEPTAG_NWATCH   = 0x5,           /* number of watched tables */
59     MRP_PEPTAG_NCOLDEF  = 0x6,           /* number of column definitions */
60     MRP_PEPTAG_TBLNAME  = 0x7,           /* table name */
61     MRP_PEPTAG_NCOLUMN  = 0x8,           /* number of columns */
62     MRP_PEPTAG_TBLIDX   = 0x9,           /* column index of index column */
63     MRP_PEPTAG_COLNAME  = 0xa,           /* column name */
64     MRP_PEPTAG_COLTYPE  = 0xb,           /* column type */
65
66     /*
67      * fixed tags in NAKs
68      */
69     MRP_PEPTAG_ERRCODE  = 0x3,           /* error code */
70     MRP_PEPTAG_ERRMSG   = 0x4,           /* error message */
71
72     /*
73      * fixed tags in data notification messages
74      */
75     MRP_PEPTAG_NCHANGE = 0x3,            /* number of tables in notification */
76     MRP_PEPTAG_NTOTAL  = 0x4,            /* total columns in notification */
77     MRP_PEPTAG_TBLID   = 0x5,            /* table id */
78     MRP_PEPTAG_NROW    = 0x6,            /* number of table rows */
79     MRP_PEPTAG_DATA    = 0x7,            /* a data column */
80 } mrp_pepmsg_tag_t;
81
82
83 mrp_msg_t *create_register_message(mrp_pep_t *pep);
84 int decode_register_message(mrp_msg_t *msg, mrp_pep_table_t *tables, int ntable,
85                             mrp_pep_table_t *watches, int nwatch,
86                             mqi_column_def_t *columns, int ncolumn);
87
88 mrp_msg_t *create_ack_message(uint32_t seq);
89 mrp_msg_t *create_nak_message(uint32_t seq, int error, const char *errmsg);
90 mrp_msg_t *create_notify_message(void);
91 int update_notify_message(mrp_msg_t *msg, int id, mqi_column_def_t *columns,
92                           int ncolumn, mrp_pep_value_t *data, int nrow);
93 int decode_notify_message(mrp_msg_t *msg, void **it, mrp_pep_data_t *t);
94
95 mrp_msg_t *create_set_message(uint32_t seq, mrp_pep_data_t *tables, int ntable);
96 int decode_set_message(mrp_msg_t *msg, void **it, mrp_pep_data_t *data);
97
98
99 #endif /* __MURPHY_DECISION_MESSAGE_H__ */