From: Roger Meier Date: Fri, 26 Nov 2010 10:17:48 +0000 (+0000) Subject: THRIFT-1003 Polishing c_glib code X-Git-Tag: 0.6.0~24 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=c101092ea742e1252207b6e8f680bf392292c916;p=common%2Fthrift.git THRIFT-1003 Polishing c_glib code Patch: Anatol Pomozov git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1039299 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/configure.ac b/configure.ac index 82896ba2..1294c263 100644 --- a/configure.ac +++ b/configure.ac @@ -425,9 +425,6 @@ AC_CONFIG_FILES([ test/rb/Makefile ]) -AC_CONFIG_FILES([lib/c_glib/test/test-wrapper.sh], - [chmod +x lib/c_glib/test/test-wrapper.sh]) - AC_OUTPUT diff --git a/lib/c_glib/src/processor/thrift_processor.c b/lib/c_glib/src/processor/thrift_processor.c index c5d4034a..6e9f454f 100644 --- a/lib/c_glib/src/processor/thrift_processor.c +++ b/lib/c_glib/src/processor/thrift_processor.c @@ -1,36 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "processor/thrift_processor.h" -/* forward declarations */ -static void thrift_processor_class_init (ThriftProcessorClass *cls); +G_DEFINE_ABSTRACT_TYPE(ThriftProcessor, thrift_processor, G_TYPE_OBJECT) -/* define ThriftProcessorClass's type */ -GType -thrift_processor_get_type (void) +gboolean +thrift_processor_process (ThriftProcessor *processor, ThriftProtocol *in, + ThriftProtocol *out) { - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftProcessorClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_processor_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftProcessor), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftProcessor", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; + return THRIFT_PROCESSOR_GET_CLASS (processor)->process (processor, in, out); } /* class initializer for ThriftProcessor */ @@ -41,10 +37,8 @@ thrift_processor_class_init (ThriftProcessorClass *cls) cls->process = thrift_processor_process; } -gboolean -thrift_processor_process (ThriftProcessor *processor, ThriftProtocol *in, - ThriftProtocol *out) +static void +thrift_processor_init (ThriftProcessor *processor) { - return THRIFT_PROCESSOR_GET_CLASS (processor)->process (processor, in, out); + THRIFT_UNUSED_VAR (processor); } - diff --git a/lib/c_glib/src/processor/thrift_processor.h b/lib/c_glib/src/processor/thrift_processor.h index cc0b0060..390e31b4 100644 --- a/lib/c_glib/src/processor/thrift_processor.h +++ b/lib/c_glib/src/processor/thrift_processor.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_PROCESSOR_H #define _THRIFT_PROCESSOR_H @@ -5,24 +24,19 @@ #include "protocol/thrift_protocol.h" +G_BEGIN_DECLS + /*! \file thrift_processor.h * \brief Abstract class for Thrift processors. */ -/* type macros */ +/* type macros */ #define THRIFT_TYPE_PROCESSOR (thrift_processor_get_type ()) -#define THRIFT_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_PROCESSOR, ThriftProcessor)) -#define THRIFT_IS_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_PROCESSOR)) -#define THRIFT_PROCESSOR_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_PROCESSOR, \ - ThriftProcessorClass)) -#define THRIFT_IS_PROCESSOR_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_PROCESSOR)) -#define THRIFT_PROCESSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_PROCESSOR, \ - ThriftProcessorClass)) +#define THRIFT_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_PROCESSOR, ThriftProcessor)) +#define THRIFT_IS_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_PROCESSOR)) +#define THRIFT_PROCESSOR_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_PROCESSOR, ThriftProcessorClass)) +#define THRIFT_IS_PROCESSOR_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_PROCESSOR)) +#define THRIFT_PROCESSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_PROCESSOR, ThriftProcessorClass)) /*! * Thrift Processorobject @@ -47,7 +61,7 @@ struct _ThriftProcessorClass typedef struct _ThriftProcessorClass ThriftProcessorClass; /* used by THRIFT_TYPE_PROCESSOR */ -GType thrift_processor_get_type (void); +GType thrift_processor_get_type (void); /*! * Processes the request. @@ -56,4 +70,6 @@ GType thrift_processor_get_type (void); gboolean thrift_processor_process (ThriftProcessor *processor, ThriftProtocol *in, ThriftProtocol *out); +G_END_DECLS + #endif /* _THRIFT_PROCESSOR_H */ diff --git a/lib/c_glib/src/protocol/thrift_binary_protocol.c b/lib/c_glib/src/protocol/thrift_binary_protocol.c index afedc9ec..7ee28e89 100644 --- a/lib/c_glib/src/protocol/thrift_binary_protocol.c +++ b/lib/c_glib/src/protocol/thrift_binary_protocol.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -5,118 +24,7 @@ #include "protocol/thrift_protocol.h" #include "protocol/thrift_binary_protocol.h" -/* forward declarations */ -static guint64 thrift_bitwise_cast_guint64 (gdouble v); -static gdouble thrift_bitwise_cast_gdouble (guint64 v); -static void thrift_binary_protocol_class_init (ThriftProtocolClass *cls); - -gint32 thrift_binary_protocol_write_message_begin (ThriftProtocol *protocol, - const gchar *name, const ThriftMessageType message_type, - const gint32 seqid, GError **error); -gint32 thrift_binary_protocol_write_message_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_struct_begin (ThriftProtocol *protocol, - const gchar *name, - GError **error); -gint32 thrift_binary_protocol_write_struct_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_field_begin (ThriftProtocol *protocol, - const gchar *name, - const ThriftType field_type, - const gint16 field_id, - GError **error); -gint32 thrift_binary_protocol_write_field_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_field_stop (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_map_begin (ThriftProtocol *protocol, - const ThriftType key_type, - const ThriftType value_type, - const guint32 size, - GError **error); -gint32 thrift_binary_protocol_write_map_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_list_begin (ThriftProtocol *protocol, - const ThriftType element_type, - const guint32 size, - GError **error); -gint32 thrift_binary_protocol_write_list_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_set_begin (ThriftProtocol *protocol, - const ThriftType element_type, - const guint32 size, - GError **error); -gint32 thrift_binary_protocol_write_set_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_write_bool (ThriftProtocol *protocol, - const gboolean value, GError **error); -gint32 thrift_binary_protocol_write_byte (ThriftProtocol *protocol, - const gint8 value, GError **error); -gint32 thrift_binary_protocol_write_i16 (ThriftProtocol *protocol, - const gint16 value, GError **error); -gint32 thrift_binary_protocol_write_i32 (ThriftProtocol *protocol, - const gint32 value, GError **error); -gint32 thrift_binary_protocol_write_i64 (ThriftProtocol *protocol, - const gint64 value, GError **error); -gint32 thrift_binary_protocol_write_double (ThriftProtocol *protocol, - const gdouble value, - GError **error); -gint32 thrift_binary_protocol_write_string (ThriftProtocol *protocol, - const gchar *str, GError **error); -gint32 thrift_binary_protocol_write_binary (ThriftProtocol *protocol, - const gpointer buf, - const guint32 len, GError **error); -gint32 thrift_binary_protocol_read_message_begin ( - ThriftProtocol *protocol, gchar **name, - ThriftMessageType *message_type, gint32 *seqid, GError **error); -gint32 thrift_binary_protocol_read_message_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_struct_begin (ThriftProtocol *protocol, - gchar **name, - GError **error); -gint32 thrift_binary_protocol_read_struct_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_field_begin (ThriftProtocol *protocol, - gchar **name, - ThriftType *field_type, - gint16 *field_id, - GError **error); -gint32 thrift_binary_protocol_read_field_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_map_begin (ThriftProtocol *protocol, - ThriftType *key_type, - ThriftType *value_type, - guint32 *size, - GError **error); -gint32 thrift_binary_protocol_read_map_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_list_begin (ThriftProtocol *protocol, - ThriftType *element_type, - guint32 *size, GError **error); -gint32 thrift_binary_protocol_read_list_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_set_begin (ThriftProtocol *protocol, - ThriftType *element_type, - guint32 *size, GError **error); -gint32 thrift_binary_protocol_read_set_end (ThriftProtocol *protocol, - GError **error); -gint32 thrift_binary_protocol_read_bool (ThriftProtocol *protocol, - gboolean *value, GError **error); -gint32 thrift_binary_protocol_read_byte (ThriftProtocol *protocol, gint8 *value, - GError **error); -gint32 thrift_binary_protocol_read_i16 (ThriftProtocol *protocol, gint16 *value, - GError **error); -gint32 thrift_binary_protocol_read_i32 (ThriftProtocol *protocol, gint32 *value, - GError **error); -gint32 thrift_binary_protocol_read_i64 (ThriftProtocol *protocol, gint64 *value, - GError **error); -gint32 thrift_binary_protocol_read_double (ThriftProtocol *protocol, - gdouble *value, GError **error); -gint32 thrift_binary_protocol_read_string (ThriftProtocol *protocol, - gchar **str, GError **error); -gint32 thrift_binary_protocol_read_binary (ThriftProtocol *protocol, - gpointer *buf, guint32 *len, - GError **error); +G_DEFINE_TYPE(ThriftBinaryProtocol, thrift_binary_protocol, THRIFT_TYPE_PROTOCOL) static guint64 thrift_bitwise_cast_guint64 (gdouble v) @@ -140,82 +48,6 @@ thrift_bitwise_cast_gdouble (guint64 v) return u.to; } -GType -thrift_binary_protocol_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftBinaryProtocolClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_binary_protocol_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftBinaryProtocol), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_PROTOCOL, - "ThriftBinaryProtocolType", - &info, 0); - } - - return type; -} - -/* initialize the class */ -static void -thrift_binary_protocol_class_init (ThriftProtocolClass *cls) -{ - cls->write_message_begin = thrift_binary_protocol_write_message_begin; - cls->write_message_end = thrift_binary_protocol_write_message_end; - cls->write_struct_begin = thrift_binary_protocol_write_struct_begin; - cls->write_struct_end = thrift_binary_protocol_write_struct_end; - cls->write_field_begin = thrift_binary_protocol_write_field_begin; - cls->write_field_end = thrift_binary_protocol_write_field_end; - cls->write_field_stop = thrift_binary_protocol_write_field_stop; - cls->write_map_begin = thrift_binary_protocol_write_map_begin; - cls->write_map_end = thrift_binary_protocol_write_map_end; - cls->write_list_begin = thrift_binary_protocol_write_list_begin; - cls->write_list_end = thrift_binary_protocol_write_list_end; - cls->write_set_begin = thrift_binary_protocol_write_set_begin; - cls->write_set_end = thrift_binary_protocol_write_set_end; - cls->write_bool = thrift_binary_protocol_write_bool; - cls->write_byte = thrift_binary_protocol_write_byte; - cls->write_i16 = thrift_binary_protocol_write_i16; - cls->write_i32 = thrift_binary_protocol_write_i32; - cls->write_i64 = thrift_binary_protocol_write_i64; - cls->write_double = thrift_binary_protocol_write_double; - cls->write_string = thrift_binary_protocol_write_string; - cls->write_binary = thrift_binary_protocol_write_binary; - cls->read_message_begin = thrift_binary_protocol_read_message_begin; - cls->read_message_end = thrift_binary_protocol_read_message_end; - cls->read_struct_begin = thrift_binary_protocol_read_struct_begin; - cls->read_struct_end = thrift_binary_protocol_read_struct_end; - cls->read_field_begin = thrift_binary_protocol_read_field_begin; - cls->read_field_end = thrift_binary_protocol_read_field_end; - cls->read_map_begin = thrift_binary_protocol_read_map_begin; - cls->read_map_end = thrift_binary_protocol_read_map_end; - cls->read_list_begin = thrift_binary_protocol_read_list_begin; - cls->read_list_end = thrift_binary_protocol_read_list_end; - cls->read_set_begin = thrift_binary_protocol_read_set_begin; - cls->read_set_end = thrift_binary_protocol_read_set_end; - cls->read_bool = thrift_binary_protocol_read_bool; - cls->read_byte = thrift_binary_protocol_read_byte; - cls->read_i16 = thrift_binary_protocol_read_i16; - cls->read_i32 = thrift_binary_protocol_read_i32; - cls->read_i64 = thrift_binary_protocol_read_i64; - cls->read_double = thrift_binary_protocol_read_double; - cls->read_string = thrift_binary_protocol_read_string; - cls->read_binary = thrift_binary_protocol_read_binary; -} - gint32 thrift_binary_protocol_write_message_begin (ThriftProtocol *protocol, const gchar *name, const ThriftMessageType message_type, @@ -980,4 +812,57 @@ thrift_binary_protocol_read_binary (ThriftProtocol *protocol, return xfer; } +static void +thrift_binary_protocol_init (ThriftBinaryProtocol *protocol) +{ + THRIFT_UNUSED_VAR (protocol); +} + +/* initialize the class */ +static void +thrift_binary_protocol_class_init (ThriftBinaryProtocolClass *klass) +{ + ThriftProtocolClass *cls = THRIFT_PROTOCOL_CLASS (klass); + cls->write_message_begin = thrift_binary_protocol_write_message_begin; + cls->write_message_end = thrift_binary_protocol_write_message_end; + cls->write_struct_begin = thrift_binary_protocol_write_struct_begin; + cls->write_struct_end = thrift_binary_protocol_write_struct_end; + cls->write_field_begin = thrift_binary_protocol_write_field_begin; + cls->write_field_end = thrift_binary_protocol_write_field_end; + cls->write_field_stop = thrift_binary_protocol_write_field_stop; + cls->write_map_begin = thrift_binary_protocol_write_map_begin; + cls->write_map_end = thrift_binary_protocol_write_map_end; + cls->write_list_begin = thrift_binary_protocol_write_list_begin; + cls->write_list_end = thrift_binary_protocol_write_list_end; + cls->write_set_begin = thrift_binary_protocol_write_set_begin; + cls->write_set_end = thrift_binary_protocol_write_set_end; + cls->write_bool = thrift_binary_protocol_write_bool; + cls->write_byte = thrift_binary_protocol_write_byte; + cls->write_i16 = thrift_binary_protocol_write_i16; + cls->write_i32 = thrift_binary_protocol_write_i32; + cls->write_i64 = thrift_binary_protocol_write_i64; + cls->write_double = thrift_binary_protocol_write_double; + cls->write_string = thrift_binary_protocol_write_string; + cls->write_binary = thrift_binary_protocol_write_binary; + cls->read_message_begin = thrift_binary_protocol_read_message_begin; + cls->read_message_end = thrift_binary_protocol_read_message_end; + cls->read_struct_begin = thrift_binary_protocol_read_struct_begin; + cls->read_struct_end = thrift_binary_protocol_read_struct_end; + cls->read_field_begin = thrift_binary_protocol_read_field_begin; + cls->read_field_end = thrift_binary_protocol_read_field_end; + cls->read_map_begin = thrift_binary_protocol_read_map_begin; + cls->read_map_end = thrift_binary_protocol_read_map_end; + cls->read_list_begin = thrift_binary_protocol_read_list_begin; + cls->read_list_end = thrift_binary_protocol_read_list_end; + cls->read_set_begin = thrift_binary_protocol_read_set_begin; + cls->read_set_end = thrift_binary_protocol_read_set_end; + cls->read_bool = thrift_binary_protocol_read_bool; + cls->read_byte = thrift_binary_protocol_read_byte; + cls->read_i16 = thrift_binary_protocol_read_i16; + cls->read_i32 = thrift_binary_protocol_read_i32; + cls->read_i64 = thrift_binary_protocol_read_i64; + cls->read_double = thrift_binary_protocol_read_double; + cls->read_string = thrift_binary_protocol_read_string; + cls->read_binary = thrift_binary_protocol_read_binary; +} diff --git a/lib/c_glib/src/protocol/thrift_binary_protocol.h b/lib/c_glib/src/protocol/thrift_binary_protocol.h index 461c5247..95dced9c 100644 --- a/lib/c_glib/src/protocol/thrift_binary_protocol.h +++ b/lib/c_glib/src/protocol/thrift_binary_protocol.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_BINARY_PROTOCOL_H #define _THRIFT_BINARY_PROTOCOL_H @@ -6,6 +25,8 @@ #include "protocol/thrift_protocol.h" #include "transport/thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_binary_protocol.h * \brief Binary protocol implementation of a Thrift protocol. Implements the * ThriftProtocol interface. @@ -13,19 +34,11 @@ /* type macros */ #define THRIFT_TYPE_BINARY_PROTOCOL (thrift_binary_protocol_get_type ()) -#define THRIFT_BINARY_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_BINARY_PROTOCOL, \ - ThriftBinaryProtocol)) -#define THRIFT_IS_BINARY_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_BINARY_PROTOCOL)) -#define THRIFT_BINARY_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_BINARY_PROTOCOL, \ - ThriftBinaryProtocolClass)) -#define THRIFT_IS_BINARY_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_BINARY_PROTOCOL)) -#define THRIFT_BINARY_PROTOCOL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_BINARY_PROTOCOL, \ - ThriftBinaryProtocolClass)) +#define THRIFT_BINARY_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_BINARY_PROTOCOL, ThriftBinaryProtocol)) +#define THRIFT_IS_BINARY_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_BINARY_PROTOCOL)) +#define THRIFT_BINARY_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_BINARY_PROTOCOL, ThriftBinaryProtocolClass)) +#define THRIFT_IS_BINARY_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_BINARY_PROTOCOL)) +#define THRIFT_BINARY_PROTOCOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_BINARY_PROTOCOL, ThriftBinaryProtocolClass)) /* version numbers */ #define THRIFT_BINARY_PROTOCOL_VERSION_1 0x80010000 @@ -52,4 +65,6 @@ typedef struct _ThriftBinaryProtocolClass ThriftBinaryProtocolClass; /* used by THRIFT_TYPE_BINARY_PROTOCOL */ GType thrift_binary_protocol_get_type (void); +G_END_DECLS + #endif /* _THRIFT_BINARY_PROTOCOL_H */ diff --git a/lib/c_glib/src/protocol/thrift_binary_protocol_factory.c b/lib/c_glib/src/protocol/thrift_binary_protocol_factory.c index a3b4373c..3c9f5228 100644 --- a/lib/c_glib/src/protocol/thrift_binary_protocol_factory.c +++ b/lib/c_glib/src/protocol/thrift_binary_protocol_factory.c @@ -1,47 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ #include "thrift.h" #include "protocol/thrift_binary_protocol.h" #include "protocol/thrift_binary_protocol_factory.h" -/* forward declarations */ -static void thrift_binary_protocol_factory_class_init (ThriftProtocolFactoryClass *cls); - -ThriftProtocol *thrift_binary_protocol_factory_get_protocol (ThriftProtocolFactory *factory, ThriftTransport *transport); - -GType -thrift_binary_protocol_factory_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftBinaryProtocolFactoryClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_binary_protocol_factory_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftBinaryProtocolFactory), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_PROTOCOL_FACTORY, - "ThriftBinaryProtocolFactoryType", - &info, 0); - } - - return type; -} - -static void -thrift_binary_protocol_factory_class_init (ThriftProtocolFactoryClass *cls) -{ - cls->get_protocol = thrift_binary_protocol_factory_get_protocol; -} +G_DEFINE_TYPE(ThriftBinaryProtocolFactory, thrift_binary_protocol_factory, THRIFT_TYPE_PROTOCOL_FACTORY) ThriftProtocol * thrift_binary_protocol_factory_get_protocol (ThriftProtocolFactory *factory, @@ -55,4 +35,16 @@ thrift_binary_protocol_factory_get_protocol (ThriftProtocolFactory *factory, return THRIFT_PROTOCOL (tb); } +static void +thrift_binary_protocol_factory_class_init (ThriftBinaryProtocolFactoryClass *cls) +{ + ThriftProtocolFactoryClass *protocol_factory_class = THRIFT_PROTOCOL_FACTORY_CLASS (cls); + + protocol_factory_class->get_protocol = thrift_binary_protocol_factory_get_protocol; +} +static void +thrift_binary_protocol_factory_init (ThriftBinaryProtocolFactory *factory) +{ + THRIFT_UNUSED_VAR (factory); +} diff --git a/lib/c_glib/src/protocol/thrift_binary_protocol_factory.h b/lib/c_glib/src/protocol/thrift_binary_protocol_factory.h index ae4ae406..3b7fcc21 100644 --- a/lib/c_glib/src/protocol/thrift_binary_protocol_factory.h +++ b/lib/c_glib/src/protocol/thrift_binary_protocol_factory.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_BINARY_PROTOCOL_FACTORY_H #define _THRIFT_BINARY_PROTOCOL_FACTORY_H @@ -5,27 +24,15 @@ #include "protocol/thrift_protocol_factory.h" +G_BEGIN_DECLS + /* type macros */ -#define THRIFT_TYPE_BINARY_PROTOCOL_FACTORY \ - (thrift_binary_protocol_factory_get_type ()) -#define THRIFT_BINARY_PROTOCOL_FACTORY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, \ - ThriftBinaryProtocolFactory)) -#define THRIFT_IS_BINARY_PROTOCOL_FACTORY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_BINARY_PROTOCOL_FACTORY)) -#define THRIFT_BINARY_PROTOCOL_FACTORY_CLASS(c) \ - (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, \ - ThriftBinaryProtocolFactoryClass)) -#define THRIFT_IS_BINARY_PROTOCOL_FACTORY_CLASS(c) \ - (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_BINARY_PROTOCOL_FACTORY)) -#define THRIFT_BINARY_PROTOCOL_FACTORY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, \ - ThriftBinaryProtocolFactoryClass)) +#define THRIFT_TYPE_BINARY_PROTOCOL_FACTORY (thrift_binary_protocol_factory_get_type ()) +#define THRIFT_BINARY_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, ThriftBinaryProtocolFactory)) +#define THRIFT_IS_BINARY_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_BINARY_PROTOCOL_FACTORY)) +#define THRIFT_BINARY_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, ThriftBinaryProtocolFactoryClass)) +#define THRIFT_IS_BINARY_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_BINARY_PROTOCOL_FACTORY)) +#define THRIFT_BINARY_PROTOCOL_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, ThriftBinaryProtocolFactoryClass)) struct _ThriftBinaryProtocolFactory { @@ -37,10 +44,11 @@ struct _ThriftBinaryProtocolFactoryClass { ThriftProtocolFactoryClass parent; }; -typedef struct _ThriftBinaryProtocolFactoryClass - ThriftBinaryProtocolFactoryClass; +typedef struct _ThriftBinaryProtocolFactoryClass ThriftBinaryProtocolFactoryClass; /* used by THRIFT_TYPE_BINARY_PROTOCOL_FACTORY */ GType thrift_binary_protocol_factory_get_type (void); +G_END_DECLS + #endif /* _THRIFT_BINARY_PROTOCOL_FACTORY_H */ diff --git a/lib/c_glib/src/protocol/thrift_protocol.c b/lib/c_glib/src/protocol/thrift_protocol.c index 8ea54b68..d9510310 100644 --- a/lib/c_glib/src/protocol/thrift_protocol.c +++ b/lib/c_glib/src/protocol/thrift_protocol.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "protocol/thrift_protocol.h" #include "transport/thrift_transport.h" @@ -12,103 +31,7 @@ enum _ThriftProtocolProperties PROP_THRIFT_PROTOCOL_TRANSPORT }; -/* forward declarations */ -static void thrift_protocol_instance_init (ThriftProtocol *protocol); -static void thrift_protocol_class_init (ThriftProtocolClass *cls); -void thrift_protocol_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec); -void thrift_protocol_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec); - -/* define ThriftProtocolInterface's type */ -GType -thrift_protocol_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = { - sizeof (ThriftProtocolClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_protocol_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftProtocol), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_protocol_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftProtocol", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; -} - -static void -thrift_protocol_instance_init (ThriftProtocol *protocol) -{ - protocol->transport = NULL; -} - -static void -thrift_protocol_class_init (ThriftProtocolClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - - gobject_class->get_property = thrift_protocol_get_property; - gobject_class->set_property = thrift_protocol_set_property; - - g_object_class_install_property (gobject_class, - PROP_THRIFT_PROTOCOL_TRANSPORT, - g_param_spec_object ("transport", "Transport", "Thrift Transport", - THRIFT_TYPE_TRANSPORT, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - cls->write_message_begin = thrift_protocol_write_message_begin; - cls->write_message_end = thrift_protocol_write_message_end; - cls->write_struct_begin = thrift_protocol_write_struct_begin; - cls->write_struct_end = thrift_protocol_write_struct_end; - cls->write_field_begin = thrift_protocol_write_field_begin; - cls->write_field_end = thrift_protocol_write_field_end; - cls->write_field_stop = thrift_protocol_write_field_stop; - cls->write_map_begin = thrift_protocol_write_map_begin; - cls->write_map_end = thrift_protocol_write_map_end; - cls->write_list_begin = thrift_protocol_write_list_begin; - cls->write_list_end = thrift_protocol_write_list_end; - cls->write_set_begin = thrift_protocol_write_set_begin; - cls->write_set_end = thrift_protocol_write_set_end; - cls->write_bool = thrift_protocol_write_bool; - cls->write_byte = thrift_protocol_write_byte; - cls->write_i16 = thrift_protocol_write_i16; - cls->write_i32 = thrift_protocol_write_i32; - cls->write_i64 = thrift_protocol_write_i64; - cls->write_double = thrift_protocol_write_double; - cls->write_string = thrift_protocol_write_string; - cls->write_binary = thrift_protocol_write_binary; - cls->read_message_begin = thrift_protocol_read_message_begin; - cls->read_message_end = thrift_protocol_read_message_end; - cls->read_struct_begin = thrift_protocol_read_struct_begin; - cls->read_struct_end = thrift_protocol_read_struct_end; - cls->read_field_begin = thrift_protocol_read_field_begin; - cls->read_field_end = thrift_protocol_read_field_end; - cls->read_map_begin = thrift_protocol_read_map_begin; - cls->read_map_end = thrift_protocol_read_map_end; - cls->read_list_begin = thrift_protocol_read_list_begin; - cls->read_set_begin = thrift_protocol_read_set_begin; - cls->read_set_end = thrift_protocol_read_set_end; - cls->read_bool = thrift_protocol_read_bool; - cls->read_byte = thrift_protocol_read_byte; - cls->read_i16 = thrift_protocol_read_i16; - cls->read_i32 = thrift_protocol_read_i32; - cls->read_i64 = thrift_protocol_read_i64; - cls->read_double = thrift_protocol_read_double; - cls->read_string = thrift_protocol_read_string; - cls->read_binary = thrift_protocol_read_binary; -} +G_DEFINE_ABSTRACT_TYPE(ThriftProtocol, thrift_protocol, G_TYPE_OBJECT) void thrift_protocol_get_property (GObject *object, guint property_id, @@ -602,3 +525,65 @@ thrift_protocol_error_quark (void) return g_quark_from_static_string (THRIFT_PROTOCOL_ERROR_DOMAIN); } + +static void +thrift_protocol_init (ThriftProtocol *protocol) +{ + protocol->transport = NULL; +} + +static void +thrift_protocol_class_init (ThriftProtocolClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + + gobject_class->get_property = thrift_protocol_get_property; + gobject_class->set_property = thrift_protocol_set_property; + + g_object_class_install_property (gobject_class, + PROP_THRIFT_PROTOCOL_TRANSPORT, + g_param_spec_object ("transport", "Transport", "Thrift Transport", + THRIFT_TYPE_TRANSPORT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + cls->write_message_begin = thrift_protocol_write_message_begin; + cls->write_message_end = thrift_protocol_write_message_end; + cls->write_struct_begin = thrift_protocol_write_struct_begin; + cls->write_struct_end = thrift_protocol_write_struct_end; + cls->write_field_begin = thrift_protocol_write_field_begin; + cls->write_field_end = thrift_protocol_write_field_end; + cls->write_field_stop = thrift_protocol_write_field_stop; + cls->write_map_begin = thrift_protocol_write_map_begin; + cls->write_map_end = thrift_protocol_write_map_end; + cls->write_list_begin = thrift_protocol_write_list_begin; + cls->write_list_end = thrift_protocol_write_list_end; + cls->write_set_begin = thrift_protocol_write_set_begin; + cls->write_set_end = thrift_protocol_write_set_end; + cls->write_bool = thrift_protocol_write_bool; + cls->write_byte = thrift_protocol_write_byte; + cls->write_i16 = thrift_protocol_write_i16; + cls->write_i32 = thrift_protocol_write_i32; + cls->write_i64 = thrift_protocol_write_i64; + cls->write_double = thrift_protocol_write_double; + cls->write_string = thrift_protocol_write_string; + cls->write_binary = thrift_protocol_write_binary; + cls->read_message_begin = thrift_protocol_read_message_begin; + cls->read_message_end = thrift_protocol_read_message_end; + cls->read_struct_begin = thrift_protocol_read_struct_begin; + cls->read_struct_end = thrift_protocol_read_struct_end; + cls->read_field_begin = thrift_protocol_read_field_begin; + cls->read_field_end = thrift_protocol_read_field_end; + cls->read_map_begin = thrift_protocol_read_map_begin; + cls->read_map_end = thrift_protocol_read_map_end; + cls->read_list_begin = thrift_protocol_read_list_begin; + cls->read_set_begin = thrift_protocol_read_set_begin; + cls->read_set_end = thrift_protocol_read_set_end; + cls->read_bool = thrift_protocol_read_bool; + cls->read_byte = thrift_protocol_read_byte; + cls->read_i16 = thrift_protocol_read_i16; + cls->read_i32 = thrift_protocol_read_i32; + cls->read_i64 = thrift_protocol_read_i64; + cls->read_double = thrift_protocol_read_double; + cls->read_string = thrift_protocol_read_string; + cls->read_binary = thrift_protocol_read_binary; +} diff --git a/lib/c_glib/src/protocol/thrift_protocol.h b/lib/c_glib/src/protocol/thrift_protocol.h index 0340a60c..1aeaed93 100644 --- a/lib/c_glib/src/protocol/thrift_protocol.h +++ b/lib/c_glib/src/protocol/thrift_protocol.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_PROTOCOL_H #define _THRIFT_PROTOCOL_H @@ -5,12 +24,18 @@ #include "transport/thrift_transport.h" +G_BEGIN_DECLS + +/*! \file thrift_protocol.h + * \brief Abstract class for Thrift protocol implementations. + */ + /** * Enumerated definition of the types that the Thrift protocol supports. * Take special note of the T_END type which is used specifically to mark * the end of a sequence of fields. */ -enum _ThriftType { +typedef enum { T_STOP = 0, T_VOID = 1, T_BOOL = 2, @@ -29,39 +54,26 @@ enum _ThriftType { T_LIST = 15, T_UTF8 = 16, T_UTF16 = 17 -}; -typedef enum _ThriftType ThriftType; +} ThriftType; /** * Enumerated definition of the message types that the Thrift protocol * supports. */ -enum _ThriftMessageType { +typedef enum { T_CALL = 1, T_REPLY = 2, T_EXCEPTION = 3, T_ONEWAY = 4 -}; -typedef enum _ThriftMessageType ThriftMessageType; - -/*! \file thrift_protocol.h - * \brief Abstract class for Thrift protocol implementations. - */ +} ThriftMessageType; /* type macros */ #define THRIFT_TYPE_PROTOCOL (thrift_protocol_get_type ()) -#define THRIFT_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_PROTOCOL, ThriftProtocol)) -#define THRIFT_IS_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_PROTOCOL)) -#define THRIFT_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_PROTOCOL, \ - ThriftProtocolClass)) -#define THRIFT_IS_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_PROTOCOL)) -#define THRIFT_PROTOCOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_PROTOCOL, \ - ThriftProtocolClass)) +#define THRIFT_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_PROTOCOL, ThriftProtocol)) +#define THRIFT_IS_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_PROTOCOL)) +#define THRIFT_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_PROTOCOL, ThriftProtocolClass)) +#define THRIFT_IS_PROTOCOL_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_PROTOCOL)) +#define THRIFT_PROTOCOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_PROTOCOL, ThriftProtocolClass)) /*! * Thrift Protocol object @@ -141,11 +153,11 @@ struct _ThriftProtocolClass gint32 (*read_map_end) (ThriftProtocol *protocol, GError **error); gint32 (*read_list_begin) (ThriftProtocol *protocol, ThriftType *element_type, guint32 *size, GError **error); - gint32 (*read_list_end) (ThriftProtocol *protocol, GError **error); + gint32 (*read_list_end) (ThriftProtocol *protocol, GError **error); gint32 (*read_set_begin) (ThriftProtocol *protocol, ThriftType *element_type, - guint32 *size, GError **error); + guint32 *size, GError **error); gint32 (*read_set_end) (ThriftProtocol *protocol, GError **error); - gint32 (*read_bool) (ThriftProtocol *protocol, gboolean *value, + gint32 (*read_bool) (ThriftProtocol *protocol, gboolean *value, GError **error); gint32 (*read_byte) (ThriftProtocol *protocol, gint8 *value, GError **error); gint32 (*read_i16) (ThriftProtocol *protocol, gint16 *value, GError **error); @@ -163,7 +175,7 @@ typedef struct _ThriftProtocolClass ThriftProtocolClass; GType thrift_protocol_get_type (void); /* virtual public methods */ -gint32 thrift_protocol_write_message_begin (ThriftProtocol *protocol, +gint32 thrift_protocol_write_message_begin (ThriftProtocol *protocol, const gchar *name, const ThriftMessageType message_type, const gint32 seqid, GError **error); @@ -231,11 +243,11 @@ gint32 thrift_protocol_write_double (ThriftProtocol *protocol, gint32 thrift_protocol_write_string (ThriftProtocol *protocol, const gchar *str, GError **error); -gint32 thrift_protocol_write_binary (ThriftProtocol *protocol, +gint32 thrift_protocol_write_binary (ThriftProtocol *protocol, const gpointer buf, const guint32 len, GError **error); -gint32 thrift_protocol_read_message_begin (ThriftProtocol *thrift_protocol, +gint32 thrift_protocol_read_message_begin (ThriftProtocol *thrift_protocol, gchar **name, ThriftMessageType *message_type, gint32 *seqid, GError **error); @@ -321,4 +333,6 @@ typedef enum GQuark thrift_protocol_error_quark (void); #define THRIFT_PROTOCOL_ERROR (thrift_protocol_error_quark ()) +G_END_DECLS + #endif /* _THRIFT_PROTOCOL_H */ diff --git a/lib/c_glib/src/protocol/thrift_protocol_factory.c b/lib/c_glib/src/protocol/thrift_protocol_factory.c index 53b468d8..073b33c2 100644 --- a/lib/c_glib/src/protocol/thrift_protocol_factory.c +++ b/lib/c_glib/src/protocol/thrift_protocol_factory.c @@ -1,50 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "protocol/thrift_protocol_factory.h" -/* forward declarations */ -static void thrift_protocol_factory_class_init (ThriftProtocolFactoryClass *cls); -ThriftProtocol *thrift_protocol_factory_get_protocol(ThriftProtocolFactory *factory, ThriftTransport *transport); - +G_DEFINE_ABSTRACT_TYPE(ThriftProtocolFactory, thrift_protocol_factory, G_TYPE_OBJECT) -/* define ThriftProtocolFactoryInterface's type */ -GType -thrift_protocol_factory_get_type (void) +ThriftProtocol * +thrift_protocol_factory_get_protocol(ThriftProtocolFactory *factory, + ThriftTransport *transport) { - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = { - sizeof (ThriftProtocolFactoryClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_protocol_factory_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftProtocolFactory), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftProtocolFactory", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; + return THRIFT_PROTOCOL_FACTORY_GET_CLASS (factory)->get_protocol (factory, + transport); } static void -thrift_protocol_factory_class_init (ThriftProtocolFactoryClass *cls) +thrift_protocol_factory_init (ThriftProtocolFactory *factory) { - cls->get_protocol = thrift_protocol_factory_get_protocol; + THRIFT_UNUSED_VAR (factory); } -ThriftProtocol * -thrift_protocol_factory_get_protocol(ThriftProtocolFactory *factory, - ThriftTransport *transport) +static void +thrift_protocol_factory_class_init (ThriftProtocolFactoryClass *cls) { - return THRIFT_PROTOCOL_FACTORY_GET_CLASS (factory)->get_protocol (factory, - transport); + cls->get_protocol = thrift_protocol_factory_get_protocol; } - diff --git a/lib/c_glib/src/protocol/thrift_protocol_factory.h b/lib/c_glib/src/protocol/thrift_protocol_factory.h index d1532557..b9aeb1b6 100644 --- a/lib/c_glib/src/protocol/thrift_protocol_factory.h +++ b/lib/c_glib/src/protocol/thrift_protocol_factory.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_PROTOCOL_FACTORY_H #define _THRIFT_PROTOCOL_FACTORY_H @@ -6,26 +25,19 @@ #include "transport/thrift_transport.h" #include "protocol/thrift_protocol.h" +G_BEGIN_DECLS + /*! \file thrift_protocol_factory.h * \brief Abstract class for Thrift protocol factory implementations. */ /* type macros */ #define THRIFT_TYPE_PROTOCOL_FACTORY (thrift_protocol_factory_get_type ()) -#define THRIFT_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_PROTOCOL_FACTORY, \ - ThriftProtocolFactory)) -#define THRIFT_IS_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_PROTOCOL_FACTORY)) -#define THRIFT_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_PROTOCOL_FACTORY, \ - ThriftProtocolFactoryClass)) -#define THRIFT_IS_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_PROTOCOL_FACTORY)) -#define THRIFT_PROTOCOL_FACTORY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_PROTOCOL_FACTORY, \ - ThriftProtocolFactoryClass)) +#define THRIFT_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_PROTOCOL_FACTORY, ThriftProtocolFactory)) +#define THRIFT_IS_PROTOCOL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_PROTOCOL_FACTORY)) +#define THRIFT_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_PROTOCOL_FACTORY, ThriftProtocolFactoryClass)) +#define THRIFT_IS_PROTOCOL_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_PROTOCOL_FACTORY)) +#define THRIFT_PROTOCOL_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_PROTOCOL_FACTORY, ThriftProtocolFactoryClass)) /*! * Thrift Protocol Factory object @@ -54,4 +66,6 @@ GType thrift_protocol_factory_get_type (void); /* virtual public methods */ ThriftProtocol *thrift_protocol_factory_get_protocol(ThriftProtocolFactory *factory, ThriftTransport *transport); +G_END_DECLS + #endif /* _THRIFT_PROTOCOL_FACTORY_H */ diff --git a/lib/c_glib/src/server/thrift_server.c b/lib/c_glib/src/server/thrift_server.c index c7e6c1fb..61995764 100644 --- a/lib/c_glib/src/server/thrift_server.c +++ b/lib/c_glib/src/server/thrift_server.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "thrift_server.h" @@ -13,108 +32,7 @@ enum _ThriftServerProperties PROP_THRIFT_SERVER_OUTPUT_PROTOCOL_FACTORY }; -/* forward declarations */ -static void thrift_server_instance_init (ThriftServer *server); -static void thrift_server_class_init (ThriftServerClass *cls); -void thrift_server_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec); -void thrift_server_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec); - - -/* define ThriftServerClass's type */ -GType -thrift_server_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftServerClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_server_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftServer), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_server_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftServer", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; -} - -/* instance initializer for Thrift Server */ -static void -thrift_server_instance_init (ThriftServer *server) -{ - server->processor = NULL; - server->server_transport = NULL; - server->input_transport_factory = NULL; - server->output_transport_factory = NULL; - server->input_protocol_factory = NULL; - server->output_protocol_factory = NULL; -} - -/* class initializer for ThriftServer - * TODO: implement ServerEventHandler as a GClosure - */ -static void -thrift_server_class_init (ThriftServerClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - - gobject_class->get_property = thrift_server_get_property; - gobject_class->set_property = thrift_server_set_property; - - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_PROCESSOR, - g_param_spec_object ("processor", "Processor", "Thrift Processor", - THRIFT_TYPE_PROCESSOR, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_SERVER_TRANSPORT, - g_param_spec_object ("server_transport", "Server Transport", - "Thrift Server Transport", - THRIFT_TYPE_SERVER_TRANSPORT, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_INPUT_TRANSPORT_FACTORY, - g_param_spec_object ("input_transport_factory", "Input Transport Factory", - "Thrift Server Input Transport Factory", - THRIFT_TYPE_TRANSPORT_FACTORY, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_OUTPUT_TRANSPORT_FACTORY, - g_param_spec_object ("output_transport_factory", - "Output Transport Factory", - "Thrift Server Output Transport Factory", - THRIFT_TYPE_TRANSPORT_FACTORY, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_INPUT_PROTOCOL_FACTORY, - g_param_spec_object ("input_protocol_factory", "Input Protocol Factory", - "Thrift Server Input Protocol Factory", - THRIFT_TYPE_PROTOCOL_FACTORY, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_THRIFT_SERVER_OUTPUT_PROTOCOL_FACTORY, - g_param_spec_object ("output_protocol_factory", "Output Protocol Factory", - "Thrift Server Output Protocol Factory", - THRIFT_TYPE_PROTOCOL_FACTORY, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - /* set these as virtual methods to be implemented by a subclass */ - cls->serve = thrift_server_serve; - cls->stop = thrift_server_stop; -} +G_DEFINE_ABSTRACT_TYPE(ThriftServer, thrift_server, G_TYPE_OBJECT) void thrift_server_get_property (GObject *object, guint property_id, @@ -190,3 +108,67 @@ thrift_server_stop (ThriftServer *server) THRIFT_SERVER_GET_CLASS (server)->stop (server); } +/* instance initializer for Thrift Server */ +static void +thrift_server_init (ThriftServer *server) +{ + server->processor = NULL; + server->server_transport = NULL; + server->input_transport_factory = NULL; + server->output_transport_factory = NULL; + server->input_protocol_factory = NULL; + server->output_protocol_factory = NULL; +} + +/* class initializer for ThriftServer + * TODO: implement ServerEventHandler as a GClosure + */ +static void +thrift_server_class_init (ThriftServerClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + + gobject_class->get_property = thrift_server_get_property; + gobject_class->set_property = thrift_server_set_property; + + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_PROCESSOR, + g_param_spec_object ("processor", "Processor", "Thrift Processor", + THRIFT_TYPE_PROCESSOR, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_SERVER_TRANSPORT, + g_param_spec_object ("server_transport", "Server Transport", + "Thrift Server Transport", + THRIFT_TYPE_SERVER_TRANSPORT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_INPUT_TRANSPORT_FACTORY, + g_param_spec_object ("input_transport_factory", "Input Transport Factory", + "Thrift Server Input Transport Factory", + THRIFT_TYPE_TRANSPORT_FACTORY, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_OUTPUT_TRANSPORT_FACTORY, + g_param_spec_object ("output_transport_factory", + "Output Transport Factory", + "Thrift Server Output Transport Factory", + THRIFT_TYPE_TRANSPORT_FACTORY, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_INPUT_PROTOCOL_FACTORY, + g_param_spec_object ("input_protocol_factory", "Input Protocol Factory", + "Thrift Server Input Protocol Factory", + THRIFT_TYPE_PROTOCOL_FACTORY, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, + PROP_THRIFT_SERVER_OUTPUT_PROTOCOL_FACTORY, + g_param_spec_object ("output_protocol_factory", "Output Protocol Factory", + "Thrift Server Output Protocol Factory", + THRIFT_TYPE_PROTOCOL_FACTORY, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + /* set these as virtual methods to be implemented by a subclass */ + cls->serve = thrift_server_serve; + cls->stop = thrift_server_stop; +} diff --git a/lib/c_glib/src/server/thrift_server.h b/lib/c_glib/src/server/thrift_server.h index 2bbe95b6..b1113f85 100644 --- a/lib/c_glib/src/server/thrift_server.h +++ b/lib/c_glib/src/server/thrift_server.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_SERVER_H #define _THRIFT_SERVER_H @@ -8,24 +27,19 @@ #include "transport/thrift_transport_factory.h" #include "protocol/thrift_protocol_factory.h" +G_BEGIN_DECLS + /*! \file thrift_server.h * \brief Abstract class for Thrift servers. */ -/* type macros */ +/* type macros */ #define THRIFT_TYPE_SERVER (thrift_server_get_type ()) -#define THRIFT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_SERVER, ThriftServer)) -#define THRIFT_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_SERVER)) -#define THRIFT_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_SERVER, \ - ThriftServerClass)) -#define THRIFT_IS_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_SERVER)) -#define THRIFT_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_SERVER, \ - ThriftServerClass)) +#define THRIFT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_SERVER, ThriftServer)) +#define THRIFT_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_SERVER)) +#define THRIFT_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_SERVER, ThriftServerClass)) +#define THRIFT_IS_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_SERVER)) +#define THRIFT_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SERVER, ThriftServerClass)) /*! * Thrift Server object @@ -58,7 +72,7 @@ struct _ThriftServerClass typedef struct _ThriftServerClass ThriftServerClass; /* used by THRIFT_TYPE_SERVER */ -GType thrift_server_get_type (void); +GType thrift_server_get_type (void); /*! * Processes the request. @@ -71,5 +85,7 @@ void thrift_server_serve (ThriftServer *server); */ void thrift_server_stop (ThriftServer *server); +G_END_DECLS + #endif /* _THRIFT_SERVER_H */ diff --git a/lib/c_glib/src/server/thrift_simple_server.c b/lib/c_glib/src/server/thrift_simple_server.c index 1957928e..fe3067aa 100644 --- a/lib/c_glib/src/server/thrift_simple_server.c +++ b/lib/c_glib/src/server/thrift_simple_server.c @@ -1,80 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ #include "server/thrift_simple_server.h" #include "transport/thrift_transport_factory.h" #include "protocol/thrift_protocol_factory.h" #include "protocol/thrift_binary_protocol_factory.h" -static void thrift_simple_server_instance_init (ThriftServer *server); -static void thrift_simple_server_class_init (ThriftServerClass *cls); - -/* forward declarations */ -void thrift_simple_server_serve (ThriftServer *server); -void thrift_simple_server_stop (ThriftServer *server); - -GType -thrift_simple_server_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftSimpleServerClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_simple_server_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftSimpleServer), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_simple_server_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_SERVER, - "ThriftSimpleServerType", - &info, 0); - } - - return type; -} - -static void -thrift_simple_server_instance_init (ThriftServer *server) -{ - (THRIFT_SIMPLE_SERVER (server))->running = FALSE; - - if (server->input_transport_factory == NULL) - { - server->input_transport_factory = - g_object_new (THRIFT_TYPE_TRANSPORT_FACTORY, NULL); - } - if (server->output_transport_factory == NULL) - { - server->output_transport_factory = - g_object_new (THRIFT_TYPE_TRANSPORT_FACTORY, NULL); - } - if (server->input_protocol_factory == NULL) - { - server->input_protocol_factory = - g_object_new (THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, NULL); - } - if (server->output_protocol_factory == NULL) - { - server->output_protocol_factory = - g_object_new (THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, NULL); - } -} - - -/* initialize the class */ -static void -thrift_simple_server_class_init (ThriftServerClass *cls) -{ - cls->serve = thrift_simple_server_serve; - cls->stop = thrift_simple_server_stop; -} +G_DEFINE_TYPE(ThriftSimpleServer, thrift_simple_server, THRIFT_TYPE_SERVER) void thrift_simple_server_serve (ThriftServer *server) @@ -84,7 +32,7 @@ thrift_simple_server_serve (ThriftServer *server) ThriftTransport *t = NULL; ThriftTransport *input_transport = NULL, *output_transport = NULL; ThriftProtocol *input_protocol = NULL, *output_protocol = NULL; - ThriftSimpleServer *tss = THRIFT_SIMPLE_SERVER (server); + ThriftSimpleServer *tss = THRIFT_SIMPLE_SERVER(server); THRIFT_SERVER_TRANSPORT_GET_CLASS (server->server_transport) ->listen (server->server_transport, NULL); @@ -130,4 +78,41 @@ thrift_simple_server_stop (ThriftServer *server) (THRIFT_SIMPLE_SERVER (server))->running = FALSE; } +static void +thrift_simple_server_init (ThriftSimpleServer *tss) +{ + tss->running = FALSE; + ThriftServer *server = THRIFT_SERVER(tss); + + if (server->input_transport_factory == NULL) + { + server->input_transport_factory = + g_object_new (THRIFT_TYPE_TRANSPORT_FACTORY, NULL); + } + if (server->output_transport_factory == NULL) + { + server->output_transport_factory = + g_object_new (THRIFT_TYPE_TRANSPORT_FACTORY, NULL); + } + if (server->input_protocol_factory == NULL) + { + server->input_protocol_factory = + g_object_new (THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, NULL); + } + if (server->output_protocol_factory == NULL) + { + server->output_protocol_factory = + g_object_new (THRIFT_TYPE_BINARY_PROTOCOL_FACTORY, NULL); + } +} + +/* initialize the class */ +static void +thrift_simple_server_class_init (ThriftSimpleServerClass *class) +{ + ThriftServerClass *cls = THRIFT_SERVER_CLASS(class); + + cls->serve = thrift_simple_server_serve; + cls->stop = thrift_simple_server_stop; +} diff --git a/lib/c_glib/src/server/thrift_simple_server.h b/lib/c_glib/src/server/thrift_simple_server.h index 137f623c..235500cd 100644 --- a/lib/c_glib/src/server/thrift_simple_server.h +++ b/lib/c_glib/src/server/thrift_simple_server.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_SIMPLE_SERVER_H #define _THRIFT_SIMPLE_SERVER_H @@ -5,25 +24,19 @@ #include "server/thrift_server.h" +G_BEGIN_DECLS + /*! \file thrift_simple_server.h * \brief A simple Thrift server, single-threaded. */ /* type macros */ #define THRIFT_TYPE_SIMPLE_SERVER (thrift_simple_server_get_type ()) -#define THRIFT_SIMPLE_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_SIMPLE_SERVER, \ - ThriftSimpleServer)) -#define THRIFT_IS_SIMPLE_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_SIMPLE_SERVER)) -#define THRIFT_SIMPLE_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c) \ - THRIFT_TYPE_SIMPLE_SERVER, \ - ThriftSimpleServerClass)) -#define THRIFT_IS_SIMPLE_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_SIMPLE_SERVER)) -#define THRIFT_SIMPLE_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_SIMPLE_SERVER, \ - ThriftSimpleServerClass)) +#define THRIFT_SIMPLE_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_SIMPLE_SERVER, ThriftSimpleServer)) +#define THRIFT_IS_SIMPLE_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_SIMPLE_SERVER)) +#define THRIFT_SIMPLE_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c) THRIFT_TYPE_SIMPLE_SERVER, ThriftSimpleServerClass)) +#define THRIFT_IS_SIMPLE_SERVER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_SIMPLE_SERVER)) +#define THRIFT_SIMPLE_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SIMPLE_SERVER, ThriftSimpleServerClass)) /** * Thrift Simple Server instance. @@ -49,5 +62,7 @@ typedef struct _ThriftSimpleServerClass ThriftSimpleServerClass; /* used by THRIFT_TYPE_SIMPLE_SERVER */ GType thrift_simple_server_get_type (void); +G_END_DECLS + #endif /* _THRIFT_SIMPLE_SERVER_H */ diff --git a/lib/c_glib/src/thrift.c b/lib/c_glib/src/thrift.c index 18a36aa6..886e5c35 100644 --- a/lib/c_glib/src/thrift.c +++ b/lib/c_glib/src/thrift.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" /** diff --git a/lib/c_glib/src/thrift.h b/lib/c_glib/src/thrift.h index 59db6fdd..0636a2f2 100644 --- a/lib/c_glib/src/thrift.h +++ b/lib/c_glib/src/thrift.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_H #define _THRIFT_H diff --git a/lib/c_glib/src/thrift_application_exception.c b/lib/c_glib/src/thrift_application_exception.c index fa57a814..f1bee3c4 100644 --- a/lib/c_glib/src/thrift_application_exception.c +++ b/lib/c_glib/src/thrift_application_exception.c @@ -1,55 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift_application_exception.h" #include "protocol/thrift_protocol.h" -/* forward declarations */ -void thrift_application_exception_instance_init (ThriftApplicationException *object); -void thrift_application_exception_class_init (ThriftStructClass *cls); -gint32 thrift_application_exception_read (ThriftStruct *object, ThriftProtocol *protocol, GError **error); -gint32 thrift_application_exception_write (ThriftStruct *object, ThriftProtocol *protocol, GError **error); - -GType -thrift_application_exception_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo type_info = - { - sizeof (ThriftApplicationExceptionClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_application_exception_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftApplicationException), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_application_exception_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_STRUCT, - "ThriftApplicationExceptionType", - &type_info, 0); - } - return type; -} - -void -thrift_application_exception_instance_init (ThriftApplicationException *object) -{ - object->type = 0; - object->__isset_type = FALSE; - object->message = NULL; - object->__isset_message = FALSE; -} - -void -thrift_application_exception_class_init (ThriftStructClass *cls) -{ - cls->read = thrift_application_exception_read; - cls->write = thrift_application_exception_write; -} +G_DEFINE_TYPE(ThriftApplicationException, thrift_application_exception, THRIFT_TYPE_STRUCT) gint32 thrift_application_exception_read (ThriftStruct *object, @@ -190,3 +161,19 @@ thrift_application_exception_error_quark (void) return g_quark_from_static_string (THRIFT_APPLICATION_EXCEPTION_ERROR_DOMAIN); } +void +thrift_application_exception_init (ThriftApplicationException *object) +{ + object->type = 0; + object->__isset_type = FALSE; + object->message = NULL; + object->__isset_message = FALSE; +} + +void +thrift_application_exception_class_init (ThriftApplicationExceptionClass *class) +{ + ThriftStructClass *cls = THRIFT_STRUCT_CLASS(class); + cls->read = thrift_application_exception_read; + cls->write = thrift_application_exception_write; +} diff --git a/lib/c_glib/src/thrift_application_exception.h b/lib/c_glib/src/thrift_application_exception.h index 8639df21..369c29bd 100644 --- a/lib/c_glib/src/thrift_application_exception.h +++ b/lib/c_glib/src/thrift_application_exception.h @@ -1,33 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_APPLICATION_EXCEPTION_H #define _THRIFT_APPLICATION_EXCEPTION_H #include #include "thrift_struct.h" +G_BEGIN_DECLS + /*! \file thrift_application_exception.h * \brief C Implementation of a TApplicationException. */ /* type macros */ -#define THRIFT_TYPE_APPLICATION_EXCEPTION \ - (thrift_application_exception_get_type ()) -#define THRIFT_APPLICATION_EXCEPTION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_APPLICATION_EXCEPTION, \ - ThriftApplicationException)) -#define THRIFT_IS_APPLICATION_EXCEPTION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_APPLICATION_EXCEPTION)) -#define THRIFT_APPLICATION_EXCEPTION_CLASS(c) \ - (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_APPLICATION_EXCEPTION, \ - ThriftApplicationExceptionClass)) -#define THRIFT_IS_APPLICATION_EXCEPTION_CLASS(c) \ - (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_APPLICATION_EXCEPTION)) -#define THRIFT_APPLICATION_EXCEPTION_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_APPLICATION_EXCEPTION, \ - ThriftApplicationExceptionClass)) +#define THRIFT_TYPE_APPLICATION_EXCEPTION (thrift_application_exception_get_type ()) +#define THRIFT_APPLICATION_EXCEPTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_APPLICATION_EXCEPTION, ThriftApplicationException)) +#define THRIFT_IS_APPLICATION_EXCEPTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_APPLICATION_EXCEPTION)) +#define THRIFT_APPLICATION_EXCEPTION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_APPLICATION_EXCEPTION, ThriftApplicationExceptionClass)) +#define THRIFT_IS_APPLICATION_EXCEPTION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_APPLICATION_EXCEPTION)) +#define THRIFT_APPLICATION_EXCEPTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_APPLICATION_EXCEPTION, ThriftApplicationExceptionClass)) struct _ThriftApplicationException { @@ -64,4 +72,6 @@ typedef enum GQuark thrift_application_exception_error_quark (void); #define THRIFT_APPLICATION_EXCEPTION_ERROR (thrift_application_exception_error_quark ()) +G_END_DECLS + #endif /* _THRIFT_APPLICATION_EXCEPTION_H */ diff --git a/lib/c_glib/src/thrift_struct.c b/lib/c_glib/src/thrift_struct.c index 3f73c38c..8a0928a6 100644 --- a/lib/c_glib/src/thrift_struct.c +++ b/lib/c_glib/src/thrift_struct.c @@ -1,41 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "thrift.h" #include "thrift_struct.h" -static void -thrift_struct_class_init (ThriftStructClass *cls) -{ - ThriftStructClass *c = THRIFT_STRUCT_CLASS (cls); - c->read = thrift_struct_read; - c->write = thrift_struct_write; -} - -GType -thrift_struct_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo type_info = - { - sizeof (ThriftStructClass), - NULL, /* base_init */ - NULL, /* base finalize */ - (GClassInitFunc) thrift_struct_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftStruct), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "ThriftStructType", - &type_info, G_TYPE_FLAG_ABSTRACT); - } - - return type; -} +G_DEFINE_ABSTRACT_TYPE(ThriftStruct, thrift_struct, G_TYPE_OBJECT) gint32 thrift_struct_read (ThriftStruct *object, ThriftProtocol *protocol, @@ -53,3 +38,15 @@ thrift_struct_write (ThriftStruct *object, ThriftProtocol *protocol, return THRIFT_STRUCT_GET_CLASS (object)->write (object, protocol, error); } +static void +thrift_struct_class_init (ThriftStructClass *cls) +{ + cls->read = thrift_struct_read; + cls->write = thrift_struct_write; +} + +static void +thrift_struct_init (ThriftStruct *structure) +{ + THRIFT_UNUSED_VAR (structure); +} diff --git a/lib/c_glib/src/thrift_struct.h b/lib/c_glib/src/thrift_struct.h index f3e60608..edf99842 100644 --- a/lib/c_glib/src/thrift_struct.h +++ b/lib/c_glib/src/thrift_struct.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef THRIFT_STRUCT_H #define THRIFT_STRUCT_H @@ -5,18 +24,14 @@ #include "protocol/thrift_protocol.h" +G_BEGIN_DECLS + #define THRIFT_TYPE_STRUCT (thrift_struct_get_type ()) -#define THRIFT_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_STRUCT, ThriftStruct)) -#define THRIFT_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_STRUCT, ThriftStructClass)) -#define THRIFT_IS_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_STRUCT)) -#define THRIFT_IS_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_STRUCT)) -#define THRIFT_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_STRUCT, \ - ThriftStructClass)) +#define THRIFT_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_STRUCT, ThriftStruct)) +#define THRIFT_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_STRUCT, ThriftStructClass)) +#define THRIFT_IS_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_STRUCT)) +#define THRIFT_IS_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_STRUCT)) +#define THRIFT_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_STRUCT, ThriftStructClass)) /* struct */ struct _ThriftStruct @@ -46,5 +61,6 @@ gint32 thrift_struct_read (ThriftStruct *object, ThriftProtocol *protocol, gint32 thrift_struct_write (ThriftStruct *object, ThriftProtocol *protocol, GError **error); +G_END_DECLS #endif diff --git a/lib/c_glib/src/transport/thrift_buffered_transport.c b/lib/c_glib/src/transport/thrift_buffered_transport.c index 45ea31c9..53c14b1b 100644 --- a/lib/c_glib/src/transport/thrift_buffered_transport.c +++ b/lib/c_glib/src/transport/thrift_buffered_transport.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -18,190 +37,7 @@ enum _ThriftBufferedTransportProperties PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE }; -/* forward declarations */ -static void thrift_buffered_transport_instance_init (ThriftBufferedTransport *self); -static void thrift_buffered_transport_class_init (ThriftBufferedTransportClass *cls); - - -gboolean thrift_buffered_transport_is_open (ThriftTransport *transport); -gboolean thrift_buffered_transport_open (ThriftTransport *transport, - GError **error); -gboolean thrift_buffered_transport_close (ThriftTransport *transport, - GError **error); -gint32 thrift_buffered_transport_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error); -gboolean thrift_buffered_transport_read_end (ThriftTransport *transport, - GError **error); -gint32 thrift_buffered_transport_read_slow (ThriftTransport *transport, - gpointer buf, guint32 len, - GError **error); -gboolean thrift_buffered_transport_write (ThriftTransport *transport, - const gpointer buf, - const guint32 len, GError **error); -gboolean thrift_buffered_transport_write_end (ThriftTransport *transport, - GError **error); -gint32 thrift_buffered_transport_write_slow (ThriftTransport *transport, - gpointer buf, guint32 len, - GError **error); -gboolean thrift_buffered_transport_flush (ThriftTransport *transport, - GError **error); - -GType -thrift_buffered_transport_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftBufferedTransportClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_buffered_transport_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftBufferedTransport), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_buffered_transport_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_TRANSPORT, - "ThriftBufferedTransport", &info, 0); - } - - return type; -} - -/* initializes the instance */ -static void -thrift_buffered_transport_instance_init (ThriftBufferedTransport *transport) -{ - transport->transport = NULL; - transport->r_buf = g_byte_array_new (); - transport->w_buf = g_byte_array_new (); -} - -/* destructor */ -static void -thrift_buffered_transport_finalize (GObject *object) -{ - ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); - - if (transport->r_buf != NULL) - { - g_byte_array_free (transport->r_buf, TRUE); - } - transport->r_buf = NULL; - - if (transport->w_buf != NULL) - { - g_byte_array_free (transport->w_buf, TRUE); - } - transport->w_buf = NULL; -} - -/* property accessor */ -void -thrift_buffered_transport_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); - - switch (property_id) - { - case PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT: - g_value_set_object (value, transport->transport); - break; - case PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE: - g_value_set_uint (value, transport->r_buf_size); - break; - case PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE: - g_value_set_uint (value, transport->w_buf_size); - break; - } -} - -/* property mutator */ -void -thrift_buffered_transport_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); - - switch (property_id) - { - case PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT: - transport->transport = g_value_get_object (value); - break; - case PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE: - transport->r_buf_size = g_value_get_uint (value); - break; - case PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE: - transport->w_buf_size = g_value_get_uint (value); - break; - } -} - -/* initializes the class */ -static void -thrift_buffered_transport_class_init (ThriftBufferedTransportClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - GParamSpec *param_spec = NULL; - - /* setup accessors and mutators */ - gobject_class->get_property = thrift_buffered_transport_get_property; - gobject_class->set_property = thrift_buffered_transport_set_property; - - param_spec = g_param_spec_object ("transport", "transport (construct)", - "Thrift transport", - THRIFT_TYPE_TRANSPORT, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); - g_object_class_install_property (gobject_class, - PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT, - param_spec); - - param_spec = g_param_spec_uint ("r_buf_size", - "read buffer size (construct)", - "Set the read buffer size", - 0, /* min */ - 1048576, /* max, 1024*1024 */ - 512, /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE, - param_spec); - - param_spec = g_param_spec_uint ("w_buf_size", - "write buffer size (construct)", - "Set the write buffer size", - 0, /* min */ - 1048576, /* max, 1024*1024 */ - 512, /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE, - param_spec); - - - ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); - - gobject_class->finalize = thrift_buffered_transport_finalize; - ttc->is_open = thrift_buffered_transport_is_open; - ttc->open = thrift_buffered_transport_open; - ttc->close = thrift_buffered_transport_close; - ttc->read = thrift_buffered_transport_read; - ttc->read_end = thrift_buffered_transport_read_end; - ttc->write = thrift_buffered_transport_write; - ttc->write_end = thrift_buffered_transport_write_end; - ttc->flush = thrift_buffered_transport_flush; -} +G_DEFINE_TYPE(ThriftBufferedTransport, thrift_buffered_transport, THRIFT_TYPE_TRANSPORT) /* implements thrift_transport_is_open */ gboolean @@ -227,36 +63,6 @@ thrift_buffered_transport_close (ThriftTransport *transport, GError **error) return THRIFT_TRANSPORT_GET_CLASS (t->transport)->close (t->transport, error); } -/* implements thrift_transport_read */ -gint32 -thrift_buffered_transport_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error) -{ - ThriftBufferedTransport *t = THRIFT_BUFFERED_TRANSPORT (transport); - - /* if we have enough buffer data to fulfill the read, just use - * a memcpy */ - if (len <= t->r_buf->len) - { - memcpy (buf, t->r_buf->data, len); - g_byte_array_remove_range (t->r_buf, 0, len); - return len; - } - - return thrift_buffered_transport_read_slow (transport, buf, len, error); -} - -/* implements thrift_transport_read_end - * called when write is complete. nothing to do on our end. */ -gboolean -thrift_buffered_transport_read_end (ThriftTransport *transport, GError **error) -{ - /* satisfy -Wall */ - THRIFT_UNUSED_VAR (transport); - THRIFT_UNUSED_VAR (error); - return TRUE; -} - /* the actual read is "slow" because it calls the underlying transport */ gint32 thrift_buffered_transport_read_slow (ThriftTransport *transport, gpointer buf, @@ -311,29 +117,29 @@ thrift_buffered_transport_read_slow (ThriftTransport *transport, gpointer buf, } } - -/* implements thrift_transport_write */ -gboolean -thrift_buffered_transport_write (ThriftTransport *transport, - const gpointer buf, - const guint32 len, GError **error) +/* implements thrift_transport_read */ +gint32 +thrift_buffered_transport_read (ThriftTransport *transport, gpointer buf, + guint32 len, GError **error) { ThriftBufferedTransport *t = THRIFT_BUFFERED_TRANSPORT (transport); - /* the length of the current buffer plus the length of the data being read */ - if (t->w_buf->len + len <= t->w_buf_size) + /* if we have enough buffer data to fulfill the read, just use + * a memcpy */ + if (len <= t->r_buf->len) { - t->w_buf = g_byte_array_append (t->w_buf, buf, len); + memcpy (buf, t->r_buf->data, len); + g_byte_array_remove_range (t->r_buf, 0, len); return len; } - return thrift_buffered_transport_write_slow (transport, buf, len, error); + return thrift_buffered_transport_read_slow (transport, buf, len, error); } -/* implements thrift_transport_write_end +/* implements thrift_transport_read_end * called when write is complete. nothing to do on our end. */ gboolean -thrift_buffered_transport_write_end (ThriftTransport *transport, GError **error) +thrift_buffered_transport_read_end (ThriftTransport *transport, GError **error) { /* satisfy -Wall */ THRIFT_UNUSED_VAR (transport); @@ -382,6 +188,35 @@ thrift_buffered_transport_write_slow (ThriftTransport *transport, gpointer buf, return TRUE; } +/* implements thrift_transport_write */ +gboolean +thrift_buffered_transport_write (ThriftTransport *transport, + const gpointer buf, + const guint32 len, GError **error) +{ + ThriftBufferedTransport *t = THRIFT_BUFFERED_TRANSPORT (transport); + + /* the length of the current buffer plus the length of the data being read */ + if (t->w_buf->len + len <= t->w_buf_size) + { + t->w_buf = g_byte_array_append (t->w_buf, buf, len); + return len; + } + + return thrift_buffered_transport_write_slow (transport, buf, len, error); +} + +/* implements thrift_transport_write_end + * called when write is complete. nothing to do on our end. */ +gboolean +thrift_buffered_transport_write_end (ThriftTransport *transport, GError **error) +{ + /* satisfy -Wall */ + THRIFT_UNUSED_VAR (transport); + THRIFT_UNUSED_VAR (error); + return TRUE; +} + /* implements thrift_transport_flush */ gboolean thrift_buffered_transport_flush (ThriftTransport *transport, GError **error) @@ -403,4 +238,131 @@ thrift_buffered_transport_flush (ThriftTransport *transport, GError **error) return TRUE; } +/* initializes the instance */ +static void +thrift_buffered_transport_init (ThriftBufferedTransport *transport) +{ + transport->transport = NULL; + transport->r_buf = g_byte_array_new (); + transport->w_buf = g_byte_array_new (); +} + +/* destructor */ +static void +thrift_buffered_transport_finalize (GObject *object) +{ + ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); + + if (transport->r_buf != NULL) + { + g_byte_array_free (transport->r_buf, TRUE); + } + transport->r_buf = NULL; + if (transport->w_buf != NULL) + { + g_byte_array_free (transport->w_buf, TRUE); + } + transport->w_buf = NULL; +} + +/* property accessor */ +void +thrift_buffered_transport_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); + + switch (property_id) + { + case PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT: + g_value_set_object (value, transport->transport); + break; + case PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE: + g_value_set_uint (value, transport->r_buf_size); + break; + case PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE: + g_value_set_uint (value, transport->w_buf_size); + break; + } +} + +/* property mutator */ +void +thrift_buffered_transport_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftBufferedTransport *transport = THRIFT_BUFFERED_TRANSPORT (object); + + switch (property_id) + { + case PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT: + transport->transport = g_value_get_object (value); + break; + case PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE: + transport->r_buf_size = g_value_get_uint (value); + break; + case PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE: + transport->w_buf_size = g_value_get_uint (value); + break; + } +} + +/* initializes the class */ +static void +thrift_buffered_transport_class_init (ThriftBufferedTransportClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + GParamSpec *param_spec = NULL; + + /* setup accessors and mutators */ + gobject_class->get_property = thrift_buffered_transport_get_property; + gobject_class->set_property = thrift_buffered_transport_set_property; + + param_spec = g_param_spec_object ("transport", "transport (construct)", + "Thrift transport", + THRIFT_TYPE_TRANSPORT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (gobject_class, + PROP_THRIFT_BUFFERED_TRANSPORT_TRANSPORT, + param_spec); + + param_spec = g_param_spec_uint ("r_buf_size", + "read buffer size (construct)", + "Set the read buffer size", + 0, /* min */ + 1048576, /* max, 1024*1024 */ + 512, /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_THRIFT_BUFFERED_TRANSPORT_READ_BUFFER_SIZE, + param_spec); + + param_spec = g_param_spec_uint ("w_buf_size", + "write buffer size (construct)", + "Set the write buffer size", + 0, /* min */ + 1048576, /* max, 1024*1024 */ + 512, /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_THRIFT_BUFFERED_TRANSPORT_WRITE_BUFFER_SIZE, + param_spec); + + + ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); + + gobject_class->finalize = thrift_buffered_transport_finalize; + ttc->is_open = thrift_buffered_transport_is_open; + ttc->open = thrift_buffered_transport_open; + ttc->close = thrift_buffered_transport_close; + ttc->read = thrift_buffered_transport_read; + ttc->read_end = thrift_buffered_transport_read_end; + ttc->write = thrift_buffered_transport_write; + ttc->write_end = thrift_buffered_transport_write_end; + ttc->flush = thrift_buffered_transport_flush; +} diff --git a/lib/c_glib/src/transport/thrift_buffered_transport.h b/lib/c_glib/src/transport/thrift_buffered_transport.h index 6b0b17e1..aaa51831 100644 --- a/lib/c_glib/src/transport/thrift_buffered_transport.h +++ b/lib/c_glib/src/transport/thrift_buffered_transport.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_BUFFERED_TRANSPORT_H #define _THRIFT_BUFFERED_TRANSPORT_H @@ -6,27 +25,20 @@ #include "transport/thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_buffered_transport.h - * \brief Implementation of a Thrift buffered transport. Subclasses + * \brief Implementation of a Thrift buffered transport. Subclasses * the ThriftTransport class. */ /* type macros */ #define THRIFT_TYPE_BUFFERED_TRANSPORT (thrift_buffered_transport_get_type ()) -#define THRIFT_BUFFERED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_BUFFERED_TRANSPORT, \ - ThriftBufferedTransport)) -#define THRIFT_IS_BUFFERED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_BUFFERED_TRANSPORT)) -#define THRIFT_BUFFERED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_BUFFERED_TRANSPORT, \ - ThriftBufferedTransportClass)) -#define THRIFT_IS_BUFFERED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_BUFFERED_TRANSPORT) -#define THRIFT_BUFFERED_TRANSPORT_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_BUFFERED_TRANSPORT, \ - ThriftBufferedTransportClass)) +#define THRIFT_BUFFERED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_BUFFERED_TRANSPORT, ThriftBufferedTransport)) +#define THRIFT_IS_BUFFERED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_BUFFERED_TRANSPORT)) +#define THRIFT_BUFFERED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_BUFFERED_TRANSPORT, ThriftBufferedTransportClass)) +#define THRIFT_IS_BUFFERED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_BUFFERED_TRANSPORT) +#define THRIFT_BUFFERED_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_BUFFERED_TRANSPORT, ThriftBufferedTransportClass)) /*! * ThriftBufferedTransport instance. @@ -58,4 +70,6 @@ typedef struct _ThriftBufferedTransportClass ThriftBufferedTransportClass; /* used by THRIFT_TYPE_BUFFERED_TRANSPORT */ GType thrift_buffered_transport_get_type (void); +G_END_DECLS + #endif diff --git a/lib/c_glib/src/transport/thrift_framed_transport.c b/lib/c_glib/src/transport/thrift_framed_transport.c index de9cb00d..c8dd4467 100644 --- a/lib/c_glib/src/transport/thrift_framed_transport.c +++ b/lib/c_glib/src/transport/thrift_framed_transport.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -18,192 +37,7 @@ enum _ThriftFramedTransportProperties PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE }; -/* forward declarations */ -static void thrift_framed_transport_instance_init (ThriftFramedTransport *self); -static void thrift_framed_transport_class_init (ThriftFramedTransportClass *cls); - - -gboolean thrift_framed_transport_is_open (ThriftTransport *transport); -gboolean thrift_framed_transport_open (ThriftTransport *transport, - GError **error); -gboolean thrift_framed_transport_close (ThriftTransport *transport, - GError **error); -gint32 thrift_framed_transport_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error); -gboolean thrift_framed_transport_read_end (ThriftTransport *transport, - GError **error); -gint32 thrift_framed_transport_read_slow (ThriftTransport *transport, - gpointer buf, guint32 len, - GError **error); -gboolean thrift_framed_transport_read_frame (ThriftTransport *transport, - GError **error); -gboolean thrift_framed_transport_write (ThriftTransport *transport, - const gpointer buf, - const guint32 len, GError **error); -gboolean thrift_framed_transport_write_end (ThriftTransport *transport, - GError **error); -gint32 thrift_framed_transport_write_slow (ThriftTransport *transport, - gpointer buf, guint32 len, - GError **error); -gboolean thrift_framed_transport_flush (ThriftTransport *transport, - GError **error); - -GType -thrift_framed_transport_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftFramedTransportClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_framed_transport_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftFramedTransport), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_framed_transport_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_TRANSPORT, - "ThriftFramedTransport", &info, 0); - } - - return type; -} - -/* initializes the instance */ -static void -thrift_framed_transport_instance_init (ThriftFramedTransport *transport) -{ - transport->transport = NULL; - transport->r_buf = g_byte_array_new (); - transport->w_buf = g_byte_array_new (); -} - -/* destructor */ -static void -thrift_framed_transport_finalize (GObject *object) -{ - ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); - - if (transport->r_buf != NULL) - { - g_byte_array_free (transport->r_buf, TRUE); - } - transport->r_buf = NULL; - - if (transport->w_buf != NULL) - { - g_byte_array_free (transport->w_buf, TRUE); - } - transport->w_buf = NULL; -} - -/* property accessor */ -void -thrift_framed_transport_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); - - switch (property_id) - { - case PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT: - g_value_set_object (value, transport->transport); - break; - case PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE: - g_value_set_uint (value, transport->r_buf_size); - break; - case PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE: - g_value_set_uint (value, transport->w_buf_size); - break; - } -} - -/* property mutator */ -void -thrift_framed_transport_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); - - switch (property_id) - { - case PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT: - transport->transport = g_value_get_object (value); - break; - case PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE: - transport->r_buf_size = g_value_get_uint (value); - break; - case PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE: - transport->w_buf_size = g_value_get_uint (value); - break; - } -} - -/* initializes the class */ -static void -thrift_framed_transport_class_init (ThriftFramedTransportClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - GParamSpec *param_spec = NULL; - - /* setup accessors and mutators */ - gobject_class->get_property = thrift_framed_transport_get_property; - gobject_class->set_property = thrift_framed_transport_set_property; - - param_spec = g_param_spec_object ("transport", "transport (construct)", - "Thrift transport", - THRIFT_TYPE_TRANSPORT, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); - g_object_class_install_property (gobject_class, - PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT, - param_spec); - - param_spec = g_param_spec_uint ("r_buf_size", - "read buffer size (construct)", - "Set the read buffer size", - 0, /* min */ - 1048576, /* max, 1024*1024 */ - 512, /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE, - param_spec); - - param_spec = g_param_spec_uint ("w_buf_size", - "write buffer size (construct)", - "Set the write buffer size", - 0, /* min */ - 1048576, /* max, 1024*1024 */ - 512, /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE, - param_spec); - - - ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); - - gobject_class->finalize = thrift_framed_transport_finalize; - ttc->is_open = thrift_framed_transport_is_open; - ttc->open = thrift_framed_transport_open; - ttc->close = thrift_framed_transport_close; - ttc->read = thrift_framed_transport_read; - ttc->read_end = thrift_framed_transport_read_end; - ttc->write = thrift_framed_transport_write; - ttc->write_end = thrift_framed_transport_write_end; - ttc->flush = thrift_framed_transport_flush; -} +G_DEFINE_TYPE(ThriftFramedTransport, thrift_framed_transport, THRIFT_TYPE_TRANSPORT) /* implements thrift_transport_is_open */ gboolean @@ -229,33 +63,30 @@ thrift_framed_transport_close (ThriftTransport *transport, GError **error) return THRIFT_TRANSPORT_GET_CLASS (t->transport)->close (t->transport, error); } -/* implements thrift_transport_read */ -gint32 -thrift_framed_transport_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error) +/* reads a frame and puts it into the buffer */ +gboolean +thrift_framed_transport_read_frame (ThriftTransport *transport, + GError **error) { ThriftFramedTransport *t = THRIFT_FRAMED_TRANSPORT (transport); + gint32 sz, bytes; - /* if we have enough buffer data to fulfill the read, just use - * a memcpy from the buffer */ - if (len <= t->r_buf->len) - { - memcpy (buf, t->r_buf->data, len); - g_byte_array_remove_range (t->r_buf, 0, len); - return len; - } + /* read the size */ + THRIFT_TRANSPORT_GET_CLASS (t->transport)->read (t->transport, + (guint32 *) &sz, + sizeof (sz), error); + sz = ntohl (sz); - return thrift_framed_transport_read_slow (transport, buf, len, error); -} + /* create a buffer to hold the data and read that much data */ + guchar tmpdata[sz]; + bytes = THRIFT_TRANSPORT_GET_CLASS (t->transport)->read (t->transport, + tmpdata, + sz - sizeof (sz), + error); + + /* add the data to the buffer */ + g_byte_array_append (t->r_buf, tmpdata, bytes); -/* implements thrift_transport_read_end - * called when read is complete. nothing to do on our end. */ -gboolean -thrift_framed_transport_read_end (ThriftTransport *transport, GError **error) -{ - /* satisfy -Wall */ - THRIFT_UNUSED_VAR (transport); - THRIFT_UNUSED_VAR (error); return TRUE; } @@ -293,29 +124,45 @@ thrift_framed_transport_read_slow (ThriftTransport *transport, gpointer buf, return (len - want); } -/* reads a frame and puts it into the buffer */ -gboolean -thrift_framed_transport_read_frame (ThriftTransport *transport, - GError **error) +/* implements thrift_transport_read */ +gint32 +thrift_framed_transport_read (ThriftTransport *transport, gpointer buf, + guint32 len, GError **error) { ThriftFramedTransport *t = THRIFT_FRAMED_TRANSPORT (transport); - gint32 sz, bytes; - /* read the size */ - THRIFT_TRANSPORT_GET_CLASS (t->transport)->read (t->transport, - (guint32 *) &sz, - sizeof (sz), error); - sz = ntohl (sz); + /* if we have enough buffer data to fulfill the read, just use + * a memcpy from the buffer */ + if (len <= t->r_buf->len) + { + memcpy (buf, t->r_buf->data, len); + g_byte_array_remove_range (t->r_buf, 0, len); + return len; + } - /* create a buffer to hold the data and read that much data */ - guchar tmpdata[sz]; - bytes = THRIFT_TRANSPORT_GET_CLASS (t->transport)->read (t->transport, - tmpdata, - sz - sizeof (sz), - error); + return thrift_framed_transport_read_slow (transport, buf, len, error); +} - /* add the data to the buffer */ - g_byte_array_append (t->r_buf, tmpdata, bytes); +/* implements thrift_transport_read_end + * called when read is complete. nothing to do on our end. */ +gboolean +thrift_framed_transport_read_end (ThriftTransport *transport, GError **error) +{ + /* satisfy -Wall */ + THRIFT_UNUSED_VAR (transport); + THRIFT_UNUSED_VAR (error); + return TRUE; +} + +gboolean +thrift_framed_transport_write_slow (ThriftTransport *transport, gpointer buf, + guint32 len, GError **error) +{ + THRIFT_UNUSED_VAR (error); + ThriftFramedTransport *t = THRIFT_FRAMED_TRANSPORT (transport); + + // append the data to the buffer and we're done + g_byte_array_append (t->w_buf, buf, len); return TRUE; } @@ -349,19 +196,6 @@ thrift_framed_transport_write_end (ThriftTransport *transport, GError **error) return TRUE; } -gboolean -thrift_framed_transport_write_slow (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error) -{ - THRIFT_UNUSED_VAR (error); - ThriftFramedTransport *t = THRIFT_FRAMED_TRANSPORT (transport); - - // append the data to the buffer and we're done - g_byte_array_append (t->w_buf, buf, len); - - return TRUE; -} - /* implements thrift_transport_flush */ gboolean thrift_framed_transport_flush (ThriftTransport *transport, GError **error) @@ -394,4 +228,131 @@ thrift_framed_transport_flush (ThriftTransport *transport, GError **error) return TRUE; } +/* initializes the instance */ +static void +thrift_framed_transport_init (ThriftFramedTransport *transport) +{ + transport->transport = NULL; + transport->r_buf = g_byte_array_new (); + transport->w_buf = g_byte_array_new (); +} + +/* destructor */ +static void +thrift_framed_transport_finalize (GObject *object) +{ + ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); + + if (transport->r_buf != NULL) + { + g_byte_array_free (transport->r_buf, TRUE); + } + transport->r_buf = NULL; + + if (transport->w_buf != NULL) + { + g_byte_array_free (transport->w_buf, TRUE); + } + transport->w_buf = NULL; +} + +/* property accessor */ +void +thrift_framed_transport_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); + switch (property_id) + { + case PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT: + g_value_set_object (value, transport->transport); + break; + case PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE: + g_value_set_uint (value, transport->r_buf_size); + break; + case PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE: + g_value_set_uint (value, transport->w_buf_size); + break; + } +} + +/* property mutator */ +void +thrift_framed_transport_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftFramedTransport *transport = THRIFT_FRAMED_TRANSPORT (object); + + switch (property_id) + { + case PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT: + transport->transport = g_value_get_object (value); + break; + case PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE: + transport->r_buf_size = g_value_get_uint (value); + break; + case PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE: + transport->w_buf_size = g_value_get_uint (value); + break; + } +} + +/* initializes the class */ +static void +thrift_framed_transport_class_init (ThriftFramedTransportClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + GParamSpec *param_spec = NULL; + + /* setup accessors and mutators */ + gobject_class->get_property = thrift_framed_transport_get_property; + gobject_class->set_property = thrift_framed_transport_set_property; + + param_spec = g_param_spec_object ("transport", "transport (construct)", + "Thrift transport", + THRIFT_TYPE_TRANSPORT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (gobject_class, + PROP_THRIFT_FRAMED_TRANSPORT_TRANSPORT, + param_spec); + + param_spec = g_param_spec_uint ("r_buf_size", + "read buffer size (construct)", + "Set the read buffer size", + 0, /* min */ + 1048576, /* max, 1024*1024 */ + 512, /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_THRIFT_FRAMED_TRANSPORT_READ_BUFFER_SIZE, + param_spec); + + param_spec = g_param_spec_uint ("w_buf_size", + "write buffer size (construct)", + "Set the write buffer size", + 0, /* min */ + 1048576, /* max, 1024*1024 */ + 512, /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_THRIFT_FRAMED_TRANSPORT_WRITE_BUFFER_SIZE, + param_spec); + + + ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); + + gobject_class->finalize = thrift_framed_transport_finalize; + ttc->is_open = thrift_framed_transport_is_open; + ttc->open = thrift_framed_transport_open; + ttc->close = thrift_framed_transport_close; + ttc->read = thrift_framed_transport_read; + ttc->read_end = thrift_framed_transport_read_end; + ttc->write = thrift_framed_transport_write; + ttc->write_end = thrift_framed_transport_write_end; + ttc->flush = thrift_framed_transport_flush; +} diff --git a/lib/c_glib/src/transport/thrift_framed_transport.h b/lib/c_glib/src/transport/thrift_framed_transport.h index d859b97a..5e14e357 100644 --- a/lib/c_glib/src/transport/thrift_framed_transport.h +++ b/lib/c_glib/src/transport/thrift_framed_transport.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_FRAMED_TRANSPORT_H #define _THRIFT_FRAMED_TRANSPORT_H @@ -6,27 +25,20 @@ #include "transport/thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_framed_transport.h - * \brief Implementation of a Thrift framed transport. Subclasses + * \brief Implementation of a Thrift framed transport. Subclasses * the ThriftTransport class. */ /* type macros */ #define THRIFT_TYPE_FRAMED_TRANSPORT (thrift_framed_transport_get_type ()) -#define THRIFT_FRAMED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_FRAMED_TRANSPORT, \ - ThriftFramedTransport)) -#define THRIFT_IS_FRAMED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_FRAMED_TRANSPORT)) -#define THRIFT_FRAMED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_FRAMED_TRANSPORT, \ - ThriftFramedTransportClass)) -#define THRIFT_IS_FRAMED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_FRAMED_TRANSPORT) -#define THRIFT_FRAMED_TRANSPORT_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_FRAMED_TRANSPORT, \ - ThriftFramedTransportClass)) +#define THRIFT_FRAMED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_FRAMED_TRANSPORT, ThriftFramedTransport)) +#define THRIFT_IS_FRAMED_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_FRAMED_TRANSPORT)) +#define THRIFT_FRAMED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_FRAMED_TRANSPORT, ThriftFramedTransportClass)) +#define THRIFT_IS_FRAMED_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_FRAMED_TRANSPORT) +#define THRIFT_FRAMED_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_FRAMED_TRANSPORT, ThriftFramedTransportClass)) /*! * ThriftFramedTransport instance. @@ -58,4 +70,6 @@ typedef struct _ThriftFramedTransportClass ThriftFramedTransportClass; /* used by THRIFT_TYPE_FRAMED_TRANSPORT */ GType thrift_framed_transport_get_type (void); +G_END_DECLS + #endif diff --git a/lib/c_glib/src/transport/thrift_memory_buffer.c b/lib/c_glib/src/transport/thrift_memory_buffer.c index 34a4dfa2..cc6717df 100644 --- a/lib/c_glib/src/transport/thrift_memory_buffer.c +++ b/lib/c_glib/src/transport/thrift_memory_buffer.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -16,143 +35,7 @@ enum _ThriftMemoryBufferProperties PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE, }; -/* forward declarations */ -static void thrift_memory_buffer_instance_init (ThriftMemoryBuffer *self); -static void thrift_memory_buffer_class_init (ThriftMemoryBufferClass *cls); - - -gboolean thrift_memory_buffer_is_open (ThriftTransport *transport); -gboolean thrift_memory_buffer_open (ThriftTransport *transport, - GError **error); -gboolean thrift_memory_buffer_close (ThriftTransport *transport, - GError **error); -gint32 thrift_memory_buffer_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error); -gboolean thrift_memory_buffer_read_end (ThriftTransport *transport, - GError **error); -gboolean thrift_memory_buffer_write (ThriftTransport *transport, - const gpointer buf, - const guint32 len, GError **error); -gboolean thrift_memory_buffer_write_end (ThriftTransport *transport, - GError **error); -gboolean thrift_memory_buffer_flush (ThriftTransport *transport, - GError **error); - -GType -thrift_memory_buffer_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftMemoryBufferClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_memory_buffer_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftMemoryBuffer), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_memory_buffer_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_TRANSPORT, - "ThriftMemoryBuffer", &info, 0); - } - - return type; -} - -/* initializes the instance */ -static void -thrift_memory_buffer_instance_init (ThriftMemoryBuffer *transport) -{ - transport->buf = g_byte_array_new (); -} - -/* destructor */ -static void -thrift_memory_buffer_finalize (GObject *object) -{ - ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); - - if (transport->buf != NULL) - { - g_byte_array_free (transport->buf, TRUE); - } - transport->buf = NULL; -} - -/* property accessor */ -void -thrift_memory_buffer_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); - - switch (property_id) - { - case PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE: - g_value_set_uint (value, transport->buf_size); - break; - } -} - -/* property mutator */ -void -thrift_memory_buffer_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); - - switch (property_id) - { - case PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE: - transport->buf_size = g_value_get_uint (value); - break; - } -} - -/* initializes the class */ -static void -thrift_memory_buffer_class_init (ThriftMemoryBufferClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - GParamSpec *param_spec = NULL; - - /* setup accessors and mutators */ - gobject_class->get_property = thrift_memory_buffer_get_property; - gobject_class->set_property = thrift_memory_buffer_set_property; - - param_spec = g_param_spec_uint ("buf_size", - "buffer size (construct)", - "Set the read buffer size", - 0, /* min */ - 1048576, /* max, 1024*1024 */ - 512, /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE, - param_spec); - - ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); - - gobject_class->finalize = thrift_memory_buffer_finalize; - ttc->is_open = thrift_memory_buffer_is_open; - ttc->open = thrift_memory_buffer_open; - ttc->close = thrift_memory_buffer_close; - ttc->read = thrift_memory_buffer_read; - ttc->read_end = thrift_memory_buffer_read_end; - ttc->write = thrift_memory_buffer_write; - ttc->write_end = thrift_memory_buffer_write_end; - ttc->flush = thrift_memory_buffer_flush; -} +G_DEFINE_TYPE(ThriftMemoryBuffer, thrift_memory_buffer, THRIFT_TYPE_TRANSPORT) /* implements thrift_transport_is_open */ gboolean @@ -257,4 +140,90 @@ thrift_memory_buffer_flush (ThriftTransport *transport, GError **error) return TRUE; } +/* initializes the instance */ +static void +thrift_memory_buffer_init (ThriftMemoryBuffer *transport) +{ + transport->buf = g_byte_array_new (); +} + +/* destructor */ +static void +thrift_memory_buffer_finalize (GObject *object) +{ + ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); + + if (transport->buf != NULL) + { + g_byte_array_free (transport->buf, TRUE); + } + transport->buf = NULL; +} + +/* property accessor */ +void +thrift_memory_buffer_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); + switch (property_id) + { + case PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE: + g_value_set_uint (value, transport->buf_size); + break; + } +} + +/* property mutator */ +void +thrift_memory_buffer_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftMemoryBuffer *transport = THRIFT_MEMORY_BUFFER (object); + + switch (property_id) + { + case PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE: + transport->buf_size = g_value_get_uint (value); + break; + } +} + +/* initializes the class */ +static void +thrift_memory_buffer_class_init (ThriftMemoryBufferClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + GParamSpec *param_spec = NULL; + + /* setup accessors and mutators */ + gobject_class->get_property = thrift_memory_buffer_get_property; + gobject_class->set_property = thrift_memory_buffer_set_property; + + param_spec = g_param_spec_uint ("buf_size", + "buffer size (construct)", + "Set the read buffer size", + 0, /* min */ + 1048576, /* max, 1024*1024 */ + 512, /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_THRIFT_MEMORY_BUFFER_BUFFER_SIZE, + param_spec); + + ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); + + gobject_class->finalize = thrift_memory_buffer_finalize; + ttc->is_open = thrift_memory_buffer_is_open; + ttc->open = thrift_memory_buffer_open; + ttc->close = thrift_memory_buffer_close; + ttc->read = thrift_memory_buffer_read; + ttc->read_end = thrift_memory_buffer_read_end; + ttc->write = thrift_memory_buffer_write; + ttc->write_end = thrift_memory_buffer_write_end; + ttc->flush = thrift_memory_buffer_flush; +} diff --git a/lib/c_glib/src/transport/thrift_memory_buffer.h b/lib/c_glib/src/transport/thrift_memory_buffer.h index 7529d1fc..a2079297 100644 --- a/lib/c_glib/src/transport/thrift_memory_buffer.h +++ b/lib/c_glib/src/transport/thrift_memory_buffer.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_MEMORY_BUFFER_H #define _THRIFT_MEMORY_BUFFER_H @@ -6,26 +25,19 @@ #include "transport/thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_memory_buffer.h - * \brief Implementation of a Thrift memory buffer transport. + * \brief Implementation of a Thrift memory buffer transport. */ /* type macros */ #define THRIFT_TYPE_MEMORY_BUFFER (thrift_memory_buffer_get_type ()) -#define THRIFT_MEMORY_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_MEMORY_BUFFER, \ - ThriftMemoryBuffer)) -#define THRIFT_IS_MEMORY_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_MEMORY_BUFFER)) -#define THRIFT_MEMORY_BUFFER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_MEMORY_BUFFER, \ - ThriftMemoryBufferClass)) -#define THRIFT_IS_MEMORY_BUFFER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_MEMORY_BUFFER) -#define THRIFT_MEMORY_BUFFER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_MEMORY_BUFFER, \ - ThriftMemoryBufferClass)) +#define THRIFT_MEMORY_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_MEMORY_BUFFER, ThriftMemoryBuffer)) +#define THRIFT_IS_MEMORY_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_MEMORY_BUFFER)) +#define THRIFT_MEMORY_BUFFER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_MEMORY_BUFFER, ThriftMemoryBufferClass)) +#define THRIFT_IS_MEMORY_BUFFER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_MEMORY_BUFFER) +#define THRIFT_MEMORY_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_MEMORY_BUFFER, ThriftMemoryBufferClass)) /*! * ThriftMemoryBuffer instance. @@ -52,4 +64,6 @@ typedef struct _ThriftMemoryBufferClass ThriftMemoryBufferClass; /* used by THRIFT_TYPE_MEMORY_BUFFER */ GType thrift_memory_buffer_get_type (void); +G_END_DECLS + #endif diff --git a/lib/c_glib/src/transport/thrift_server_socket.c b/lib/c_glib/src/transport/thrift_server_socket.c index fe11648f..2ebc01c6 100644 --- a/lib/c_glib/src/transport/thrift_server_socket.c +++ b/lib/c_glib/src/transport/thrift_server_socket.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -24,43 +43,101 @@ enum _ThriftServerSocketProperties /* for errors coming from socket() and connect() */ extern int errno; -/* forward declarations */ -static void thrift_server_socket_instance_init (ThriftServerSocket *self); -static void thrift_server_socket_class_init (ThriftServerSocketClass *cls); +G_DEFINE_TYPE(ThriftServerSocket, thrift_server_socket, THRIFT_TYPE_SERVER_TRANSPORT) -gboolean thrift_server_socket_listen (ThriftServerTransport *transport, - GError **error); -ThriftTransport *thrift_server_socket_accept (ThriftServerTransport *transport, - GError **error); -gboolean thrift_server_socket_close (ThriftServerTransport *transport, - GError **error); +gboolean +thrift_server_socket_listen (ThriftServerTransport *transport, GError **error) +{ + int enabled = 1; /* for setsockopt() */ + struct sockaddr_in pin; + ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); -GType -thrift_server_socket_get_type (void) + /* create a address structure */ + memset (&pin, 0, sizeof(pin)); + pin.sin_family = AF_INET; + pin.sin_addr.s_addr = INADDR_ANY; + pin.sin_port = htons(tsocket->port); + + /* create a socket */ + if ((tsocket->sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) + { + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_SOCKET, + "failed to create socket - %s", strerror (errno)); + return FALSE; + } + + if (setsockopt(tsocket->sd, SOL_SOCKET, SO_REUSEADDR, &enabled, + sizeof(enabled)) == -1) + { + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_SETSOCKOPT, + "unable to set SO_REUSEADDR - %s", strerror(errno)); + return FALSE; + } + + /* bind to the socket */ + if (bind(tsocket->sd, (struct sockaddr *) &pin, sizeof(pin)) == -1) + { + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_BIND, + "failed to bind to port %d - %s", + tsocket->port, strerror(errno)); + return FALSE; + } + + if (listen(tsocket->sd, tsocket->backlog) == -1) + { + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_LISTEN, + "failed to listen to port %d - %s", + tsocket->port, strerror(errno)); + return FALSE; + } + + return TRUE; +} + +ThriftTransport * +thrift_server_socket_accept (ThriftServerTransport *transport, GError **error) +{ + int sd = 0; + guint addrlen = 0; + struct sockaddr_in address; + ThriftSocket *socket = NULL; + + ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); + + if ((sd = accept(tsocket->sd, (struct sockaddr *) &address, &addrlen)) == -1) + { + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_ACCEPT, + "failed to accept connection - %s", + strerror(errno)); + return FALSE; + } + + socket = g_object_new (THRIFT_TYPE_SOCKET, NULL); + socket->sd = sd; + + return THRIFT_TRANSPORT(socket); +} + +gboolean +thrift_server_socket_close (ThriftServerTransport *transport, GError **error) { - static GType type = 0; + ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); - if (type == 0) + if (close (tsocket->sd) == -1) { - static const GTypeInfo info = - { - sizeof (ThriftServerSocketClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_server_socket_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftServerSocket), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_server_socket_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_SERVER_TRANSPORT, - "ThriftServerSocket", &info, 0); + g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, + THRIFT_SERVER_SOCKET_ERROR_CLOSE, + "unable to close socket - %s", strerror(errno)); + return FALSE; } + tsocket->sd = 0; - return type; + return TRUE; } /* define the GError domain for this implementation */ @@ -72,7 +149,7 @@ thrift_server_socket_error_quark (void) /* initializes the instance */ static void -thrift_server_socket_instance_init (ThriftServerSocket *socket) +thrift_server_socket_init (ThriftServerSocket *socket) { socket->sd = 0; } @@ -175,98 +252,3 @@ thrift_server_socket_class_init (ThriftServerSocketClass *cls) tstc->close = thrift_server_socket_close; } -gboolean -thrift_server_socket_listen (ThriftServerTransport *transport, GError **error) -{ - int enabled = 1; /* for setsockopt() */ - struct sockaddr_in pin; - ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); - - /* create a address structure */ - memset (&pin, 0, sizeof(pin)); - pin.sin_family = AF_INET; - pin.sin_addr.s_addr = INADDR_ANY; - pin.sin_port = htons(tsocket->port); - - /* create a socket */ - if ((tsocket->sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_SOCKET, - "failed to create socket - %s", strerror (errno)); - return FALSE; - } - - if (setsockopt(tsocket->sd, SOL_SOCKET, SO_REUSEADDR, &enabled, - sizeof(enabled)) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_SETSOCKOPT, - "unable to set SO_REUSEADDR - %s", strerror(errno)); - return FALSE; - } - - /* bind to the socket */ - if (bind(tsocket->sd, (struct sockaddr *) &pin, sizeof(pin)) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_BIND, - "failed to bind to port %d - %s", - tsocket->port, strerror(errno)); - return FALSE; - } - - if (listen(tsocket->sd, tsocket->backlog) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_LISTEN, - "failed to listen to port %d - %s", - tsocket->port, strerror(errno)); - return FALSE; - } - - return TRUE; -} - -ThriftTransport * -thrift_server_socket_accept (ThriftServerTransport *transport, GError **error) -{ - int sd = 0; - guint addrlen = 0; - struct sockaddr_in address; - ThriftSocket *socket = NULL; - - ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); - - if ((sd = accept(tsocket->sd, (struct sockaddr *) &address, &addrlen)) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_ACCEPT, - "failed to accept connection - %s", - strerror(errno)); - return FALSE; - } - - socket = g_object_new (THRIFT_TYPE_SOCKET, NULL); - socket->sd = sd; - - return THRIFT_TRANSPORT(socket); -} - -gboolean -thrift_server_socket_close (ThriftServerTransport *transport, GError **error) -{ - ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); - - if (close (tsocket->sd) == -1) - { - g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, - THRIFT_SERVER_SOCKET_ERROR_CLOSE, - "unable to close socket - %s", strerror(errno)); - return FALSE; - } - tsocket->sd = 0; - - return TRUE; -} - diff --git a/lib/c_glib/src/transport/thrift_server_socket.h b/lib/c_glib/src/transport/thrift_server_socket.h index c56bd846..54a60170 100644 --- a/lib/c_glib/src/transport/thrift_server_socket.h +++ b/lib/c_glib/src/transport/thrift_server_socket.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_SERVER_SOCKET_H #define _THRIFT_SERVER_SOCKET_H @@ -5,6 +24,8 @@ #include "thrift_server_transport.h" +G_BEGIN_DECLS + /*! \file thrift_server_socket.h * \brief Socket implementation of a Thrift server transport. Implements the * ThriftServerTransport class. @@ -12,19 +33,11 @@ /* type macros */ #define THRIFT_TYPE_SERVER_SOCKET (thrift_server_socket_get_type ()) -#define THRIFT_SERVER_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_SERVER_SOCKET, \ - ThriftServerSocket)) -#define THRIFT_IS_SERVER_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_SERVER_SOCKET)) -#define THRIFT_SERVER_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_SERVER_SOCKET, \ - ThriftServerSocketClass)) -#define THRIFT_IS_SERVER_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_SERVER_SOCKET)) -#define THRIFT_SERVER_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_SERVER_SOCKET, \ - ThriftServerSocketClass)) +#define THRIFT_SERVER_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_SERVER_SOCKET, ThriftServerSocket)) +#define THRIFT_IS_SERVER_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_SERVER_SOCKET)) +#define THRIFT_SERVER_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_SERVER_SOCKET, ThriftServerSocketClass)) +#define THRIFT_IS_SERVER_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_SERVER_SOCKET)) +#define THRIFT_SERVER_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SERVER_SOCKET, ThriftServerSocketClass)) /*! * Thrift ServerSocket instance. @@ -70,4 +83,6 @@ typedef enum GQuark thrift_server_socket_error_quark (void); #define THRIFT_SERVER_SOCKET_ERROR (thrift_server_socket_error_quark ()) +G_END_DECLS + #endif diff --git a/lib/c_glib/src/transport/thrift_server_transport.c b/lib/c_glib/src/transport/thrift_server_transport.c index 89cbaf34..87ce8e08 100644 --- a/lib/c_glib/src/transport/thrift_server_transport.c +++ b/lib/c_glib/src/transport/thrift_server_transport.c @@ -1,39 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "transport/thrift_transport.h" #include "transport/thrift_server_transport.h" -/* forward declarations */ -static void thrift_server_transport_class_init (ThriftServerTransportClass *c); - -/* define ThriftTransportClass type */ -GType -thrift_server_transport_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftServerTransportClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_server_transport_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftServerTransport), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "ThriftServerTransport", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; -} +G_DEFINE_ABSTRACT_TYPE(ThriftServerTransport, thrift_server_transport, G_TYPE_OBJECT) /* base initializer for the server transport interface */ static void @@ -44,6 +32,12 @@ thrift_server_transport_class_init (ThriftServerTransportClass *c) c->close = thrift_server_transport_close; } +static void +thrift_server_transport_init (ThriftServerTransport *transport) +{ + THRIFT_UNUSED_VAR (transport); +} + gboolean thrift_server_transport_listen (ThriftServerTransport *transport, GError **error) @@ -66,5 +60,3 @@ thrift_server_transport_close (ThriftServerTransport *transport, GError **error) return THRIFT_SERVER_TRANSPORT_GET_CLASS (transport)->close (transport, error); } - - diff --git a/lib/c_glib/src/transport/thrift_server_transport.h b/lib/c_glib/src/transport/thrift_server_transport.h index a74fca04..dd94325e 100644 --- a/lib/c_glib/src/transport/thrift_server_transport.h +++ b/lib/c_glib/src/transport/thrift_server_transport.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_SERVER_TRANSPORT_H #define _THRIFT_SERVER_TRANSPORT_H @@ -5,25 +24,19 @@ #include "thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_server_transport.h * \brief Abstract class for Thrift server transports. */ -/* type macros */ +/* type macros */ #define THRIFT_TYPE_SERVER_TRANSPORT (thrift_server_transport_get_type ()) -#define THRIFT_SERVER_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_SERVER_TRANSPORT, \ - ThriftServerTransport)) -#define THRIFT_IS_SERVER_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_SERVER_TRANSPORT)) -#define THRIFT_SERVER_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_SERVER_TRANSPORT, \ - ThriftServerTransportClass)) -#define THRIFT_IS_SERVER_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_SERVER_TRANSPORT)) -#define THRIFT_SERVER_TRANSPORT_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SERVER_TRANSPORT, \ - ThriftServerTransportClass)) +#define THRIFT_SERVER_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_SERVER_TRANSPORT, ThriftServerTransport)) +#define THRIFT_IS_SERVER_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_SERVER_TRANSPORT)) +#define THRIFT_SERVER_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_SERVER_TRANSPORT, ThriftServerTransportClass)) +#define THRIFT_IS_SERVER_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_SERVER_TRANSPORT)) +#define THRIFT_SERVER_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SERVER_TRANSPORT, ThriftServerTransportClass)) struct _ThriftServerTransport { @@ -46,7 +59,7 @@ struct _ThriftServerTransportClass typedef struct _ThriftServerTransportClass ThriftServerTransportClass; /* used by THRIFT_TYPE_SERVER_TRANSPORT */ -GType thrift_server_transport_get_type (void); +GType thrift_server_transport_get_type (void); /*! * Listen for new connections. @@ -59,7 +72,7 @@ gboolean thrift_server_transport_listen (ThriftServerTransport *transport, * Accept a connection. * \public \memberof ThriftServerTransportClass */ -ThriftTransport *thrift_server_transport_accept +ThriftTransport *thrift_server_transport_accept (ThriftServerTransport *transport, GError **error); /*! @@ -69,4 +82,6 @@ ThriftTransport *thrift_server_transport_accept gboolean thrift_server_transport_close (ThriftServerTransport *transport, GError **error); +G_END_DECLS + #endif /* _THRIFT_SERVER_TRANSPORT_H */ diff --git a/lib/c_glib/src/transport/thrift_socket.c b/lib/c_glib/src/transport/thrift_socket.c index 951ae906..d231bc66 100644 --- a/lib/c_glib/src/transport/thrift_socket.c +++ b/lib/c_glib/src/transport/thrift_socket.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -19,156 +38,7 @@ enum _ThriftSocketProperties /* for errors coming from socket() and connect() */ extern int errno; -/* forward declarations */ -static void thrift_socket_instance_init (ThriftSocket *self); -static void thrift_socket_class_init (ThriftSocketClass *cls); - -gboolean thrift_socket_is_open (ThriftTransport *transport); -gboolean thrift_socket_open (ThriftTransport *transport, GError **error); -gboolean thrift_socket_close (ThriftTransport *transport, GError **error); -gint32 thrift_socket_read (ThriftTransport *transport, gpointer buf, - guint32 len, GError **error); -gboolean thrift_socket_read_end (ThriftTransport *transport, GError **error); -gboolean thrift_socket_write (ThriftTransport *transport, const gpointer buf, - const guint32 len, GError **error); -gboolean thrift_socket_write_end (ThriftTransport *transport, GError **error); -gboolean thrift_socket_flush (ThriftTransport *transport, GError **error); - -GType -thrift_socket_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftSocketClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_socket_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (ThriftSocket), - 0, /* n_preallocs */ - (GInstanceInitFunc) thrift_socket_instance_init, - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_TRANSPORT, - "ThriftSocket", &info, 0); - } - - return type; -} - -/* initializes the instance */ -static void -thrift_socket_instance_init (ThriftSocket *socket) -{ - socket->sd = 0; -} - -/* destructor */ -static void -thrift_socket_finalize (GObject *object) -{ - ThriftSocket *socket = THRIFT_SOCKET (object); - - if (socket->hostname != NULL) - { - g_free (socket->hostname); - } - socket->hostname = NULL; - - if (socket->sd != 0) - { - close (socket->sd); - } - socket->sd = 0; -} - -/* property accessor */ -void -thrift_socket_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftSocket *socket = THRIFT_SOCKET (object); - - switch (property_id) - { - case PROP_THRIFT_SOCKET_HOSTNAME: - g_value_set_string (value, socket->hostname); - break; - case PROP_THRIFT_SOCKET_PORT: - g_value_set_uint (value, socket->port); - break; - } -} - -/* property mutator */ -void -thrift_socket_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) -{ - THRIFT_UNUSED_VAR (pspec); - ThriftSocket *socket = THRIFT_SOCKET (object); - - switch (property_id) - { - case PROP_THRIFT_SOCKET_HOSTNAME: - socket->hostname = g_strdup (g_value_get_string (value)); - break; - case PROP_THRIFT_SOCKET_PORT: - socket->port = g_value_get_uint (value); - break; - } -} - -/* initializes the class */ -static void -thrift_socket_class_init (ThriftSocketClass *cls) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (cls); - GParamSpec *param_spec = NULL; - - /* setup accessors and mutators */ - gobject_class->get_property = thrift_socket_get_property; - gobject_class->set_property = thrift_socket_set_property; - - param_spec = g_param_spec_string ("hostname", - "hostname (construct)", - "Set the hostname of the remote host", - "localhost", /* default value */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, PROP_THRIFT_SOCKET_HOSTNAME, - param_spec); - - param_spec = g_param_spec_uint ("port", - "port (construct)", - "Set the port of the remote host", - 0, /* min */ - 65534, /* max */ - 9090, /* default by convention */ - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, PROP_THRIFT_SOCKET_PORT, - param_spec); - - ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); - - gobject_class->finalize = thrift_socket_finalize; - ttc->is_open = thrift_socket_is_open; - ttc->open = thrift_socket_open; - ttc->close = thrift_socket_close; - ttc->read = thrift_socket_read; - ttc->read_end = thrift_socket_read_end; - ttc->write = thrift_socket_write; - ttc->write_end = thrift_socket_write_end; - ttc->flush = thrift_socket_flush; -} +G_DEFINE_TYPE(ThriftSocket, thrift_socket, THRIFT_TYPE_TRANSPORT) /* implements thrift_transport_is_open */ gboolean @@ -331,4 +201,110 @@ thrift_socket_flush (ThriftTransport *transport, GError **error) return TRUE; } +/* initializes the instance */ +static void +thrift_socket_init (ThriftSocket *socket) +{ + socket->sd = 0; +} + +/* destructor */ +static void +thrift_socket_finalize (GObject *object) +{ + ThriftSocket *socket = THRIFT_SOCKET (object); + + if (socket->hostname != NULL) + { + g_free (socket->hostname); + } + socket->hostname = NULL; + + if (socket->sd != 0) + { + close (socket->sd); + } + socket->sd = 0; +} + +/* property accessor */ +void +thrift_socket_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftSocket *socket = THRIFT_SOCKET (object); + + switch (property_id) + { + case PROP_THRIFT_SOCKET_HOSTNAME: + g_value_set_string (value, socket->hostname); + break; + case PROP_THRIFT_SOCKET_PORT: + g_value_set_uint (value, socket->port); + break; + } +} + +/* property mutator */ +void +thrift_socket_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + THRIFT_UNUSED_VAR (pspec); + ThriftSocket *socket = THRIFT_SOCKET (object); + + switch (property_id) + { + case PROP_THRIFT_SOCKET_HOSTNAME: + socket->hostname = g_strdup (g_value_get_string (value)); + break; + case PROP_THRIFT_SOCKET_PORT: + socket->port = g_value_get_uint (value); + break; + } +} + +/* initializes the class */ +static void +thrift_socket_class_init (ThriftSocketClass *cls) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (cls); + GParamSpec *param_spec = NULL; + + /* setup accessors and mutators */ + gobject_class->get_property = thrift_socket_get_property; + gobject_class->set_property = thrift_socket_set_property; + + param_spec = g_param_spec_string ("hostname", + "hostname (construct)", + "Set the hostname of the remote host", + "localhost", /* default value */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, PROP_THRIFT_SOCKET_HOSTNAME, + param_spec); + + param_spec = g_param_spec_uint ("port", + "port (construct)", + "Set the port of the remote host", + 0, /* min */ + 65534, /* max */ + 9090, /* default by convention */ + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, PROP_THRIFT_SOCKET_PORT, + param_spec); + + ThriftTransportClass *ttc = THRIFT_TRANSPORT_CLASS (cls); + gobject_class->finalize = thrift_socket_finalize; + ttc->is_open = thrift_socket_is_open; + ttc->open = thrift_socket_open; + ttc->close = thrift_socket_close; + ttc->read = thrift_socket_read; + ttc->read_end = thrift_socket_read_end; + ttc->write = thrift_socket_write; + ttc->write_end = thrift_socket_write_end; + ttc->flush = thrift_socket_flush; +} diff --git a/lib/c_glib/src/transport/thrift_socket.h b/lib/c_glib/src/transport/thrift_socket.h index 5fc24028..b3dd3573 100644 --- a/lib/c_glib/src/transport/thrift_socket.h +++ b/lib/c_glib/src/transport/thrift_socket.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_SOCKET_H #define _THRIFT_SOCKET_H @@ -5,6 +24,8 @@ #include "transport/thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_socket.h * \brief Socket implementation of a Thrift transport. Subclasses the * ThriftTransport class. @@ -12,17 +33,11 @@ /* type macros */ #define THRIFT_TYPE_SOCKET (thrift_socket_get_type ()) -#define THRIFT_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_SOCKET, ThriftSocket)) -#define THRIFT_IS_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_SOCKET)) -#define THRIFT_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_SOCKET, ThriftSocketClass)) -#define THRIFT_IS_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_SOCKET)) -#define THRIFT_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_SOCKET, \ - ThriftSocketClass)) +#define THRIFT_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_SOCKET, ThriftSocket)) +#define THRIFT_IS_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_SOCKET)) +#define THRIFT_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_SOCKET, ThriftSocketClass)) +#define THRIFT_IS_SOCKET_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_SOCKET)) +#define THRIFT_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_SOCKET, ThriftSocketClass)) /*! * Thrift Socket instance. @@ -53,4 +68,6 @@ typedef struct _ThriftSocketClass ThriftSocketClass; /* used by THRIFT_TYPE_SOCKET */ GType thrift_socket_get_type (void); +G_END_DECLS + #endif diff --git a/lib/c_glib/src/transport/thrift_transport.c b/lib/c_glib/src/transport/thrift_transport.c index 9c57a75f..a37787de 100644 --- a/lib/c_glib/src/transport/thrift_transport.c +++ b/lib/c_glib/src/transport/thrift_transport.c @@ -1,55 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "transport/thrift_transport.h" /* define the GError domain string */ #define THRIFT_TRANSPORT_ERROR_DOMAIN "thrift-transport-error-quark" -/* forward declarations */ -static void thrift_transport_class_init (ThriftTransportClass *cls); - -/* define ThriftTransportInterface's type */ -GType -thrift_transport_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (ThriftTransportClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_transport_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftTransport), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftTransport", - &info, G_TYPE_FLAG_ABSTRACT); - } - - return type; -} - -/* class initializer for ThriftTransport */ -static void -thrift_transport_class_init (ThriftTransportClass *cls) -{ - /* set these as virtual methods to be implemented by a subclass */ - cls->is_open = thrift_transport_is_open; - cls->open = thrift_transport_open; - cls->close = thrift_transport_close; - cls->read = thrift_transport_read; - cls->read_end = thrift_transport_read_end; - cls->write = thrift_transport_write; - cls->write_end = thrift_transport_write_end; - cls->flush = thrift_transport_flush; -} +G_DEFINE_ABSTRACT_TYPE(ThriftTransport, thrift_transport, G_TYPE_OBJECT) gboolean thrift_transport_is_open (ThriftTransport *transport) @@ -112,3 +86,23 @@ thrift_transport_error_quark (void) return g_quark_from_static_string (THRIFT_TRANSPORT_ERROR_DOMAIN); } +/* class initializer for ThriftTransport */ +static void +thrift_transport_class_init (ThriftTransportClass *cls) +{ + /* set these as virtual methods to be implemented by a subclass */ + cls->is_open = thrift_transport_is_open; + cls->open = thrift_transport_open; + cls->close = thrift_transport_close; + cls->read = thrift_transport_read; + cls->read_end = thrift_transport_read_end; + cls->write = thrift_transport_write; + cls->write_end = thrift_transport_write_end; + cls->flush = thrift_transport_flush; +} + +static void +thrift_transport_init (ThriftTransport *transport) +{ + THRIFT_UNUSED_VAR (transport); +} diff --git a/lib/c_glib/src/transport/thrift_transport.h b/lib/c_glib/src/transport/thrift_transport.h index 18edc4d5..97974730 100644 --- a/lib/c_glib/src/transport/thrift_transport.h +++ b/lib/c_glib/src/transport/thrift_transport.h @@ -1,8 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_TRANSPORT_H #define _THRIFT_TRANSPORT_H #include +G_BEGIN_DECLS + /*! \file thrift_transport.h * \brief Abstract class for Thrift transports. * @@ -13,20 +34,13 @@ * is necessary. */ -/* type macros */ +/* type macros */ #define THRIFT_TYPE_TRANSPORT (thrift_transport_get_type ()) -#define THRIFT_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_TRANSPORT, ThriftTransport)) -#define THRIFT_IS_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_TRANSPORT)) -#define THRIFT_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_TRANSPORT, \ - ThriftTransportClass)) -#define THRIFT_IS_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_TRANSPORT)) -#define THRIFT_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_TRANSPORT, \ - ThriftTransportClass)) +#define THRIFT_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_TRANSPORT, ThriftTransport)) +#define THRIFT_IS_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_TRANSPORT)) +#define THRIFT_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_TRANSPORT, ThriftTransportClass)) +#define THRIFT_IS_TRANSPORT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_TRANSPORT)) +#define THRIFT_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_TRANSPORT, ThriftTransportClass)) /*! * Thrift Protocol object @@ -45,7 +59,7 @@ struct _ThriftTransportClass GObjectClass parent; /* vtable */ - gboolean (*is_open) (ThriftTransport *transport); + gboolean (*is_open) (ThriftTransport *transport); gboolean (*open) (ThriftTransport *transport, GError **error); gboolean (*close) (ThriftTransport *transport, GError **error); gint32 (*read) (ThriftTransport *transport, gpointer buf, @@ -59,7 +73,7 @@ struct _ThriftTransportClass typedef struct _ThriftTransportClass ThriftTransportClass; /* used by THRIFT_TYPE_TRANSPORT */ -GType thrift_transport_get_type (void); +GType thrift_transport_get_type (void); /* virtual public methods */ @@ -67,7 +81,7 @@ GType thrift_transport_get_type (void); * Checks if this transport is opened. * \public \memberof ThriftTransportInterface */ -gboolean thrift_transport_is_open (ThriftTransport *transport); +gboolean thrift_transport_is_open (ThriftTransport *transport); /*! * Open the transport for reading and writing. @@ -105,7 +119,7 @@ gboolean thrift_transport_write (ThriftTransport *transport, const gpointer buf, * Called when write is completed. * \public \memberof ThriftTransportInterface */ -gboolean thrift_transport_write_end (ThriftTransport *transport, +gboolean thrift_transport_write_end (ThriftTransport *transport, GError **error); /*! @@ -131,5 +145,6 @@ typedef enum GQuark thrift_transport_error_quark (void); #define THRIFT_TRANSPORT_ERROR (thrift_transport_error_quark ()) +G_END_DECLS #endif /* _THRIFT_TRANSPORT_H */ diff --git a/lib/c_glib/src/transport/thrift_transport_factory.c b/lib/c_glib/src/transport/thrift_transport_factory.c index 6f0199fc..8f9a1f2a 100644 --- a/lib/c_glib/src/transport/thrift_transport_factory.c +++ b/lib/c_glib/src/transport/thrift_transport_factory.c @@ -1,35 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include "thrift.h" #include "transport/thrift_transport_factory.h" -/* forward declaration s*/ -static void thrift_transport_factory_class_init (ThriftTransportFactoryClass *cls); -ThriftTransport *thrift_transport_factory_get_transport (ThriftTransportFactory *factory, ThriftTransport *transport); +G_DEFINE_TYPE(ThriftTransportFactory, thrift_transport_factory, G_TYPE_OBJECT) -GType -thrift_transport_factory_get_type (void) +/* builds a transport from the base transport. */ +ThriftTransport * +thrift_transport_factory_get_transport (ThriftTransportFactory *factory, + ThriftTransport *transport) { - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = { - sizeof (ThriftTransportFactoryClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) thrift_transport_factory_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (ThriftTransportFactory), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, "ThriftTransportFactory", - &info, 0); - } - - return type; + THRIFT_UNUSED_VAR (factory); + return transport; } static void @@ -38,14 +37,8 @@ thrift_transport_factory_class_init (ThriftTransportFactoryClass *cls) cls->get_transport = thrift_transport_factory_get_transport; } -/* builds a transport from the base transport. */ -ThriftTransport * -thrift_transport_factory_get_transport (ThriftTransportFactory *factory, - ThriftTransport *transport) +static void +thrift_transport_factory_init (ThriftTransportFactory *factory) { THRIFT_UNUSED_VAR (factory); - return transport; } - - - diff --git a/lib/c_glib/src/transport/thrift_transport_factory.h b/lib/c_glib/src/transport/thrift_transport_factory.h index d987a803..e44198bf 100644 --- a/lib/c_glib/src/transport/thrift_transport_factory.h +++ b/lib/c_glib/src/transport/thrift_transport_factory.h @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #ifndef _THRIFT_TRANSPORT_FACTORY_H #define _THRIFT_TRANSPORT_FACTORY_H @@ -5,6 +24,8 @@ #include "thrift_transport.h" +G_BEGIN_DECLS + /*! \file thrift_transport_factory.h * \brief Base class for Thrift Transport Factories. Used by Thrift Servers * to obtain a client transport from an existing transport. The default @@ -13,19 +34,11 @@ /* type macros */ #define THRIFT_TYPE_TRANSPORT_FACTORY (thrift_transport_factory_get_type ()) -#define THRIFT_TRANSPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_TRANSPORT_FACTORY, \ - ThriftTransportFactory)) -#define THRIFT_IS_TRANSPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_TRANSPORT_FACTORY)) -#define THRIFT_TRANSPORT_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_TRANSPORT_FACTORY, \ - ThriftTransportFactoryClass)) -#define THRIFT_IS_TRANSPORT_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_TRANSPORT_FACTORY)) -#define THRIFT_TRANSPORT_FACTORY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_TRANSPORT_FACTORY, \ - ThriftTransportFactoryClass)) +#define THRIFT_TRANSPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_TRANSPORT_FACTORY, ThriftTransportFactory)) +#define THRIFT_IS_TRANSPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_TRANSPORT_FACTORY)) +#define THRIFT_TRANSPORT_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_TRANSPORT_FACTORY, ThriftTransportFactoryClass)) +#define THRIFT_IS_TRANSPORT_FACTORY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_TRANSPORT_FACTORY)) +#define THRIFT_TRANSPORT_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_TRANSPORT_FACTORY, ThriftTransportFactoryClass)) /* Thrift Transport Factory instance */ struct _ThriftTransportFactory @@ -51,5 +64,6 @@ GType thrift_transport_factory_get_type (void); /* virtual public methods */ ThriftTransport *thrift_transport_factory_get_transport (ThriftTransportFactory *factory, ThriftTransport *transport); +G_END_DECLS #endif /* _THRIFT_TRANSPORT_FACTORY_H */ diff --git a/lib/c_glib/test/Makefile.am b/lib/c_glib/test/Makefile.am index a8889be7..e9f070e0 100644 --- a/lib/c_glib/test/Makefile.am +++ b/lib/c_glib/test/Makefile.am @@ -6,25 +6,9 @@ AM_LDFLAGS = $(GLIB_LIBS) $(GOBJECT_LIBS) @GCOV_LDFLAGS@ CFLAGS = @GCOV_CFLAGS@ CXXFLAGS = -g -check_SCRIPTS = \ - testwrapper-testtransportsocket \ - testwrapper-testprotocolbinary \ - testwrapper-testbufferedtransport \ - testwrapper-testframedtransport \ - testwrapper-testmemorybuffer \ - testwrapper-teststruct \ - testwrapper-testsimpleserver \ - testwrapper-testdebugproto \ - testwrapper-testoptionalrequired \ - testwrapper-testthrifttest - -if WITH_CPP - check_SCRIPTS += testwrapper-testthrifttestclient -endif - check_PROGRAMS = \ testtransportsocket \ - testprotocolbinary \ + testbinaryprotocol \ testbufferedtransport \ testframedtransport \ testmemorybuffer \ @@ -44,8 +28,8 @@ testtransportsocket_LDADD = \ ../libthrift_c_glib_la-thrift_server_transport.o \ ../libthrift_c_glib_la-thrift_server_socket.o -testprotocolbinary_SOURCES = testprotocolbinary.c -testprotocolbinary_LDADD = \ +testbinaryprotocol_SOURCES = testbinaryprotocol.c +testbinaryprotocol_LDADD = \ ../libthrift_c_glib_la-thrift_protocol.o \ ../libthrift_c_glib_la-thrift_transport.o \ ../libthrift_c_glib_la-thrift_socket.o \ @@ -158,9 +142,7 @@ gen-c_glib/t_test_second_service.c gen-c_glib/t_test_thrift_test.c gen-c_glib/t_ gen-cpp/ThriftTest.cpp gen-cpp/ThriftTest.h: ../../../test/ThriftTest.thrift $(THRIFT) --gen cpp $< - TESTS = \ - $(testwrapper-%) \ $(check_PROGRAMS) \ $(check_SCRIPTS) @@ -212,18 +194,13 @@ leakcheck-%: % ${VALGRIND_LEAK_OPTS} \ ${$<_VALGRIND_LEAK_OPTS} ./$< -testwrapper-%: % test-wrapper.sh - @ln -sf test-wrapper.sh $@ - clean-local: $(RM) -r gen-c_glib gen-cpp CLEANFILES = \ - testwrapper-* \ *.bb \ *.bbg \ *.da \ *.gcno \ *.gcda \ - *.gcov \ - test-wrapper.sh + *.gcov diff --git a/lib/c_glib/test/test-wrapper.sh.in b/lib/c_glib/test/test-wrapper.sh.in deleted file mode 100644 index 956b2d15..00000000 --- a/lib/c_glib/test/test-wrapper.sh.in +++ /dev/null @@ -1,58 +0,0 @@ -# /bin/sh - -command="$0" - -stripcommand=`echo "$command" | sed 's/testwrapper-//'` - -"$stripcommand" "$@" || exit $? - -if test "x@ENABLE_COVERAGE@" = "x1"; then - # linux: 97.67% of 86 lines executed in file ../src/test123.h - # bsd: 100.00% of 196 source lines executed in file testbimap.c - - extrastripcommand=`echo "$stripcommand" | sed 's/\.\///'` - ${GCOV:-gcov} "$extrastripcommand" 2>&1 \ - | perl -ne 'BEGIN { $file = undef; } - next if m!^Creating!; - next if m!creating!; - next if m!^$!; - next if m!not exhausted!; - next if m!^Unexpected EOF!; - if (m!([\d\.]+)\% of \d+( source)? lines executed in file (.+)!) - { - do - { - if ( $3 !~ m#^/# ) - { - $a = $3 =~ m%([\-\w\.]+)$%; - print STDERR $_; - print "$1.gcov\n"; - } - } if $1 < 110.0; - } - elsif (m#^File .(.*?).$#) - { - $file = $1; - } - elsif (m#Lines executed:([\d\.]+)\% of (\d+)#) - { - $percent = $1; - $lines = $2; - do - { - if ( $file !~ m#^/# ) - { - $a = $file =~ m%([\-\w\.]+)$%; - print STDERR "$percent% of $lines executed in file $file\n"; - print "$1.gcov\n"; - } - } if $percent < 110.0; - } - else - { - print - }' \ - | xargs grep -n -A2 -B2 '#####.*\w' - exit 0 -fi - diff --git a/lib/c_glib/test/testprotocolbinary.c b/lib/c_glib/test/testbinaryprotocol.c similarity index 95% rename from lib/c_glib/test/testprotocolbinary.c rename to lib/c_glib/test/testbinaryprotocol.c index c8a54b92..94813e23 100644 --- a/lib/c_glib/test/testprotocolbinary.c +++ b/lib/c_glib/test/testbinaryprotocol.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -639,14 +658,15 @@ thrift_server_complex_types (const int port) } int -main(void) +main(int argc, char *argv[]) { - g_type_init (); - test_create_and_destroy (); - test_initialize (); - test_read_and_write_primitives (); - test_read_and_write_complex_types (); + g_type_init(); + g_test_init (&argc, &argv, NULL); - return 0; -} + g_test_add_func ("/testmemorybuffer/CreateAndDestroy", test_create_and_destroy); + g_test_add_func ("/testmemorybuffer/Initialize", test_initialize); + g_test_add_func ("/testmemorybuffer/ReadAndWritePrimitives", test_read_and_write_primitives); + g_test_add_func ("/testmemorybuffer/ReadAndWriteComplexTypes", test_read_and_write_complex_types); + return g_test_run (); +} diff --git a/lib/c_glib/test/testbufferedtransport.c b/lib/c_glib/test/testbufferedtransport.c index 6759509f..fb49c8f6 100644 --- a/lib/c_glib/test/testbufferedtransport.c +++ b/lib/c_glib/test/testbufferedtransport.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -176,13 +195,15 @@ thrift_server (const int port) } int -main(void) +main(int argc, char *argv[]) { g_type_init(); - test_create_and_destroy(); - test_open_and_close(); - test_read_and_write(); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/testbufferedtransport/CreateAndDestroy", test_create_and_destroy); + g_test_add_func ("/testbufferedtransport/OpenAndClose", test_open_and_close); + g_test_add_func ("/testbufferedtransport/ReadAndWrite", test_read_and_write); - return 0; + return g_test_run (); } diff --git a/lib/c_glib/test/testdebugproto.c b/lib/c_glib/test/testdebugproto.c index b111e12f..f0654f17 100644 --- a/lib/c_glib/test/testdebugproto.c +++ b/lib/c_glib/test/testdebugproto.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -7,12 +26,9 @@ #include "gen-c_glib/t_test_debug_proto_test_types.h" - -int -main(void) +static void +test_debug_proto(void) { - g_type_init (); - TTestOneOfEach *ooe = NULL; TTestNesting *n = NULL; TTestHolyMoley *hm = NULL; @@ -62,3 +78,15 @@ main(void) return 0; } +int +main(int argc, char *argv[]) +{ + g_type_init(); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/testdebugproto/DebugProto", test_debug_proto); + + return g_test_run (); +} + + diff --git a/lib/c_glib/test/testframedtransport.c b/lib/c_glib/test/testframedtransport.c index 23951f77..3269bf5b 100644 --- a/lib/c_glib/test/testframedtransport.c +++ b/lib/c_glib/test/testframedtransport.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -164,13 +183,14 @@ thrift_server (const int port) } int -main(void) +main(int argc, char *argv[]) { g_type_init(); - test_create_and_destroy(); - test_open_and_close(); - test_read_and_write(); + g_test_init (&argc, &argv, NULL); - return 0; -} + g_test_add_func ("/testframedtransport/CreateAndDestroy", test_create_and_destroy); + g_test_add_func ("/testframedtransport/OpenAndClose", test_open_and_close); + g_test_add_func ("/testframedtransport/ReadAndWrite", test_read_and_write); + return g_test_run (); +} diff --git a/lib/c_glib/test/testmemorybuffer.c b/lib/c_glib/test/testmemorybuffer.c index 52b18bfa..65901bf7 100644 --- a/lib/c_glib/test/testmemorybuffer.c +++ b/lib/c_glib/test/testmemorybuffer.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -63,13 +82,14 @@ test_read_and_write(void) } int -main(void) +main(int argc, char *argv[]) { g_type_init(); - test_create_and_destroy(); - test_open_and_close(); - test_read_and_write(); + g_test_init (&argc, &argv, NULL); - return 0; -} + g_test_add_func ("/testmemorybuffer/CreateAndDestroy", test_create_and_destroy); + g_test_add_func ("/testmemorybuffer/OpenAndClose", test_open_and_close); + g_test_add_func ("/testmemorybuffer/ReadAndWrite", test_read_and_write); + return g_test_run (); +} diff --git a/lib/c_glib/test/testoptionalrequired.c b/lib/c_glib/test/testoptionalrequired.c index cf444133..7165d931 100644 --- a/lib/c_glib/test/testoptionalrequired.c +++ b/lib/c_glib/test/testoptionalrequired.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -167,16 +186,17 @@ test_tricky4 (void) } int -main(void) +main(int argc, char *argv[]) { - g_type_init (); - test_old_school1 (); - test_simple (); - test_tricky1 (); - test_tricky2 (); - test_tricky3 (); - test_tricky4 (); - return 0; -} + g_type_init(); + g_test_init (&argc, &argv, NULL); + g_test_add_func ("/testoptionalrequired/OldSchool", test_old_school1); + g_test_add_func ("/testoptionalrequired/Simple", test_simple); + g_test_add_func ("/testoptionalrequired/Tricky1", test_tricky1); + g_test_add_func ("/testoptionalrequired/Tricky2", test_tricky2); + g_test_add_func ("/testoptionalrequired/Tricky3", test_tricky3); + g_test_add_func ("/testoptionalrequired/Tricky4", test_tricky4); + return g_test_run (); +} diff --git a/lib/c_glib/test/testsimpleserver.c b/lib/c_glib/test/testsimpleserver.c index 182e9ef7..282a6e8a 100644 --- a/lib/c_glib/test/testsimpleserver.c +++ b/lib/c_glib/test/testsimpleserver.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include #include @@ -5,6 +24,7 @@ #include #include +#include "thrift.h" #include "processor/thrift_processor.h" #include "transport/thrift_server_socket.h" @@ -27,6 +47,8 @@ struct _TestProcessorClass }; typedef struct _TestProcessorClass TestProcessorClass; +G_DEFINE_TYPE(TestProcessor, test_processor, THRIFT_TYPE_PROCESSOR) + gboolean test_processor_process (ThriftProcessor *processor, ThriftProtocol *in, ThriftProtocol *out) @@ -35,38 +57,15 @@ test_processor_process (ThriftProcessor *processor, ThriftProtocol *in, } static void -test_processor_class_init (ThriftProcessorClass *proc) +test_processor_init (TestProcessor *p) { - proc->process = test_processor_process; + THRIFT_UNUSED_VAR (p); } -GType -test_processor_get_type (void) +static void +test_processor_class_init (TestProcessorClass *proc) { - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (TestProcessorClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) test_processor_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (TestProcessor), - 0, /* n_preallocs */ - NULL, /* instance_init */ - NULL, /* value_table */ - }; - - type = g_type_register_static (THRIFT_TYPE_PROCESSOR, - "TestProcessorType", - &info, 0); - } - - return type; + (THRIFT_PROCESSOR_CLASS(proc))->process = test_processor_process; } static void @@ -104,10 +103,12 @@ test_server (void) } int -main (void) +main(int argc, char *argv[]) { - g_type_init (); - test_server (); + g_type_init(); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/testsimpleserver/SimpleServer", test_server); - return 0; + return g_test_run (); } diff --git a/lib/c_glib/test/teststruct.c b/lib/c_glib/test/teststruct.c index cb401e2e..ec543be0 100644 --- a/lib/c_glib/test/teststruct.c +++ b/lib/c_glib/test/teststruct.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -20,67 +39,13 @@ typedef struct _ThriftTestStructClass ThriftTestStructClass; GType thrift_test_struct_get_type (void); #define THRIFT_TYPE_TEST_STRUCT (thrift_test_struct_get_type ()) -#define THRIFT_TEST_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - THRIFT_TYPE_TEST_STRUCT, \ - ThriftTestStruct)) -#define THRIFT_TEST_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), \ - THRIFT_TYPE_TEST_STRUCT, \ - ThriftTestStructClass)) -#define THRIFT_IS_TEST_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - THRIFT_TYPE_TEST_STRUCT)) -#define THRIFT_IS_TEST_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), \ - THRIFT_TYPE_TEST_STRUCT)) -#define THRIFT_TEST_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - THRIFT_TYPE_TEST_STRUCT, \ - ThriftTestStructClass)) - -/* test declarations */ -gint32 thrift_test_struct_read (ThriftStruct *object, ThriftProtocol *protocol, - GError **error); -gint32 thrift_test_struct_write (ThriftStruct *object, ThriftProtocol *protocol, - GError **error); - -static void -thrift_test_struct_class_init (ThriftTestStructClass *cls) -{ - ThriftStructClass *ts_cls = THRIFT_STRUCT_CLASS (cls); - ts_cls->read = thrift_test_struct_read; - ts_cls->write = thrift_test_struct_write; -} +#define THRIFT_TEST_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THRIFT_TYPE_TEST_STRUCT, ThriftTestStruct)) +#define THRIFT_TEST_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), THRIFT_TYPE_TEST_STRUCT, ThriftTestStructClass)) +#define THRIFT_IS_TEST_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THRIFT_TYPE_TEST_STRUCT)) +#define THRIFT_IS_TEST_STRUCT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), THRIFT_TYPE_TEST_STRUCT)) +#define THRIFT_TEST_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), THRIFT_TYPE_TEST_STRUCT, ThriftTestStructClass)) -static void -thrift_test_struct_instance_init (ThriftTestStruct *s) -{ - (void) s; -} - -GType -thrift_test_struct_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo type_info = - { - sizeof (ThriftTestStructClass), - NULL, - NULL, - (GClassInitFunc) thrift_test_struct_class_init, - NULL, - NULL, - sizeof (ThriftTestStruct), - 0, - (GInstanceInitFunc) thrift_test_struct_instance_init, - NULL, - }; - - type = g_type_register_static (THRIFT_TYPE_STRUCT, - "ThriftTestStructType", &type_info, 0); - } - - return type; -} +G_DEFINE_TYPE(ThriftTestStruct, thrift_test_struct, THRIFT_TYPE_STRUCT) gint32 thrift_test_struct_read (ThriftStruct *object, ThriftProtocol *protocol, @@ -96,6 +61,19 @@ thrift_test_struct_write (ThriftStruct *object, ThriftProtocol *protocol, return 0; } +static void +thrift_test_struct_class_init (ThriftTestStructClass *cls) +{ + ThriftStructClass *ts_cls = THRIFT_STRUCT_CLASS (cls); + ts_cls->read = thrift_test_struct_read; + ts_cls->write = thrift_test_struct_write; +} + +static void +thrift_test_struct_init (ThriftTestStruct *s) +{ + THRIFT_UNUSED_VAR (s); +} static void test_initialize_object (void) @@ -112,10 +90,12 @@ test_initialize_object (void) } int -main(void) +main(int argc, char *argv[]) { - g_type_init (); - test_initialize_object (); + g_type_init(); + g_test_init (&argc, &argv, NULL); - return 0; + g_test_add_func ("/teststruct/InitializeObject", test_initialize_object); + + return g_test_run (); } diff --git a/lib/c_glib/test/testthrifttest.c b/lib/c_glib/test/testthrifttest.c index 6020f9cd..b14b6068 100644 --- a/lib/c_glib/test/testthrifttest.c +++ b/lib/c_glib/test/testthrifttest.c @@ -7,22 +7,22 @@ static const char TEST_ADDRESS[] = "localhost"; static const int TEST_PORT = 64444; -static void thrift_server (const int port); - static void -thrift_server (const int port) +test_thrift_server (const int port) { ThriftServerSocket *tsocket = g_object_new (THRIFT_TYPE_SERVER_SOCKET, - "port", port, NULL); + "port", TEST_PORT, NULL); g_object_unref (tsocket); } int -main(void) +main(int argc, char *argv[]) { - g_type_init (); - thrift_server (TEST_PORT); - return 0; -} + g_type_init(); + g_test_init (&argc, &argv, NULL); + g_test_add_func ("/testthrift/Server", test_thrift_server); + + return g_test_run (); +} diff --git a/lib/c_glib/test/testthrifttestclient.cpp b/lib/c_glib/test/testthrifttestclient.cpp index 4b5b8411..15389a5b 100644 --- a/lib/c_glib/test/testthrifttestclient.cpp +++ b/lib/c_glib/test/testthrifttestclient.cpp @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ /* test a C client with a C++ server */ diff --git a/lib/c_glib/test/testtransportsocket.c b/lib/c_glib/test/testtransportsocket.c index 14579c8c..279da86d 100644 --- a/lib/c_glib/test/testtransportsocket.c +++ b/lib/c_glib/test/testtransportsocket.c @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + #include #include @@ -188,13 +207,15 @@ thrift_socket_server (const int port) } int -main(void) +main(int argc, char *argv[]) { g_type_init(); - test_create_and_destroy(); - test_open_and_close(); - test_read_and_write(); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/testtransportsocket/CreateAndDestroy", test_create_and_destroy); + g_test_add_func ("/testtransportsocket/OpenAndClose", test_open_and_close); + g_test_add_func ("/testtransportsocket/ReadAndWrite", test_read_and_write); - return 0; + return g_test_run (); } diff --git a/lib/c_glib/thrift_c_glib.pc.in b/lib/c_glib/thrift_c_glib.pc.in index 44675dfa..3a4137d2 100644 --- a/lib/c_glib/thrift_c_glib.pc.in +++ b/lib/c_glib/thrift_c_glib.pc.in @@ -25,5 +25,6 @@ includedir=@includedir@ Name: Thrift Description: Thrift C API Version: @VERSION@ +Requires: glib-2.0 gobject-2.0 Libs: -L${libdir} -lthriftc Cflags: -I${includedir}/thrift