openc3-cosmos-cfdp 2.0.0 → 2.4.1

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +18 -0
  3. data/README.md +103 -55
  4. data/Rakefile +12 -0
  5. data/lib/cfdp.py +564 -0
  6. data/lib/cfdp.rb +68 -14
  7. data/lib/cfdp_api.py +302 -0
  8. data/lib/cfdp_api.rb +55 -9
  9. data/microservices/CFDP/Gemfile +18 -4
  10. data/microservices/CFDP/Gemfile.dev +22 -8
  11. data/microservices/CFDP/Gemfile.prod +18 -4
  12. data/microservices/CFDP/Rakefile +13 -2
  13. data/microservices/CFDP/app/controllers/application_controller.rb +2 -2
  14. data/microservices/CFDP/app/controllers/cfdp_controller.rb +62 -31
  15. data/microservices/CFDP/app/models/cfdp_checksum.rb +12 -4
  16. data/microservices/CFDP/app/models/cfdp_crc_checksum.rb +10 -2
  17. data/microservices/CFDP/app/models/cfdp_mib.rb +178 -35
  18. data/microservices/CFDP/app/models/cfdp_null_checksum.rb +10 -2
  19. data/microservices/CFDP/app/models/cfdp_pdu.rb +96 -20
  20. data/microservices/CFDP/app/models/cfdp_receive_transaction.rb +147 -11
  21. data/microservices/CFDP/app/models/cfdp_source_transaction.rb +438 -93
  22. data/microservices/CFDP/app/models/cfdp_topic.rb +2 -2
  23. data/microservices/CFDP/app/models/cfdp_transaction.rb +188 -4
  24. data/microservices/CFDP/app/models/cfdp_user.rb +236 -73
  25. data/microservices/CFDP/config/routes.rb +1 -0
  26. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_ack.rb +7 -6
  27. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_eof.rb +1 -2
  28. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_file_data.rb +2 -25
  29. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_finished.rb +8 -7
  30. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_keep_alive.rb +7 -6
  31. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_metadata.rb +1 -2
  32. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_nak.rb +7 -6
  33. data/microservices/CFDP/lib/cfdp_pdu/cfdp_pdu_prompt.rb +1 -2
  34. data/microservices/CFDP/spec/controllers/cfdp_controller_spec.rb +226 -1
  35. data/microservices/CFDP/spec/models/cfdp_checksum_spec.rb +239 -0
  36. data/microservices/CFDP/spec/models/cfdp_crc_checksum_spec.rb +16 -13
  37. data/microservices/CFDP/spec/models/cfdp_mib_spec.rb +909 -138
  38. data/microservices/CFDP/spec/models/cfdp_null_checksum_spec.rb +111 -0
  39. data/microservices/CFDP/spec/models/cfdp_pdu_file_data_spec.rb +48 -0
  40. data/microservices/CFDP/spec/models/cfdp_pdu_nak_spec.rb +2 -2
  41. data/microservices/CFDP/spec/models/cfdp_pdu_spec.rb +129 -0
  42. data/microservices/CFDP/spec/models/cfdp_receive_transaction_spec.rb +117 -10
  43. data/microservices/CFDP/spec/models/cfdp_source_transaction_spec.rb +382 -0
  44. data/microservices/CFDP/spec/models/cfdp_transaction_spec.rb +323 -5
  45. data/microservices/CFDP/spec/models/cfdp_user_spec.rb +553 -21
  46. data/microservices/CFDP/spec/requests/cfdp_spec.rb +92 -43
  47. data/microservices/CFDP/spec/spec_helper.rb +34 -3
  48. data/plugin.txt +55 -4
  49. data/public/store_img.png +0 -0
  50. data/pyproject.toml +70 -0
  51. data/targets/CFDPTEST/procedures/cfdp_test_suite.py +179 -0
  52. data/targets/CFDPTEST/procedures/cfdp_test_suite.rb +2 -2
  53. data/targets/CFDPTEST/procedures/interrupt_test.rb +31 -0
  54. metadata +25 -12
  55. data/LICENSE.txt +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79139b9f1a0842f2fda723326ecac01d214144f4e42f6fd98a807d684895dcc7
4
- data.tar.gz: 2c77f4cd5d8b237b6414277ff9ae43f52739bceac27243e59808346b6dea5e90
3
+ metadata.gz: 4a885fc317d2f4edaa156c1f3a44adce0a75f3ebc2673909f94d404011876361
4
+ data.tar.gz: 7824550d0da234cdb343886ad2d1e69e338d69b65b8cc31010e025578abf799b
5
5
  SHA512:
6
- metadata.gz: c7275036dc47dd2b54d60e69bcd3091a2e05fdccd677302463cd10cba10d3d7458ff859c7a5f9ad4466407582357b798890d72bfea7f3b0b6a6a70a6fde39b36
7
- data.tar.gz: 93e8b60efdf726c95b3e5bbd77c7d05297de180bdff4eadf532e80c5cbc0e2772d73ad659bc173d0903fe031cc81a01645b0d9bae889a42781800af37a055336
6
+ metadata.gz: fdbeb2b8e886d63646dba3854ce22b3ac042c16eec0580620570f9ffa04b88e78ad23c71e777183cd5852de71bafd6942bd58fbf5e060758454b6c266c43791e
7
+ data.tar.gz: b40bb71ccdc4e024a70702349e1b1e669d66eb2ff9ad5325381aa4605027df25d9927c93a8a814bd1fc8eca3164b844425c0bc23630f2366e406e60a482e8f69
data/LICENSE.md ADDED
@@ -0,0 +1,18 @@
1
+ # OpenC3 Evaluation and Educational License
2
+
3
+ Copyright 2026 OpenC3, Inc.
4
+
5
+ This work is licensed for evaluation and educational purposes only.
6
+ It may NOT be used for formal development, integration and test, operations
7
+ or any other commercial purpose without the purchase of a commercial license
8
+ from OpenC3, Inc.
9
+
10
+ The above copyright notice and this permission notice shall be included in all copies
11
+ or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
14
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
15
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
16
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
18
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -19,7 +19,7 @@ In particular be sure to set the desired protocol_version_number for each remote
19
19
 
20
20
  ## Usage in Scripts
21
21
 
22
- See: [cfdp.rb]()
22
+ See: [cfdp.rb](./lib/cfdp.rb)
23
23
 
24
24
  ```
25
25
  require 'cfdp'
@@ -101,12 +101,29 @@ indications = cfdp_directory_listing(remote_entity_id: 1, directory_name: "/file
101
101
 
102
102
  ```
103
103
 
104
+ ### `cfdp_put_dir`
105
+
106
+ This is a conveninence method that allows you to easily send multiple files. This operation is not part of the CFDP specification, so it is implemented by initiating a separate PUT request for each file in the given directory. It is used the same way as `cfdp_put()`, but you must pass the path to a directory instead of a file (e.g. `"/tmp"` instead of `"/tmp/foo.txt"`).
107
+
104
108
  ## MIB Configuration
105
109
 
106
- The CFDP Management Information Base (MIB) is configured by passing options to the CFDP microservice in plugin.txt.
107
- Note: This will always need to be configured for your application
110
+ The CFDP Management Information Base (MIB) is configured by passing options to the CFDP microservice in plugin.txt. See the local [plugin.txt](plugin.txt), for example:
111
+
112
+ MICROSERVICE CFDP CFDP
113
+ ...
114
+ # MIB Options Follow - Modify for your CFDP implementation!
115
+ OPTION root_path /DEFAULT/targets_modified/CFDP/tmp
116
+ OPTION bucket config
117
+
118
+ The MIB Options will always need to be configured for your CFDP implementation and mission. The [plugin.txt](plugin.txt) is an example which includes a test implementation. This can be edited on installation in COSMOS (click the plugin.txt tab) but can also be edited and built locally.
108
119
 
109
- Most settings are associated with the most recently mentioned source_entity_id or destination_entity_id.
120
+ Settings fall into three groups:
121
+
122
+ 1. **Global Configuration** - Engine-wide settings that have a single value for the whole CFDP microservice. They are not associated with any entity.
123
+ 2. **Local (Source) Entity Configuration** - Settings for this COSMOS engine's own entity, declared with `source_entity_id`. They govern indications, fault handling, telemetry reception, and transaction retention.
124
+ 3. **Remote (Destination) Entity Configuration** - Per-peer settings declared with `destination_entity_id`. They govern the CFDP protocol behavior used to communicate with each remote entity, both when sending files to it and when receiving files from it.
125
+
126
+ Every per-entity setting is applied to the most recently declared `source_entity_id` or `destination_entity_id`. Internally, the same set of fields exists on every entity (the parser does not prevent a "remote" setting from being placed on the source entity or vice versa), so the groupings below reflect which entity the engine actually reads each setting from at runtime.
110
127
 
111
128
  Minimum required settings:
112
129
 
@@ -115,51 +132,86 @@ Minimum required settings:
115
132
  - root_path must be defined
116
133
  - bucket should be set if the root_path is in a bucket. Otherwise the root path is assumed to be a mounted volume.
117
134
 
118
- ### Source Entity Configuration
119
-
120
- | Setting Name | Description | Allowed Values | Default Value |
121
- | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------- |
122
- | root_path | The path to send/receive files from | Valid directory | N/A - Must be given |
123
- | bucket | The bucket to send/receive files from | Valid bucket Name | nil - Serve from mounted volume |
124
- | source_entity_id | The entity id for this CFDP microservice | Any integer | N/A - Must be given |
125
- | tlm_info | A target_name, packet_name, and item_name to receive PDUs. Multiple tlm_info options can be given | COSMOS packet information | N/A - Must be given |
126
- | eof_sent_indication | Issue EOF-Sent.indication | true or false | true |
127
- | eof_recv_indication | Issue EOF-Recv.indication | true or false | true |
128
- | file_segment_recv_indication | Issue File-Segment-Recv.indication | true or false | true |
129
- | transaction_finished_indication | Issue Transaction-Finished.indication | true or false | true |
130
- | suspended_indication | Issue Suspended.indication | true or false | true |
131
- | resume_indication | Issue Resume.indication | true or false | true |
132
- | transaction_retain_seconds | Time to keep completed transactions in seconds. | Floating point value greater than 0 | 86400 |
133
-
134
- ### Remote Entity Configuration
135
-
136
- | destination_entity_id | Id of a remote entity to configure | Any integer | N/A - Must be given |
137
- | ----------------------------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
138
- | cmd_info | The target_name, packet_name, and item_name to send PDUs for the destination entity | COSMOS packet information | N/A - Must be given |
139
- | protocol_version_number | CFDP Version Number Needed at Destination | 0 or 1 | 1 - CFDP Blue Book Rev 5+ |
140
- | ack_timer_interval | Ack timeout in seconds | Any integer | 600 seconds |
141
- | nak_timer_interval | Nak timeout in seconds | Any integer | 600 seconds |
142
- | keep_alive_interval | Keep Alive Period in seconds | Any integer | 600 seconds |
143
- | check_interval | Interval to check for transaction complete in seconds | Any integer | 600 seconds |
144
- | maximum_file_segment_length | Maximum amount of file data in a segment in bytes | Any integer | 1024 bytes |
145
- | ack_timer_expiration_limit | Number of times to wait for the ack timeout before declaring a fault | Any integer | 1 |
146
- | transaction_inactivity_limit | Number of times to wait for the keep alive timeout before declaring the transaction inactive fault | Any integer | 1 |
147
- | check_limit | Number of times to check for transaction complete before declaring a fault | Any integer | 1 |
148
- | keep_alive_discrepancy_limit | Maximum difference between keep alive progress and source progress allowed before declaring a fault. | Any integer | 1024000 bytes |
149
- | immediate_nak_mode | Send NAKs as soon as something is noticed missing | true or false | true |
150
- | crcs_required | Does this entity want PDUs with CRCs | true or false | true |
151
- | enable_acks | Send Acks in Acknowledged mode | true or false | true |
152
- | enable_keep_alive | Send Keep Alives in Acknowledged mode | true or false | true |
153
- | enable_finished | Send Finished PDU if closure requested or acknowledged mode | true or false | true |
154
- | enable_eof_nak | Send A NAK in response to EOF | true of false | false |
155
- | default_transmission_mode | Default put mode | ACKNOWLEDGED or UNACKNOWLEDGED | UNACKNOWLEDGED |
156
- | entity_id_length | Size of entity ids in bytes minus one | 0 to 7 | 0 = 1 byte |
157
- | sequence_number_length | Size of sequence numbers in bytes minus one | 0 to 7 | 0 = 1 byte |
158
- | default_checksum_type | Checksum type number | 0 to 15 | 0 = Default CFDP checksum |
159
- | transaction_closure_requested | Default closure requested setting | CLOSURE_REQUESTED or CLOSURE_NOT_REQUESTED | CLOSURE_REQUESTED |
160
- | incomplete_file_disposition | What to do with an incomplete file | DISCARD or RETAIN | DISCARD |
161
- | fault_handler | Fault handler setting | (ACK_LIMIT_REACHED, KEEP_ALIVE_LIMIT_REACHED, INVALID_TRANSMISSION_MODE, FILESTORE_REJECTION, FILE_CHECKSUM_FAILURE, FILE_SIZE_ERROR, NAK_LIMIT_REACHED, INACTIVITY_DETECTED, INVALID_FILE_STRUCTURE, CHECK_LIMIT_REACHED, or UNSUPPORTED_CHECKSUM_TYPE) followed by (ISSUE_NOTICE_OF_CANCELLATION, ISSUE_NOTICE_OF_SUSPENSION, IGNORE_ERROR, or ABANDON_TRANSACTION) | See Code |
162
- | cmd_delay | Delay after sending each PDU in seconds. Defaults to no delay. | Floating point value greater than 0 | nil |
135
+ #### Using AWS S3 (or another S3 service) directly
136
+
137
+ The default `bucket config` works with the bucket store bundled with COSMOS. When COSMOS is configured to use S3 directly, `bucket` must be set to the actual S3 bucket name (e.g. `mycompany-cosmos-config`). `root_path` is still given as an absolute path; the leading `/` is stripped when building S3 object keys, so `/DEFAULT/targets_modified/CFDP/tmp` is stored under `DEFAULT/targets_modified/CFDP/tmp` in the bucket.
138
+
139
+ OPTION root_path /DEFAULT/targets_modified/CFDP/tmp
140
+ OPTION bucket mycompany-cosmos-config
141
+
142
+ ### Global Configuration
143
+
144
+ These settings are applied to the CFDP microservice via `OPTION <name> <value>` in the [plugin.txt](plugin.txt) and apply to the entire engine, independent of any entity. They can be specified anywhere in the options list.
145
+
146
+ | Setting Name | Description | Allowed Values | Default Value |
147
+ | ----------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------- |
148
+ | root_path | The path to send/receive files from (absolute path) | Valid directory | N/A - Must be given |
149
+ | bucket | The bucket to send/receive files from. Must be the actual S3 bucket name when using AWS S3 directly (see [Using AWS S3](#using-aws-s3-or-another-s3-service-directly)) | Valid bucket Name | nil - Serve from mounted volume |
150
+ | prevent_received_file_overwrite | Appends a timestamp to the file name for received files if the file already exists | true or false | true |
151
+ | allow_duplicate_transaction_ids | Allows receiving transactions with an ID that was previously used by a completed transaction by deleting the old transaction. Does not affect metadata received for a transaction that is still running, which is never treated as a conflict. | true or false | false |
152
+ | transaction_cleanup_frequency_hours | How often to check for and purge completed transactions from RAM and Redis. A check also runs at startup. How long a completed transaction is kept is set by the local entity's `transaction_retain_seconds`. | Any integer | 24 |
153
+
154
+ > Note: `plugin_test_mode` is a plugin.txt build `VARIABLE` (not a MIB `OPTION`). When set true it installs two dummy entities/targets that can send/receive transactions to each other for testing. It is consumed when the plugin is built, not by the CFDP microservice.
155
+
156
+ ### Local (Source) Entity Configuration
157
+
158
+ These settings are applied via `OPTION <name> <value>` after declaring the `source_entity_id`. They configure this COSMOS engine's own (local) entity. At runtime they are read from the local entity regardless of whether a transaction is being sent or received.
159
+
160
+ | Setting Name | Description | Allowed Values | Default Value |
161
+ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
162
+ | source_entity_id | The entity id for this CFDP microservice | Any integer | N/A - Must be given |
163
+ | tlm_info | A target_name, packet_name, and item_name to receive PDUs. Multiple tlm_info options can be given | COSMOS packet information | N/A - Must be given |
164
+ | eof_sent_indication | Issue EOF-Sent.indication | true or false | true |
165
+ | eof_recv_indication | Issue EOF-Recv.indication | true or false | true |
166
+ | file_segment_recv_indication | Issue File-Segment-Recv.indication | true or false | true |
167
+ | transaction_finished_indication | Issue Transaction-Finished.indication | true or false | true |
168
+ | suspended_indication | Issue Suspended.indication | true or false | true |
169
+ | resume_indication | Issue Resume.indication | true or false | true |
170
+ | crcs_required | When true, reject received PDUs without a CRC. A CRC that is present is always checked. | true or false | true |
171
+ | enable_eof_nak | Send a NAK in response to a received EOF. Only the local (receiving) entity's value is used. | true or false | false |
172
+ | transaction_closure_requested | Default closure requested setting used when this engine sends a file. Read from the local entity. | CLOSURE_REQUESTED or CLOSURE_NOT_REQUESTED | CLOSURE_REQUESTED |
173
+ | fault_handler | Fault handler setting. Only the local (source) entity's fault handlers are consulted. | (ACK_LIMIT_REACHED, KEEP_ALIVE_LIMIT_REACHED, INVALID_TRANSMISSION_MODE, FILESTORE_REJECTION, FILE_CHECKSUM_FAILURE, FILE_SIZE_ERROR, NAK_LIMIT_REACHED, INACTIVITY_DETECTED, INVALID_FILE_STRUCTURE, CHECK_LIMIT_REACHED, or UNSUPPORTED_CHECKSUM_TYPE) followed by (ISSUE_NOTICE_OF_CANCELLATION, ISSUE_NOTICE_OF_SUSPENSION, IGNORE_ERROR, or ABANDON_TRANSACTION) | See Code |
174
+ | transaction_retain_seconds | Time to keep completed (FINISHED, CANCELED or ABANDONED) transactions in seconds before they are purged. Purging happens at startup and every `transaction_cleanup_frequency_hours`, so a transaction can be kept up to that much longer. Cleanup also waits for running source threads and pending Finished acknowledgments. Transactions that never complete are not purged and must be canceled. Only the source entity's value is used. | Floating point value greater than 0 | 86400 |
175
+
176
+ ### Remote (Destination) Entity Configuration
177
+
178
+ These settings are applied via `OPTION <name> <value>` after declaring a `destination_entity_id`. They configure a remote peer (Bus or Payload Flight Software) and are read whenever this engine communicates with that peer - both when sending files to it and when receiving files from it.
179
+
180
+ | Setting Name | Description | Allowed Values | Default Value |
181
+ | ----------------------------- | --------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------------------- |
182
+ | destination_entity_id | Id of a remote entity to configure | Any integer | N/A - Must be given |
183
+ | cmd_info | The target_name, packet_name, and item_name to send PDUs for the destination entity | COSMOS packet information | N/A - Must be given |
184
+ | protocol_version_number | CFDP Version Number used for all PDUs sent to this entity | 0 or 1 | 1 - CFDP Blue Book Rev 5+ |
185
+ | crcs_required | Include a CRC on all PDUs sent to this entity | true or false | true |
186
+ | ack_timer_interval | Ack timeout in seconds | Any integer | 600 seconds |
187
+ | nak_timer_interval | Nak timeout in seconds | Any integer | 600 seconds |
188
+ | maximum_file_segment_length | Maximum amount of file data in a segment in bytes | Any integer | 1024 bytes |
189
+ | ack_timer_expiration_limit | Number of times to wait for the ack timeout before declaring a fault | Any integer | 1 |
190
+ | nak_timer_expiration_limit | Number of times to wait for the nak timeout before declaring a fault | Any integer | 1 |
191
+ | transaction_inactivity_limit | Number of times to wait for the keep alive timeout before declaring the transaction inactive fault | Any integer | 1 |
192
+ | check_limit | Number of times to check for transaction complete before declaring a fault | Any integer | 1 |
193
+ | keep_alive_discrepancy_limit | Maximum difference between keep alive progress and source progress allowed before declaring a fault. | Any integer | 1024000 bytes |
194
+ | enable_acks | Send Acks in Acknowledged mode | true or false | true |
195
+ | enable_keep_alive | Send Keep Alives in Acknowledged mode | true or false | true |
196
+ | enable_finished | Send Finished PDU if closure requested or acknowledged mode | true or false | true |
197
+ | default_transmission_mode | Default put mode | ACKNOWLEDGED or UNACKNOWLEDGED | UNACKNOWLEDGED |
198
+ | entity_id_length | Size of entity ids in bytes minus one, used for all PDUs sent to this entity | 0 to 7 | 0 = 1 byte |
199
+ | sequence_number_length | Size of sequence numbers in bytes minus one, used for all PDUs sent to this entity | 0 to 7 | 0 = 1 byte |
200
+ | default_checksum_type | Checksum type number | 0 to 15 | 0 = Default CFDP checksum |
201
+ | incomplete_file_disposition | What to do with an incomplete file | DISCARD or RETAIN | DISCARD |
202
+ | cmd_delay | Delay after sending each PDU in seconds. Defaults to no delay. | Floating point value greater than 0 | nil |
203
+
204
+ All PDUs sent to an entity, including the ACK, NAK, Keep Alive, and Finished PDUs sent back while receiving a file from it, use that entity's protocol_version_number, crcs_required, entity_id_length, and sequence_number_length. Received PDUs are decoded using the version, CRC flag, and lengths carried in each PDU header, so these settings do not need to match on the source entity. The one exception is `crcs_required` on the source entity, which rejects received PDUs that have no CRC (see Local (Source) Entity Configuration).
205
+
206
+ ### Settings That Apply to Both Entities
207
+
208
+ The following settings are read from the local (source) entity in one role and from a remote (destination) entity in the other, so for predictable behavior they should be configured consistently on both your `source_entity_id` and each `destination_entity_id`:
209
+
210
+ | Setting Name | Description | Allowed Values | Default Value | Read from local entity | Read from remote entity |
211
+ | ------------------- | ----------------------------------------------------- | -------------- | ------------- | --------------------------------------------------- | ---------------------------------------------------- |
212
+ | check_interval | Interval to check for transaction complete in seconds | Any integer | 600 seconds | When sending (waiting for closure after EOF) | When receiving (check timer for completion) |
213
+ | keep_alive_interval | Keep Alive Period in seconds | Any integer | 600 seconds | When resuming a transaction (inactivity timeout) | When receiving (keep alive / inactivity timers) |
214
+ | immediate_nak_mode | Send NAKs as soon as something is noticed missing | true or false | true | When receiving, on EOF-triggered NAK decisions | When receiving, on file-data-triggered NAK decisions |
163
215
 
164
216
  ## Known Limitations
165
217
 
@@ -179,14 +231,10 @@ Contributing is easy.
179
231
  3. Make your changes
180
232
  4. Submit a pull request
181
233
 
182
- YOU MUST AGREE TO OUR CONTRIBUTOR LICENSE AGREEMENT TO SUBMIT CODE TO THIS PROJECT: See [CONTRIBUTING.txt](CONTRIBUTING.txt)
183
-
184
- Most importantly:
185
-
186
- FOR ALL CONTRIBUTIONS TO THE OPENC3 COSMOS PROJECT AND ASSOCIATED PLUGINS, OPENC3, INC. MAINTAINS ALL RIGHTS TO ALL CODE CONTRIBUTED INCLUDING THE RIGHT TO LICENSE IT UNDER OTHER TERMS.
234
+ By contributing to this project, you agree to the following terms in our OpenC3 Builder License: [LICENSE.md](https://github.com/OpenC3/cosmos/blob/main/LICENSE.md)
187
235
 
188
236
  ## License
189
237
 
190
238
  OpenC3 Evaluation and Educational License
191
239
 
192
- See [LICENSE.txt](LICENSE.txt)
240
+ See [LICENSE.md](LICENSE.md)
data/Rakefile CHANGED
@@ -1,3 +1,15 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # Licensed for Evaluation and Educational Use
5
+ #
6
+ # This file may only be used commercially under the terms of a commercial license
7
+ # purchased from OpenC3, Inc.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
1
13
  PLUGIN_NAME = Dir['*.gemspec'][0].split('.')[0..-2].join('.')
2
14
 
3
15
  require 'fileutils'