openc3 7.2.1 → 7.4.0
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/Gemfile +1 -1
- data/Guardfile +0 -0
- data/LICENSE.md +0 -0
- data/README.md +0 -0
- data/Rakefile +0 -0
- data/bin/openc3cli +235 -6
- data/bin/pipinstall +5 -4
- data/bin/pipuninstall +5 -1
- data/bin/uvinstall +156 -0
- data/data/config/_array_params.yaml +0 -0
- data/data/config/_canvas_values.yaml +0 -0
- data/data/config/_graph_params.yaml +0 -0
- data/data/config/_id_items.yaml +0 -0
- data/data/config/_id_params.yaml +0 -0
- data/data/config/_interfaces.yaml +0 -0
- data/data/config/_items.yaml +0 -0
- data/data/config/_params.yaml +0 -0
- data/data/config/command.yaml +0 -0
- data/data/config/command_modifiers.yaml +2 -0
- data/data/config/command_telemetry.yaml +0 -0
- data/data/config/conversions.yaml +0 -0
- data/data/config/graph_settings.yaml +0 -0
- data/data/config/interface_modifiers.yaml +103 -1
- data/data/config/item_modifiers.yaml +2 -1
- data/data/config/microservice.yaml +9 -2
- data/data/config/param_item_modifiers.yaml +0 -0
- data/data/config/parameter_modifiers.yaml +0 -0
- data/data/config/plugins.yaml +0 -0
- data/data/config/processors.yaml +0 -0
- data/data/config/protocols.yaml +0 -0
- data/data/config/screen.yaml +2 -1
- data/data/config/settings.yaml +0 -0
- data/data/config/table_manager.yaml +0 -0
- data/data/config/table_parameter_modifiers.yaml +0 -0
- data/data/config/target.yaml +21 -0
- data/data/config/target_config.yaml +0 -0
- data/data/config/telemetry.yaml +0 -0
- data/data/config/telemetry_modifiers.yaml +2 -0
- data/data/config/tool.yaml +3 -1
- data/data/config/unknown.yaml +0 -0
- data/data/config/widgets.yaml +22 -3
- data/data/xtce_schemas/SpaceSystem_20180204.xsd +5918 -0
- data/data/xtce_schemas/xml.xsd +116 -0
- data/ext/openc3/ext/array/array.c +0 -0
- data/ext/openc3/ext/array/extconf.rb +0 -0
- data/ext/openc3/ext/buffered_file/buffered_file.c +0 -0
- data/ext/openc3/ext/buffered_file/extconf.rb +0 -0
- data/ext/openc3/ext/burst_protocol/burst_protocol.c +6 -0
- data/ext/openc3/ext/burst_protocol/extconf.rb +0 -0
- data/ext/openc3/ext/config_parser/config_parser.c +0 -0
- data/ext/openc3/ext/config_parser/extconf.rb +0 -0
- data/ext/openc3/ext/crc/crc.c +0 -0
- data/ext/openc3/ext/crc/extconf.rb +0 -0
- data/ext/openc3/ext/openc3_io/extconf.rb +0 -0
- data/ext/openc3/ext/openc3_io/openc3_io.c +0 -0
- data/ext/openc3/ext/packet/extconf.rb +0 -0
- data/ext/openc3/ext/packet/packet.c +0 -0
- data/ext/openc3/ext/platform/extconf.rb +0 -0
- data/ext/openc3/ext/platform/platform.c +4 -1
- data/ext/openc3/ext/polynomial_conversion/extconf.rb +0 -0
- data/ext/openc3/ext/polynomial_conversion/polynomial_conversion.c +0 -0
- data/ext/openc3/ext/string/extconf.rb +0 -0
- data/ext/openc3/ext/string/string.c +0 -0
- data/ext/openc3/ext/structure/structure.c +49 -17
- data/ext/openc3/ext/tabbed_plots_config/extconf.rb +0 -0
- data/ext/openc3/ext/tabbed_plots_config/tabbed_plots_config.c +0 -0
- data/ext/openc3/ext/telemetry/extconf.rb +0 -0
- data/ext/openc3/ext/telemetry/telemetry.c +1 -1
- data/lib/cosmos.rb +0 -0
- data/lib/cosmosc2.rb +0 -0
- data/lib/openc3/accessors/accessor.rb +0 -0
- data/lib/openc3/accessors/binary_accessor.rb +63 -9
- data/lib/openc3/accessors/cbor_accessor.rb +0 -0
- data/lib/openc3/accessors/form_accessor.rb +0 -0
- data/lib/openc3/accessors/html_accessor.rb +0 -0
- data/lib/openc3/accessors/http_accessor.rb +0 -0
- data/lib/openc3/accessors/json_accessor.rb +0 -0
- data/lib/openc3/accessors/template_accessor.rb +2 -2
- data/lib/openc3/accessors/xml_accessor.rb +0 -0
- data/lib/openc3/accessors.rb +0 -0
- data/lib/openc3/api/README.md +0 -0
- data/lib/openc3/api/api.rb +0 -0
- data/lib/openc3/api/authorized_api.rb +0 -0
- data/lib/openc3/api/calendar_api.rb +0 -0
- data/lib/openc3/api/cmd_api.rb +1 -1
- data/lib/openc3/api/config_api.rb +0 -0
- data/lib/openc3/api/interface_api.rb +2 -2
- data/lib/openc3/api/limits_api.rb +27 -13
- data/lib/openc3/api/metrics_api.rb +1 -1
- data/lib/openc3/api/offline_access_api.rb +1 -1
- data/lib/openc3/api/router_api.rb +3 -3
- data/lib/openc3/api/settings_api.rb +22 -18
- data/lib/openc3/api/stash_api.rb +1 -1
- data/lib/openc3/api/target_api.rb +0 -0
- data/lib/openc3/api/tlm_api.rb +5 -4
- data/lib/openc3/bridge/bridge.rb +0 -0
- data/lib/openc3/bridge/bridge_config.rb +0 -0
- data/lib/openc3/bridge/bridge_interface_thread.rb +0 -0
- data/lib/openc3/bridge/bridge_router_thread.rb +0 -0
- data/lib/openc3/ccsds/ccsds_packet.rb +0 -0
- data/lib/openc3/ccsds/ccsds_parser.rb +0 -0
- data/lib/openc3/config/config_parser.rb +78 -17
- data/lib/openc3/config/meta_config_parser.rb +0 -0
- data/lib/openc3/conversions/bit_reverse_conversion.rb +0 -0
- data/lib/openc3/conversions/conversion.rb +0 -0
- data/lib/openc3/conversions/generic_conversion.rb +0 -0
- data/lib/openc3/conversions/ip_read_conversion.rb +0 -0
- data/lib/openc3/conversions/ip_write_conversion.rb +0 -0
- data/lib/openc3/conversions/object_read_conversion.rb +0 -0
- data/lib/openc3/conversions/object_write_conversion.rb +0 -0
- data/lib/openc3/conversions/packet_time_formatted_conversion.rb +0 -0
- data/lib/openc3/conversions/packet_time_seconds_conversion.rb +0 -0
- data/lib/openc3/conversions/polynomial_conversion.rb +0 -0
- data/lib/openc3/conversions/processor_conversion.rb +0 -0
- data/lib/openc3/conversions/received_count_conversion.rb +0 -0
- data/lib/openc3/conversions/received_time_formatted_conversion.rb +0 -0
- data/lib/openc3/conversions/received_time_seconds_conversion.rb +0 -0
- data/lib/openc3/conversions/segmented_polynomial_conversion.rb +0 -0
- data/lib/openc3/conversions/unix_time_conversion.rb +0 -0
- data/lib/openc3/conversions/unix_time_formatted_conversion.rb +0 -0
- data/lib/openc3/conversions/unix_time_seconds_conversion.rb +0 -0
- data/lib/openc3/conversions.rb +0 -0
- data/lib/openc3/core_ext/array.rb +0 -0
- data/lib/openc3/core_ext/binding.rb +0 -0
- data/lib/openc3/core_ext/class.rb +0 -0
- data/lib/openc3/core_ext/exception.rb +0 -0
- data/lib/openc3/core_ext/faraday.rb +0 -0
- data/lib/openc3/core_ext/file.rb +0 -0
- data/lib/openc3/core_ext/io.rb +0 -0
- data/lib/openc3/core_ext/kernel.rb +0 -0
- data/lib/openc3/core_ext/math.rb +0 -0
- data/lib/openc3/core_ext/matrix.rb +0 -0
- data/lib/openc3/core_ext/objectspace.rb +0 -0
- data/lib/openc3/core_ext/openc3_io.rb +0 -0
- data/lib/openc3/core_ext/range.rb +0 -0
- data/lib/openc3/core_ext/socket.rb +0 -0
- data/lib/openc3/core_ext/string.rb +0 -0
- data/lib/openc3/core_ext/stringio.rb +0 -0
- data/lib/openc3/core_ext/tempfile.rb +0 -0
- data/lib/openc3/core_ext/time.rb +0 -0
- data/lib/openc3/core_ext.rb +0 -0
- data/lib/openc3/ext/.keep +0 -0
- data/lib/openc3/interfaces/file_interface.rb +0 -0
- data/lib/openc3/interfaces/http_client_interface.rb +1 -1
- data/lib/openc3/interfaces/http_server_interface.rb +0 -0
- data/lib/openc3/interfaces/interface.rb +5 -4
- data/lib/openc3/interfaces/mqtt_interface.rb +0 -0
- data/lib/openc3/interfaces/mqtt_stream_interface.rb +2 -0
- data/lib/openc3/interfaces/protocols/burst_protocol.rb +27 -0
- data/lib/openc3/interfaces/protocols/cmd_response_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/cobs_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/crc_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/fixed_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/length_protocol.rb +7 -0
- data/lib/openc3/interfaces/protocols/preidentified_protocol.rb +7 -0
- data/lib/openc3/interfaces/protocols/protocol.rb +4 -4
- data/lib/openc3/interfaces/protocols/slip_protocol.rb +0 -0
- data/lib/openc3/interfaces/protocols/template_protocol.rb +2 -2
- data/lib/openc3/interfaces/protocols/terminated_protocol.rb +0 -0
- data/lib/openc3/interfaces/serial_interface.rb +2 -0
- data/lib/openc3/interfaces/simulated_target_interface.rb +0 -0
- data/lib/openc3/interfaces/stream_interface.rb +0 -0
- data/lib/openc3/interfaces/tcpip_client_interface.rb +2 -0
- data/lib/openc3/interfaces/tcpip_server_interface.rb +0 -0
- data/lib/openc3/interfaces/udp_interface.rb +16 -5
- data/lib/openc3/interfaces.rb +0 -0
- data/lib/openc3/io/buffered_file.rb +0 -0
- data/lib/openc3/io/io_multiplexer.rb +0 -0
- data/lib/openc3/io/json_api.rb +3 -2
- data/lib/openc3/io/json_api_object.rb +0 -0
- data/lib/openc3/io/json_drb.rb +44 -12
- data/lib/openc3/io/json_drb_object.rb +0 -0
- data/lib/openc3/io/json_drb_rack.rb +0 -0
- data/lib/openc3/io/json_rpc.rb +0 -2
- data/lib/openc3/io/posix_serial_driver.rb +0 -0
- data/lib/openc3/io/serial_driver.rb +0 -0
- data/lib/openc3/io/stderr.rb +0 -0
- data/lib/openc3/io/stdout.rb +0 -0
- data/lib/openc3/io/udp_sockets.rb +38 -8
- data/lib/openc3/io/win32_serial_driver.rb +1 -0
- data/lib/openc3/logs/buffered_packet_log_reader.rb +0 -0
- data/lib/openc3/logs/buffered_packet_log_writer.rb +0 -0
- data/lib/openc3/logs/log_writer.rb +43 -7
- data/lib/openc3/logs/packet_log_constants.rb +0 -0
- data/lib/openc3/logs/packet_log_reader.rb +23 -2
- data/lib/openc3/logs/packet_log_writer.rb +6 -2
- data/lib/openc3/logs/stream_log.rb +1 -1
- data/lib/openc3/logs/stream_log_pair.rb +0 -0
- data/lib/openc3/logs/text_log_writer.rb +0 -0
- data/lib/openc3/logs.rb +0 -0
- data/lib/openc3/microservices/cleanup_microservice.rb +0 -0
- data/lib/openc3/microservices/decom_common.rb +0 -0
- data/lib/openc3/microservices/decom_microservice.rb +0 -0
- data/lib/openc3/microservices/interface_decom_common.rb +2 -1
- data/lib/openc3/microservices/interface_microservice.rb +73 -26
- data/lib/openc3/microservices/log_microservice.rb +0 -0
- data/lib/openc3/microservices/microservice.rb +3 -3
- data/lib/openc3/microservices/multi_microservice.rb +1 -1
- data/lib/openc3/microservices/periodic_microservice.rb +2 -2
- data/lib/openc3/microservices/plugin_microservice.rb +0 -0
- data/lib/openc3/microservices/queue_microservice.rb +0 -0
- data/lib/openc3/microservices/router_microservice.rb +0 -0
- data/lib/openc3/microservices/scope_cleanup_microservice.rb +0 -0
- data/lib/openc3/microservices/text_log_microservice.rb +0 -0
- data/lib/openc3/migrations/20220420190000_log_stuff.rb +0 -0
- data/lib/openc3/migrations/20221202214600_add_target_names.rb +0 -0
- data/lib/openc3/migrations/20221210174900_convert_to_multi.rb +0 -0
- data/lib/openc3/migrations/20230915000002_no_scope_log_messages.rb +0 -0
- data/lib/openc3/migrations/20231022000000_tlm_viewer_config.rb +0 -0
- data/lib/openc3/migrations/20241208080000_no_critical_cmd.rb +0 -0
- data/lib/openc3/migrations/20241208080001_no_trigger_group.rb +0 -0
- data/lib/openc3/migrations/20250108060000_news_feed.rb +0 -0
- data/lib/openc3/migrations/20250402000000_periodic_only_default.rb +0 -0
- data/lib/openc3/migrations/20260203000000_remove_store_id.rb +0 -0
- data/lib/openc3/migrations/20260204000000_remove_decom_reducer.rb +0 -0
- data/lib/openc3/migrations/20260701000000_updated_at_to_int.rb +0 -0
- data/lib/openc3/migrations/20260704000000_default_bridge.rb +38 -0
- data/lib/openc3/migrations/20260731000000_system_health_json.rb +52 -0
- data/lib/openc3/models/activity_model.rb +0 -0
- data/lib/openc3/models/auth_model.rb +35 -7
- data/lib/openc3/models/bridge_model.rb +133 -0
- data/lib/openc3/models/config_keyword_model.rb +63 -0
- data/lib/openc3/models/cvt_model.rb +5 -5
- data/lib/openc3/models/db_sharded_model.rb +0 -0
- data/lib/openc3/models/environment_model.rb +0 -0
- data/lib/openc3/models/gem_model.rb +13 -10
- data/lib/openc3/models/host_interface_microservice_model.rb +114 -0
- data/lib/openc3/models/info_model.rb +0 -0
- data/lib/openc3/models/interface_model.rb +179 -20
- data/lib/openc3/models/interface_status_model.rb +0 -0
- data/lib/openc3/models/metadata_model.rb +0 -0
- data/lib/openc3/models/metric_model.rb +0 -0
- data/lib/openc3/models/microservice_model.rb +26 -18
- data/lib/openc3/models/microservice_status_model.rb +0 -0
- data/lib/openc3/models/migration_model.rb +0 -0
- data/lib/openc3/models/model.rb +0 -0
- data/lib/openc3/models/news_model.rb +0 -0
- data/lib/openc3/models/note_model.rb +0 -0
- data/lib/openc3/models/offline_access_model.rb +0 -0
- data/lib/openc3/models/ping_model.rb +0 -0
- data/lib/openc3/models/plugin_model.rb +211 -50
- data/lib/openc3/models/plugin_store_model.rb +0 -0
- data/lib/openc3/models/process_status_model.rb +0 -0
- data/lib/openc3/models/python_package_model.rb +211 -15
- data/lib/openc3/models/queue_model.rb +0 -0
- data/lib/openc3/models/reaction_model.rb +0 -0
- data/lib/openc3/models/reingest_job_model.rb +0 -0
- data/lib/openc3/models/router_model.rb +0 -0
- data/lib/openc3/models/router_status_model.rb +0 -0
- data/lib/openc3/models/scope_model.rb +85 -56
- data/lib/openc3/models/script_engine_model.rb +0 -0
- data/lib/openc3/models/script_status_model.rb +0 -0
- data/lib/openc3/models/secret_model.rb +0 -0
- data/lib/openc3/models/setting_model.rb +546 -3
- data/lib/openc3/models/sorted_model.rb +0 -0
- data/lib/openc3/models/stash_model.rb +0 -0
- data/lib/openc3/models/target_model.rb +210 -31
- data/lib/openc3/models/timeline_model.rb +0 -0
- data/lib/openc3/models/tool_config_model.rb +0 -0
- data/lib/openc3/models/tool_model.rb +34 -20
- data/lib/openc3/models/trigger_group_model.rb +0 -0
- data/lib/openc3/models/trigger_model.rb +20 -0
- data/lib/openc3/models/widget_model.rb +0 -0
- data/lib/openc3/operators/microservice_operator.rb +79 -8
- data/lib/openc3/operators/operator.rb +4 -4
- data/lib/openc3/packets/binary_accessor.rb +0 -0
- data/lib/openc3/packets/command_validator.rb +0 -0
- data/lib/openc3/packets/commands.rb +4 -4
- data/lib/openc3/packets/json_packet.rb +0 -0
- data/lib/openc3/packets/limits.rb +15 -7
- data/lib/openc3/packets/limits_response.rb +0 -0
- data/lib/openc3/packets/packet.rb +5 -1
- data/lib/openc3/packets/packet_config.rb +0 -0
- data/lib/openc3/packets/packet_item.rb +0 -0
- data/lib/openc3/packets/packet_item_limits.rb +0 -0
- data/lib/openc3/packets/parsers/format_string_parser.rb +0 -0
- data/lib/openc3/packets/parsers/limits_parser.rb +0 -0
- data/lib/openc3/packets/parsers/limits_response_parser.rb +0 -0
- data/lib/openc3/packets/parsers/packet_item_parser.rb +0 -0
- data/lib/openc3/packets/parsers/packet_parser.rb +0 -0
- data/lib/openc3/packets/parsers/processor_parser.rb +0 -0
- data/lib/openc3/packets/parsers/state_parser.rb +1 -1
- data/lib/openc3/packets/parsers/xtce_converter.rb +183 -103
- data/lib/openc3/packets/parsers/xtce_parser.rb +71 -23
- data/lib/openc3/packets/structure.rb +9 -3
- data/lib/openc3/packets/structure_item.rb +0 -0
- data/lib/openc3/packets/telemetry.rb +3 -3
- data/lib/openc3/processors/processor.rb +2 -0
- data/lib/openc3/processors/statistics_processor.rb +0 -0
- data/lib/openc3/processors/watermark_processor.rb +0 -0
- data/lib/openc3/processors.rb +0 -0
- data/lib/openc3/script/api_shared.rb +0 -0
- data/lib/openc3/script/autonomic.rb +12 -12
- data/lib/openc3/script/calendar.rb +0 -0
- data/lib/openc3/script/commands.rb +1 -1
- data/lib/openc3/script/critical_cmd.rb +0 -0
- data/lib/openc3/script/exceptions.rb +0 -0
- data/lib/openc3/script/extract.rb +20 -25
- data/lib/openc3/script/limits.rb +0 -0
- data/lib/openc3/script/metadata.rb +0 -0
- data/lib/openc3/script/packages.rb +0 -0
- data/lib/openc3/script/plugins.rb +0 -0
- data/lib/openc3/script/queue.rb +0 -0
- data/lib/openc3/script/screen.rb +0 -0
- data/lib/openc3/script/script.rb +2 -2
- data/lib/openc3/script/script_runner.rb +0 -0
- data/lib/openc3/script/storage.rb +4 -4
- data/lib/openc3/script/suite.rb +0 -0
- data/lib/openc3/script/suite_results.rb +0 -0
- data/lib/openc3/script/suite_runner.rb +26 -0
- data/lib/openc3/script/tables.rb +0 -0
- data/lib/openc3/script/telemetry.rb +9 -3
- data/lib/openc3/script/web_socket_api.rb +247 -134
- data/lib/openc3/script.rb +0 -0
- data/lib/openc3/script_engines/script_engine.rb +0 -0
- data/lib/openc3/streams/mqtt_stream.rb +0 -0
- data/lib/openc3/streams/serial_stream.rb +0 -0
- data/lib/openc3/streams/stream.rb +0 -0
- data/lib/openc3/streams/tcpip_client_stream.rb +0 -0
- data/lib/openc3/streams/tcpip_socket_stream.rb +0 -0
- data/lib/openc3/streams/web_socket_client_stream.rb +0 -0
- data/lib/openc3/subpacketizers/subpacketizer.rb +0 -0
- data/lib/openc3/system/system.rb +0 -0
- data/lib/openc3/system/target.rb +0 -0
- data/lib/openc3/system.rb +0 -0
- data/lib/openc3/tools/cmd_tlm_server/api.rb +0 -0
- data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +7 -0
- data/lib/openc3/tools/table_manager/table.rb +0 -0
- data/lib/openc3/tools/table_manager/table_config.rb +0 -0
- data/lib/openc3/tools/table_manager/table_item.rb +0 -0
- data/lib/openc3/tools/table_manager/table_item_parser.rb +0 -0
- data/lib/openc3/tools/table_manager/table_manager_core.rb +0 -0
- data/lib/openc3/tools/table_manager/table_parser.rb +0 -0
- data/lib/openc3/tools/test_runner/test.rb +0 -0
- data/lib/openc3/top_level.rb +1 -1
- data/lib/openc3/topics/autonomic_topic.rb +0 -0
- data/lib/openc3/topics/calendar_topic.rb +0 -0
- data/lib/openc3/topics/command_decom_topic.rb +16 -1
- data/lib/openc3/topics/command_topic.rb +0 -0
- data/lib/openc3/topics/config_topic.rb +0 -0
- data/lib/openc3/topics/decom_interface_topic.rb +2 -1
- data/lib/openc3/topics/interface_topic.rb +8 -2
- data/lib/openc3/topics/limits_event_topic.rb +1 -1
- data/lib/openc3/topics/notebook_topic.rb +0 -0
- data/lib/openc3/topics/queue_topic.rb +0 -0
- data/lib/openc3/topics/router_topic.rb +6 -1
- data/lib/openc3/topics/system_events_topic.rb +0 -0
- data/lib/openc3/topics/telemetry_decom_topic.rb +0 -0
- data/lib/openc3/topics/telemetry_topic.rb +0 -0
- data/lib/openc3/topics/timeline_topic.rb +0 -0
- data/lib/openc3/topics/topic.rb +0 -0
- data/lib/openc3/utilities/authentication.rb +4 -4
- data/lib/openc3/utilities/authorization.rb +0 -0
- data/lib/openc3/utilities/aws_bucket.rb +12 -4
- data/lib/openc3/utilities/bucket.rb +1 -1
- data/lib/openc3/utilities/bucket_file_cache.rb +55 -22
- data/lib/openc3/utilities/bucket_require.rb +0 -0
- data/lib/openc3/utilities/bucket_utilities.rb +3 -4
- data/lib/openc3/utilities/cli_generator.rb +0 -0
- data/lib/openc3/utilities/cmd_log.rb +0 -0
- data/lib/openc3/utilities/config_overlay.rb +75 -0
- data/lib/openc3/utilities/cosmos_rails_formatter.rb +0 -0
- data/lib/openc3/utilities/crc.rb +59 -32
- data/lib/openc3/utilities/csv.rb +5 -5
- data/lib/openc3/utilities/ctrf.rb +0 -0
- data/lib/openc3/utilities/env_helper.rb +0 -0
- data/lib/openc3/utilities/local_bucket.rb +0 -0
- data/lib/openc3/utilities/local_mode.rb +36 -7
- data/lib/openc3/utilities/logger.rb +30 -8
- data/lib/openc3/utilities/message_log.rb +0 -0
- data/lib/openc3/utilities/metric.rb +0 -0
- data/lib/openc3/utilities/migration.rb +0 -0
- data/lib/openc3/utilities/open_telemetry.rb +0 -0
- data/lib/openc3/utilities/process_manager.rb +0 -0
- data/lib/openc3/utilities/pypi_url.rb +0 -0
- data/lib/openc3/utilities/python_proxy.rb +0 -0
- data/lib/openc3/utilities/python_venv.rb +135 -0
- data/lib/openc3/utilities/quaternion.rb +0 -0
- data/lib/openc3/utilities/questdb_client.rb +0 -0
- data/lib/openc3/utilities/redis_secrets.rb +0 -0
- data/lib/openc3/utilities/reingest_job.rb +0 -0
- data/lib/openc3/utilities/ruby_lex_utils.rb +5 -1
- data/lib/openc3/utilities/rubygems_url.rb +39 -0
- data/lib/openc3/utilities/running_script.rb +119 -95
- data/lib/openc3/utilities/s3_autoload.rb +5 -5
- data/lib/openc3/utilities/script.rb +52 -12
- data/lib/openc3/utilities/secrets.rb +48 -3
- data/lib/openc3/utilities/simulated_target.rb +0 -0
- data/lib/openc3/utilities/sleeper.rb +0 -0
- data/lib/openc3/utilities/store.rb +0 -0
- data/lib/openc3/utilities/store_autoload.rb +2 -2
- data/lib/openc3/utilities/store_queued.rb +0 -0
- data/lib/openc3/utilities/target_file.rb +18 -1
- data/lib/openc3/utilities/thread_manager.rb +0 -0
- data/lib/openc3/utilities/throttle.rb +0 -0
- data/lib/openc3/utilities/zip.rb +0 -0
- data/lib/openc3/utilities.rb +0 -0
- data/lib/openc3/version.rb +6 -6
- data/lib/openc3/win32/excel.rb +0 -0
- data/lib/openc3/win32/win32.rb +0 -0
- data/lib/openc3/win32/win32_main.rb +0 -0
- data/lib/openc3.rb +2 -2
- data/tasks/gemfile_stats.rake +0 -0
- data/tasks/spec.rake +0 -0
- data/templates/command_validator/command_validator.py +0 -0
- data/templates/command_validator/command_validator.rb +0 -0
- data/templates/conversion/conversion.py +0 -0
- data/templates/conversion/conversion.rb +0 -0
- data/templates/limits_response/response.py +0 -0
- data/templates/limits_response/response.rb +0 -0
- data/templates/microservice/microservices/TEMPLATE/microservice.py +0 -0
- data/templates/microservice/microservices/TEMPLATE/microservice.rb +0 -0
- data/templates/plugin/.gitignore +0 -0
- data/templates/plugin/LICENSE.md +0 -0
- data/templates/plugin/README.md +0 -0
- data/templates/plugin/Rakefile +0 -0
- data/templates/plugin/plugin.gemspec +1 -1
- data/templates/plugin/plugin.txt +0 -0
- data/templates/processor/processor.py +1 -1
- data/templates/processor/processor.rb +0 -0
- data/templates/target/targets/TARGET/cmd_tlm/cmd.txt +0 -0
- data/templates/target/targets/TARGET/cmd_tlm/tlm.txt +0 -0
- data/templates/target/targets/TARGET/lib/target.py +0 -0
- data/templates/target/targets/TARGET/lib/target.rb +0 -0
- data/templates/target/targets/TARGET/procedures/procedure.py +0 -0
- data/templates/target/targets/TARGET/procedures/procedure.rb +0 -0
- data/templates/target/targets/TARGET/public/README.txt +0 -0
- data/templates/target/targets/TARGET/screens/status.txt +0 -0
- data/templates/target/targets/TARGET/target.txt +0 -0
- data/templates/tool_angular/.editorconfig +0 -0
- data/templates/tool_angular/.gitignore +0 -0
- data/templates/tool_angular/.vscode/extensions.json +0 -0
- data/templates/tool_angular/.vscode/launch.json +0 -0
- data/templates/tool_angular/.vscode/tasks.json +0 -0
- data/templates/tool_angular/angular.json +0 -0
- data/templates/tool_angular/extra-webpack.config.js +0 -0
- data/templates/tool_angular/package.json +2 -2
- data/templates/tool_angular/src/app/app-routing.module.ts +0 -0
- data/templates/tool_angular/src/app/app.component.html +0 -0
- data/templates/tool_angular/src/app/app.component.scss +0 -0
- data/templates/tool_angular/src/app/app.component.spec.ts +0 -0
- data/templates/tool_angular/src/app/app.component.ts +0 -0
- data/templates/tool_angular/src/app/app.module.ts +0 -0
- data/templates/tool_angular/src/app/custom-overlay-container.ts +0 -0
- data/templates/tool_angular/src/app/empty-route/empty-route.component.ts +0 -0
- data/templates/tool_angular/src/app/openc3-api.d.ts +0 -0
- data/templates/tool_angular/src/assets/.gitkeep +0 -0
- data/templates/tool_angular/src/environments/environment.prod.ts +0 -0
- data/templates/tool_angular/src/environments/environment.ts +0 -0
- data/templates/tool_angular/src/favicon.ico +0 -0
- data/templates/tool_angular/src/index.html +0 -0
- data/templates/tool_angular/src/main.single-spa.ts +0 -0
- data/templates/tool_angular/src/single-spa/asset-url.ts +0 -0
- data/templates/tool_angular/src/single-spa/single-spa-props.ts +0 -0
- data/templates/tool_angular/src/styles.scss +0 -0
- data/templates/tool_angular/tsconfig.app.json +0 -0
- data/templates/tool_angular/tsconfig.json +0 -0
- data/templates/tool_angular/tsconfig.spec.json +0 -0
- data/templates/tool_react/.eslintrc +0 -0
- data/templates/tool_react/.gitignore +0 -0
- data/templates/tool_react/.prettierignore +0 -0
- data/templates/tool_react/babel.config.json +0 -0
- data/templates/tool_react/jest.config.js +0 -0
- data/templates/tool_react/package.json +1 -1
- data/templates/tool_react/src/openc3-tool_name.js +0 -0
- data/templates/tool_react/src/root.component.js +0 -0
- data/templates/tool_react/src/root.component.test.js +0 -0
- data/templates/tool_react/webpack.config.js +0 -0
- data/templates/tool_svelte/.gitignore +0 -0
- data/templates/tool_svelte/.prettierignore +0 -0
- data/templates/tool_svelte/.prettierrc.js +0 -0
- data/templates/tool_svelte/babel.config.js +0 -0
- data/templates/tool_svelte/build/smui.css +0 -0
- data/templates/tool_svelte/jest.config.js +0 -0
- data/templates/tool_svelte/package.json +1 -1
- data/templates/tool_svelte/rollup.config.js +0 -0
- data/templates/tool_svelte/src/App.svelte +0 -0
- data/templates/tool_svelte/src/App.test.js +0 -0
- data/templates/tool_svelte/src/theme/_smui-theme.scss +0 -0
- data/templates/tool_svelte/src/tool_name.js +0 -0
- data/templates/tool_vue/.env.standalone +0 -0
- data/templates/tool_vue/.gitignore +0 -0
- data/templates/tool_vue/.prettierrc.cjs +0 -0
- data/templates/tool_vue/eslint.config.mjs +0 -0
- data/templates/tool_vue/jsconfig.json +0 -0
- data/templates/tool_vue/package.json +3 -3
- data/templates/tool_vue/src/App.vue +0 -0
- data/templates/tool_vue/src/main.js +0 -0
- data/templates/tool_vue/src/router.js +0 -0
- data/templates/tool_vue/src/tools/tool_name/tool_name.vue +0 -0
- data/templates/tool_vue/vite.config.js +1 -1
- data/templates/widget/.prettierrc.cjs +0 -0
- data/templates/widget/LICENSE.md +0 -0
- data/templates/widget/Rakefile +0 -0
- data/templates/widget/package.json +2 -2
- data/templates/widget/src/Widget.vue +0 -0
- data/templates/widget/vite.config.js +0 -0
- metadata +40 -11
- data/templates/tool_vue/.nycrc +0 -3
- data/templates/widget/.nycrc +0 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<?xml version='1.0'?>
|
|
2
|
+
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
|
|
3
|
+
|
|
4
|
+
<xs:annotation>
|
|
5
|
+
<xs:documentation>
|
|
6
|
+
See http://www.w3.org/XML/1998/namespace.html and
|
|
7
|
+
http://www.w3.org/TR/REC-xml for information about this namespace.
|
|
8
|
+
|
|
9
|
+
This schema document describes the XML namespace, in a form
|
|
10
|
+
suitable for import by other schema documents.
|
|
11
|
+
|
|
12
|
+
Note that local names in this namespace are intended to be defined
|
|
13
|
+
only by the World Wide Web Consortium or its subgroups. The
|
|
14
|
+
following names are currently defined in this namespace and should
|
|
15
|
+
not be used with conflicting semantics by any Working Group,
|
|
16
|
+
specification, or document instance:
|
|
17
|
+
|
|
18
|
+
base (as an attribute name): denotes an attribute whose value
|
|
19
|
+
provides a URI to be used as the base for interpreting any
|
|
20
|
+
relative URIs in the scope of the element on which it
|
|
21
|
+
appears; its value is inherited. This name is reserved
|
|
22
|
+
by virtue of its definition in the XML Base specification.
|
|
23
|
+
|
|
24
|
+
lang (as an attribute name): denotes an attribute whose value
|
|
25
|
+
is a language code for the natural language of the content of
|
|
26
|
+
any element; its value is inherited. This name is reserved
|
|
27
|
+
by virtue of its definition in the XML specification.
|
|
28
|
+
|
|
29
|
+
space (as an attribute name): denotes an attribute whose
|
|
30
|
+
value is a keyword indicating what whitespace processing
|
|
31
|
+
discipline is intended for the content of the element; its
|
|
32
|
+
value is inherited. This name is reserved by virtue of its
|
|
33
|
+
definition in the XML specification.
|
|
34
|
+
|
|
35
|
+
Father (in any context at all): denotes Jon Bosak, the chair of
|
|
36
|
+
the original XML Working Group. This name is reserved by
|
|
37
|
+
the following decision of the W3C XML Plenary and
|
|
38
|
+
XML Coordination groups:
|
|
39
|
+
|
|
40
|
+
In appreciation for his vision, leadership and dedication
|
|
41
|
+
the W3C XML Plenary on this 10th day of February, 2000
|
|
42
|
+
reserves for Jon Bosak in perpetuity the XML name
|
|
43
|
+
xml:Father
|
|
44
|
+
</xs:documentation>
|
|
45
|
+
</xs:annotation>
|
|
46
|
+
|
|
47
|
+
<xs:annotation>
|
|
48
|
+
<xs:documentation>This schema defines attributes and an attribute group
|
|
49
|
+
suitable for use by
|
|
50
|
+
schemas wishing to allow xml:base, xml:lang or xml:space attributes
|
|
51
|
+
on elements they define.
|
|
52
|
+
|
|
53
|
+
To enable this, such a schema must import this schema
|
|
54
|
+
for the XML namespace, e.g. as follows:
|
|
55
|
+
<schema . . .>
|
|
56
|
+
. . .
|
|
57
|
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
|
58
|
+
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
|
|
59
|
+
|
|
60
|
+
Subsequently, qualified reference to any of the attributes
|
|
61
|
+
or the group defined below will have the desired effect, e.g.
|
|
62
|
+
|
|
63
|
+
<type . . .>
|
|
64
|
+
. . .
|
|
65
|
+
<attributeGroup ref="xml:specialAttrs"/>
|
|
66
|
+
|
|
67
|
+
will define a type which will schema-validate an instance
|
|
68
|
+
element with any of those attributes</xs:documentation>
|
|
69
|
+
</xs:annotation>
|
|
70
|
+
|
|
71
|
+
<xs:annotation>
|
|
72
|
+
<xs:documentation>In keeping with the XML Schema WG's standard versioning
|
|
73
|
+
policy, this schema document will persist at
|
|
74
|
+
http://www.w3.org/2001/03/xml.xsd.
|
|
75
|
+
At the date of issue it can also be found at
|
|
76
|
+
http://www.w3.org/2001/xml.xsd.
|
|
77
|
+
The schema document at that URI may however change in the future,
|
|
78
|
+
in order to remain compatible with the latest version of XML Schema
|
|
79
|
+
itself. In other words, if the XML Schema namespace changes, the version
|
|
80
|
+
of this document at
|
|
81
|
+
http://www.w3.org/2001/xml.xsd will change
|
|
82
|
+
accordingly; the version at
|
|
83
|
+
http://www.w3.org/2001/03/xml.xsd will not change.
|
|
84
|
+
</xs:documentation>
|
|
85
|
+
</xs:annotation>
|
|
86
|
+
|
|
87
|
+
<xs:attribute name="lang" type="xs:language">
|
|
88
|
+
<xs:annotation>
|
|
89
|
+
<xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
|
|
90
|
+
codes as the enumerated possible values . . .</xs:documentation>
|
|
91
|
+
</xs:annotation>
|
|
92
|
+
</xs:attribute>
|
|
93
|
+
|
|
94
|
+
<xs:attribute name="space" default="preserve">
|
|
95
|
+
<xs:simpleType>
|
|
96
|
+
<xs:restriction base="xs:NCName">
|
|
97
|
+
<xs:enumeration value="default"/>
|
|
98
|
+
<xs:enumeration value="preserve"/>
|
|
99
|
+
</xs:restriction>
|
|
100
|
+
</xs:simpleType>
|
|
101
|
+
</xs:attribute>
|
|
102
|
+
|
|
103
|
+
<xs:attribute name="base" type="xs:anyURI">
|
|
104
|
+
<xs:annotation>
|
|
105
|
+
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
|
|
106
|
+
information about this attribute.</xs:documentation>
|
|
107
|
+
</xs:annotation>
|
|
108
|
+
</xs:attribute>
|
|
109
|
+
|
|
110
|
+
<xs:attributeGroup name="specialAttrs">
|
|
111
|
+
<xs:attribute ref="xml:base"/>
|
|
112
|
+
<xs:attribute ref="xml:lang"/>
|
|
113
|
+
<xs:attribute ref="xml:space"/>
|
|
114
|
+
</xs:attributeGroup>
|
|
115
|
+
|
|
116
|
+
</xs:schema>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -23,6 +23,7 @@ static ID id_method_reduce_to_single_packet = 0;
|
|
|
23
23
|
static ID id_method_replace = 0;
|
|
24
24
|
static ID id_method_clone = 0;
|
|
25
25
|
static ID id_method_log_discard = 0;
|
|
26
|
+
static ID id_method_check_buffer_size = 0;
|
|
26
27
|
|
|
27
28
|
static ID id_ivar_data = 0;
|
|
28
29
|
static ID id_ivar_extra = 0;
|
|
@@ -77,6 +78,10 @@ static VALUE burst_protocol_read_data(int argc, VALUE *argv, VALUE self)
|
|
|
77
78
|
|
|
78
79
|
rb_str_concat(rb_ivar_get(self, id_ivar_data), data);
|
|
79
80
|
|
|
81
|
+
/* Bound the memory a peer can make us buffer. Raises if @data has grown
|
|
82
|
+
* past @max_buffer_size, which makes Interface#read disconnect the peer. */
|
|
83
|
+
rb_funcall(self, id_method_check_buffer_size, 0);
|
|
84
|
+
|
|
80
85
|
/* Maintain extra from last read read_data */
|
|
81
86
|
if (!((RSTRING_LEN(data) == 0) && (!(RTEST(extra))))) {
|
|
82
87
|
rb_ivar_set(self, id_ivar_extra, extra);
|
|
@@ -301,6 +306,7 @@ void Init_burst_protocol(void)
|
|
|
301
306
|
id_method_replace = rb_intern("replace");
|
|
302
307
|
id_method_clone = rb_intern("clone");
|
|
303
308
|
id_method_log_discard = rb_intern("log_discard");
|
|
309
|
+
id_method_check_buffer_size = rb_intern("check_buffer_size");
|
|
304
310
|
|
|
305
311
|
id_ivar_data = rb_intern("@data");
|
|
306
312
|
id_ivar_extra = rb_intern("@extra");
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/ext/openc3/ext/crc/crc.c
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -35,10 +35,13 @@ VALUE cSegFault = Qnil;
|
|
|
35
35
|
#include <string.h>
|
|
36
36
|
#include <sys/stat.h>
|
|
37
37
|
|
|
38
|
+
/* Must be a macro rather than a const int so filename below is a fixed size
|
|
39
|
+
* array rather than a variable length array */
|
|
40
|
+
#define FILENAME_LEN 256
|
|
41
|
+
|
|
38
42
|
/* Mark that this function does not return (it exits) to remove compiler warning */
|
|
39
43
|
__attribute__((noreturn)) static void catch_sigsegv(int sig_num)
|
|
40
44
|
{
|
|
41
|
-
const int FILENAME_LEN = 256;
|
|
42
45
|
char *openc3_log_dir = NULL;
|
|
43
46
|
time_t rawtime;
|
|
44
47
|
struct tm timeinfo;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
#include "ruby.h"
|
|
21
|
+
#include "stdint.h"
|
|
21
22
|
#include "stdio.h"
|
|
22
23
|
|
|
23
24
|
#define TO_BIGNUM(x) (FIXNUM_P(x) ? rb_int2big(FIX2LONG(x)) : x)
|
|
@@ -400,11 +401,13 @@ static void check_bit_offset_and_size(VALUE self, VALUE type_param, VALUE bit_of
|
|
|
400
401
|
|
|
401
402
|
if (bit_offset < 0)
|
|
402
403
|
{
|
|
403
|
-
|
|
404
|
-
|
|
404
|
+
/* Calculate in 64 bits since a large buffer times 8 does not fit in an int */
|
|
405
|
+
int64_t calculated_bit_offset = (((int64_t)RSTRING_LEN(buffer_param)) * 8) + bit_offset;
|
|
406
|
+
if ((calculated_bit_offset < 0) || (calculated_bit_offset > INT32_MAX))
|
|
405
407
|
{
|
|
406
408
|
rb_funcall(self, id_method_raise_buffer_error, 5, type_param, buffer_param, data_type_param, bit_offset_param, bit_size_param);
|
|
407
409
|
}
|
|
410
|
+
bit_offset = (int)calculated_bit_offset;
|
|
408
411
|
}
|
|
409
412
|
|
|
410
413
|
*new_bit_offset = bit_offset;
|
|
@@ -418,23 +421,45 @@ static int even_bit_size(int bit_size)
|
|
|
418
421
|
|
|
419
422
|
/* Calculate the bounds of the string to access the item based on the bit_offset and bit_size.
|
|
420
423
|
* Also determine if the buffer size is sufficient. */
|
|
421
|
-
static int check_bounds_and_buffer_size(int bit_offset, int bit_size,
|
|
424
|
+
static int check_bounds_and_buffer_size(int bit_offset, int bit_size, long buffer_length, VALUE endianness, VALUE data_type, int *lower_bound, int *upper_bound)
|
|
422
425
|
{
|
|
423
426
|
int result = 1; /* Assume ok */
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
427
|
+
int64_t calculated_lower_bound = 0;
|
|
428
|
+
int64_t calculated_upper_bound = 0;
|
|
429
|
+
|
|
430
|
+
/* Calculate in 64 bits so attacker-controlled offsets and sizes cannot
|
|
431
|
+
* overflow before the buffer bounds are checked. */
|
|
432
|
+
calculated_lower_bound = ((int64_t)bit_offset) / 8;
|
|
433
|
+
calculated_upper_bound = (((int64_t)bit_offset) + ((int64_t)bit_size) - 1) / 8;
|
|
434
|
+
*lower_bound = (int)calculated_lower_bound;
|
|
435
|
+
*upper_bound = (int)calculated_upper_bound;
|
|
436
|
+
|
|
437
|
+
/* The read starts at lower_bound, so it must be checked independently of
|
|
438
|
+
* upper_bound. Also reject reversed bounds before considering the special
|
|
439
|
+
* little-endian bitfield case below. */
|
|
440
|
+
if ((calculated_lower_bound < 0) ||
|
|
441
|
+
(calculated_lower_bound >= buffer_length) ||
|
|
442
|
+
(calculated_upper_bound < calculated_lower_bound))
|
|
443
|
+
{
|
|
444
|
+
return 0;
|
|
445
|
+
}
|
|
428
446
|
|
|
429
447
|
/* Sanity check buffer size */
|
|
430
|
-
if (
|
|
448
|
+
if (calculated_upper_bound >= buffer_length)
|
|
431
449
|
{
|
|
432
450
|
/* If it's not the special case of little endian bit field then we fail and return 0 */
|
|
451
|
+
/* Note lower_bound is already known to be inside the buffer */
|
|
433
452
|
if (!((endianness == symbol_LITTLE_ENDIAN) &&
|
|
434
453
|
((data_type == symbol_INT) || (data_type == symbol_UINT)) &&
|
|
435
454
|
/* Not byte aligned with an even bit size */
|
|
436
|
-
(!((BYTE_ALIGNED(bit_offset)) && (even_bit_size(bit_size))))
|
|
437
|
-
|
|
455
|
+
(!((BYTE_ALIGNED(bit_offset)) && (even_bit_size(bit_size))))))
|
|
456
|
+
{
|
|
457
|
+
result = 0;
|
|
458
|
+
}
|
|
459
|
+
/* Little endian bitfields are accessed backwards from bit_offset, so the bytes
|
|
460
|
+
* they span must all be inside the buffer. Checking this here keeps a huge
|
|
461
|
+
* bit_size from allocating memory before it is rejected. */
|
|
462
|
+
else if ((calculated_lower_bound - ((((bit_offset % 8) + ((int64_t)bit_size) - 1) / 8) + 1) + 1) < 0)
|
|
438
463
|
{
|
|
439
464
|
result = 0;
|
|
440
465
|
}
|
|
@@ -456,8 +481,8 @@ static int check_bounds_and_buffer_size(int bit_offset, int bit_size, int buffer
|
|
|
456
481
|
static VALUE binary_accessor_read(VALUE self, VALUE param_bit_offset, VALUE param_bit_size, VALUE param_data_type, VALUE param_buffer, VALUE param_endianness)
|
|
457
482
|
{
|
|
458
483
|
/* Convert Parameters to C Data Types */
|
|
459
|
-
int bit_offset =
|
|
460
|
-
int bit_size =
|
|
484
|
+
int bit_offset = NUM2INT(param_bit_offset);
|
|
485
|
+
int bit_size = NUM2INT(param_bit_size);
|
|
461
486
|
|
|
462
487
|
/* Local Variables */
|
|
463
488
|
int given_bit_offset = bit_offset;
|
|
@@ -502,18 +527,20 @@ static VALUE binary_accessor_read(VALUE self, VALUE param_bit_offset, VALUE para
|
|
|
502
527
|
* recalculate based on the buffer length */
|
|
503
528
|
if ((bit_size <= 0) && ((param_data_type == symbol_STRING) || (param_data_type == symbol_BLOCK)))
|
|
504
529
|
{
|
|
505
|
-
|
|
506
|
-
|
|
530
|
+
/* Calculate in 64 bits since a large buffer times 8 does not fit in an int */
|
|
531
|
+
int64_t calculated_bit_size = (((int64_t)buffer_length) * 8) - bit_offset + bit_size;
|
|
532
|
+
if (calculated_bit_size == 0)
|
|
507
533
|
{
|
|
508
534
|
return rb_str_new2("");
|
|
509
535
|
}
|
|
510
|
-
else if (
|
|
536
|
+
else if ((calculated_bit_size < 0) || (calculated_bit_size > INT32_MAX))
|
|
511
537
|
{
|
|
512
538
|
rb_funcall(self, id_method_raise_buffer_error, 5, symbol_read, param_buffer, param_data_type, param_bit_offset, param_bit_size);
|
|
513
539
|
}
|
|
540
|
+
bit_size = (int)calculated_bit_size;
|
|
514
541
|
}
|
|
515
542
|
|
|
516
|
-
if (!check_bounds_and_buffer_size(bit_offset, bit_size,
|
|
543
|
+
if (!check_bounds_and_buffer_size(bit_offset, bit_size, buffer_length, param_endianness, param_data_type, &lower_bound, &upper_bound))
|
|
517
544
|
{
|
|
518
545
|
/* Return nil for out-of-bounds reads (supports undersized packets with ALLOW_SHORT) */
|
|
519
546
|
return Qnil;
|
|
@@ -1005,10 +1032,15 @@ static VALUE binary_accessor_write(VALUE self, VALUE value, VALUE param_bit_offs
|
|
|
1005
1032
|
{
|
|
1006
1033
|
value = rb_funcall(value, id_method_to_s, 0);
|
|
1007
1034
|
}
|
|
1035
|
+
/* Calculate in 64 bits since a large value times 8 does not fit in an int */
|
|
1036
|
+
if ((((int64_t)RSTRING_LEN(value)) * 8) > INT32_MAX)
|
|
1037
|
+
{
|
|
1038
|
+
rb_funcall(self, id_method_raise_buffer_error, 5, symbol_write, param_buffer, param_data_type, param_bit_offset, param_bit_size);
|
|
1039
|
+
}
|
|
1008
1040
|
bit_size = (int)RSTRING_LEN(value) * 8;
|
|
1009
1041
|
}
|
|
1010
1042
|
|
|
1011
|
-
if ((!check_bounds_and_buffer_size(bit_offset, bit_size,
|
|
1043
|
+
if ((!check_bounds_and_buffer_size(bit_offset, bit_size, buffer_length, param_endianness, param_data_type, &lower_bound, &upper_bound)) && (given_bit_size > 0))
|
|
1012
1044
|
{
|
|
1013
1045
|
rb_funcall(self, id_method_raise_buffer_error, 5, symbol_write, param_buffer, param_data_type, param_bit_offset, param_bit_size);
|
|
1014
1046
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -56,7 +56,7 @@ static VALUE packets(VALUE self, VALUE target_name)
|
|
|
56
56
|
|
|
57
57
|
if (!(RTEST(target_packets)))
|
|
58
58
|
{
|
|
59
|
-
rb_raise(rb_eRuntimeError, "Telemetry target '%s' does not exist", RSTRING_PTR(upcase_target_name));
|
|
59
|
+
rb_raise(rb_eRuntimeError, "Telemetry target '%s' does not exist (packets lookup)", RSTRING_PTR(upcase_target_name));
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
return target_packets;
|
data/lib/cosmos.rb
CHANGED
|
File without changes
|
data/lib/cosmosc2.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -105,35 +105,70 @@ module OpenC3
|
|
|
105
105
|
HOST_ENDIANNESS = get_host_endianness()
|
|
106
106
|
# Valid endianness
|
|
107
107
|
ENDIANNESS = [:BIG_ENDIAN, :LITTLE_ENDIAN]
|
|
108
|
+
NATIVE_INT_MIN = -(2**31)
|
|
109
|
+
NATIVE_INT_MAX = (2**31) - 1
|
|
108
110
|
|
|
109
|
-
def handle_read_variable_bit_size(item,
|
|
111
|
+
def handle_read_variable_bit_size(item, buffer)
|
|
110
112
|
length_value = @packet.read(item.variable_bit_size['length_item_name'], :CONVERTED)
|
|
111
113
|
# length_value can be nil when reading an undersized packet where the length
|
|
112
114
|
# item falls outside the buffer bounds
|
|
113
115
|
raise "Length value #{item.variable_bit_size['length_item_name']} for item #{item.name} is nil" if length_value.nil?
|
|
114
116
|
|
|
115
117
|
if item.array_size
|
|
116
|
-
|
|
118
|
+
array_size = (length_value * item.variable_bit_size['length_bits_per_count']) + item.variable_bit_size['length_value_bit_offset']
|
|
119
|
+
validate_variable_bit_size(item, array_size, buffer)
|
|
120
|
+
item.array_size = array_size
|
|
117
121
|
else
|
|
118
122
|
if item.data_type == :INT or item.data_type == :UINT
|
|
119
123
|
# QUIC encoding is currently assumed for individual variable sized integers
|
|
120
124
|
# see https://datatracker.ietf.org/doc/html/rfc9000#name-variable-length-integer-enc
|
|
121
125
|
case length_value
|
|
122
126
|
when 0
|
|
123
|
-
|
|
127
|
+
bit_size = 6
|
|
124
128
|
when 1
|
|
125
|
-
|
|
129
|
+
bit_size = 14
|
|
126
130
|
when 2
|
|
127
|
-
|
|
131
|
+
bit_size = 30
|
|
128
132
|
else
|
|
129
|
-
|
|
133
|
+
bit_size = 62
|
|
130
134
|
end
|
|
131
135
|
else
|
|
132
|
-
|
|
136
|
+
bit_size = (length_value * item.variable_bit_size['length_bits_per_count']) + item.variable_bit_size['length_value_bit_offset']
|
|
133
137
|
end
|
|
138
|
+
validate_variable_bit_size(item, bit_size, buffer)
|
|
139
|
+
item.bit_size = bit_size
|
|
134
140
|
end
|
|
135
141
|
end
|
|
136
142
|
|
|
143
|
+
# A negative bit size is always invalid. A bit size larger than the buffer is
|
|
144
|
+
# only an error when the packet does not allow short buffers, otherwise the
|
|
145
|
+
# oversized item simply reads as nil (ALLOW_SHORT).
|
|
146
|
+
def validate_variable_bit_size(item, bit_size, buffer)
|
|
147
|
+
available_bit_size = (buffer.length * 8) - item.bit_offset
|
|
148
|
+
if bit_size < 0 || (!@packet.short_buffer_allowed && (available_bit_size < 0 || bit_size > available_bit_size))
|
|
149
|
+
raise ArgumentError, "Variable bit size #{bit_size} for item #{item.name} exceeds the #{[available_bit_size, 0].max} bits available in the buffer"
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# The native accessor takes C ints, so values outside that range must be
|
|
154
|
+
# rejected here rather than raising RangeError out of the extension.
|
|
155
|
+
def native_value_out_of_range?(item)
|
|
156
|
+
[item.bit_offset, item.bit_size, item.array_size].compact.any? do |value|
|
|
157
|
+
value < NATIVE_INT_MIN || value > NATIVE_INT_MAX
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Items that derive their size from the buffer (0 or negative bit_size or
|
|
162
|
+
# array_size) calculate a negative size when the buffer ends before the item
|
|
163
|
+
# starts. Such an item is simply not present in a short buffer.
|
|
164
|
+
def derived_size_negative?(item, buffer)
|
|
165
|
+
available_bit_size = (buffer.length * 8) - item.bit_offset
|
|
166
|
+
if item.array_size
|
|
167
|
+
return item.array_size <= 0 && (available_bit_size + item.array_size) < 0
|
|
168
|
+
end
|
|
169
|
+
return item.bit_size <= 0 && (available_bit_size + item.bit_size) < 0
|
|
170
|
+
end
|
|
171
|
+
|
|
137
172
|
def read_item(item, buffer)
|
|
138
173
|
return nil if item.data_type == :DERIVED
|
|
139
174
|
if item.parent_item
|
|
@@ -145,6 +180,9 @@ module OpenC3
|
|
|
145
180
|
structure.read(item.key, :RAW, structure_buffer)
|
|
146
181
|
else
|
|
147
182
|
handle_read_variable_bit_size(item, buffer) if item.variable_bit_size
|
|
183
|
+
if @packet.short_buffer_allowed && (native_value_out_of_range?(item) || derived_size_negative?(item, buffer))
|
|
184
|
+
return nil
|
|
185
|
+
end
|
|
148
186
|
self.class.read_item(item, buffer)
|
|
149
187
|
end
|
|
150
188
|
end
|
|
@@ -288,6 +326,11 @@ module OpenC3
|
|
|
288
326
|
self.class.write_item(parent_item, structure_buffer, buffer)
|
|
289
327
|
else
|
|
290
328
|
handle_write_variable_bit_size(item, value, buffer) if item.variable_bit_size
|
|
329
|
+
# Raise the normal buffer error rather than letting the native accessor
|
|
330
|
+
# raise RangeError when converting the offset or size to a C int
|
|
331
|
+
if native_value_out_of_range?(item)
|
|
332
|
+
self.class.raise_buffer_error(:write, buffer, item.data_type, item.bit_offset, item.bit_size)
|
|
333
|
+
end
|
|
291
334
|
self.class.write_item(item, value, buffer)
|
|
292
335
|
end
|
|
293
336
|
end
|
|
@@ -800,16 +843,27 @@ module OpenC3
|
|
|
800
843
|
lower_bound = bit_offset / 8
|
|
801
844
|
upper_bound = (bit_offset + bit_size - 1) / 8
|
|
802
845
|
|
|
846
|
+
# The access starts at lower_bound, so validate it independently rather
|
|
847
|
+
# than relying on upper_bound to imply that it is safe.
|
|
848
|
+
if lower_bound < 0 || lower_bound >= buffer_length || upper_bound < lower_bound
|
|
849
|
+
return false, lower_bound, upper_bound
|
|
850
|
+
end
|
|
851
|
+
|
|
803
852
|
# Sanity check buffer size
|
|
804
853
|
if upper_bound >= buffer_length
|
|
805
854
|
# If it's not the special case of little endian bit field then we fail and return false
|
|
855
|
+
# Note lower_bound is already known to be inside the buffer
|
|
806
856
|
if !((endianness == :LITTLE_ENDIAN) &&
|
|
807
857
|
((data_type == :INT) || (data_type == :UINT)) &&
|
|
808
858
|
# Not byte aligned with an even bit size
|
|
809
|
-
(!((byte_aligned(bit_offset)) && (even_bit_size(bit_size))))
|
|
810
|
-
(lower_bound < buffer_length)
|
|
859
|
+
(!((byte_aligned(bit_offset)) && (even_bit_size(bit_size))))
|
|
811
860
|
)
|
|
812
861
|
result = false
|
|
862
|
+
# Little endian bitfields are accessed backwards from bit_offset, so the
|
|
863
|
+
# bytes they span must all be inside the buffer. Checking this here keeps
|
|
864
|
+
# a huge bit_size from allocating memory before it is rejected.
|
|
865
|
+
elsif (lower_bound - ((((bit_offset % 8) + bit_size - 1) / 8) + 1) + 1) < 0
|
|
866
|
+
result = false
|
|
813
867
|
end
|
|
814
868
|
end
|
|
815
869
|
return result, lower_bound, upper_bound
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -109,7 +109,7 @@ module OpenC3
|
|
|
109
109
|
configure()
|
|
110
110
|
|
|
111
111
|
success = buffer.gsub!("#{@left_char}#{item.key}#{@right_char}", value.to_s)
|
|
112
|
-
raise "Key #{item.key} not found in template" unless success
|
|
112
|
+
raise "Key '#{item.key}' not found in template (write_item)" unless success
|
|
113
113
|
return value
|
|
114
114
|
end
|
|
115
115
|
|
|
@@ -118,7 +118,7 @@ module OpenC3
|
|
|
118
118
|
items.each_with_index do |item, index|
|
|
119
119
|
next if item.data_type == :DERIVED
|
|
120
120
|
success = buffer.gsub!("#{@left_char}#{item.key}#{@right_char}", values[index].to_s)
|
|
121
|
-
raise "Key #{item.key} not found in template" unless success
|
|
121
|
+
raise "Key '#{item.key}' not found in template (write_items)" unless success
|
|
122
122
|
end
|
|
123
123
|
return values
|
|
124
124
|
end
|
|
File without changes
|
data/lib/openc3/accessors.rb
CHANGED
|
File without changes
|
data/lib/openc3/api/README.md
CHANGED
|
File without changes
|
data/lib/openc3/api/api.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/openc3/api/cmd_api.rb
CHANGED
|
@@ -484,7 +484,7 @@ module OpenC3
|
|
|
484
484
|
user = authorize(permission: 'cmd', target_name: target_name, packet_name: cmd_name, manual: manual, scope: scope, token: token)
|
|
485
485
|
if user.nil?
|
|
486
486
|
user = {}
|
|
487
|
-
user['username'] = ENV
|
|
487
|
+
user['username'] = ENV.fetch('OPENC3_MICROSERVICE_NAME', nil)
|
|
488
488
|
|
|
489
489
|
# Get the caller stack trace to determine the point in the code where the command was called
|
|
490
490
|
# This code works but ultimately we didn't want to overload 'username' and take a performance hit
|
|
File without changes
|
|
@@ -47,7 +47,7 @@ module OpenC3
|
|
|
47
47
|
def get_interface(interface_name, manual: false, scope: $openc3_scope, token: $openc3_token)
|
|
48
48
|
authorize(permission: 'system', interface_name: interface_name, manual: manual, scope: scope, token: token)
|
|
49
49
|
interface = InterfaceModel.get(name: interface_name, scope: scope)
|
|
50
|
-
raise "Interface '#{interface_name}' does not exist" unless interface
|
|
50
|
+
raise "Interface '#{interface_name}' does not exist (get_interface)" unless interface
|
|
51
51
|
|
|
52
52
|
interface.merge(InterfaceStatusModel.get(name: interface_name, scope: scope))
|
|
53
53
|
end
|
|
@@ -160,7 +160,7 @@ module OpenC3
|
|
|
160
160
|
# TODO: Check if they have command authority for the targets mapped to this interface
|
|
161
161
|
authorize(permission: 'system_set', interface_name: interface_name, manual: manual, scope: scope, token: token)
|
|
162
162
|
interface = InterfaceModel.get_model(name: interface_name, scope: scope)
|
|
163
|
-
raise "Interface '#{interface_name}' does not exist" unless interface
|
|
163
|
+
raise "Interface '#{interface_name}' does not exist (unmap_target_from_interface)" unless interface
|
|
164
164
|
|
|
165
165
|
if Array === target_name
|
|
166
166
|
target_names = target_name
|