YAMI4Industry: channel.h Source File

YAMI4Industry
channel.h
Go to the documentation of this file.
1 /* Copyright Inspirel Sp. z o.o. 2013-2015.
2  * This file is part of YAMI4.
3  *
4  * YAMI4 is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * YAMI4 is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with YAMI4. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef YAMI4INDUSTRY_CHANNEL_H
19 #define YAMI4INDUSTRY_CHANNEL_H
20 
21 #include "callbacks.h"
22 #include "common.h"
23 #include "limits.h"
24 #include "options.h"
25 
26 #include <stddef.h>
27 #include <stdint.h>
28 
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #endif /* __cplusplus */
33 
34  enum yami_protocol { yami_tcp, yami_udp };
35 
36  struct yami_channel
37 {
38   int32_t socket_;
39 
40   enum yami_protocol protocol_;
41 
42   uint32_t host_;
43   uint16_t port_;
44 
45   int32_t socket_ready_for_output_;
46   int32_t socket_ready_for_input_;
47 
48   int32_t output_buffer_has_data_;
49   size_t output_data_size_;
50   size_t output_data_written_so_far_;
51   int64_t output_message_id_; /* for high-level callbacks */
52 
53   int32_t input_buffer_has_space_;
54   size_t input_data_read_so_far_;
55   uint32_t input_message_id_;
56   size_t input_message_header_size_;
57   size_t input_message_payload_size_;
58   int32_t input_message_complete_;
59 
60  /* note: sizes of the arrays below can interact */
61  /* with required padding at the end of struct */
62 
63   char target_[MAX_LENGTH_OF_TARGET_NAME];
64 
65   uint8_t output_buffer_[MAX_OUTGOING_MESSAGE_PAYLOAD];
66   uint8_t input_buffer_[MAX_INCOMING_MESSAGE_PAYLOAD];
67 };
68 
69 void yami_channel_init(struct yami_channel * self);
70 
71 int32_t yami_channel_is_open(const struct yami_channel * self);
72 
73 int32_t yami_channel_name_cmp(const struct yami_channel * self,
74  const char target[]);
75 
76 enum yami_result yami_channel_open(struct yami_channel * self,
77  const char target[], const struct yami_options * options,
78  yami_io_error_function io_error_callback);
79 
80 enum yami_result yami_channel_close(struct yami_channel * self,
81  yami_io_error_function io_error_callback);
82 
83 enum yami_result yami_channel_post_raw_message(struct yami_channel * self,
84  uint32_t core_message_id,
85  const uint8_t header[], size_t header_size,
86  const uint8_t body[], size_t body_size);
87 
88 enum yami_result yami_channel_post_message(struct yami_channel * self,
89  const char object_name[], const char message_name[],
90  int64_t message_id, uint32_t core_message_id,
91  const uint8_t body[], size_t body_size);
92 
93 enum yami_result yami_channel_post_reply(struct yami_channel * self,
94  int64_t message_id, uint32_t core_message_id,
95  const uint8_t body[], size_t body_size);
96 
97 enum yami_result yami_channel_post_reject(struct yami_channel * self,
98  int64_t message_id, uint32_t core_message_id,
99  const char reason[]);
100 
101 enum yami_result yami_channel_write_some_data(struct yami_channel * self,
102  yami_io_error_function io_error_callback);
103 
104 enum yami_result yami_channel_read_some_data(struct yami_channel * self,
105  yami_io_error_function io_error_callback);
106 
107 void yami_channel_clean_input_buffer(struct yami_channel * const self);
108 
109 enum yami_result yami_channel_check_udp_packet(
110  struct yami_channel * self);
111 
112 #ifdef __cplusplus
113 }
114 #endif /* __cplusplus */
115 
116 #endif /* YAMI4INDUSTRY_CHANNEL_H */
yami_channel::protocol_
enum yami_protocol protocol_
Definition: channel.h:40
yami_io_error_function
void(* yami_io_error_function)(int32_t error_code, const char description[])
Definition: callbacks.h:81
yami_options
Definition: options.h:30
MAX_LENGTH_OF_TARGET_NAME
#define MAX_LENGTH_OF_TARGET_NAME
Definition: limits.h:23
yami_channel_post_message
enum yami_result yami_channel_post_message(struct yami_channel *self, const char object_name[], const char message_name[], int64_t message_id, uint32_t core_message_id, const uint8_t body[], size_t body_size)
Definition: channel.c:213
yami_result
yami_result
Definition: common.h:28
yami_channel::output_data_written_so_far_
size_t output_data_written_so_far_
Definition: channel.h:50
yami_channel_post_raw_message
enum yami_result yami_channel_post_raw_message(struct yami_channel *self, uint32_t core_message_id, const uint8_t header[], size_t header_size, const uint8_t body[], size_t body_size)
Definition: channel.c:120
yami_channel_open
enum yami_result yami_channel_open(struct yami_channel *self, const char target[], const struct yami_options *options, yami_io_error_function io_error_callback)
Definition: channel.c:66
yami_channel::socket_ready_for_output_
int32_t socket_ready_for_output_
Definition: channel.h:45
yami_channel::target_
char target_[MAX_LENGTH_OF_TARGET_NAME]
Definition: channel.h:63
MAX_OUTGOING_MESSAGE_PAYLOAD
#define MAX_OUTGOING_MESSAGE_PAYLOAD
Definition: limits.h:30
yami_channel::socket_ready_for_input_
int32_t socket_ready_for_input_
Definition: channel.h:46
yami_channel::input_buffer_
uint8_t input_buffer_[MAX_INCOMING_MESSAGE_PAYLOAD]
Definition: channel.h:66
yami_channel_is_open
int32_t yami_channel_is_open(const struct yami_channel *self)
Definition: channel.c:38
yami_channel_read_some_data
enum yami_result yami_channel_read_some_data(struct yami_channel *self, yami_io_error_function io_error_callback)
Definition: channel.c:551
yami_channel::output_data_size_
size_t output_data_size_
Definition: channel.h:49
yami_channel::port_
uint16_t port_
Definition: channel.h:43
MAX_INCOMING_MESSAGE_PAYLOAD
#define MAX_INCOMING_MESSAGE_PAYLOAD
Definition: limits.h:33
yami_channel_name_cmp
int32_t yami_channel_name_cmp(const struct yami_channel *self, const char target[])
Definition: channel.c:56
yami_channel::input_message_id_
uint32_t input_message_id_
Definition: channel.h:55
yami_channel::input_data_read_so_far_
size_t input_data_read_so_far_
Definition: channel.h:54
yami_channel::output_buffer_
uint8_t output_buffer_[MAX_OUTGOING_MESSAGE_PAYLOAD]
Definition: channel.h:65
yami_channel::input_message_payload_size_
size_t input_message_payload_size_
Definition: channel.h:57
yami_channel_post_reject
enum yami_result yami_channel_post_reject(struct yami_channel *self, int64_t message_id, uint32_t core_message_id, const char reason[])
Definition: channel.c:280
yami_channel_post_reply
enum yami_result yami_channel_post_reply(struct yami_channel *self, int64_t message_id, uint32_t core_message_id, const uint8_t body[], size_t body_size)
Definition: channel.c:249
yami_channel
Definition: channel.h:36
yami_channel_write_some_data
enum yami_result yami_channel_write_some_data(struct yami_channel *self, yami_io_error_function io_error_callback)
Definition: channel.c:369
yami_channel_close
enum yami_result yami_channel_close(struct yami_channel *self, yami_io_error_function io_error_callback)
Definition: channel.c:100
yami_channel_check_udp_packet
enum yami_result yami_channel_check_udp_packet(struct yami_channel *self)
Definition: channel.c:500
yami_channel::output_message_id_
int64_t output_message_id_
Definition: channel.h:51
yami_channel::socket_
int32_t socket_
Definition: channel.h:38
yami_channel::input_message_complete_
int32_t input_message_complete_
Definition: channel.h:58
yami_tcp
Definition: channel.h:34
yami_udp
Definition: channel.h:34
yami_protocol
yami_protocol
Definition: channel.h:34
yami_channel_clean_input_buffer
void yami_channel_clean_input_buffer(struct yami_channel *const self)
Definition: channel.c:493
yami_channel::host_
uint32_t host_
Definition: channel.h:42
yami_channel_init
void yami_channel_init(struct yami_channel *self)
Definition: channel.c:24
yami_channel::output_buffer_has_data_
int32_t output_buffer_has_data_
Definition: channel.h:48
yami_channel::input_message_header_size_
size_t input_message_header_size_
Definition: channel.h:56
yami_channel::input_buffer_has_space_
int32_t input_buffer_has_space_
Definition: channel.h:53

Generated on Tue Sep 8 2015 23:17:35 for YAMI4Industry by   doxygen 1.8.8

AltStyle によって変換されたページ (->オリジナル) /