Mstdlib-1.24.0
mstdlib_io.h
1#ifndef __MSTDLIB_IO_H__
2#define __MSTDLIB_IO_H__
3
4#include <mstdlib/mstdlib.h>
5#include <mstdlib/mstdlib_thread.h>
6
7/*! \defgroup m_eventio Event Based I/O Subsystem
8 *
9 * \code{.c}
10 * #include <mstdlib/mstdlib_io.h>
11 * \endcode
12 *
13 * The I/O system is designed to be a series of stackable
14 * layers. For example: Client - Trace <-> TLS <-> Net - Server.
15 *
16 * Data flown through each layer and each one process the data
17 * accordingly. In the above example the trace has the ability to
18 * print the data before it's encrypted and put on the wire and after
19 * data has been received and decrypted.
20 *
21 * Layers for the most part can be any order. Some layers are required to be at
22 * a certain level. For example, Base layers like Net should always be the
23 * bottom most layer. However, you could have Client - TLS <-> Trace <-> Net -
24 * Server. Unlike above the Trace layer would have access to the data after
25 * it's encrypted. Or before it's decrypted. Suffice it to say, order can make
26 * a huge difference in how data is processed.
27 *
28 * At a high level the use of an I/O connection should have minimal if no
29 * dependency on knowledge of lower layers. Meaning, if you're working with a
30 * device that supports multiple connectivity methods there should be no
31 * code changes needed for different Base I/O connections. That said some
32 * layers, such as Net, expose additional information that could be useful.
33 * That said, change from Bluetooth to HID should involve nothing more than
34 * changing the create function that sets up the Base layer.
35 *
36 * The Event subsystem and I/O objects can be used independently of each
37 * other. The Event subsystem can be used for general event processing like
38 * you'd see in macOS or iOS. The I/O system can be used with a set of
39 * synchronous functions negating the need for and Event loop.
40 */
41
42/*! \defgroup m_eventio_base Base I/O subsystems
43 * \ingroup m_eventio
44 *
45 * Some I/O layers are considered base layers and typically do not
46 * have any layers underneath them. These are subsystems that handle
47 * communication with an endpoint. While higher layers typically deal
48 * with manipulation of the data going into and out of the base end
49 * point layer. For example, Net is a base layer which handles sending
50 * and receiving data over a network socket. TLS is a layer above that
51 * manipulates (encrypts and decrypts) the data as it goes into and
52 * comes out of the Net layer.
53 *
54 */
55
56/*! \defgroup m_eventio_base_addon Add-on IO layers
57 * \ingroup m_eventio
58 *
59 * Common layers that stack on base IO objects
60 *
61 */
62
63/*! \defgroup m_eventio_semipublic Semi-Public interfaces
64 * \ingroup m_eventio
65 *
66 * Interfaces that can be used when extending the I/O subsystem, requires
67 * manual inclusion of additional headers that are not in the normal
68 * public API.
69 *
70 * These APIs are more likely to change from release to release and should
71 * not be considered as stable as the public interfaces.
72 *
73 */
74
75#include <mstdlib/io/m_io.h>
76#include <mstdlib/io/m_io_net.h>
77#include <mstdlib/io/m_io_net_iface_ips.h>
78#include <mstdlib/io/m_dns.h>
79#include <mstdlib/io/m_io_pipe.h>
80#include <mstdlib/io/m_event.h>
81#include <mstdlib/io/m_io_ble.h>
82#include <mstdlib/io/m_io_block.h>
83#include <mstdlib/io/m_io_bluetooth.h>
84#include <mstdlib/io/m_io_bwshaping.h>
85#include <mstdlib/io/m_io_loopback.h>
86#include <mstdlib/io/m_io_process.h>
87#include <mstdlib/io/m_io_proxy_protocol.h>
88#include <mstdlib/io/m_io_serial.h>
89#include <mstdlib/io/m_io_hid.h>
90#include <mstdlib/io/m_io_mfi.h>
91#include <mstdlib/io/m_io_trace.h>
92#include <mstdlib/io/m_io_buffer.h>
93
94#endif /* __MSTDLIB_IO_H__ */