Ported messages from gear racing controller
[apps/native/gear-racing-car.git] / src / messages / message.c
1 /*
2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3 *
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://floralicense.org/license/
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "messages/message.h"
18
19 #include <string.h>
20
21 static int64_t current_serial;
22
23 void message_destroy(message_t *message)
24 {
25         if (message->vtable.destroy)
26                 message->vtable.destroy(message);
27 }
28
29 int message_serialize(message_t *message, writer_t *writer)
30 {
31         if (message->vtable.serialize)
32                 return message->vtable.serialize(message, writer);
33         return -1;
34 }
35
36 int message_deserialize(message_t *message, reader_t *reader)
37 {
38         if (message->vtable.deserialize)
39                 return message->vtable.deserialize(message, reader);
40         return -1;
41 }
42
43 void message_set_receiver(message_t *message, const char *ip, int port)
44 {
45         if (ip) strncpy(message->receiver_ip, ip, IP_ADDRESS_LEN);
46         message->receiver_port = port;
47 }
48
49 void message_get_receiver(message_t *message, const char **ip, int *port)
50 {
51         if (ip) *ip = message->receiver_ip;
52         if (port) *port = message->receiver_port;
53 }
54
55 time_t message_get_timestamp(message_t *message)
56 {
57         return message->timestamp;
58 }
59
60 void message_set_timestamp(message_t *message, time_t time)
61 {
62         message->timestamp = time;
63 }
64
65 void message_get_sender(message_t *message, const char **ip, int *port)
66 {
67         if (ip) *ip = message->sender_ip;
68         if (port) *port = message->sender_port;
69 }
70
71 void message_set_sender(message_t *message, const char *ip, int port)
72 {
73         if (ip) strncpy(message->sender_ip, ip, IP_ADDRESS_LEN);
74         message->sender_port = port;
75 }
76
77 message_type_e message_get_type(message_t *message)
78 {
79         return message->type;
80 }
81
82 void message_set_type(message_t *message, message_type_e type)
83 {
84         message->type = type;
85 }
86
87 int64_t message_get_serial(message_t *message)
88 {
89         return message->serial;
90 }
91
92 void message_base_init(message_t *msg)
93 {
94         memset(msg, 0x0, sizeof(message_t));
95
96         msg->vtable.serialize = message_base_serialize;
97         msg->vtable.deserialize = message_base_deserialize;
98         msg->vtable.destroy = message_base_destroy;
99         msg->serial = current_serial++;
100 }
101
102 void message_base_destroy(message_t *msg)
103 {
104 }
105
106 int message_base_deserialize(message_t *msg, reader_t *reader)
107 {
108         int err = 0;
109
110         err |= reader_read_int64(reader, &msg->serial);
111         err |= reader_read_int32(reader, &msg->type);
112         err |= reader_read_int64(reader, &msg->timestamp);
113
114         return err;
115 }
116
117 int message_base_serialize(message_t *msg, writer_t *writer)
118 {
119         int err = 0;
120
121         err |= writer_write_int64(writer, msg->serial);
122         err |= writer_write_int32(writer, msg->type);
123         err |= writer_write_int64(writer, msg->timestamp);
124
125         return err;
126 }