struct bt_component_class;
-typedef enum bt_component_status (*bt_component_class_filter_add_iterator_method)(
- struct bt_component *, struct bt_notification_iterator *);
-
extern
struct bt_component_class *bt_component_class_filter_create(const char *name,
bt_component_class_notification_iterator_get_method notification_iterator_get_method,
bt_component_class_notification_iterator_next_method notification_iterator_next_method);
-extern int bt_component_class_filter_set_add_iterator_method(
- struct bt_component_class *component_class,
- bt_component_class_filter_add_iterator_method add_iterator_method);
-
extern
int bt_component_class_filter_set_notification_iterator_init_method(
struct bt_component_class *component_class,
bt_component_class_init_method init;
bt_component_class_destroy_method destroy;
bt_component_class_query_method query;
+ bt_component_class_new_connection_method new_connection_method;
} methods;
/* Array of struct bt_component_class_destroy_listener */
GArray *destroy_listeners;
struct bt_component_class parent;
struct {
bt_component_class_sink_consume_method consume;
- bt_component_class_sink_add_iterator_method add_iterator;
} methods;
};
struct bt_component_class parent;
struct {
struct bt_component_class_iterator_methods iterator;
- bt_component_class_filter_add_iterator_method add_iterator;
} methods;
};
typedef enum bt_component_status (*bt_component_class_sink_consume_method)(
struct bt_component *);
-typedef enum bt_component_status (*bt_component_class_sink_add_iterator_method)(
- struct bt_component *, struct bt_notification_iterator *);
-
extern
struct bt_component_class *bt_component_class_sink_create(const char *name,
bt_component_class_sink_consume_method consume_method);
-extern int bt_component_class_sink_set_add_iterator_method(
- struct bt_component_class *component_class,
- bt_component_class_sink_add_iterator_method add_iterator_method);
-
#ifdef __cplusplus
}
#endif
struct bt_component_class *component_class,
const char *object, struct bt_value *params);
+typedef enum bt_component_status (*bt_component_class_new_connection_method)(
+ struct bt_port *own_port, struct bt_connection *connection);
+
extern int bt_component_class_set_init_method(
struct bt_component_class *component_class,
bt_component_class_init_method init_method);
struct bt_component_class *component_class,
bt_component_class_destroy_method destroy_method);
+extern int bt_component_class_set_new_connection_method(
+ struct bt_component_class *component_class,
+ bt_component_class_new_connection_method new_connection_method);
+
extern int bt_component_class_set_description(
struct bt_component_class *component_class,
const char *description);
struct bt_component_class *component_class,
bt_component_class_query_method query_method);
+extern int bt_component_class_set_new_connection_method(
+ struct bt_component_class *component_class,
+ bt_component_class_new_connection_method new_connection_method);
+
extern struct bt_value *bt_component_class_query(
struct bt_component_class *component_class,
const char *object, struct bt_value *params);
struct bt_notification_iterator *bt_component_create_iterator(
struct bt_component *component, void *init_method_data);
+BT_HIDDEN
+enum bt_component_status bt_component_new_connection(
+ struct bt_component *component, struct bt_port *own_port,
+ struct bt_connection *connection);
+
BT_HIDDEN
void bt_component_set_graph(struct bt_component *component,
struct bt_graph *graph);
BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD = 2,
BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESTROY_METHOD = 3,
BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD = 4,
- BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD = 5,
- BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD = 6,
- BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD = 7,
- BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD = 8,
- BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 9,
+ BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD = 5,
+ BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD = 6,
+ BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD = 7,
+ BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 8,
};
/* Component class attribute (internal use) */
/* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD */
bt_component_class_query_method query_method;
- /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD */
- bt_component_class_filter_add_iterator_method filter_add_iterator_method;
-
- /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD */
- bt_component_class_sink_add_iterator_method sink_add_iterator_method;
+ /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD */
+ bt_component_class_new_connection_method new_connection_method;
/* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD */
bt_component_class_notification_iterator_init_method notif_iter_init_method;
__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(query_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD, _id, _comp_class_id, sink, _x)
/*
- * Defines an add iterator method attribute attached to a specific
+ * Defines a new connection method attribute attached to a specific
+ * source component class descriptor.
+ *
+ * _id: Plugin descriptor ID (C identifier).
+ * _comp_class_id: Component class descriptor ID (C identifier).
+ * _x: New connection method
+ * (bt_component_class_new_connection_method).
+ */
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, source, _x)
+
+/*
+ * Defines a new connection method attribute attached to a specific
* filter component class descriptor.
*
* _id: Plugin descriptor ID (C identifier).
* _comp_class_id: Component class descriptor ID (C identifier).
- * _x: Add iterator method
- * (bt_component_class_filter_add_iterator_method).
+ * _x: New connection method
+ * (bt_component_class_new_connection_method).
*/
-#define BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(_id, _comp_class_id, _x) \
- __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_add_iterator_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD, _id, _comp_class_id, filter, _x)
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, filter, _x)
/*
- * Defines an add iterator method attribute attached to a specific
+ * Defines a new connection method attribute attached to a specific
* sink component class descriptor.
*
* _id: Plugin descriptor ID (C identifier).
* _comp_class_id: Component class descriptor ID (C identifier).
- * _x: Add iterator method
- * (bt_component_class_sink_add_iterator_method).
+ * _x: New connection method
+ * (bt_component_class_new_connection_method).
*/
-#define BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(_id, _comp_class_id, _x) \
- __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_add_iterator_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD, _id, _comp_class_id, sink, _x)
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, sink, _x)
/*
* Defines an iterator initialization method attribute attached to a
BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(auto, _name, _x)
/*
- * Defines an add iterator method attribute attached to a filter
- * component class descriptor which is attached to the automatic plugin
- * descriptor.
+ * Defines a new connection method attribute attached to a source component
+ * class descriptor which is attached to the automatic plugin descriptor.
*
* _name: Component class name (C identifier).
- * _x: Add iterator method (bt_component_class_filter_add_iterator_method).
+ * _x: New connections method (bt_component_class_new_connection_method).
*/
-#define BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD(_name, _x) \
- BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(auto, _name, _x)
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
/*
- * Defines an add iterator method attribute attached to a sink
- * component class descriptor which is attached to the automatic plugin
- * descriptor.
+ * Defines a new connection method attribute attached to a filter component
+ * class descriptor which is attached to the automatic plugin descriptor.
+ *
+ * _name: Component class name (C identifier).
+ * _x: New connections method (bt_component_class_new_connection_method).
+ */
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
+
+/*
+ * Defines a new connection method attribute attached to a sink component
+ * class descriptor which is attached to the automatic plugin descriptor.
*
* _name: Component class name (C identifier).
- * _x: Add iterator method (bt_component_class_sink_add_iterator_method).
+ * _x: New connections method (bt_component_class_new_connection_method).
*/
-#define BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD(_name, _x) \
- BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(auto, _name, _x)
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
/*
* Defines an iterator initialization method attribute attached to a
return ret;
}
+int bt_component_class_set_new_connection_method(
+ struct bt_component_class *component_class,
+ bt_component_class_new_connection_method new_connection_method)
+{
+ int ret = 0;
+
+ if (!component_class || component_class->frozen ||
+ !new_connection_method) {
+ ret = -1;
+ goto end;
+ }
+
+ component_class->methods.new_connection_method = new_connection_method;
+
+end:
+ return ret;
+}
+
int bt_component_class_set_destroy_method(
struct bt_component_class *component_class,
bt_component_class_destroy_method destroy_method)
return ret;
}
-extern int bt_component_class_sink_set_add_iterator_method(
- struct bt_component_class *component_class,
- bt_component_class_sink_add_iterator_method add_iterator_method)
-{
- struct bt_component_class_sink *sink_class;
- int ret = 0;
-
- if (!component_class || component_class->frozen ||
- !add_iterator_method ||
- component_class->type != BT_COMPONENT_CLASS_TYPE_SINK) {
- ret = -1;
- goto end;
- }
-
- sink_class = container_of(component_class,
- struct bt_component_class_sink, parent);
- sink_class->methods.add_iterator = add_iterator_method;
-
-end:
- return ret;
-}
-
-extern int bt_component_class_filter_set_add_iterator_method(
- struct bt_component_class *component_class,
- bt_component_class_filter_add_iterator_method add_iterator_method)
-{
- struct bt_component_class_filter *filter_class;
- int ret = 0;
-
- if (!component_class || component_class->frozen ||
- !add_iterator_method ||
- component_class->type !=
- BT_COMPONENT_CLASS_TYPE_FILTER) {
- ret = -1;
- goto end;
- }
-
- filter_class = container_of(component_class,
- struct bt_component_class_filter, parent);
- filter_class->methods.add_iterator = add_iterator_method;
-
-end:
- return ret;
-}
-
int bt_component_class_freeze(
struct bt_component_class *component_class)
{
bt_component_class_init_method init_method;
bt_component_class_destroy_method destroy_method;
bt_component_class_query_method query_method;
- bt_component_class_filter_add_iterator_method filter_add_iterator_method;
- bt_component_class_sink_add_iterator_method sink_add_iterator_method;
+ bt_component_class_new_connection_method new_connection_method;
struct bt_component_class_iterator_methods iterator_methods;
};
cc_full_descr->query_method =
cur_cc_descr_attr->value.query_method;
break;
- case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD:
- cc_full_descr->filter_add_iterator_method =
- cur_cc_descr_attr->value.filter_add_iterator_method;
- break;
- case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD:
- cc_full_descr->sink_add_iterator_method =
- cur_cc_descr_attr->value.sink_add_iterator_method;
+ case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD:
+ cc_full_descr->new_connection_method =
+ cur_cc_descr_attr->value.new_connection_method;
break;
case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD:
cc_full_descr->iterator_methods.init =
}
}
+ if (cc_full_descr->new_connection_method) {
+ ret = bt_component_class_set_new_connection_method(
+ comp_class, cc_full_descr->new_connection_method);
+ if (ret) {
+ status = BT_PLUGIN_STATUS_ERROR;
+ BT_PUT(comp_class);
+ goto end;
+ }
+ }
+
switch (cc_full_descr->descriptor->type) {
case BT_COMPONENT_CLASS_TYPE_SOURCE:
if (cc_full_descr->iterator_methods.init) {
}
break;
case BT_COMPONENT_CLASS_TYPE_FILTER:
- if (cc_full_descr->filter_add_iterator_method) {
- ret = bt_component_class_filter_set_add_iterator_method(
- comp_class,
- cc_full_descr->filter_add_iterator_method);
- if (ret) {
- status = BT_PLUGIN_STATUS_ERROR;
- BT_PUT(comp_class);
- goto end;
- }
- }
-
if (cc_full_descr->iterator_methods.init) {
ret = bt_component_class_filter_set_notification_iterator_init_method(
comp_class,
}
break;
case BT_COMPONENT_CLASS_TYPE_SINK:
- if (cc_full_descr->sink_add_iterator_method) {
- ret = bt_component_class_sink_set_add_iterator_method(
- comp_class,
- cc_full_descr->sink_add_iterator_method);
- if (ret) {
- status = BT_PLUGIN_STATUS_ERROR;
- BT_PUT(comp_class);
- goto end;
- }
- }
break;
default:
assert(false);