]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/c_glib/src/thrift/c_glib/transport/thrift_transport.c
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / jaegertracing / thrift / lib / c_glib / src / thrift / c_glib / transport / thrift_transport.c
CommitLineData
f67539c2
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#include <thrift/c_glib/thrift.h>
21#include <thrift/c_glib/transport/thrift_transport.h>
22
23/* define the GError domain string */
24#define THRIFT_TRANSPORT_ERROR_DOMAIN "thrift-transport-error-quark"
25
26G_DEFINE_ABSTRACT_TYPE(ThriftTransport, thrift_transport, G_TYPE_OBJECT)
27
28gboolean
29thrift_transport_is_open (ThriftTransport *transport)
30{
31 return THRIFT_TRANSPORT_GET_CLASS (transport)->is_open (transport);
32}
33
34gboolean
35thrift_transport_peek (ThriftTransport *transport, GError **error)
36{
37 return THRIFT_TRANSPORT_GET_CLASS (transport)->peek (transport, error);
38}
39
40gboolean
41thrift_transport_open (ThriftTransport *transport, GError **error)
42{
43 return THRIFT_TRANSPORT_GET_CLASS (transport)->open (transport, error);
44}
45
46gboolean
47thrift_transport_close (ThriftTransport *transport, GError **error)
48{
49 return THRIFT_TRANSPORT_GET_CLASS (transport)->close (transport, error);
50}
51
52gint32
53thrift_transport_read (ThriftTransport *transport, gpointer buf,
54 guint32 len, GError **error)
55{
56 return THRIFT_TRANSPORT_GET_CLASS (transport)->read (transport, buf,
57 len, error);
58}
59
60gboolean
61thrift_transport_read_end (ThriftTransport *transport, GError **error)
62{
63 return THRIFT_TRANSPORT_GET_CLASS (transport)->read_end (transport,
64 error);
65}
66
67gboolean
68thrift_transport_write (ThriftTransport *transport, const gpointer buf,
69 const guint32 len, GError **error)
70{
71 return THRIFT_TRANSPORT_GET_CLASS (transport)->write (transport, buf,
72 len, error);
73}
74
75gboolean
76thrift_transport_write_end (ThriftTransport *transport, GError **error)
77{
78 return THRIFT_TRANSPORT_GET_CLASS (transport)->write_end (transport,
79 error);
80}
81
82gboolean
83thrift_transport_flush (ThriftTransport *transport, GError **error)
84{
85 return THRIFT_TRANSPORT_GET_CLASS (transport)->flush (transport, error);
86}
87
88gint32
89thrift_transport_read_all (ThriftTransport *transport, gpointer buf,
90 guint32 len, GError **error)
91{
92 return THRIFT_TRANSPORT_GET_CLASS (transport)->read_all (transport, buf,
93 len, error);
94}
95
96/* by default, peek returns true if and only if the transport is open */
97static gboolean
98thrift_transport_real_peek (ThriftTransport *transport, GError **error)
99{
100 THRIFT_UNUSED_VAR (error);
101
102 return THRIFT_TRANSPORT_GET_CLASS (transport)->is_open (transport);
103}
104
105static gint32
106thrift_transport_real_read_all (ThriftTransport *transport, gpointer buf,
107 guint32 len, GError **error)
108{
109 ThriftTransportClass *ttc;
110 guint32 have;
111 gint32 ret;
112 gint8 *bytes;
113
114 THRIFT_UNUSED_VAR (error);
115
116 ttc = THRIFT_TRANSPORT_GET_CLASS (transport);
117 have = 0;
118 ret = 0;
119 bytes = (gint8*) buf;
120
121 while (have < len) {
122 if ((ret = ttc->read (transport, (gpointer) (bytes + have), len - have,
123 error)) < 0) {
124 return ret;
125 }
126 have += ret;
127 }
128
129 return have;
130}
131
132/* define the GError domain for Thrift transports */
133GQuark
134thrift_transport_error_quark (void)
135{
136 return g_quark_from_static_string (THRIFT_TRANSPORT_ERROR_DOMAIN);
137}
138
139/* class initializer for ThriftTransport */
140static void
141thrift_transport_class_init (ThriftTransportClass *cls)
142{
143 /* set these as virtual methods to be implemented by a subclass */
144 cls->is_open = thrift_transport_is_open;
145 cls->open = thrift_transport_open;
146 cls->close = thrift_transport_close;
147 cls->read = thrift_transport_read;
148 cls->read_end = thrift_transport_read_end;
149 cls->write = thrift_transport_write;
150 cls->write_end = thrift_transport_write_end;
151 cls->flush = thrift_transport_flush;
152
153 /* provide a default implementation for the peek and read_all methods */
154 cls->peek = thrift_transport_real_peek;
155 cls->read_all = thrift_transport_real_read_all;
156}
157
158static void
159thrift_transport_init (ThriftTransport *transport)
160{
161 THRIFT_UNUSED_VAR (transport);
162}