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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 124ff9daf13cc0153c89747496e05c47c8b62ebead5ff692c0b131ff0f175fa5
4
- data.tar.gz: 64df9b6129c3063d77bed406379e38c16ff272ad476b900d6ee6b00f1530d1ed
3
+ metadata.gz: a1d7b3860274d4b24281ea23457f20ec61b0908faa6c876456188f54ca45c4ab
4
+ data.tar.gz: bcc0e1388f58fca090fac605d6c005df948692a7a8cdd98f9f29b8fb6f52f30a
5
5
  SHA512:
6
- metadata.gz: 96938604f5fc1384574e842b6b5656a04893e666f502fdc3661e793f67081c5008402722eb5d9c5f5d47d52d63b95f854a4d3e5940fd8c43a5bb83d57c29deb4
7
- data.tar.gz: 39e182c9fff334721aa613325cf6c526c3b392f829337c3bb3d53a876a28c8d8df12b428d11edc676c24ed9425af58c9d6b3070bfed9d9d3de875604efe0fee4
6
+ metadata.gz: d2d84b4f7f26d135da71393c9119b2d324d5e38224e5ed5f6015e8dab27c7097a5539edd5e29e8b7e2ccf8d0f0b8b0bfb1bf7044e5346e01e0e0481cf619099e
7
+ data.tar.gz: f935dc50f8163fe849d0dd27734e0cfaa8364ae2add5a61ec833e9c7ac211dabc87b9bcaef4d7f98c558d1a54756f0341af224167fd5f4f3eb9f0b65cf2d7658
data/bin/metababel CHANGED
@@ -196,7 +196,7 @@ def parse_argv
196
196
  puts File.readlines(path)
197
197
  exit
198
198
  }
199
-
199
+ parser.on('--drop','[Optional] Drop unknow messages')
200
200
 
201
201
  options = { 'disable-callbaks': ['on_downstream'].to_set,
202
202
  'component-name': 'btx',
@@ -1,3 +1,3 @@
1
1
  module Metababel
2
- VERSION = '1.1.0'
2
+ VERSION = '1.1.2'
3
3
  end
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
- static void btx_initialize_usr_data(void **usr_data) { *usr_data = new StreamToMessage_t{}; }
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 btx_finalize_usr_data(void *usr_data) { delete ((StreamToMessage_t *)(usr_data)); }
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 = (StreamToMessage_t *)usr_data;
57
+ auto *h = (StreamToMessages_t *)usr_data;
15
58
  switch (bt_message_get_type(message)) {
16
- // Just forward the first message
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
- // If required Pop and Push stream_begin message associated with the stream of the current
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
- auto it = h->find(stream);
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
- bt_message_put_ref(message);
88
+ btx_push_message(btx_handle, message);
50
89
  }
51
90
  }
52
91
 
@@ -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
- btx_downstream_push_message(message_iterator_private_data,
122
- upstream_message);
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.0
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-03-29 00:00:00.000000000 Z
13
+ date: 2024-07-12 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description:
16
16
  email: