fumble 0.6.1

an oxidized implementation of the original clumsy tool, designed to simulate adverse network conditions on Windows systems.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
# Changelog

All notable changes to this project will be documented in this file.

## [0.6.1] - 2024-08-21

### Bug Fixes

- Fix bandwidth remove packet method statistics tracking not saturating subtraction


### Documentation

- Update README.md to be up to date and more comprehensive

- Update filter validation to make a wrapper method which adds the documentation url only for CLI use

- Update filter validation logic to link to the filter docs

- Update README.md to be up to date

- Update README.md to add screenshot

### Features

- Add text area extension method to draw dimmed placeholder text


### Updates

- Update tui initialization logic to initialize values of fields if they weren't specified in the cli

- Update packet processing to not log if there is no filter

- Update filter validation to open the wd handle in packet sniffing mode

- Update packet_receiving to only log the missing WinDivert hanld error once as to not freeze up the TUI

- Update style_textarea_based_on_validation to not override the existing title


## [0.6.0] - 2024-08-20

### Bug Fixes

- Fix start stop toggle input working while focus is on filter aswell

- Fix TextArea set_text extension not overriding existing text

- Fix sending and receiving windivert instances being ont he same priority causing one to randomly absorb all the packets


### Documentation

- Add docstrings to trait methods for CLI and TUI extension traits


### Features

- Add start and stop toggle to be able to toggle all processing

- Add keybind info for filter and logs widgets

- Add conditional block border highlight method to unify highlighting logic

- Add BandwidthStats to track throughput and storage buffer packet count

- Add DuplicateStats to track duplicate multiplier and display it in the tui

- Add TamperStats to visualize the packet data being tampered

- Add ReorderStats to keep track of reordering percentage and number of delayed packets

- Add ThrottleStats to keep track of the throttling state and package drop count

- Add DelayStats to keep track of the number of actively delayed packets

- Add statistic tracking support

- Add TUI support using ratatui

- Update main to add a separate thread for packet processing


### Moves

- Move EWMA to util subfolder


### Refactors

- Refactor TUI widgets by modularazing utility functions and improving code organization

- Refactor packet manipulation settings to use optional structs and improve code consistency

This commit refactors various packet manipulation settings to
encapsulate their fields within optional structs. This change improves
code consistency by grouping related settings together and ensuring that
they are either fully provided or omitted as a whole. Additionally, the
code has been cleaned up to remove unnecessary unwraps and serialization
logic, resulting in more robust and maintainable code. The update also
includes improvements in how CLI state is initialized and updated,
reducing redundancy and improving clarity.

- Refactor tui cli methods to reduce nesting via early return unpacks

- Refactor rest of tui cli methods to reduce repetition

- Refactor tui updating from statistics method to reduce repetition

- Refactor CLI and TUI state management: Rename AppState to TuiState, introduce extension traits for modular updates

- Refactor main.rs to extract cli and tui state interaction to separate module

- Refactor cli updating logic to extract text area parsing logic into extension methods


### Removals

- Remove validate_probability method for text areas

- Remove validate_usize method for text areas which was doing both validation and block rendering updates


### Styling

- Style code using fmt

- Clean up code using Clippy


### Updates

- Update project to 0.6.0

- Update TUI cli command to default to false

- Improve console statistic logging

- Improve custom logger to have the capabilities of the default logger

- Update tui input to use tui state for better isolation

- Improve FilterWidget validation logic by caching last valid filter state and reverting to it on escape

- Update LogsWidget to give feedback upon chaning log level

- Update Widgets to handle Enter the same as Esc as to prevent entering of new lines in text areas

- Improve TamperWidget validation logic

- Improve ReorderWidget validation logic

- Improve DuplicateWidget validation logic

- Improve ThrottleWidget validation logic

- Improve DropWidget validation logic

- Improve DelayWidget validation logic

- Improve BandiwdthWidget validation logic

- Update FilterWidget and packet receiving thread to be able to change the filter via the tui

- Update sending and receiving windivert handles to set matching flags to send and read only

- Update TamperWidget to change info block border color logic

- Update main to unify thread joining methods


## [0.5.0] - 2024-08-07

### Bug Fixes

- Fix packet manipulation module tests failing

- Squash merge fixing-packet-capture into develop


### Documentation

- Update CHANGELOG.md to contain 0.5.0 changes

- Update README.md to be up to date with the latest changes

- Update README.md to mention known issues


### Features

- Add configuration file support and packet manipulation settings serialization


### Refactors

- Refactor configuration management to use the users configuration directory

- Refactor CLI architecture to modularize cli components

- Squash merge cleanup-refactor into develop


### Removals

- Remove unused import in tamper.rs


### Revert

- Revert back to using standard threads instead of tokio async

even though tokio async looked promising as a way to get around the
WinDivert receive blocking call testing showed that it caused packages
getting skipped when sent at low amounts.


### Styling

- Style code using fmt

- Clean up code using clippy


### Updates

- Update duplicate packets method to use the count number as the duplicate count not the total count of outgoing packet copies

- Update project to 0.4.2


## [0.4.0] - 2024-08-05

### Bug Fixes

- Fix filter validation method not properly closing WinDivert handle

- Fix tests to use new Probability type


### Documentation

- Document packet tampering functionality in README.md


### Features

- Add async packet receiving and processing with Tokio integration

- Implement package tampering support and CLI commands


### Removals

- Remove unused extract_payload method from tamper.rs


### Styling

- Clean up comments and logs in capture logic

- Style capture.rs using fmt

- Clean up unused imports in capture file

- Style scripts using fmt

- Clean up tamper logic using clippy


### Updates

- Update CHANGELOG to contain 0.4.0 changes

- Update project version to 0.4.0

- Update Cargo.toml to remove unused tokio features


## [0.3.0] - 2024-08-03

### Bug Fixes

- Fix capture not clearing packets vector in between loop iterations

- Fix start_packet_processing method usign the wrong packets vector


### Documentation

- Update README.md with feature roadmap

- Update README.md to increment version number in installation example

- Update CHANGELOG.md with changes for v0.2.0


### Features

- Implement forced exit on double Ctrl + C for immediate termination

- Add filter port validation support

- Add graceful shutdown and improved loggin with Ctrl-C signal handling

- Refactor capture.rs to add a PacketProcessingState structs for easier state passing between methods


### Refactors

- Refactor CLI argument parsing with custom comamnd and field names


### Renames

- Update .idea meta files to rename project to fumble


### Styling

- Clean up scripts using fmt

- Clean up scripts using clippy


### Testing

- Add unit tests for bandwidth limiting functionality


### Updates

- Update project to 0.3.0

- Update main method to extract Ctrl-C handing logic to submethod

- Update bandwidth limiter to define the max buffer size using memory size and not package count to better handle high amounts of small packets

- Update Cargo.toml package version to 0.2.0


## [0.2.0] - 2024-08-02

### Bug Fixes

- Update github workflow action to try and fix WinDivert download


### Documentation

- Update README.md to mention new throttling feature

- Update README.md to mention new reorder and bandwidth limitin functionalities

- Update CHANGELOG.md with changes for v0.1.0


### Features

- Add throttling feature to temporarily hold or drop packets to simulate sporadic network throttling

- Add bandwidth limiting feature to control package transmission rate

- Implement package capture on a separate thread as to not block processing of delayed packets while there are no new packets

- Add packet reordering feature with CLI support


### Refactors

- Refactor main.rs to extract logic into methods and move them into the right files

- Refactor delay packet storage to use VecDeque for FIFO order


### Styling

- Style files using fmt


### Updates

- Update github workflow action to set WinDivert download source and to remove linux build

- Update github workflow action to handle windows builds


## [0.1.0] - 2024-07-31

### Documentation

- Add README.md

- Add LICENSE.md


### Features

- Add github workflow for automatic building and testing when pushing to main

- Implement automatic changelog generation using cliff config

- Implement improved logging with env_logger setup and detailed CLI help

- Add packet delay feature with CLI support for delay duration

- Add packet duplication feature with CLI support for count and probability

- Update capture.ts to add Clone implementation

- Add drop probability value validation

- Implement From trait for PacketData

- Add better logging

- Add better error handling for WinDivert initialization

- Add library interface

- Add CLI network filter specification support

- Add CLI support using Clap

- Add RustRover meta files

- Add dependencies and implement basic packet dropping functionality with logging


### Refactors

- Refactor project structure to modularize network and utility functions


### Renames

- Rename the project to fumble


### Testing

- Add Unit tests for capture and dropping logic