1/*
2 * Copyright 2015 Collabora Ltd.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library 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 GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General
15 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authors: Philip Withnall <philip.withnall@collabora.co.uk>
18 */
19
20#ifndef __G_DATAGRAM_BASED_H__
21#define __G_DATAGRAM_BASED_H__
22
23#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
24#error "Only <gio/gio.h> can be included directly."
25#endif
26
27#include <gio/giotypes.h>
28
29G_BEGIN_DECLS
30
31#define G_TYPE_DATAGRAM_BASED (g_datagram_based_get_type ())
32#define G_DATAGRAM_BASED(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
33 G_TYPE_DATAGRAM_BASED, GDatagramBased))
34#define G_IS_DATAGRAM_BASED(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
35 G_TYPE_DATAGRAM_BASED))
36#define G_DATAGRAM_BASED_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \
37 G_TYPE_DATAGRAM_BASED, \
38 GDatagramBasedInterface))
39#define G_TYPE_IS_DATAGRAM_BASED(type) (g_type_is_a ((type), \
40 G_TYPE_DATAGRAM_BASED))
41
42/**
43 * GDatagramBased:
44 *
45 * Interface for socket-like objects with datagram semantics.
46 *
47 * Since: 2.48
48 */
49typedef struct _GDatagramBasedInterface GDatagramBasedInterface;
50
51/**
52 * GDatagramBasedInterface:
53 * @g_iface: The parent interface.
54 * @receive_messages: Virtual method for g_datagram_based_receive_messages().
55 * @send_messages: Virtual method for g_datagram_based_send_messages().
56 * @create_source: Virtual method for g_datagram_based_create_source().
57 * @condition_check: Virtual method for g_datagram_based_condition_check().
58 * @condition_wait: Virtual method for
59 * g_datagram_based_condition_wait().
60 *
61 * Provides an interface for socket-like objects which have datagram semantics,
62 * following the Berkeley sockets API. The interface methods are thin wrappers
63 * around the corresponding virtual methods, and no pre-processing of inputs is
64 * implemented — so implementations of this API must handle all functionality
65 * documented in the interface methods.
66 *
67 * Since: 2.48
68 */
69struct _GDatagramBasedInterface
70{
71 GTypeInterface g_iface;
72
73 /* Virtual table */
74 gint (*receive_messages) (GDatagramBased *datagram_based,
75 GInputMessage *messages,
76 guint num_messages,
77 gint flags,
78 gint64 timeout,
79 GCancellable *cancellable,
80 GError **error);
81 gint (*send_messages) (GDatagramBased *datagram_based,
82 GOutputMessage *messages,
83 guint num_messages,
84 gint flags,
85 gint64 timeout,
86 GCancellable *cancellable,
87 GError **error);
88
89 GSource *(*create_source) (GDatagramBased *datagram_based,
90 GIOCondition condition,
91 GCancellable *cancellable);
92 GIOCondition (*condition_check) (GDatagramBased *datagram_based,
93 GIOCondition condition);
94 gboolean (*condition_wait) (GDatagramBased *datagram_based,
95 GIOCondition condition,
96 gint64 timeout,
97 GCancellable *cancellable,
98 GError **error);
99};
100
101GLIB_AVAILABLE_IN_2_48
102GType
103g_datagram_based_get_type (void);
104
105GLIB_AVAILABLE_IN_2_48
106gint
107g_datagram_based_receive_messages (GDatagramBased *datagram_based,
108 GInputMessage *messages,
109 guint num_messages,
110 gint flags,
111 gint64 timeout,
112 GCancellable *cancellable,
113 GError **error);
114
115GLIB_AVAILABLE_IN_2_48
116gint
117g_datagram_based_send_messages (GDatagramBased *datagram_based,
118 GOutputMessage *messages,
119 guint num_messages,
120 gint flags,
121 gint64 timeout,
122 GCancellable *cancellable,
123 GError **error);
124
125GLIB_AVAILABLE_IN_2_48
126GSource *
127g_datagram_based_create_source (GDatagramBased *datagram_based,
128 GIOCondition condition,
129 GCancellable *cancellable);
130GLIB_AVAILABLE_IN_2_48
131GIOCondition
132g_datagram_based_condition_check (GDatagramBased *datagram_based,
133 GIOCondition condition);
134GLIB_AVAILABLE_IN_2_48
135gboolean
136g_datagram_based_condition_wait (GDatagramBased *datagram_based,
137 GIOCondition condition,
138 gint64 timeout,
139 GCancellable *cancellable,
140 GError **error);
141
142G_END_DECLS
143
144#endif /* __G_DATAGRAM_BASED_H__ */
145