metababel 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/metababel +1 -1
- data/lib/metababel/version.rb +1 -1
- data/shared/stripper.cpp +63 -24
- data/template/filter.c.erb +9 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1d7b3860274d4b24281ea23457f20ec61b0908faa6c876456188f54ca45c4ab
|
|
4
|
+
data.tar.gz: bcc0e1388f58fca090fac605d6c005df948692a7a8cdd98f9f29b8fb6f52f30a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d2d84b4f7f26d135da71393c9119b2d324d5e38224e5ed5f6015e8dab27c7097a5539edd5e29e8b7e2ccf8d0f0b8b0bfb1bf7044e5346e01e0e0481cf619099e
|
|
7
|
+
data.tar.gz: f935dc50f8163fe849d0dd27734e0cfaa8364ae2add5a61ec833e9c7ac211dabc87b9bcaef4d7f98c558d1a54756f0341af224167fd5f4f3eb9f0b65cf2d7658
|
data/bin/metababel
CHANGED
data/lib/metababel/version.rb
CHANGED
data/shared/stripper.cpp
CHANGED
|
@@ -3,50 +3,89 @@
|
|
|
3
3
|
#include <unordered_map>
|
|
4
4
|
|
|
5
5
|
typedef std::unordered_map<const bt_stream *, const bt_message *> StreamToMessage_t;
|
|
6
|
+
typedef std::unordered_map<const bt_packet *, const bt_message *> PacketToMessage_t;
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
struct StreamToMessages_s {
|
|
9
|
+
StreamToMessage_t stream_beginning;
|
|
10
|
+
PacketToMessage_t packet_beginning;
|
|
11
|
+
};
|
|
12
|
+
typedef struct StreamToMessages_s StreamToMessages_t;
|
|
8
13
|
|
|
9
|
-
static void
|
|
14
|
+
static void btx_initialize_usr_data(void **usr_data) { *usr_data = new StreamToMessages_t{}; }
|
|
15
|
+
|
|
16
|
+
static void btx_finalize_usr_data(void *usr_data) { delete ((StreamToMessages_t *)(usr_data)); }
|
|
17
|
+
|
|
18
|
+
static void push_associated_beginnings(void *btx_handle, StreamToMessages_t *h,
|
|
19
|
+
const bt_message *message) {
|
|
20
|
+
|
|
21
|
+
const bt_event *event = bt_message_event_borrow_event_const(message);
|
|
22
|
+
const bt_stream *stream = bt_event_borrow_stream_const(event);
|
|
23
|
+
|
|
24
|
+
auto it_stream = h->stream_beginning.find(stream);
|
|
25
|
+
if (it_stream != h->stream_beginning.end()) {
|
|
26
|
+
btx_push_message(btx_handle, it_stream->second);
|
|
27
|
+
h->stream_beginning.erase(it_stream);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (bt_stream_class_supports_packets(bt_stream_borrow_class_const(stream))) {
|
|
31
|
+
const auto packet = bt_event_borrow_packet_const(event);
|
|
32
|
+
auto it_packet = h->packet_beginning.find(packet);
|
|
33
|
+
if (it_packet != h->packet_beginning.end()) {
|
|
34
|
+
btx_push_message(btx_handle, it_packet->second);
|
|
35
|
+
h->packet_beginning.erase(it_packet);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
template <typename T>
|
|
41
|
+
static void push_or_drop_message(void *btx_handle,
|
|
42
|
+
std::unordered_map<const T *, const bt_message *> &stm,
|
|
43
|
+
const T *key, const bt_message *message) {
|
|
44
|
+
auto it = stm.find(key);
|
|
45
|
+
if (it == stm.end()) {
|
|
46
|
+
btx_push_message(btx_handle, message);
|
|
47
|
+
} else {
|
|
48
|
+
bt_message_put_ref(message);
|
|
49
|
+
bt_message_put_ref(it->second);
|
|
50
|
+
stm.erase(it);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
10
53
|
|
|
11
54
|
static void on_downstream_message_callback(void *btx_handle, void *usr_data,
|
|
12
55
|
const bt_message *message) {
|
|
13
56
|
|
|
14
|
-
auto *h = (
|
|
57
|
+
auto *h = (StreamToMessages_t *)usr_data;
|
|
15
58
|
switch (bt_message_get_type(message)) {
|
|
16
|
-
//
|
|
59
|
+
// Save begins
|
|
17
60
|
case (BT_MESSAGE_TYPE_STREAM_BEGINNING): {
|
|
18
61
|
const bt_stream *stream = bt_message_stream_beginning_borrow_stream_const(message);
|
|
19
|
-
h->insert({stream, message});
|
|
62
|
+
h->stream_beginning.insert({stream, message});
|
|
20
63
|
break;
|
|
21
64
|
}
|
|
65
|
+
case (BT_MESSAGE_TYPE_PACKET_BEGINNING): {
|
|
66
|
+
const bt_packet *packet = bt_message_packet_beginning_borrow_packet_const(message);
|
|
67
|
+
h->packet_beginning.insert({packet, message});
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
// Push event and associated beginnings
|
|
22
71
|
case (BT_MESSAGE_TYPE_EVENT): {
|
|
23
|
-
|
|
24
|
-
// message
|
|
25
|
-
const bt_event *event = bt_message_event_borrow_event_const(message);
|
|
26
|
-
const bt_stream *stream = bt_event_borrow_stream_const(event);
|
|
27
|
-
auto it = h->find(stream);
|
|
28
|
-
if (it != h->end()) {
|
|
29
|
-
btx_push_message(btx_handle, it->second);
|
|
30
|
-
h->erase(it);
|
|
31
|
-
}
|
|
72
|
+
push_associated_beginnings(btx_handle, h, message);
|
|
32
73
|
btx_push_message(btx_handle, message);
|
|
33
74
|
break;
|
|
34
75
|
}
|
|
76
|
+
// Drop or push ends
|
|
77
|
+
case (BT_MESSAGE_TYPE_PACKET_END): {
|
|
78
|
+
const bt_packet *packet = bt_message_packet_end_borrow_packet_const(message);
|
|
79
|
+
push_or_drop_message(btx_handle, h->packet_beginning, packet, message);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
35
82
|
case (BT_MESSAGE_TYPE_STREAM_END): {
|
|
36
83
|
const bt_stream *stream = bt_message_stream_end_borrow_stream_const(message);
|
|
37
|
-
|
|
38
|
-
// Only send stream_end message if begin have been sent, if not drop
|
|
39
|
-
if (it == h->end()) {
|
|
40
|
-
btx_push_message(btx_handle, message);
|
|
41
|
-
} else {
|
|
42
|
-
bt_message_put_ref(message);
|
|
43
|
-
bt_message_put_ref(it->second);
|
|
44
|
-
h->erase(it);
|
|
45
|
-
}
|
|
84
|
+
push_or_drop_message(btx_handle, h->stream_beginning, stream, message);
|
|
46
85
|
break;
|
|
47
86
|
}
|
|
48
87
|
default:
|
|
49
|
-
|
|
88
|
+
btx_push_message(btx_handle, message);
|
|
50
89
|
}
|
|
51
90
|
}
|
|
52
91
|
|
data/template/filter.c.erb
CHANGED
|
@@ -118,8 +118,15 @@ static inline void filter_message_iterator_next_call_dispatchers(
|
|
|
118
118
|
bt_message_put_ref(upstream_message);
|
|
119
119
|
} else {
|
|
120
120
|
/* Push upstream message to downstream */
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
<% if options[:drop] %>
|
|
122
|
+
/* Drop message. Including PACKET_{BEGIN,END} messages.
|
|
123
|
+
* It's ok as ALL message will be drop, so we will never get
|
|
124
|
+
* any EVENT without BEGIN */
|
|
125
|
+
bt_message_put_ref(upstream_message);
|
|
126
|
+
<% else %>
|
|
127
|
+
btx_downstream_push_message(message_iterator_private_data,
|
|
128
|
+
upstream_message);
|
|
129
|
+
<% end %>
|
|
123
130
|
}
|
|
124
131
|
}
|
|
125
132
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: metababel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Applencourt
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2024-
|
|
13
|
+
date: 2024-07-12 00:00:00.000000000 Z
|
|
14
14
|
dependencies: []
|
|
15
15
|
description:
|
|
16
16
|
email:
|