diff --git a/.editorconfig b/.editorconfig index 56aa9a4..731a3ee 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,463 +1,1382 @@ -# Remove the line below if you want to inherit .editorconfig settings from higher directories +############################### +# Core EditorConfig Options # +############################### root = true +# All files +[*] +indent_style = space +end_of_line = crlf -# C# files -[*.cs] +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 -#### Core EditorConfig Options #### +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 -# Indentation and spacing +# Code files +[*.{cs,csx,vb,vbx}] indent_size = 4 -indent_style = space -tab_width = 4 - -# New line preferences -end_of_line = crlf insert_final_newline = false - -#### .NET Coding Conventions #### - +charset = utf-8-bom +trim_trailing_whitespace = true +############################### +# .NET Coding Conventions # +############################### +[*.{cs,vb}] # Organize usings -dotnet_separate_import_directive_groups = false dotnet_sort_system_directives_first = true -file_header_template = unset - -# this. and Me. preferences -dotnet_style_qualification_for_event = false:warning -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_property = false:warning - +# this. preferences +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_event = false:silent # Language keywords vs BCL types preferences dotnet_style_predefined_type_for_locals_parameters_members = true:warning dotnet_style_predefined_type_for_member_access = true:warning - # Parentheses preferences dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning dotnet_style_parentheses_in_other_operators = never_if_unnecessary:warning -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning - # Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members - +dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning +dotnet_style_readonly_field = true:warning # Expression-level preferences -dotnet_style_coalesce_expression = true:warning +dotnet_style_object_initializer = true:warning dotnet_style_collection_initializer = true:warning dotnet_style_explicit_tuple_names = true:warning -dotnet_style_namespace_match_folder = true dotnet_style_null_propagation = true:warning -dotnet_style_object_initializer = true:warning -dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_coalesce_expression = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +dotnet_style_prefer_inferred_tuple_names = true:warning +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning dotnet_style_prefer_auto_properties = true:warning -dotnet_style_prefer_compound_assignment = true:warning dotnet_style_prefer_conditional_expression_over_assignment = true:warning dotnet_style_prefer_conditional_expression_over_return = true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning -dotnet_style_prefer_inferred_tuple_names = true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +############################### +# Naming Conventions # +############################### +# Style Definitions +dotnet_naming_style.pascal_case_style.capitalization = pascal_case +# Use PascalCase for constant fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const dotnet_style_prefer_simplified_boolean_expressions = true:warning -dotnet_style_prefer_simplified_interpolation = true - -# Field preferences -dotnet_style_readonly_field = true:warning - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:warning - -# Suppression preferences -dotnet_remove_unnecessary_suppression_exclusions = 0 - -# New line preferences +dotnet_style_prefer_compound_assignment = true:warning +dotnet_style_prefer_simplified_interpolation = true:warning +dotnet_style_namespace_match_folder = true:warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +dotnet_diagnostic.CA1303.severity = suggestion +dotnet_diagnostic.CA1510.severity = warning +dotnet_diagnostic.CA1511.severity = warning +dotnet_diagnostic.CA1512.severity = warning +dotnet_diagnostic.CA1513.severity = warning +dotnet_diagnostic.CA1858.severity = warning +dotnet_diagnostic.CA1859.severity = warning +dotnet_diagnostic.CA1860.severity = warning +dotnet_diagnostic.CA1861.severity = warning +dotnet_diagnostic.CA1862.severity = warning +dotnet_diagnostic.CA1863.severity = warning +dotnet_diagnostic.CA1864.severity = warning +dotnet_diagnostic.CA1868.severity = warning +dotnet_diagnostic.CA1869.severity = warning dotnet_style_allow_multiple_blank_lines_experimental = false:warning dotnet_style_allow_statement_immediately_after_block_experimental = false:warning - -#### C# Coding Conventions #### - +dotnet_code_quality_unused_parameters = all:warning +dotnet_style_prefer_collection_expression = true:warning +############################### +# C# Coding Conventions # +############################### +[*.cs] # var preferences -csharp_style_var_elsewhere = false:warning csharp_style_var_for_built_in_types = false:warning -csharp_style_var_when_type_is_apparent = true:warning - +csharp_style_var_when_type_is_apparent = true:silent +csharp_style_var_elsewhere = false:warning # Expression-bodied members -csharp_style_expression_bodied_accessors = true:none -csharp_style_expression_bodied_constructors = false:none -csharp_style_expression_bodied_indexers = true:none -csharp_style_expression_bodied_lambdas = true:none -csharp_style_expression_bodied_local_functions = false:none -csharp_style_expression_bodied_methods = false:none -csharp_style_expression_bodied_operators = false:none -csharp_style_expression_bodied_properties = true:none - +csharp_style_expression_bodied_methods = when_on_single_line:warning +csharp_style_expression_bodied_constructors = when_on_single_line:warning +csharp_style_expression_bodied_operators = when_on_single_line:warning +csharp_style_expression_bodied_properties = when_on_single_line:warning +csharp_style_expression_bodied_indexers = when_on_single_line:warning +csharp_style_expression_bodied_accessors = when_on_single_line:warning # Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = true:warning csharp_style_pattern_matching_over_is_with_cast_check = true:warning -csharp_style_prefer_extended_property_pattern = true:warning -csharp_style_prefer_not_pattern = true:warning -csharp_style_prefer_pattern_matching = true:warning -csharp_style_prefer_switch_expression = true:warning - +csharp_style_pattern_matching_over_as_with_null_check = true:warning # Null-checking preferences +csharp_style_throw_expression = true:warning csharp_style_conditional_delegate_call = true:warning -csharp_style_prefer_parameter_null_checking = true:warning - # Modifier preferences -csharp_prefer_static_local_function = true:warning -csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async - -# Code-block preferences -csharp_prefer_braces = when_multiline:warning -csharp_prefer_simple_using_statement = true:warning -csharp_style_namespace_declarations = file_scoped:warning -csharp_style_prefer_method_group_conversion = true:warning - +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion # Expression-level preferences -csharp_prefer_simple_default_expression = true:warning +csharp_prefer_braces = true:silent csharp_style_deconstructed_variable_declaration = true:warning -csharp_style_implicit_object_creation_when_type_is_apparent = true:warning -csharp_style_inlined_variable_declaration = true:warning -csharp_style_prefer_index_operator = true:warning +csharp_prefer_simple_default_expression = true:warning csharp_style_prefer_local_over_anonymous_function = true:warning -csharp_style_prefer_null_check_over_type_check = true:warning -csharp_style_prefer_range_operator = true:warning -csharp_style_prefer_tuple_swap = true:warning -csharp_style_throw_expression = true:warning -csharp_style_unused_value_assignment_preference = discard_variable:warning -csharp_style_unused_value_expression_statement_preference = discard_variable:warning - -# 'using' directive preferences -csharp_using_directive_placement = inside_namespace:warning - -# New line preferences -csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false:warning -csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:warning -csharp_style_allow_embedded_statements_on_same_line_experimental = false:warning - -#### C# Formatting Rules #### - +csharp_style_inlined_variable_declaration = true:warning +############################### +# C# Formatting Rules # +############################### # New line preferences -csharp_new_line_before_catch = true +csharp_new_line_before_open_brace = all csharp_new_line_before_else = true +csharp_new_line_before_catch = true csharp_new_line_before_finally = true -csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_open_brace = all +csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_between_query_expression_clauses = true - # Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = true -csharp_indent_labels = no_change csharp_indent_switch_labels = true - +csharp_indent_labels = flush_left # Space preferences csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false # Wrapping preferences -csharp_preserve_single_line_blocks = true csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true +############################### +# VB Coding Conventions # +############################### +[*.vb] +# Modifier preferences +visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion +dotnet_diagnostic.CA1047.severity = warning -#### Naming styles #### - -# Naming rules - -dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning -dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface -dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i - -dotnet_naming_rule.types_should_be_pascal_case.severity = warning -dotnet_naming_rule.types_should_be_pascal_case.symbols = types -dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case - -dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning -dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members -dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case - -# Symbol specifications - -dotnet_naming_symbols.interface.applicable_kinds = interface -dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.interface.required_modifiers = +[*.cs] -dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum -dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.types.required_modifiers = +# CS1591: Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = silent -dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method -dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.non_field_members.required_modifiers = +# IDE0033: Use explicitly provided tuple name +dotnet_diagnostic.IDE0033.severity = warning -# Naming styles +# IDE0070: Use 'System.HashCode' +dotnet_diagnostic.IDE0070.severity = warning -dotnet_naming_style.pascal_case.required_prefix = -dotnet_naming_style.pascal_case.required_suffix = -dotnet_naming_style.pascal_case.word_separator = -dotnet_naming_style.pascal_case.capitalization = pascal_case +# IDE0004: Remove Unnecessary Cast +dotnet_diagnostic.IDE0004.severity = warning -dotnet_naming_style.begins_with_i.required_prefix = I -dotnet_naming_style.begins_with_i.required_suffix = -dotnet_naming_style.begins_with_i.word_separator = -dotnet_naming_style.begins_with_i.capitalization = pascal_case +# IDE0005: Using directive is unnecessary. dotnet_diagnostic.IDE0005.severity = warning -dotnet_diagnostic.IDE0063.severity = warning -dotnet_diagnostic.IDE0065.severity = warning -dotnet_diagnostic.CA1200.severity = warning -dotnet_diagnostic.IDE0051.severity = warning -dotnet_diagnostic.IDE0052.severity = warning -dotnet_diagnostic.IDE0064.severity = warning -dotnet_diagnostic.IDE0076.severity = warning -dotnet_diagnostic.IDE0077.severity = warning -dotnet_diagnostic.IDE0043.severity = warning -dotnet_diagnostic.CA1070.severity = warning -dotnet_diagnostic.CA1001.severity = warning -dotnet_diagnostic.CA1309.severity = warning -dotnet_diagnostic.CA1507.severity = warning -dotnet_diagnostic.CA1805.severity = warning -dotnet_diagnostic.CA1824.severity = warning -dotnet_diagnostic.CA1825.severity = warning -dotnet_diagnostic.CA1841.severity = warning -dotnet_diagnostic.CA1845.severity = warning -dotnet_diagnostic.CA2016.severity = warning -dotnet_diagnostic.IDE0004.severity = warning + +# IDE0007: Use implicit type dotnet_diagnostic.IDE0007.severity = warning + +# IDE0008: Use explicit type dotnet_diagnostic.IDE0008.severity = warning + +# IDE0009: Member access should be qualified. dotnet_diagnostic.IDE0009.severity = warning -dotnet_diagnostic.IDE0010.severity = none + +# IDE0011: Add braces dotnet_diagnostic.IDE0011.severity = warning + +# IDE0016: Use 'throw' expression dotnet_diagnostic.IDE0016.severity = warning + +# IDE0017: Simplify object initialization dotnet_diagnostic.IDE0017.severity = warning + +# IDE0018: Inline variable declaration dotnet_diagnostic.IDE0018.severity = warning + +# IDE0019: Use pattern matching dotnet_diagnostic.IDE0019.severity = warning + +# IDE0020: Use pattern matching dotnet_diagnostic.IDE0020.severity = warning -dotnet_diagnostic.IDE0021.severity = none -dotnet_diagnostic.IDE0022.severity = none -dotnet_diagnostic.IDE0023.severity = none -dotnet_diagnostic.IDE0024.severity = none -dotnet_diagnostic.IDE0025.severity = none -dotnet_diagnostic.IDE0026.severity = none -dotnet_diagnostic.IDE0027.severity = none + +# IDE0021: Use expression body for constructor +dotnet_diagnostic.IDE0021.severity = warning + +# IDE0022: Use expression body for method +dotnet_diagnostic.IDE0022.severity = warning + +# IDE0023: Use expression body for conversion operator +dotnet_diagnostic.IDE0023.severity = warning + +# IDE0024: Use expression body for operator +dotnet_diagnostic.IDE0024.severity = warning + +# IDE0025: Use expression body for property +dotnet_diagnostic.IDE0025.severity = warning + +# IDE0026: Use expression body for indexer +dotnet_diagnostic.IDE0026.severity = warning + +# IDE0027: Use expression body for accessor +dotnet_diagnostic.IDE0027.severity = warning + +# IDE0028: Simplify collection initialization dotnet_diagnostic.IDE0028.severity = warning + +# IDE0029: Use coalesce expression dotnet_diagnostic.IDE0029.severity = warning + +# IDE0030: Use coalesce expression dotnet_diagnostic.IDE0030.severity = warning + +# IDE0031: Use null propagation dotnet_diagnostic.IDE0031.severity = warning -dotnet_diagnostic.IDE0032.severity = warning + +# IDE0034: Simplify 'default' expression dotnet_diagnostic.IDE0034.severity = warning + +# IDE0032: Use auto property +dotnet_diagnostic.IDE0032.severity = warning + +# IDE0036: Order modifiers dotnet_diagnostic.IDE0036.severity = warning + +# IDE0037: Use inferred member name dotnet_diagnostic.IDE0037.severity = warning + +# IDE0039: Use local function dotnet_diagnostic.IDE0039.severity = warning + +# IDE0040: Add accessibility modifiers dotnet_diagnostic.IDE0040.severity = warning + +# IDE0041: Use 'is null' check dotnet_diagnostic.IDE0041.severity = warning -dotnet_diagnostic.IDE0042.severity = warning + +# IDE0044: Add readonly modifier +dotnet_diagnostic.IDE0044.severity = warning + +# IDE0045: Convert to conditional expression dotnet_diagnostic.IDE0045.severity = warning -dotnet_diagnostic.IDE0046.severity = none + +# IDE0046: Convert to conditional expression +dotnet_diagnostic.IDE0046.severity = warning + +# IDE0047: Remove unnecessary parentheses dotnet_diagnostic.IDE0047.severity = warning + +# IDE0043: Invalid format string +dotnet_diagnostic.IDE0043.severity = warning + +# IDE0048: Add parentheses for clarity dotnet_diagnostic.IDE0048.severity = warning -dotnet_diagnostic.IDE0055.severity = warning + +# IDE0053: Use block body for lambda expression +dotnet_diagnostic.IDE0053.severity = warning + +# IDE0054: Use compound assignment dotnet_diagnostic.IDE0054.severity = warning + +# IDE0055: Fix formatting +dotnet_diagnostic.IDE0055.severity = warning + +# IDE0056: Use index operator dotnet_diagnostic.IDE0056.severity = warning -dotnet_diagnostic.IDE0057.severity = warning + +# IDE0058: Expression value is never used dotnet_diagnostic.IDE0058.severity = warning -dotnet_diagnostic.IDE0060.severity = warning -dotnet_diagnostic.IDE0066.severity = warning + +# IDE0059: Unnecessary assignment of a value dotnet_diagnostic.IDE0059.severity = warning + +# IDE0060: Remove unused parameter +dotnet_diagnostic.IDE0060.severity = warning + +# IDE0061: Use expression body for local function dotnet_diagnostic.IDE0061.severity = warning + +# IDE0062: Make local function 'static' dotnet_diagnostic.IDE0062.severity = warning + +# IDE0063: Use simple 'using' statement +dotnet_diagnostic.IDE0063.severity = warning + +# IDE0064: Make readonly fields writable +dotnet_diagnostic.IDE0064.severity = warning + +# IDE0065: Misplaced using directive +dotnet_diagnostic.IDE0065.severity = warning + +# IDE0066: Convert switch statement to expression +dotnet_diagnostic.IDE0066.severity = warning + +# IDE0071: Simplify interpolation dotnet_diagnostic.IDE0071.severity = warning -dotnet_diagnostic.IDE0072.severity = warning -dotnet_diagnostic.IDE0073.severity = none + +# IDE0073: The file header does not match the required text +dotnet_diagnostic.IDE0073.severity = warning + +# IDE0074: Use compound assignment dotnet_diagnostic.IDE0074.severity = warning + +# IDE0075: Simplify conditional expression dotnet_diagnostic.IDE0075.severity = warning + +# IDE0076: Invalid global 'SuppressMessageAttribute' +dotnet_diagnostic.IDE0076.severity = warning + +# IDE0077: Avoid legacy format target in 'SuppressMessageAttribute' +dotnet_diagnostic.IDE0077.severity = warning + +# IDE0078: Use pattern matching dotnet_diagnostic.IDE0078.severity = warning + +# IDE0080: Remove unnecessary suppression operator dotnet_diagnostic.IDE0080.severity = warning + +# IDE0082: 'typeof' can be converted to 'nameof' dotnet_diagnostic.IDE0082.severity = warning + +# IDE0083: Use pattern matching dotnet_diagnostic.IDE0083.severity = warning + +# IDE0090: Use 'new(...)' dotnet_diagnostic.IDE0090.severity = warning -dotnet_diagnostic.IDE0100.severity = warning + +# IDE0110: Remove unnecessary discard dotnet_diagnostic.IDE0110.severity = warning + +# IDE0120: Simplify LINQ expression dotnet_diagnostic.IDE0120.severity = warning + +# IDE0130: Namespace does not match folder structure dotnet_diagnostic.IDE0130.severity = none + +# IDE0150: Prefer 'null' check over type check dotnet_diagnostic.IDE0150.severity = warning + +# IDE0160: Convert to block scoped namespace dotnet_diagnostic.IDE0160.severity = warning -dotnet_diagnostic.IDE0161.severity = warning + +# IDE0170: Property pattern can be simplified dotnet_diagnostic.IDE0170.severity = warning -dotnet_diagnostic.IDE0190.severity = warning + +# IDE0180: Use tuple to swap values dotnet_diagnostic.IDE0180.severity = warning + +# IDE0200: Remove unnecessary lambda expression dotnet_diagnostic.IDE0200.severity = warning + +# IDE0210: Convert to top-level statements +dotnet_diagnostic.IDE0210.severity = warning + +# IDE0211: Convert to 'Program.Main' style program +dotnet_diagnostic.IDE0211.severity = warning + +# IDE0230: Use UTF-8 string literal +dotnet_diagnostic.IDE0230.severity = warning + +# IDE0240: Remove redundant nullable directive +dotnet_diagnostic.IDE0240.severity = warning + +# IDE0241: Remove unnecessary nullable directive +dotnet_diagnostic.IDE0241.severity = warning + +# IDE0250: Make struct 'readonly' +dotnet_diagnostic.IDE0250.severity = warning + +# IDE0260: Use pattern matching +dotnet_diagnostic.IDE0260.severity = warning + +# IDE0270: Use coalesce expression +dotnet_diagnostic.IDE0270.severity = warning + +# IDE0280: Use 'nameof' +dotnet_diagnostic.IDE0280.severity = warning + +# IDE1005: Delegate invocation can be simplified. dotnet_diagnostic.IDE1005.severity = warning -dotnet_diagnostic.IDE1006.severity = warning + +# IDE2000: Avoid multiple blank lines dotnet_diagnostic.IDE2000.severity = warning + +# IDE2001: Embedded statements must be on their own line dotnet_diagnostic.IDE2001.severity = warning + +# IDE2002: Consecutive braces must not have blank line between them dotnet_diagnostic.IDE2002.severity = warning + +# IDE2003: Blank line required between block and subsequent statement dotnet_diagnostic.IDE2003.severity = warning + +# IDE2004: Blank line not allowed after constructor initializer colon dotnet_diagnostic.IDE2004.severity = warning -dotnet_diagnostic.CA2244.severity = warning -dotnet_diagnostic.CA2246.severity = warning -dotnet_diagnostic.SA1633.severity = none -dotnet_diagnostic.SA1600.severity = none -dotnet_diagnostic.SA1601.severity = none -dotnet_diagnostic.SA1602.severity = none -dotnet_diagnostic.SA1101.severity = none -dotnet_diagnostic.SA1503.severity = none -dotnet_diagnostic.SA1413.severity = none -dotnet_diagnostic.SA1210.severity = none -dotnet_diagnostic.SA0001.severity = none -[*.{cs,vb}] -dotnet_style_operator_placement_when_wrapping = beginning_of_line -tab_width = 4 -indent_size = 4 -end_of_line = crlf -dotnet_style_coalesce_expression = true:warning -dotnet_style_null_propagation = true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning -dotnet_style_prefer_auto_properties = true:warning -dotnet_style_object_initializer = true:warning -dotnet_style_collection_initializer = true:warning -dotnet_style_prefer_simplified_boolean_expressions = true:warning -dotnet_style_prefer_conditional_expression_over_assignment = true:warning -dotnet_style_prefer_conditional_expression_over_return = true:warning -dotnet_style_explicit_tuple_names = true:warning -dotnet_style_prefer_inferred_tuple_names = true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning -dotnet_style_prefer_compound_assignment = true:warning -dotnet_style_prefer_simplified_interpolation = true:warning -dotnet_style_namespace_match_folder = true:none -dotnet_diagnostic.CA1834.severity = warning -dotnet_diagnostic.CA2249.severity = warning +# IDE2005: Blank line not allowed after conditional expression token +dotnet_diagnostic.IDE2005.severity = warning + +# IDE2006: Blank line not allowed after arrow expression clause token +dotnet_diagnostic.IDE2006.severity = warning + +# CA1001: Types that own disposable fields should be disposable +dotnet_diagnostic.CA1001.severity = warning + +# CA1032: Implement standard exception constructors +dotnet_diagnostic.CA1032.severity = silent + +# CA1200: Avoid using cref tags with a prefix +dotnet_diagnostic.CA1200.severity = warning + +# CA1311: Specify a culture or use an invariant version +dotnet_diagnostic.CA1311.severity = warning + +# CA1507: Use nameof to express symbol names +dotnet_diagnostic.CA1507.severity = warning + +# CA1802: Use literals where appropriate +dotnet_diagnostic.CA1802.severity = warning + +# CA1805: Do not initialize unnecessarily +dotnet_diagnostic.CA1805.severity = warning + +# CA1824: Mark assemblies with NeutralResourcesLanguageAttribute +dotnet_diagnostic.CA1824.severity = warning + +# CA1825: Avoid zero-length array allocations +dotnet_diagnostic.CA1825.severity = warning + +# CA1841: Prefer Dictionary.Contains methods +dotnet_diagnostic.CA1841.severity = warning + +# CA1845: Use span-based 'string.Concat' +dotnet_diagnostic.CA1845.severity = warning + +# CA1851: Possible multiple enumerations of 'IEnumerable' collection +dotnet_diagnostic.CA1851.severity = warning + +# CA1855: Prefer 'Clear' over 'Fill' +dotnet_diagnostic.CA1855.severity = warning + +# CA2014: Do not use stackalloc in loops +dotnet_diagnostic.CA2014.severity = warning + +# CA2016: Forward the 'CancellationToken' parameter to methods +dotnet_diagnostic.CA2016.severity = warning + +# CA2020: Prevent from behavioral change +dotnet_diagnostic.CA2020.severity = warning + +# CA2234: Pass system uri objects instead of strings +dotnet_diagnostic.CA2234.severity = warning + +# CA2252: This API requires opting into preview features +dotnet_diagnostic.CA2252.severity = warning + +# CA2352: Unsafe DataSet or DataTable in serializable type can be vulnerable to remote code execution attacks +dotnet_diagnostic.CA2352.severity = warning + +# CA2353: Unsafe DataSet or DataTable in serializable type +dotnet_diagnostic.CA2353.severity = warning + +# CA2354: Unsafe DataSet or DataTable in deserialized object graph can be vulnerable to remote code execution attacks +dotnet_diagnostic.CA2354.severity = warning + +# CA2355: Unsafe DataSet or DataTable type found in deserializable object graph +dotnet_diagnostic.CA2355.severity = warning + +# CA2362: Unsafe DataSet or DataTable in auto-generated serializable type can be vulnerable to remote code execution attacks +dotnet_diagnostic.CA2362.severity = warning + +# CA1812: Avoid uninstantiated internal classes +dotnet_diagnostic.CA1812.severity = none + +# CA1309: Use ordinal string comparison +dotnet_diagnostic.CA1309.severity = warning + +# CA2356: Unsafe DataSet or DataTable type in web deserializable object graph +dotnet_diagnostic.CA2356.severity = warning + +# IDE1006: Naming Styles +dotnet_diagnostic.IDE1006.severity = warning + +# IDE0220: Add explicit cast +dotnet_diagnostic.IDE0220.severity = warning + +# IDE0161: Convert to file-scoped namespace +dotnet_diagnostic.IDE0161.severity = warning + +# IDE0100: Remove redundant equality +dotnet_diagnostic.IDE0100.severity = warning + +# IDE0072: Add missing cases +dotnet_diagnostic.IDE0072.severity = suggestion + +# IDE0057: Use range operator +dotnet_diagnostic.IDE0057.severity = warning + +# IDE0042: Deconstruct variable declaration +dotnet_diagnostic.IDE0042.severity = warning + +# IDE0051: Remove unused private members +dotnet_diagnostic.IDE0051.severity = warning + +# IDE0052: Remove unread private members +dotnet_diagnostic.IDE0052.severity = warning + +# IDE0010: Add missing cases +dotnet_diagnostic.IDE0010.severity = suggestion + +# CA1000: Do not declare static members on generic types dotnet_diagnostic.CA1000.severity = warning + +# CA1002: Do not expose generic lists +dotnet_diagnostic.CA1002.severity = warning + +# CA1003: Use generic event handler instances +dotnet_diagnostic.CA1003.severity = warning + +# CA1005: Avoid excessive parameters on generic types +dotnet_diagnostic.CA1005.severity = warning + +# CA1008: Enums should have zero value +dotnet_diagnostic.CA1008.severity = silent + +# CA1010: Generic interface should also be implemented dotnet_diagnostic.CA1010.severity = warning + +# CA1014: Mark assemblies with CLSCompliant +dotnet_diagnostic.CA1014.severity = warning + +# CA1012: Abstract types should not have public constructors +dotnet_diagnostic.CA1012.severity = warning + +# CA1016: Mark assemblies with assembly version dotnet_diagnostic.CA1016.severity = warning -dotnet_diagnostic.CA1018.severity = warning + +# CA1017: Mark assemblies with ComVisible +dotnet_diagnostic.CA1017.severity = warning + +# CA1019: Define accessors for attribute arguments +dotnet_diagnostic.CA1019.severity = warning + +# CA1021: Avoid out parameters +dotnet_diagnostic.CA1021.severity = warning + +# CA1024: Use properties where appropriate +dotnet_diagnostic.CA1024.severity = warning + +# CA1027: Mark enums with FlagsAttribute +dotnet_diagnostic.CA1027.severity = warning + +# CA1030: Use events where appropriate +dotnet_diagnostic.CA1030.severity = warning + +# CA1031: Do not catch general exception types +dotnet_diagnostic.CA1031.severity = suggestion + +# CA1033: Interface methods should be callable by child types +dotnet_diagnostic.CA1033.severity = warning + +# CA1034: Nested types should not be visible +dotnet_diagnostic.CA1034.severity = warning + +# CA1036: Override methods on comparable types +dotnet_diagnostic.CA1036.severity = warning + +# CA1040: Avoid empty interfaces +dotnet_diagnostic.CA1040.severity = warning + +# CA1041: Provide ObsoleteAttribute message dotnet_diagnostic.CA1041.severity = warning + +# CA1043: Use Integral Or String Argument For Indexers +dotnet_diagnostic.CA1043.severity = warning + +# CA1045: Do not pass types by reference +dotnet_diagnostic.CA1045.severity = warning + +# CA1046: Do not overload equality operator on reference types +dotnet_diagnostic.CA1046.severity = warning + +# CA1050: Declare types in namespaces dotnet_diagnostic.CA1050.severity = warning -dotnet_diagnostic.CA1051.severity = warning + +# CA1052: Static holder types should be Static or NotInheritable +dotnet_diagnostic.CA1052.severity = warning + +# CA1054: URI-like parameters should not be strings +dotnet_diagnostic.CA1054.severity = warning + +# CA1055: URI-like return values should not be strings +dotnet_diagnostic.CA1055.severity = warning + +# CA1058: Types should not extend certain base types +dotnet_diagnostic.CA1058.severity = warning + +# CA1060: Move pinvokes to native methods class +dotnet_diagnostic.CA1060.severity = warning + +# CA1061: Do not hide base class methods dotnet_diagnostic.CA1061.severity = warning -dotnet_diagnostic.CA1067.severity = warning + +# CA1063: Implement IDisposable Correctly +dotnet_diagnostic.CA1063.severity = warning + +# CA1065: Do not raise exceptions in unexpected locations +dotnet_diagnostic.CA1065.severity = warning + +# CA1066: Implement IEquatable when overriding Object.Equals +dotnet_diagnostic.CA1066.severity = warning + +# CA1068: CancellationToken parameters must come last dotnet_diagnostic.CA1068.severity = warning + +# CA1069: Enums values should not be duplicated dotnet_diagnostic.CA1069.severity = warning + +# CA1303: Do not pass literals as localized parameters +dotnet_diagnostic.CA1303.severity = suggestion + +# CA1304: Specify CultureInfo dotnet_diagnostic.CA1304.severity = warning -dotnet_diagnostic.CA1305.severity = warning -dotnet_diagnostic.CA1310.severity = warning -dotnet_diagnostic.CA2101.severity = warning + +# CA1307: Specify StringComparison for clarity +dotnet_diagnostic.CA1307.severity = warning + +# CA1308: Normalize strings to uppercase +dotnet_diagnostic.CA1308.severity = warning + +# CA1401: P/Invokes should not be visible dotnet_diagnostic.CA1401.severity = warning + +# CA1416: Validate platform compatibility +dotnet_diagnostic.CA1416.severity = warning + +# CA1417: Do not use 'OutAttribute' on string parameters for P/Invokes +dotnet_diagnostic.CA1417.severity = warning + +# CA1419: Provide a parameterless constructor that is as visible as the containing type for concrete types derived from 'System.Runtime.InteropServices.SafeHandle' dotnet_diagnostic.CA1419.severity = warning -dotnet_diagnostic.CA1707.severity = warning + +# CA1420: Property, type, or attribute requires runtime marshalling +dotnet_diagnostic.CA1420.severity = warning + +# CA1422: Validate platform compatibility +dotnet_diagnostic.CA1422.severity = warning + +# CA1501: Avoid excessive inheritance +dotnet_diagnostic.CA1501.severity = warning + +# CA1502: Avoid excessive complexity +dotnet_diagnostic.CA1502.severity = warning + +# CA1505: Avoid unmaintainable code +dotnet_diagnostic.CA1505.severity = warning + +# CA1506: Avoid excessive class coupling +dotnet_diagnostic.CA1506.severity = warning + +# CA1508: Avoid dead conditional code +dotnet_diagnostic.CA1508.severity = warning + +# CA1509: Invalid entry in code metrics rule specification file +dotnet_diagnostic.CA1509.severity = warning + +# CA1707: Identifiers should not contain underscores +dotnet_diagnostic.CA1707.severity = silent + +# CA1708: Identifiers should differ by more than case dotnet_diagnostic.CA1708.severity = warning + +# CA1710: Identifiers should have correct suffix dotnet_diagnostic.CA1710.severity = warning -dotnet_diagnostic.CA1711.severity = warning + +# CA1711: Identifiers should not have incorrect suffix +dotnet_diagnostic.CA1711.severity = silent + +# CA1712: Do not prefix enum values with type name dotnet_diagnostic.CA1712.severity = warning + +# CA1713: Events should not have 'Before' or 'After' prefix +dotnet_diagnostic.CA1713.severity = warning + +# CA1715: Identifiers should have correct prefix dotnet_diagnostic.CA1715.severity = warning -dotnet_diagnostic.CA1716.severity = warning + +# CA1720: Identifier contains type name dotnet_diagnostic.CA1720.severity = warning -dotnet_diagnostic.CA1725.severity = warning -dotnet_diagnostic.CA1806.severity = warning + +# CA1721: Property names should not match get methods +dotnet_diagnostic.CA1721.severity = warning + +# CA1724: Type names should not match namespaces +dotnet_diagnostic.CA1724.severity = warning + +# CA1727: Use PascalCase for named placeholders +dotnet_diagnostic.CA1727.severity = warning + +# CA1810: Initialize reference type static fields inline +dotnet_diagnostic.CA1810.severity = warning + +# CA1813: Avoid unsealed attributes +dotnet_diagnostic.CA1813.severity = warning + +# CA1815: Override equals and operator equals on value types +dotnet_diagnostic.CA1815.severity = warning + +# CA1816: Dispose methods should call SuppressFinalize +dotnet_diagnostic.CA1816.severity = warning + +# CA1820: Test for empty strings using string length +dotnet_diagnostic.CA1820.severity = warning + +# CA1821: Remove empty Finalizers dotnet_diagnostic.CA1821.severity = warning + +# CA1822: Mark members as static dotnet_diagnostic.CA1822.severity = warning + +# CA1826: Do not use Enumerable methods on indexable collections dotnet_diagnostic.CA1826.severity = warning + +# CA1827: Do not use Count() or LongCount() when Any() can be used dotnet_diagnostic.CA1827.severity = warning + +# CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used dotnet_diagnostic.CA1828.severity = warning -dotnet_diagnostic.CA1829.severity = warning + +# CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder dotnet_diagnostic.CA1830.severity = warning -dotnet_diagnostic.CA1832.severity = warning + +# CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate +dotnet_diagnostic.CA1831.severity = warning + +# CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate dotnet_diagnostic.CA1833.severity = warning + +# CA1834: Consider using 'StringBuilder.Append(char)' when applicable +dotnet_diagnostic.CA1834.severity = warning + +# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync' dotnet_diagnostic.CA1835.severity = warning -dotnet_diagnostic.CA1836.severity = warning + +# CA1837: Use 'Environment.ProcessId' dotnet_diagnostic.CA1837.severity = warning + +# CA1838: Avoid 'StringBuilder' parameters for P/Invokes dotnet_diagnostic.CA1838.severity = warning + +# CA1839: Use 'Environment.ProcessPath' dotnet_diagnostic.CA1839.severity = warning + +# CA1840: Use 'Environment.CurrentManagedThreadId' dotnet_diagnostic.CA1840.severity = warning + +# CA1842: Do not use 'WhenAll' with a single task dotnet_diagnostic.CA1842.severity = warning -dotnet_diagnostic.CA1843.severity = warning + +# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream' dotnet_diagnostic.CA1844.severity = warning + +# CA1846: Prefer 'AsSpan' over 'Substring' dotnet_diagnostic.CA1846.severity = warning + +# CA1847: Use char literal for a single character lookup dotnet_diagnostic.CA1847.severity = warning -dotnet_diagnostic.CA1848.severity = warning + +# CA1849: Call async methods when in an async method +dotnet_diagnostic.CA1849.severity = warning + +# CA1850: Prefer static 'HashData' method over 'ComputeHash' dotnet_diagnostic.CA1850.severity = warning + +# CA1853: Unnecessary call to 'Dictionary.ContainsKey(key)' +dotnet_diagnostic.CA1853.severity = warning + +# CA2000: Dispose objects before losing scope +dotnet_diagnostic.CA2000.severity = warning + +# CA2002: Do not lock on objects with weak identity +dotnet_diagnostic.CA2002.severity = warning + +# CA2007: Consider calling ConfigureAwait on the awaited task +dotnet_diagnostic.CA2007.severity = warning + +# CA2008: Do not create tasks without passing a TaskScheduler +dotnet_diagnostic.CA2008.severity = warning + +# CA2009: Do not call ToImmutableCollection on an ImmutableCollection value dotnet_diagnostic.CA2009.severity = warning -dotnet_diagnostic.CA2011.severity = warning + +# CA2012: Use ValueTasks correctly dotnet_diagnostic.CA2012.severity = warning + +# CA1028: Enum Storage should be Int32 +dotnet_diagnostic.CA1028.severity = warning + +# CA1056: URI-like properties should not be strings +dotnet_diagnostic.CA1056.severity = warning + +# CA1067: Override Object.Equals(object) when implementing IEquatable +dotnet_diagnostic.CA1067.severity = warning + +# CA1418: Use valid platform string +dotnet_diagnostic.CA1418.severity = warning + +# CA1421: This method uses runtime marshalling even when the 'DisableRuntimeMarshallingAttribute' is applied +dotnet_diagnostic.CA1421.severity = warning + +# CA1700: Do not name enum values 'Reserved' +dotnet_diagnostic.CA1700.severity = warning + +# CA1716: Identifiers should not match keywords +dotnet_diagnostic.CA1716.severity = warning + +# CA1725: Parameter names should match base declaration +dotnet_diagnostic.CA1725.severity = warning + +# CA1806: Do not ignore method results +dotnet_diagnostic.CA1806.severity = warning + +# CA1819: Properties should not return arrays +dotnet_diagnostic.CA1819.severity = warning + +# CA1823: Avoid unused private fields +dotnet_diagnostic.CA1823.severity = warning + +# CA1836: Prefer IsEmpty over Count +dotnet_diagnostic.CA1836.severity = warning + +# CA1843: Do not use 'WaitAll' with a single task +dotnet_diagnostic.CA1843.severity = warning + +# CA1018: Mark attributes with AttributeUsageAttribute +dotnet_diagnostic.CA1018.severity = warning + +# CA1044: Properties should not be write only +dotnet_diagnostic.CA1044.severity = warning + +# CA1051: Do not declare visible instance fields +dotnet_diagnostic.CA1051.severity = warning + +# CA1062: Validate arguments of public methods +dotnet_diagnostic.CA1062.severity = none + +# CA1064: Exceptions should be public +dotnet_diagnostic.CA1064.severity = warning + +# CA1070: Do not declare event fields as virtual +dotnet_diagnostic.CA1070.severity = warning + +# CA1305: Specify IFormatProvider +dotnet_diagnostic.CA1305.severity = warning + +# CA1310: Specify StringComparison for correctness +dotnet_diagnostic.CA1310.severity = warning + +# CA1814: Prefer jagged arrays over multidimensional +dotnet_diagnostic.CA1814.severity = warning + +# CA1829: Use Length/Count property instead of Count() when available +dotnet_diagnostic.CA1829.severity = warning + +# CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate +dotnet_diagnostic.CA1832.severity = warning + +# CA1848: Use the LoggerMessage delegates +dotnet_diagnostic.CA1848.severity = warning + +# CA1854: Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method +dotnet_diagnostic.CA1854.severity = warning + +# CA2011: Avoid infinite recursion +dotnet_diagnostic.CA2011.severity = warning + +# CA2013: Do not use ReferenceEquals with value types +dotnet_diagnostic.CA2013.severity = warning + +# CA2015: Do not define finalizers for types derived from MemoryManager +dotnet_diagnostic.CA2015.severity = warning + +# CA2018: 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument +dotnet_diagnostic.CA2018.severity = warning + +# CA2019: Improper 'ThreadStatic' field initialization +dotnet_diagnostic.CA2019.severity = warning + +# CA2100: Review SQL queries for security vulnerabilities +dotnet_diagnostic.CA2100.severity = warning + +# CA2109: Review visible event handlers +dotnet_diagnostic.CA2109.severity = warning + +# CA2119: Seal methods that satisfy private interfaces +dotnet_diagnostic.CA2119.severity = warning + +# CA2153: Do Not Catch Corrupted State Exceptions +dotnet_diagnostic.CA2153.severity = warning + +# CA1852: Seal internal types +dotnet_diagnostic.CA1852.severity = warning + +# CA2101: Specify marshaling for P/Invoke string arguments +dotnet_diagnostic.CA2101.severity = warning + +# CA2201: Do not raise reserved exception types +dotnet_diagnostic.CA2201.severity = warning + +# CA2207: Initialize value type static fields inline +dotnet_diagnostic.CA2207.severity = warning + +# CA2208: Instantiate argument exceptions correctly +dotnet_diagnostic.CA2208.severity = none + +# CA2213: Disposable fields should be disposed +dotnet_diagnostic.CA2213.severity = warning + +# CA2214: Do not call overridable methods in constructors +dotnet_diagnostic.CA2214.severity = warning + +# CA2215: Dispose methods should call base class dispose +dotnet_diagnostic.CA2215.severity = warning + +# CA2216: Disposable types should declare finalizer +dotnet_diagnostic.CA2216.severity = warning + +# CA2217: Do not mark enums with FlagsAttribute +dotnet_diagnostic.CA2217.severity = warning + +# CA2219: Do not raise exceptions in finally clauses +dotnet_diagnostic.CA2219.severity = warning + +# CA2225: Operator overloads have named alternates +dotnet_diagnostic.CA2225.severity = warning + +# CA2226: Operators should have symmetrical overloads +dotnet_diagnostic.CA2226.severity = warning + +# CA2227: Collection properties should be read only +dotnet_diagnostic.CA2227.severity = warning + +# CA2229: Implement serialization constructors +dotnet_diagnostic.CA2229.severity = warning + +# CA2231: Overload operator equals on overriding value type Equals +dotnet_diagnostic.CA2231.severity = warning + +# CA2235: Mark all non-serializable fields +dotnet_diagnostic.CA2235.severity = warning + +# CA2241: Provide correct arguments to formatting methods +dotnet_diagnostic.CA2241.severity = warning + +# CA2242: Test for NaN correctly +dotnet_diagnostic.CA2242.severity = warning + +# CA2243: Attribute string literals should parse correctly +dotnet_diagnostic.CA2243.severity = warning + +# CA2211: Non-constant fields should not be visible +dotnet_diagnostic.CA2211.severity = warning + +# CA2237: Mark ISerializable types with serializable +dotnet_diagnostic.CA2237.severity = none + +# CA2244: Do not duplicate indexed element initializations +dotnet_diagnostic.CA2244.severity = warning + +# CA2245: Do not assign a property to itself +dotnet_diagnostic.CA2245.severity = warning + +# CA2246: Assigning symbol and its member in the same statement +dotnet_diagnostic.CA2246.severity = warning + +# CA2247: Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum +dotnet_diagnostic.CA2247.severity = warning + +# CA2248: Provide correct 'enum' argument to 'Enum.HasFlag' +dotnet_diagnostic.CA2248.severity = warning + +# CA2249: Consider using 'string.Contains' instead of 'string.IndexOf' +dotnet_diagnostic.CA2249.severity = warning + +# CA2250: Use 'ThrowIfCancellationRequested' +dotnet_diagnostic.CA2250.severity = warning + +# CA2251: Use 'string.Equals' +dotnet_diagnostic.CA2251.severity = warning + +# CA2253: Named placeholders should not be numeric values +dotnet_diagnostic.CA2253.severity = warning + +# CA2254: Template should be a static expression +dotnet_diagnostic.CA2254.severity = warning + +# CA2300: Do not use insecure deserializer BinaryFormatter +dotnet_diagnostic.CA2300.severity = warning + +# CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder +dotnet_diagnostic.CA2301.severity = warning + +# CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize +dotnet_diagnostic.CA2302.severity = warning + +# CA2305: Do not use insecure deserializer LosFormatter +dotnet_diagnostic.CA2305.severity = warning + +# CA2311: Do not deserialize without first setting NetDataContractSerializer.Binder +dotnet_diagnostic.CA2311.severity = warning + +# CA2312: Ensure NetDataContractSerializer.Binder is set before deserializing +dotnet_diagnostic.CA2312.severity = warning + +# CA2315: Do not use insecure deserializer ObjectStateFormatter +dotnet_diagnostic.CA2315.severity = warning + +# CA2321: Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver +dotnet_diagnostic.CA2321.severity = warning + +# CA2326: Do not use TypeNameHandling values other than None +dotnet_diagnostic.CA2326.severity = warning + +# CA2327: Do not use insecure JsonSerializerSettings +dotnet_diagnostic.CA2327.severity = warning + +# CA2328: Ensure that JsonSerializerSettings are secure +dotnet_diagnostic.CA2328.severity = warning + +# CA2329: Do not deserialize with JsonSerializer using an insecure configuration +dotnet_diagnostic.CA2329.severity = warning + +# CA2330: Ensure that JsonSerializer has a secure configuration when deserializing +dotnet_diagnostic.CA2330.severity = warning + +# CA2351: Do not use DataSet.ReadXml() with untrusted data +dotnet_diagnostic.CA2351.severity = warning + +# CA2361: Ensure auto-generated class containing DataSet.ReadXml() is not used with untrusted data +dotnet_diagnostic.CA2361.severity = warning + +# CA3001: Review code for SQL injection vulnerabilities +dotnet_diagnostic.CA3001.severity = warning + +# CA3002: Review code for XSS vulnerabilities +dotnet_diagnostic.CA3002.severity = warning + +# CA3003: Review code for file path injection vulnerabilities +dotnet_diagnostic.CA3003.severity = warning + +# CA3005: Review code for LDAP injection vulnerabilities +dotnet_diagnostic.CA3005.severity = warning + +# CA3006: Review code for process command injection vulnerabilities +dotnet_diagnostic.CA3006.severity = warning + +# CA3007: Review code for open redirect vulnerabilities +dotnet_diagnostic.CA3007.severity = warning + +# CA3008: Review code for XPath injection vulnerabilities +dotnet_diagnostic.CA3008.severity = warning + +# CA3009: Review code for XML injection vulnerabilities +dotnet_diagnostic.CA3009.severity = warning + +# CA2310: Do not use insecure deserializer NetDataContractSerializer +dotnet_diagnostic.CA2310.severity = warning + +# CA2322: Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing +dotnet_diagnostic.CA2322.severity = warning + +# CA2350: Do not use DataTable.ReadXml() with untrusted data +dotnet_diagnostic.CA2350.severity = warning + +# CA3004: Review code for information disclosure vulnerabilities +dotnet_diagnostic.CA3004.severity = warning + +# CA3010: Review code for XAML injection vulnerabilities +dotnet_diagnostic.CA3010.severity = warning + +# CA3011: Review code for DLL injection vulnerabilities +dotnet_diagnostic.CA3011.severity = warning + +# CA3012: Review code for regex injection vulnerabilities +dotnet_diagnostic.CA3012.severity = warning + +# CA3061: Do Not Add Schema By URL dotnet_diagnostic.CA3061.severity = warning -dotnet_diagnostic.CA3075.severity = warning + +# CA3076: Insecure XSLT script processing dotnet_diagnostic.CA3076.severity = warning + +# CA3077: Insecure Processing in API Design, XmlDocument and XmlTextReader dotnet_diagnostic.CA3077.severity = warning + +# CA3147: Mark Verb Handlers With Validate Antiforgery Token dotnet_diagnostic.CA3147.severity = warning + +# CA5350: Do Not Use Weak Cryptographic Algorithms dotnet_diagnostic.CA5350.severity = warning + +# CA5351: Do Not Use Broken Cryptographic Algorithms dotnet_diagnostic.CA5351.severity = warning + +# CA5358: Review cipher mode usage with cryptography experts +dotnet_diagnostic.CA5358.severity = warning + +# CA5359: Do Not Disable Certificate Validation dotnet_diagnostic.CA5359.severity = warning + +# CA5360: Do Not Call Dangerous Methods In Deserialization dotnet_diagnostic.CA5360.severity = warning + +# CA5362: Potential reference cycle in deserialized object graph +dotnet_diagnostic.CA5362.severity = warning + +# CA5363: Do Not Disable Request Validation dotnet_diagnostic.CA5363.severity = warning + +# CA5364: Do Not Use Deprecated Security Protocols dotnet_diagnostic.CA5364.severity = warning + +# CA5365: Do Not Disable HTTP Header Checking dotnet_diagnostic.CA5365.severity = warning -dotnet_diagnostic.CA5366.severity = warning + +# CA5367: Do Not Serialize Types With Pointer Fields +dotnet_diagnostic.CA5367.severity = warning + +# CA5368: Set ViewStateUserKey For Classes Derived From Page dotnet_diagnostic.CA5368.severity = warning + +# CA3075: Insecure DTD processing in XML +dotnet_diagnostic.CA3075.severity = warning + +# CA5361: Do Not Disable SChannel Use of Strong Crypto +dotnet_diagnostic.CA5361.severity = warning + +# CA5366: Use XmlReader for 'DataSet.ReadXml()' +dotnet_diagnostic.CA5366.severity = warning + +# CA5369: Use XmlReader for 'XmlSerializer.Deserialize()' dotnet_diagnostic.CA5369.severity = warning + +# CA5370: Use XmlReader for XmlValidatingReader constructor dotnet_diagnostic.CA5370.severity = warning + +# CA5371: Use XmlReader for 'XmlSchema.Read()' dotnet_diagnostic.CA5371.severity = warning + +# CA5372: Use XmlReader for XPathDocument constructor dotnet_diagnostic.CA5372.severity = warning -dotnet_diagnostic.CA5373.severity = warning + +# CA5374: Do Not Use XslTransform dotnet_diagnostic.CA5374.severity = warning -dotnet_diagnostic.CA5379.severity = warning + +# CA5375: Do Not Use Account Shared Access Signature +dotnet_diagnostic.CA5375.severity = warning + +# CA5376: Use SharedAccessProtocol HttpsOnly +dotnet_diagnostic.CA5376.severity = warning + +# CA5377: Use Container Level Access Policy +dotnet_diagnostic.CA5377.severity = warning + +# CA5378: Do not disable ServicePointManagerSecurityProtocols +dotnet_diagnostic.CA5378.severity = warning + +# CA5380: Do Not Add Certificates To Root Store +dotnet_diagnostic.CA5380.severity = warning + +# CA5381: Ensure Certificates Are Not Added To Root Store +dotnet_diagnostic.CA5381.severity = warning + +# CA5382: Use Secure Cookies In ASP.NET Core +dotnet_diagnostic.CA5382.severity = warning + +# CA5383: Ensure Use Secure Cookies In ASP.NET Core +dotnet_diagnostic.CA5383.severity = warning + +# CA5384: Do Not Use Digital Signature Algorithm (DSA) dotnet_diagnostic.CA5384.severity = warning + +# CA5385: Use Rivest-Shamir-Adleman (RSA) Algorithm With Sufficient Key Size dotnet_diagnostic.CA5385.severity = warning + +# CA5386: Avoid hardcoding SecurityProtocolType value +dotnet_diagnostic.CA5386.severity = warning + +# CA5387: Do Not Use Weak Key Derivation Function With Insufficient Iteration Count +dotnet_diagnostic.CA5387.severity = warning + +# CA5388: Ensure Sufficient Iteration Count When Using Weak Key Derivation Function +dotnet_diagnostic.CA5388.severity = warning + +# CA5389: Do Not Add Archive Item's Path To The Target File System Path +dotnet_diagnostic.CA5389.severity = warning + +# CA5379: Ensure Key Derivation Function algorithm is sufficiently strong +dotnet_diagnostic.CA5379.severity = warning + +# CA5373: Do not use obsolete key derivation function +dotnet_diagnostic.CA5373.severity = warning + +# CA5390: Do not hard-code encryption key +dotnet_diagnostic.CA5390.severity = warning + +# CA5391: Use antiforgery tokens in ASP.NET Core MVC controllers +dotnet_diagnostic.CA5391.severity = warning + +# CA5392: Use DefaultDllImportSearchPaths attribute for P/Invokes +dotnet_diagnostic.CA5392.severity = warning + +# CA5393: Do not use unsafe DllImportSearchPath value +dotnet_diagnostic.CA5393.severity = warning + +# CA5394: Do not use insecure randomness +dotnet_diagnostic.CA5394.severity = warning + +# CA5395: Miss HttpVerb attribute for action methods +dotnet_diagnostic.CA5395.severity = warning + +# CA5396: Set HttpOnly to true for HttpCookie +dotnet_diagnostic.CA5396.severity = warning + +# CA5397: Do not use deprecated SslProtocols values dotnet_diagnostic.CA5397.severity = warning -dotnet_diagnostic.IDE0033.severity = warning -dotnet_diagnostic.IDE0044.severity = warning -dotnet_diagnostic.IDE0070.severity = warning -dotnet_diagnostic.CA1816.severity = warning -dotnet_diagnostic.CA2201.severity = warning -dotnet_diagnostic.CA2208.severity = warning -dotnet_diagnostic.CA2211.severity = warning -dotnet_diagnostic.CA2215.severity = warning -dotnet_diagnostic.CA2219.severity = warning -dotnet_diagnostic.CA2229.severity = warning -dotnet_diagnostic.CA2231.severity = warning -dotnet_diagnostic.CA2241.severity = warning -dotnet_diagnostic.CA2242.severity = warning -dotnet_diagnostic.CA2245.severity = warning -dotnet_diagnostic.CA2248.severity = warning -dotnet_diagnostic.CA2250.severity = warning -dotnet_diagnostic.CA2251.severity = warning -dotnet_diagnostic.CA2253.severity = warning -dotnet_diagnostic.CA2254.severity = warning -dotnet_style_readonly_field = true:warning -dotnet_style_predefined_type_for_locals_parameters_members = true:warning -dotnet_style_predefined_type_for_member_access = true:warning -dotnet_style_require_accessibility_modifiers = always:warning -dotnet_style_allow_multiple_blank_lines_experimental = false:warning -dotnet_style_allow_statement_immediately_after_block_experimental = false:warning -dotnet_code_quality_unused_parameters = all:warning -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:warning -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_event = false:warning -dotnet_diagnostic.CA1036.severity = warning -dotnet_diagnostic.CA1727.severity = warning -[*.vb] -dotnet_diagnostic.CA1047.severity = warning \ No newline at end of file + +# CA5399: HttpClients should enable certificate revocation list checks +dotnet_diagnostic.CA5399.severity = warning + +# CA5400: Ensure HttpClient certificate revocation list check is not disabled +dotnet_diagnostic.CA5400.severity = warning + +# CA5401: Do not use CreateEncryptor with non-default IV +dotnet_diagnostic.CA5401.severity = warning + +# CA5402: Use CreateEncryptor with the default IV +dotnet_diagnostic.CA5402.severity = warning + +# CA5403: Do not hard-code certificate +dotnet_diagnostic.CA5403.severity = warning + +# CA5404: Do not disable token validation checks +dotnet_diagnostic.CA5404.severity = warning + +# CA5405: Do not always skip token validation in delegates +dotnet_diagnostic.CA5405.severity = warning + +# CA5398: Avoid hardcoded SslProtocols values +dotnet_diagnostic.CA5398.severity = warning + +# SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time +dotnet_diagnostic.SYSLIB1054.severity = warning + +# SYSLIB1045: Convert to 'GeneratedRegexAttribute'. +dotnet_diagnostic.SYSLIB1045.severity = warning + +# IDE0160: Convert to block scoped namespace +csharp_style_namespace_declarations = file_scoped:warning + +# IDE0008: Use explicit type +csharp_style_var_when_type_is_apparent = true:warning + +# IDE0011: Add braces +csharp_prefer_braces = when_multiline:warning + +# SA1305: Field names should not use Hungarian notation +dotnet_diagnostic.SA1305.severity = warning + +# SA1412: Store files as UTF-8 with byte order mark +dotnet_diagnostic.SA1412.severity = warning + +# SA1609: Property documentation should have value +dotnet_diagnostic.SA1609.severity = suggestion + +# SA1639: File header should have summary +dotnet_diagnostic.SA1639.severity = warning + +# SX1101: Do not prefix local calls with 'this.' +dotnet_diagnostic.SX1101.severity = warning + +# SA1101: Prefix local calls with this +dotnet_diagnostic.SA1101.severity = none + +# IDE0065: Misplaced using directive +csharp_using_directive_placement = inside_namespace:silent + +# SA1633: File should have header +dotnet_diagnostic.SA1633.severity = none + +# SA1503: Braces should not be omitted +dotnet_diagnostic.SA1503.severity = none + +# SA1413: Use trailing comma in multi-line initializers +dotnet_diagnostic.SA1413.severity = none + +# SA1600: Elements should be documented +dotnet_diagnostic.SA1600.severity = none + +# SA1642: Constructor summary documentation should begin with standard text +dotnet_diagnostic.SA1642.severity = suggestion + +# SA1615: Element return value should be documented +dotnet_diagnostic.SA1615.severity = none + +# SA1611: Element parameters should be documented +dotnet_diagnostic.SA1611.severity = none + +# SA1623: Property summary documentation should match accessors +dotnet_diagnostic.SA1623.severity = suggestion + +# SA1311: Static readonly fields should begin with upper-case letter +dotnet_diagnostic.SA1311.severity = none + +# SA1310: Field names should not contain underscore +dotnet_diagnostic.SA1310.severity = suggestion + +# SA1602: Enumeration items should be documented +dotnet_diagnostic.SA1602.severity = none + +# SA0001: XML comment analysis is disabled due to project configuration +dotnet_diagnostic.SA0001.severity = none + +# SA1601: Partial element is missing a documentation header +dotnet_diagnostic.SA1601.severity = none +csharp_prefer_simple_using_statement = true:warning +csharp_style_prefer_method_group_conversion = true:warning +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:warning +csharp_style_expression_bodied_lambdas = when_on_single_line:warning +csharp_style_expression_bodied_local_functions = when_on_single_line:warning +csharp_style_prefer_null_check_over_type_check = true:warning +csharp_style_prefer_index_operator = true:warning +dotnet_diagnostic.SA1618.severity = suggestion +dotnet_diagnostic.CA1865.severity = warning +dotnet_diagnostic.CA1866.severity = warning +dotnet_diagnostic.IDE0251.severity = warning +dotnet_diagnostic.IDE0290.severity = warning +dotnet_diagnostic.IDE0300.severity = warning +dotnet_diagnostic.IDE0301.severity = warning +dotnet_diagnostic.IDE0302.severity = warning +dotnet_diagnostic.IDE0303.severity = warning +dotnet_diagnostic.IDE0304.severity = warning +csharp_style_prefer_range_operator = true:warning +csharp_style_implicit_object_creation_when_type_is_apparent = true:warning +csharp_style_prefer_tuple_swap = true:warning +csharp_style_prefer_utf8_string_literals = true:warning +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_style_unused_value_expression_statement_preference = discard_variable:warning +csharp_prefer_static_local_function = true:warning +csharp_style_prefer_readonly_struct = true:warning +csharp_style_prefer_readonly_struct_member = true:warning +csharp_style_allow_embedded_statements_on_same_line_experimental = false:warning +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:warning +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false:warning +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:warning +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:warning +csharp_style_prefer_switch_expression = true:warning +csharp_style_prefer_pattern_matching = true:warning +csharp_style_prefer_not_pattern = true:warning +csharp_style_prefer_extended_property_pattern = true:warning diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 6c3c456..0f57119 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -18,7 +18,7 @@ jobs: - name: Setup .NET Core SDK uses: actions/setup-dotnet@main with: - dotnet-version: '7.x.x' + dotnet-version: '8.x.x' - name: Install GitVersion uses: gittools/actions/gitversion/setup@main with: @@ -27,20 +27,14 @@ jobs: uses: gittools/actions/gitversion/execute@main - name: Publish run: | - dotnet publish RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj --configuration Release --no-self-contained --framework net7.0-windows10.0.22621.0 --runtime win-x64 -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true -p:PublishSingleFile=true -p:DebugType=embedded -p:AssemblyVersion=$env:GitVersion_AssemblySemVer -p:FileVersion=$env:GitVersion_AssemblySemFileVer -p:InformationalVersion=$env:GitVersion_InformationalVersion - dotnet publish RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj --configuration Release --no-self-contained --framework net7.0-windows10.0.22621.0 --runtime win-arm64 -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true -p:PublishSingleFile=true -p:DebugType=embedded -p:AssemblyVersion=$env:GitVersion_AssemblySemVer -p:FileVersion=$env:GitVersion_AssemblySemFileVer -p:InformationalVersion=$env:GitVersion_InformationalVersion + dotnet publish RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj --configuration Release --no-self-contained --framework net8.0-windows10.0.22621.0 --runtime win-x64 -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true -p:PublishSingleFile=true -p:DebugType=embedded -p:AssemblyVersion=$env:GitVersion_AssemblySemVer -p:FileVersion=$env:GitVersion_AssemblySemFileVer -p:InformationalVersion=$env:GitVersion_InformationalVersion + dotnet publish RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj --configuration Release --no-self-contained --framework net8.0-windows10.0.22621.0 --runtime win-arm64 -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true -p:PublishSingleFile=true -p:DebugType=embedded -p:AssemblyVersion=$env:GitVersion_AssemblySemVer -p:FileVersion=$env:GitVersion_AssemblySemFileVer -p:InformationalVersion=$env:GitVersion_InformationalVersion - name: Zip run: | - 7z a -r ${{ format('RS.Fritz.Manager-v{0}-net7.0-windows-x64.zip', env.GitVersion_SemVer) }} ./RS.Fritz.Manager.UI/bin/Release/net7.0-windows10.0.22621.0/win-x64/publish/*.* - 7z a -r ${{ format('RS.Fritz.Manager-v{0}-net7.0-windows-ARM64.zip', env.GitVersion_SemVer) }} ./RS.Fritz.Manager.UI/bin/Release/net7.0-windows10.0.22621.0/win-arm64/publish/*.* - - name: Prerelease - if: ${{ env.GitVersion_PreReleaseTag != '' }} - run: gh release create ${{ format('v{0}', env.GitVersion_SemVer) }} (get-item *.zip) --generate-notes --target ${{ github.sha }} --prerelease - env: - GH_TOKEN: ${{ github.token }} + 7z a -r "${{ format('RS.Fritz.Manager-v{0}-net8.0-windows-x64.zip', env.GitVersion_SemVer) }}" "./RS.Fritz.Manager.UI/bin/Release/net8.0-windows10.0.22621.0/win-x64/publish/*.*" "-x!*.xml" + 7z a -r "${{ format('RS.Fritz.Manager-v{0}-net8.0-windows-ARM64.zip', env.GitVersion_SemVer) }}" "./RS.Fritz.Manager.UI/bin/Release/net8.0-windows10.0.22621.0/win-arm64/publish/*.*" "-x!*.xml" - name: Release - if: ${{ env.GitVersion_PreReleaseTag == '' }} - run: gh release create ${{ format('v{0}', env.GitVersion_SemVer) }} (get-item *.zip) --generate-notes --target ${{ github.sha }} + run: gh release create v${{ env.GitVersion_SemVer }} (get-item *.zip) --generate-notes --target ${{ github.sha }} ${{ env.PreReleaseTag != '' && '--prerelease' || '' }} env: GH_TOKEN: ${{ github.token }} - name: Package @@ -48,4 +42,4 @@ jobs: - name: NuGet Push run: dotnet nuget push ${{ format('RS.Fritz.Manager.API/bin/Release/RS.Fritz.Manager.API.{0}.nupkg', env.GitVersion_NuGetVersionV2) }} --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json - name: GitHub Push - run: dotnet nuget push ${{ format('RS.Fritz.Manager.API/bin/Release/RS.Fritz.Manager.API.{0}.nupkg', env.GitVersion_NuGetVersionV2) }} --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/Rans4ckeR/index.json + run: dotnet nuget push ${{ format('RS.Fritz.Manager.API/bin/Release/RS.Fritz.Manager.API.{0}.nupkg', env.GitVersion_NuGetVersionV2) }} --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/Rans4ckeR/index.json \ No newline at end of file diff --git a/NuGet.config b/NuGet.config new file mode 100644 index 0000000..d5a645d --- /dev/null +++ b/NuGet.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 0189bce..5f6e529 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ + # RS.Fritz.Manager + Allows FritzBox device detection, monitoring, configuring and packet capturing. Available as a standalone Windows application ([UI](#rsfritzmanagerui)) and as a NuGet package ([API](#rsfritzmanagerapi)). For a list of implemented services check the [Service implementation status](#tr-064-service-implementation-status) - ## RS.Fritz.Manager.UI + A Windows .NET WPF application for x64 and ARM64. * [Releases](https://github.com/Rans4ckeR/RS.Fritz.Manager/releases) @@ -20,6 +22,7 @@ A Windows .NET WPF application for x64 and ARM64. ![Untitled4](https://user-images.githubusercontent.com/25006126/163052588-4f1be776-9190-4ff9-8326-9c9615bf3e82.png) ## RS.Fritz.Manager.API + A NuGet package to manage FritzBox devices using pure WCF calls. * [NuGet](https://www.nuget.org/packages/RS.Fritz.Manager.API) @@ -109,6 +112,7 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac ## TR-064 Service implementation status ### WAN + * 🔶 urn:dslforum-org:service:WANIPConnection * ✅ GetInfo * ✅ GetConnectionTypeInfo @@ -177,9 +181,12 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac * ✅ GetATMEncapsulation * ✅ GetAutoConfig * ✅ GetStatistics +* ❌ urn:dslforum-org:service:X_AVM-DE_WANMobileConnection * 🔶 urn:dslforum-org:service:X_AVM-DE_Speedtest * ✅ GetInfo * ❌ SetConfig + * ✅ GetStatistics + * ❌ ResetStatistics * ❌ urn:dslforum-org:service:X_AVM-DE_RemoteAccess * ❌ urn:dslforum-org:service:X_AVM-DE_MyFritz * ❌ urn:dslforum-org:service:X_AVM-DE_HostFilter @@ -194,33 +201,39 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac * ❌ SetForwardingEntryEnable ### Telephony + * ❌ urn:dslforum-org:service:X_AVM-DE_OnTel * ❌ urn:dslforum-org:service:X_AVM-DE_TAM * ❌ urn:dslforum-org:service:X_VoIP ### Home network + * 🔶 urn:dslforum-org:service:Hosts * ✅ GetHostNumberOfEntries * ❌ GetSpecificHostEntry * ✅ GetGenericHostEntry + * ✅ X_AVM-DE_GetInfo * ✅ X_AVM-DE_GetChangeCounter * ❌ X_AVM-DE_GetAutoWakeOnLANByMACAddress * ❌ X_AVM-DE_SetAutoWakeOnLANByMACAddress * ❌ X_AVM-DE_SetHostNameByMACAddress * ❌ X_AVM-DE_WakeOnLANByMACAddress * ❌ X_AVM-DE_GetSpecificHostEntryByIp - * ❌ X_AVM-DE_HostsCheckUpdate + * ✅ X_AVM-DE_HostsCheckUpdate * ❌ X_AVM-DE_HostDoUpdate + * ❌ X_AVM-DE_SetPrioritizationByIP * ✅ X_AVM-DE_GetHostListPath * ✅ X_AVM-DE_GetMeshListPath + * ✅ X_AVM-DE_GetFriendlyName + * ❌ X_AVM-DE_SetFriendlyName + * ❌ X_AVM-DE_SetFriendlyNameByIP + * ❌ X_AVM-DE_SetFriendlyNameByMAC * 🔶 urn:dslforum-org:service:WLANConfiguration * ❌ SetEnable * ✅ GetInfo * ❌ SetConfig * ❌ SetSecurityKeys * ❌ GetSecurityKeys - * ❌ SetDefaultWEPKeyIndex - * ❌ GetDefaultWEPKeyIndex * ❌ SetBasBeaconSecurityProperties * ✅ GetBasBeaconSecurityProperties * ✅ GetBSSID @@ -269,16 +282,19 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac * ✅ GetInfo * ✅ GetStatistics * ❌ urn:dslforum-org:service:X_AVM-DE_Dect +* ❌ urn:dslforum-org:service:X_AVM-DE_Media * ❌ urn:dslforum-org:service:X_AVM-DE_Homeauto * ❌ urn:dslforum-org:service:X_AVM-DE_Homeplug ### Storage/NAS + * ❌ urn:dslforum-org:service:X_AVM-DE_Storage * ❌ urn:dslforum-org:service:X_AVM-DE_UPnP * ❌ urn:dslforum-org:service:X_AVM-DE_WebDAVClient * ❌ urn:dslforum-org:service:X_AVM-DE_Filelinks ### System + * ✅ urn:dslforum-org:service:DeviceInfo * ✅ GetInfo * ✅ SetProvisioningCode @@ -297,6 +313,8 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac * ✅ X_AVM-DE_CreateUrlSID * ✅ X_AVM-DE_GetSupportDataInfo * ❌ X_AVM-DE_SendSupportData + * ❌ X_AVM-DE_GetSupportDataEnable + * ❌ X_AVM-DE_SetSupportDataEnable * ✅ urn:dslforum-org:service:LANConfigSecurity * ✅ GetInfo * ✅ X_AVM-DE_GetAnonymousLogin @@ -315,6 +333,7 @@ static async Task StopCaptureAsync(InternetGatewayDevice device, CaptureInterfac * ✅ X_SetTR069Enable * ✅ X_AVM-DE_GetTR069FirmwareDownloadEnabled * ✅ X_AVM-DE_SetTR069FirmwareDownloadEnabled +* ❌ urn:dslforum-org:service:X_AVM-DE_USPController * ❌ urn:dslforum-org:service:X_AVM-DE_Auth * ✅ urn:dslforum-org:service:Time * ✅ GetInfo diff --git a/RS.Fritz.Manager.API/Entities/InternetGatewayDevice.cs b/RS.Fritz.Manager.API/Entities/InternetGatewayDevice.cs index 306d9bf..99cd648 100644 --- a/RS.Fritz.Manager.API/Entities/InternetGatewayDevice.cs +++ b/RS.Fritz.Manager.API/Entities/InternetGatewayDevice.cs @@ -12,16 +12,15 @@ public sealed record InternetGatewayDevice(IFritzServiceOperationHandler FritzSe public NetworkCredential? NetworkCredential { get; set; } - public IEnumerable Services { get => services ??= UPnPDescription.Device.GetServices().ToArray(); } + public IEnumerable Services + => services ??= UPnPDescription.Device.GetServices().ToArray(); - internal Task ExecuteAsync(Func> operation) + public async ValueTask InitializeAsync() { - return operation(FritzServiceOperationHandler, this); + SecurityPort = (await this.DeviceInfoGetSecurityPortAsync().ConfigureAwait(false)).SecurityPort; + Users = (await UsersService.GetUsersAsync(this).ConfigureAwait(false)).ToArray(); } - public async Task InitializeAsync() - { - SecurityPort = (await this.DeviceInfoGetSecurityPortAsync()).SecurityPort; - Users = (await UsersService.GetUsersAsync(this)).ToArray(); - } + internal Task ExecuteAsync(Func> operation) + => operation(FritzServiceOperationHandler, this); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Extensions/DeviceExtensions.cs b/RS.Fritz.Manager.API/Extensions/DeviceExtensions.cs index 08e760c..2fdfe53 100644 --- a/RS.Fritz.Manager.API/Extensions/DeviceExtensions.cs +++ b/RS.Fritz.Manager.API/Extensions/DeviceExtensions.cs @@ -6,7 +6,7 @@ public static IEnumerable GetServices(this Device device) { IEnumerable serviceListItems = device.ServiceList; - foreach (Device deviceListItem in device.DeviceList ?? Array.Empty()) + foreach (Device deviceListItem in device.DeviceList ?? []) { serviceListItems = serviceListItems.Concat(GetServices(deviceListItem)); } diff --git a/RS.Fritz.Manager.API/Extensions/InternetGatewayDeviceExtensions.cs b/RS.Fritz.Manager.API/Extensions/InternetGatewayDeviceExtensions.cs index 40226f0..c7f3016 100644 --- a/RS.Fritz.Manager.API/Extensions/InternetGatewayDeviceExtensions.cs +++ b/RS.Fritz.Manager.API/Extensions/InternetGatewayDeviceExtensions.cs @@ -3,529 +3,330 @@ public static class InternetGatewayDeviceExtensions { public static Task HostsGetHostNumberOfEntriesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetHostNumberOfEntriesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetHostNumberOfEntriesAsync(d)); + + public static Task HostsHostsCheckUpdateAsync(this InternetGatewayDevice internetGatewayDevice) + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsHostsCheckUpdateAsync(d)); public static Task HostsGetHostListPathAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetHostListPathAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetHostListPathAsync(d)); public static Task HostsGetGenericHostEntryAsync(this InternetGatewayDevice internetGatewayDevice, HostsGetGenericHostEntryRequest hostsGetGenericHostEntryRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetGenericHostEntryAsync(d, hostsGetGenericHostEntryRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetGenericHostEntryAsync(d, hostsGetGenericHostEntryRequest)); + + public static Task HostsGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetInfoAsync(d)); public static Task HostsGetChangeCounterAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetChangeCounterAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetChangeCounterAsync(d)); public static Task HostsGetMeshListPathAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetMeshListPathAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetMeshListPathAsync(d)); + + public static Task HostsGetFriendlyNameAsync(this InternetGatewayDevice internetGatewayDevice) + => internetGatewayDevice.ExecuteAsync((h, d) => h.HostsGetFriendlyNameAsync(d)); public static Task WanCommonInterfaceConfigGetCommonLinkPropertiesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetCommonLinkPropertiesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetCommonLinkPropertiesAsync(d)); public static Task WanCommonInterfaceConfigGetTotalBytesReceivedAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalBytesReceivedAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalBytesReceivedAsync(d)); public static Task WanCommonInterfaceConfigGetTotalBytesSentAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalBytesSentAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalBytesSentAsync(d)); public static Task WanCommonInterfaceConfigGetTotalPacketsReceivedAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalPacketsReceivedAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalPacketsReceivedAsync(d)); public static Task WanCommonInterfaceConfigGetTotalPacketsSentAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalPacketsSentAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetTotalPacketsSentAsync(d)); public static Task WanCommonInterfaceConfigGetOnlineMonitorAsync(this InternetGatewayDevice internetGatewayDevice, WanCommonInterfaceConfigGetOnlineMonitorRequest wanCommonInterfaceConfigGetOnlineMonitorRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetOnlineMonitorAsync(d, wanCommonInterfaceConfigGetOnlineMonitorRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigGetOnlineMonitorAsync(d, wanCommonInterfaceConfigGetOnlineMonitorRequest)); public static Task WanCommonInterfaceConfigSetWanAccessTypeAsync(this InternetGatewayDevice internetGatewayDevice, WanCommonInterfaceConfigSetWanAccessTypeRequest wanCommonInterfaceConfigSetWanAccessTypeRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigSetWanAccessTypeAsync(d, wanCommonInterfaceConfigSetWanAccessTypeRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanCommonInterfaceConfigSetWanAccessTypeAsync(d, wanCommonInterfaceConfigSetWanAccessTypeRequest)); - public static Task DeviceInfoGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetInfoAsync(d)); - } + public static Task DeviceInfoGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetInfoAsync(d)); public static Task DeviceInfoGetDeviceLogAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetDeviceLogAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetDeviceLogAsync(d)); public static Task DeviceInfoGetSecurityPortAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetSecurityPortAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoGetSecurityPortAsync(d)); public static Task DeviceInfoSetProvisioningCodeAsync(this InternetGatewayDevice internetGatewayDevice, DeviceInfoSetProvisioningCodeRequest deviceInfoSetProvisioningCodeRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoSetProvisioningCodeAsync(d, deviceInfoSetProvisioningCodeRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceInfoSetProvisioningCodeAsync(d, deviceInfoSetProvisioningCodeRequest)); public static Task LanConfigSecurityGetAnonymousLoginAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetAnonymousLoginAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetAnonymousLoginAsync(d)); public static Task LanConfigSecurityGetCurrentUserAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetCurrentUserAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetCurrentUserAsync(d)); public static Task LanConfigSecurityGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetInfoAsync(d)); public static Task LanConfigSecurityGetUserListAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetUserListAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecurityGetUserListAsync(d)); public static Task LanConfigSecuritySetConfigPasswordAsync(this InternetGatewayDevice internetGatewayDevice, LanConfigSecuritySetConfigPasswordRequest lanConfigSecuritySetConfigPasswordRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecuritySetConfigPasswordAsync(d, lanConfigSecuritySetConfigPasswordRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanConfigSecuritySetConfigPasswordAsync(d, lanConfigSecuritySetConfigPasswordRequest)); public static Task Layer3ForwardingGetDefaultConnectionServiceAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetDefaultConnectionServiceAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetDefaultConnectionServiceAsync(d)); public static Task Layer3ForwardingGetForwardNumberOfEntriesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetForwardNumberOfEntriesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetForwardNumberOfEntriesAsync(d)); public static Task Layer3ForwardingGetGenericForwardingEntryAsync(this InternetGatewayDevice internetGatewayDevice, Layer3ForwardingGetGenericForwardingEntryRequest layer3ForwardingGetGenericForwardingEntryRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetGenericForwardingEntryAsync(d, layer3ForwardingGetGenericForwardingEntryRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.Layer3ForwardingGetGenericForwardingEntryAsync(d, layer3ForwardingGetGenericForwardingEntryRequest)); public static Task WanDslInterfaceConfigGetDslDiagnoseInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetDslDiagnoseInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetDslDiagnoseInfoAsync(d)); public static Task WanDslInterfaceConfigGetDslInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetDslInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetDslInfoAsync(d)); public static Task WanDslInterfaceConfigGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetInfoAsync(d)); public static Task WanDslInterfaceConfigGetStatisticsTotalAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetStatisticsTotalAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslInterfaceConfigGetStatisticsTotalAsync(d)); public static Task WanIpConnectionGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetInfoAsync(d)); public static Task WanIpConnectionGetConnectionTypeInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetConnectionTypeInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetConnectionTypeInfoAsync(d)); public static Task WanIpConnectionGetStatusInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetStatusInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetStatusInfoAsync(d)); public static Task WanIpConnectionGetNatRsipStatusAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetNatRsipStatusAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetNatRsipStatusAsync(d)); public static Task WanIpConnectionGetDnsServersAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetDnsServersAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetDnsServersAsync(d)); public static Task WanIpConnectionGetPortMappingNumberOfEntriesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetPortMappingNumberOfEntriesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetPortMappingNumberOfEntriesAsync(d)); public static Task WanIpConnectionGetExternalIpAddressAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetExternalIpAddressAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetExternalIpAddressAsync(d)); public static Task WanIpConnectionGetGenericPortMappingEntryAsync(this InternetGatewayDevice internetGatewayDevice, WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetGenericPortMappingEntryAsync(d, wanConnectionGetGenericPortMappingEntryRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanIpConnectionGetGenericPortMappingEntryAsync(d, wanConnectionGetGenericPortMappingEntryRequest)); public static Task WanPppConnectionGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetInfoAsync(d)); public static Task WanPppConnectionGetConnectionTypeInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetConnectionTypeInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetConnectionTypeInfoAsync(d)); public static Task WanPppConnectionGetStatusInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetStatusInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetStatusInfoAsync(d)); public static Task WanPppConnectionGetLinkLayerMaxBitRatesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetLinkLayerMaxBitRatesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetLinkLayerMaxBitRatesAsync(d)); public static Task WanPppConnectionGetUserNameAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetUserNameAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetUserNameAsync(d)); public static Task WanPppConnectionGetNatRsipStatusAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetNatRsipStatusAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetNatRsipStatusAsync(d)); public static Task WanPppConnectionGetDnsServersAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetDnsServersAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetDnsServersAsync(d)); public static Task WanPppConnectionGetPortMappingNumberOfEntriesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetPortMappingNumberOfEntriesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetPortMappingNumberOfEntriesAsync(d)); public static Task WanPppConnectionGetExternalIpAddressAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetExternalIpAddressAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetExternalIpAddressAsync(d)); public static Task WanPppConnectionGetAutoDisconnectTimeSpanAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetAutoDisconnectTimeSpanAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetAutoDisconnectTimeSpanAsync(d)); public static Task WanPppConnectionGetGenericPortMappingEntryAsync(this InternetGatewayDevice internetGatewayDevice, WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetGenericPortMappingEntryAsync(d, wanConnectionGetGenericPortMappingEntryRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanPppConnectionGetGenericPortMappingEntryAsync(d, wanConnectionGetGenericPortMappingEntryRequest)); public static Task WanEthernetLinkConfigGetEthernetLinkStatusAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanEthernetLinkConfigGetEthernetLinkStatusAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanEthernetLinkConfigGetEthernetLinkStatusAsync(d)); public static Task WanDslLinkConfigGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetInfoAsync(d)); public static Task WanDslLinkConfigGetDslLinkInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetDslLinkInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetDslLinkInfoAsync(d)); public static Task WanDslLinkConfigGetDestinationAddressAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetDestinationAddressAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetDestinationAddressAsync(d)); public static Task WanDslLinkConfigGetAtmEncapsulationAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetAtmEncapsulationAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetAtmEncapsulationAsync(d)); public static Task WanDslLinkConfigGetAutoConfigAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetAutoConfigAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetAutoConfigAsync(d)); public static Task WanDslLinkConfigGetStatisticsAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetStatisticsAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.WanDslLinkConfigGetStatisticsAsync(d)); public static Task AvmSpeedtestGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.AvmSpeedtestGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.AvmSpeedtestGetInfoAsync(d)); + + public static Task AvmSpeedtestGetStatisticsAsync(this InternetGatewayDevice internetGatewayDevice) + => internetGatewayDevice.ExecuteAsync((h, d) => h.AvmSpeedtestGetStatisticsAsync(d)); public static Task LanEthernetInterfaceConfigGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanEthernetInterfaceConfigGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanEthernetInterfaceConfigGetInfoAsync(d)); public static Task LanEthernetInterfaceConfigGetStatisticsAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanEthernetInterfaceConfigGetStatisticsAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanEthernetInterfaceConfigGetStatisticsAsync(d)); public static Task LanHostConfigManagementGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetInfoAsync(d)); public static Task LanHostConfigManagementGetSubnetMaskAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetSubnetMaskAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetSubnetMaskAsync(d)); public static Task LanHostConfigManagementGetIpRoutersListAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetIpRoutersListAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetIpRoutersListAsync(d)); public static Task LanHostConfigManagementGetAddressRangeAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetAddressRangeAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetAddressRangeAsync(d)); public static Task LanHostConfigManagementGetIpInterfaceNumberOfEntriesAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetIpInterfaceNumberOfEntriesAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetIpInterfaceNumberOfEntriesAsync(d)); public static Task LanHostConfigManagementGetDnsServersAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetDnsServersAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.LanHostConfigManagementGetDnsServersAsync(d)); public static Task WlanConfigurationGetInfoAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetInfoAsync(d), (h, d) => h.WlanConfiguration2GetInfoAsync(d), (h, d) => h.WlanConfiguration3GetInfoAsync(d), (h, d) => h.WlanConfiguration4GetInfoAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetInfoAsync(d), (h, d) => h.WlanConfiguration2GetInfoAsync(d), (h, d) => h.WlanConfiguration3GetInfoAsync(d), (h, d) => h.WlanConfiguration4GetInfoAsync(d))); public static Task WlanConfigurationGetWlanDeviceListPathAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration2GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration3GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration4GetWlanDeviceListPathAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration2GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration3GetWlanDeviceListPathAsync(d), (h, d) => h.WlanConfiguration4GetWlanDeviceListPathAsync(d))); public static Task WlanConfigurationGetBasBeaconSecurityPropertiesAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration2GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration3GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration4GetBasBeaconSecurityPropertiesAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration2GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration3GetBasBeaconSecurityPropertiesAsync(d), (h, d) => h.WlanConfiguration4GetBasBeaconSecurityPropertiesAsync(d))); public static Task WlanConfigurationGetBssIdAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBssIdAsync(d), (h, d) => h.WlanConfiguration2GetBssIdAsync(d), (h, d) => h.WlanConfiguration3GetBssIdAsync(d), (h, d) => h.WlanConfiguration4GetBssIdAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBssIdAsync(d), (h, d) => h.WlanConfiguration2GetBssIdAsync(d), (h, d) => h.WlanConfiguration3GetBssIdAsync(d), (h, d) => h.WlanConfiguration4GetBssIdAsync(d))); public static Task WlanConfigurationGetSsIdAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetSsIdAsync(d), (h, d) => h.WlanConfiguration2GetSsIdAsync(d), (h, d) => h.WlanConfiguration3GetSsIdAsync(d), (h, d) => h.WlanConfiguration4GetSsIdAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetSsIdAsync(d), (h, d) => h.WlanConfiguration2GetSsIdAsync(d), (h, d) => h.WlanConfiguration3GetSsIdAsync(d), (h, d) => h.WlanConfiguration4GetSsIdAsync(d))); public static Task WlanConfigurationGetBeaconTypeAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration2GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration3GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration4GetBeaconTypeAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration2GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration3GetBeaconTypeAsync(d), (h, d) => h.WlanConfiguration4GetBeaconTypeAsync(d))); public static Task WlanConfigurationGetChannelInfoAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration2GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration3GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration4GetChannelInfoAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration2GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration3GetChannelInfoAsync(d), (h, d) => h.WlanConfiguration4GetChannelInfoAsync(d))); public static Task WlanConfigurationGetBeaconAdvertisementAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration2GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration3GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration4GetBeaconAdvertisementAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration2GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration3GetBeaconAdvertisementAsync(d), (h, d) => h.WlanConfiguration4GetBeaconAdvertisementAsync(d))); public static Task WlanConfigurationGetTotalAssociationsAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration2GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration3GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration4GetTotalAssociationsAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration2GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration3GetTotalAssociationsAsync(d), (h, d) => h.WlanConfiguration4GetTotalAssociationsAsync(d))); public static Task WlanConfigurationGetIpTvOptimizedAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration2GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration3GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration4GetIpTvOptimizedAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration2GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration3GetIpTvOptimizedAsync(d), (h, d) => h.WlanConfiguration4GetIpTvOptimizedAsync(d))); public static Task WlanConfigurationGetStatisticsAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetStatisticsAsync(d), (h, d) => h.WlanConfiguration2GetStatisticsAsync(d), (h, d) => h.WlanConfiguration3GetStatisticsAsync(d), (h, d) => h.WlanConfiguration4GetStatisticsAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetStatisticsAsync(d), (h, d) => h.WlanConfiguration2GetStatisticsAsync(d), (h, d) => h.WlanConfiguration3GetStatisticsAsync(d), (h, d) => h.WlanConfiguration4GetStatisticsAsync(d))); public static Task WlanConfigurationGetPacketStatisticsAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration2GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration3GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration4GetPacketStatisticsAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration2GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration3GetPacketStatisticsAsync(d), (h, d) => h.WlanConfiguration4GetPacketStatisticsAsync(d))); public static Task WlanConfigurationGetNightControlAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetNightControlAsync(d), (h, d) => h.WlanConfiguration2GetNightControlAsync(d), (h, d) => h.WlanConfiguration3GetNightControlAsync(d), (h, d) => h.WlanConfiguration4GetNightControlAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetNightControlAsync(d), (h, d) => h.WlanConfiguration2GetNightControlAsync(d), (h, d) => h.WlanConfiguration3GetNightControlAsync(d), (h, d) => h.WlanConfiguration4GetNightControlAsync(d))); public static Task WlanConfigurationGetWlanHybridModeAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration2GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration3GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration4GetWlanHybridModeAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration2GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration3GetWlanHybridModeAsync(d), (h, d) => h.WlanConfiguration4GetWlanHybridModeAsync(d))); public static Task WlanConfigurationGetWlanExtInfoAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration2GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration3GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration4GetWlanExtInfoAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration2GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration3GetWlanExtInfoAsync(d), (h, d) => h.WlanConfiguration4GetWlanExtInfoAsync(d))); public static Task WlanConfigurationGetWpsInfoAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration2GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration3GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration4GetWpsInfoAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration2GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration3GetWpsInfoAsync(d), (h, d) => h.WlanConfiguration4GetWpsInfoAsync(d))); public static Task WlanConfigurationGetWlanConnectionInfoAsync(this InternetGatewayDevice internetGatewayDevice, int interfaceNumber) - { - return internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration2GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration3GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration4GetWlanConnectionInfoAsync(d))); - } + => internetGatewayDevice.ExecuteAsync(GetWlanOperation(interfaceNumber, (h, d) => h.WlanConfiguration1GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration2GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration3GetWlanConnectionInfoAsync(d), (h, d) => h.WlanConfiguration4GetWlanConnectionInfoAsync(d))); public static Task ManagementServerGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerGetInfoAsync(d)); public static Task ManagementServerGetTr069FirmwareDownloadEnabledAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerGetTr069FirmwareDownloadEnabledAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerGetTr069FirmwareDownloadEnabledAsync(d)); public static Task ManagementServerSetManagementServerUrlAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerUrlRequest managementServerSetManagementServerUrlRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerUrlAsync(d, managementServerSetManagementServerUrlRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerUrlAsync(d, managementServerSetManagementServerUrlRequest)); public static Task ManagementServerSetManagementServerUsernameAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerUsernameRequest managementServerSetManagementServerUsernameRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerUsernameAsync(d, managementServerSetManagementServerUsernameRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerUsernameAsync(d, managementServerSetManagementServerUsernameRequest)); public static Task ManagementServerSetManagementServerPasswordAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerPasswordRequest managementServerSetManagementServerPasswordRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerPasswordAsync(d, managementServerSetManagementServerPasswordRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetManagementServerPasswordAsync(d, managementServerSetManagementServerPasswordRequest)); public static Task ManagementServerSetPeriodicInformAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetPeriodicInformRequest managementServerSetPeriodicInformRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetPeriodicInformAsync(d, managementServerSetPeriodicInformRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetPeriodicInformAsync(d, managementServerSetPeriodicInformRequest)); public static Task ManagementServerSetConnectionRequestAuthenticationAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetConnectionRequestAuthenticationRequest managementServerSetConnectionRequestAuthenticationRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetConnectionRequestAuthenticationAsync(d, managementServerSetConnectionRequestAuthenticationRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetConnectionRequestAuthenticationAsync(d, managementServerSetConnectionRequestAuthenticationRequest)); public static Task ManagementServerSetUpgradeManagementAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetUpgradeManagementRequest managementServerSetUpgradeManagementRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetUpgradeManagementAsync(d, managementServerSetUpgradeManagementRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetUpgradeManagementAsync(d, managementServerSetUpgradeManagementRequest)); public static Task ManagementServerSetTr069EnableAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetTr069EnableRequest managementServerSetTr069EnableRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetTr069EnableAsync(d, managementServerSetTr069EnableRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetTr069EnableAsync(d, managementServerSetTr069EnableRequest)); public static Task ManagementServerSetTr069FirmwareDownloadEnabledAsync(this InternetGatewayDevice internetGatewayDevice, ManagementServerSetTr069FirmwareDownloadEnabledRequest managementServerSetTr069FirmwareDownloadEnabledRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetTr069FirmwareDownloadEnabledAsync(d, managementServerSetTr069FirmwareDownloadEnabledRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.ManagementServerSetTr069FirmwareDownloadEnabledAsync(d, managementServerSetTr069FirmwareDownloadEnabledRequest)); public static Task TimeGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.TimeGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.TimeGetInfoAsync(d)); public static Task TimeSetNtpServersAsync(this InternetGatewayDevice internetGatewayDevice, TimeSetNtpServersRequest timeSetNtpServersRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.TimeSetNtpServersAsync(d, timeSetNtpServersRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.TimeSetNtpServersAsync(d, timeSetNtpServersRequest)); public static Task UserInterfaceGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceGetInfoAsync(d)); public static Task UserInterfaceCheckUpdateAsync(this InternetGatewayDevice internetGatewayDevice, UserInterfaceCheckUpdateRequest userInterfaceCheckUpdateRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceCheckUpdateAsync(d, userInterfaceCheckUpdateRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceCheckUpdateAsync(d, userInterfaceCheckUpdateRequest)); public static Task UserInterfaceDoPrepareCgiAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoPrepareCgiAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoPrepareCgiAsync(d)); public static Task UserInterfaceDoUpdateAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoUpdateAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoUpdateAsync(d)); public static Task UserInterfaceDoManualUpdateAsync(this InternetGatewayDevice internetGatewayDevice, UserInterfaceDoManualUpdateRequest userInterfaceDoManualUpdateRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoManualUpdateAsync(d, userInterfaceDoManualUpdateRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceDoManualUpdateAsync(d, userInterfaceDoManualUpdateRequest)); public static Task UserInterfaceGetInternationalConfigAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceGetInternationalConfigAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceGetInternationalConfigAsync(d)); public static Task UserInterfaceSetInternationalConfigAsync(this InternetGatewayDevice internetGatewayDevice, UserInterfaceSetInternationalConfigRequest userInterfaceSetInternationalConfigRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceSetInternationalConfigAsync(d, userInterfaceSetInternationalConfigRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceSetInternationalConfigAsync(d, userInterfaceSetInternationalConfigRequest)); public static Task UserInterfaceAvmGetInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceAvmGetInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceAvmGetInfoAsync(d)); public static Task UserInterfaceSetConfigAsync(this InternetGatewayDevice internetGatewayDevice, UserInterfaceSetConfigRequest userInterfaceSetConfigRequest) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceSetConfigAsync(d, userInterfaceSetConfigRequest)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.UserInterfaceSetConfigAsync(d, userInterfaceSetConfigRequest)); public static Task DeviceConfigGetPersistentDataAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGetPersistentDataAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGetPersistentDataAsync(d)); public static Task DeviceConfigGenerateUuIdAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGenerateUuIdAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGenerateUuIdAsync(d)); public static Task DeviceConfigCreateUrlSidAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigCreateUrlSidAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigCreateUrlSidAsync(d)); public static Task DeviceConfigGetSupportDataInfoAsync(this InternetGatewayDevice internetGatewayDevice) - { - return internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGetSupportDataInfoAsync(d)); - } + => internetGatewayDevice.ExecuteAsync((h, d) => h.DeviceConfigGetSupportDataInfoAsync(d)); private static Func> GetWlanOperation( int interfaceNumber, diff --git a/RS.Fritz.Manager.API/Extensions/ServiceCollectionExtensions.cs b/RS.Fritz.Manager.API/Extensions/ServiceCollectionExtensions.cs index fd612f5..6bef4e8 100644 --- a/RS.Fritz.Manager.API/Extensions/ServiceCollectionExtensions.cs +++ b/RS.Fritz.Manager.API/Extensions/ServiceCollectionExtensions.cs @@ -53,7 +53,7 @@ private static IServiceCollection ConfigureHttpClients(this IServiceCollection s { SslOptions = new() { - RemoteCertificateValidationCallback = (_, _, _, sslPolicyErrors) => (sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == 0, + RemoteCertificateValidationCallback = (_, _, _, sslPolicyErrors) => (sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) is 0, CertificateChainPolicy = new() { DisableCertificateDownloads = true diff --git a/RS.Fritz.Manager.API/Extensions/TaskExtensions.cs b/RS.Fritz.Manager.API/Extensions/TaskExtensions.cs index a8cc128..0a0b250 100644 --- a/RS.Fritz.Manager.API/Extensions/TaskExtensions.cs +++ b/RS.Fritz.Manager.API/Extensions/TaskExtensions.cs @@ -8,14 +8,15 @@ public static class TaskExtensions /// /// The type of 's return value. /// The list of s who's exceptions will be handled. - /// Returns a that awaited and handled the original . - public static async Task WhenAllSafe(IEnumerable> tasks) + /// true to attempt to marshal the continuation back to the original context captured; otherwise, false. + /// Returns a that awaited and handled the original . + public static async ValueTask WhenAllSafe(IEnumerable> tasks, bool continueOnCapturedContext = false) { var whenAllTask = Task.WhenAll(tasks); try { - return await whenAllTask; + return await whenAllTask.ConfigureAwait(continueOnCapturedContext); } catch { @@ -31,14 +32,15 @@ public static async Task WhenAllSafe(IEnumerable> tasks) /// When using only the first thrown exception from a single may be observed. /// /// The list of s who's exceptions will be handled. - /// Returns a that awaited and handled the original . - public static async Task WhenAllSafe(IEnumerable tasks) + /// true to attempt to marshal the continuation back to the original context captured; otherwise, false. + /// Returns a that awaited and handled the original . + public static async ValueTask WhenAllSafe(IEnumerable tasks, bool continueOnCapturedContext = false) { var whenAllTask = Task.WhenAll(tasks); try { - await whenAllTask; + await whenAllTask.ConfigureAwait(continueOnCapturedContext); } catch { diff --git a/RS.Fritz.Manager.API/Infrastructure/ExceptionMessageBuilder.cs b/RS.Fritz.Manager.API/Infrastructure/ExceptionMessageBuilder.cs index 243105d..d17a317 100644 --- a/RS.Fritz.Manager.API/Infrastructure/ExceptionMessageBuilder.cs +++ b/RS.Fritz.Manager.API/Infrastructure/ExceptionMessageBuilder.cs @@ -5,9 +5,7 @@ public static class ExceptionMessageBuilder { public static string GetDetailedExceptionInfo(this Exception ex) - { - return new StringBuilder().GetExceptionInfo(ex).ToString(); - } + => new StringBuilder().GetExceptionInfo(ex).ToString(); private static StringBuilder GetExceptionInfo(this StringBuilder sb, Exception ex) { diff --git a/RS.Fritz.Manager.API/Properties/GlobalUsings.cs b/RS.Fritz.Manager.API/Properties/GlobalUsings.cs index 2c3bba9..2090e69 100644 --- a/RS.Fritz.Manager.API/Properties/GlobalUsings.cs +++ b/RS.Fritz.Manager.API/Properties/GlobalUsings.cs @@ -1,3 +1,5 @@ -#pragma warning disable SA1200 // Using directives should be placed correctly +#pragma warning disable IDE0065 // Misplaced using directive +#pragma warning disable SA1200 // Using directives should be placed correctly global using System.ServiceModel; -#pragma warning restore SA1200 // Using directives should be placed correctly \ No newline at end of file +#pragma warning restore SA1200 // Using directives should be placed correctly +#pragma warning restore IDE0065 // Misplaced using directive \ No newline at end of file diff --git a/RS.Fritz.Manager.API/RS.Fritz.Manager.API.csproj b/RS.Fritz.Manager.API/RS.Fritz.Manager.API.csproj index 5411bd8..8e5d940 100644 --- a/RS.Fritz.Manager.API/RS.Fritz.Manager.API.csproj +++ b/RS.Fritz.Manager.API/RS.Fritz.Manager.API.csproj @@ -1,11 +1,11 @@  - net7.0 + net8.0 RS.Fritz.Manager.API RS.Fritz.Manager.API RS.Fritz.Manager.API RS.Fritz.Manager.API - Copyright 2023 (c) RS. All rights reserved. + Copyright 2021-2024 (c) RS. All rights reserved. Rans4ckeR @@ -15,6 +15,7 @@ preview-all preview true + true enable enable 0.0.0.1 @@ -30,7 +31,6 @@ true true LGPL-3.0-or-later - true README.md true AnyCPU @@ -39,12 +39,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/Capture/CaptureControlService.cs b/RS.Fritz.Manager.API/Services/Capture/CaptureControlService.cs index 6d6ae30..e3d7d4a 100644 --- a/RS.Fritz.Manager.API/Services/Capture/CaptureControlService.cs +++ b/RS.Fritz.Manager.API/Services/Capture/CaptureControlService.cs @@ -2,35 +2,26 @@ using System.Globalization; -internal sealed class CaptureControlService : ICaptureControlService +internal sealed class CaptureControlService(IHttpClientFactory httpClientFactory, INetworkService networkService) : ICaptureControlService { - private readonly IHttpClientFactory httpClientFactory; - private readonly INetworkService networkService; - - public CaptureControlService(IHttpClientFactory httpClientFactory, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.networkService = networkService; - } - - public async Task> GetInterfacesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask> GetInterfacesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { - string sid = await GetSidAsync(internetGatewayDevice); + string sid = await GetSidAsync(internetGatewayDevice).ConfigureAwait(false); Uri captureUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, 443, "/data.lua"); HttpClient httpClient = httpClientFactory.CreateClient(Constants.DefaultHttpClientName); - var content = new FormUrlEncodedContent(new Dictionary + using var content = new FormUrlEncodedContent(new Dictionary { { "xhr", "1" }, { "sid", sid }, { "oldpage", "/capture.lua" }, { "page", "cap" } }); - using HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(captureUri, content, cancellationToken); - string responseContent = await httpResponseMessage.EnsureSuccessStatusCode().Content.ReadAsStringAsync(cancellationToken); + using HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(captureUri, content, cancellationToken).ConfigureAwait(false); + string responseContent = await httpResponseMessage.EnsureSuccessStatusCode().Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); var captureInterfaceGroups = new List(); int groupNameBeginPosition = -1; - while ((groupNameBeginPosition = responseContent.IndexOf("

", groupNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase)) != -1) + while ((groupNameBeginPosition = responseContent.IndexOf("

", groupNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase)) is not -1) { int groupNameEndPosition = responseContent.IndexOf("

", groupNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase); string groupName = responseContent[(groupNameBeginPosition + "

".Length)..groupNameEndPosition]; @@ -38,34 +29,34 @@ public async Task> GetInterfacesAsync(Interne int nextGroupNameBeginPosition = responseContent.IndexOf("

", groupNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase); var captureInterfaces = new List(); - while ((interfaceNameBeginPosition = responseContent.IndexOf("", interfaceNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase)) != -1 && interfaceNameBeginPosition < nextGroupNameBeginPosition) + while ((interfaceNameBeginPosition = responseContent.IndexOf("", interfaceNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase)) is not -1 && interfaceNameBeginPosition < nextGroupNameBeginPosition) { int interfaceNameEndPosition = responseContent.IndexOf("", interfaceNameBeginPosition + 1, StringComparison.OrdinalIgnoreCase); string interfaceName = responseContent[(interfaceNameBeginPosition + "".Length)..interfaceNameEndPosition]; int startParameterBeginPosition = responseContent.IndexOf("\" value=\"", interfaceNameEndPosition + 1, StringComparison.OrdinalIgnoreCase) + "\" value=\"".Length; - int startParameterEndPosition = responseContent.IndexOf("\"", startParameterBeginPosition + 1, StringComparison.OrdinalIgnoreCase); + int startParameterEndPosition = responseContent.IndexOf('"', startParameterBeginPosition + 1); string startParameter = responseContent[startParameterBeginPosition..startParameterEndPosition]; int stopParameterBeginPosition = responseContent.IndexOf("\" value=\"", startParameterEndPosition + 1, StringComparison.OrdinalIgnoreCase) + "\" value=\"".Length; - int stopParameterEndPosition = responseContent.IndexOf("\"", stopParameterBeginPosition + 1, StringComparison.OrdinalIgnoreCase); + int stopParameterEndPosition = responseContent.IndexOf('"', stopParameterBeginPosition + 1); string stopParameter = responseContent[stopParameterBeginPosition..stopParameterEndPosition]; string[] stopParameterParts = stopParameter.Split(';'); captureInterfaces.Add(new(interfaceName, startParameter, stopParameterParts[0], stopParameterParts[1], stopParameterParts[2])); } - if (captureInterfaces.Any()) + if (captureInterfaces.Count is not 0) captureInterfaceGroups.Add(new(groupName, captureInterfaces)); } return captureInterfaceGroups; } - public async Task StartCaptureAsync(InternetGatewayDevice internetGatewayDevice, FileInfo fileInfo, CaptureInterface captureInterface, int packetCaptureSizeLimit = 1600, CancellationToken cancellationToken = default) + public async ValueTask StartCaptureAsync(InternetGatewayDevice internetGatewayDevice, FileInfo fileInfo, CaptureInterface captureInterface, int packetCaptureSizeLimit = 1600, CancellationToken cancellationToken = default) { - string sid = await GetSidAsync(internetGatewayDevice); + string sid = await GetSidAsync(internetGatewayDevice).ConfigureAwait(false); Uri captureUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, 443, FormattableString.Invariant($"/cgi-bin/capture_notimeout?sid={sid}&capture=Start&snaplen={packetCaptureSizeLimit}&ifaceorminor={captureInterface.InterfaceOrMinor}")); HttpClient httpClient = httpClientFactory.CreateClient(Constants.DefaultHttpClientName); - using HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(captureUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken); + using HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(captureUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); Stream downloadStream = await httpResponseMessage.EnsureSuccessStatusCode().Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); await using (downloadStream.ConfigureAwait(false)) @@ -74,26 +65,26 @@ public async Task StartCaptureAsync(InternetGatewayDevice internetGatewayDevice, await using (fileStream.ConfigureAwait(false)) { - await downloadStream.CopyToAsync(fileStream, cancellationToken); + await downloadStream.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false); } } } - public async Task StopCaptureAsync(InternetGatewayDevice internetGatewayDevice, CaptureInterface captureInterface, CancellationToken cancellationToken = default) + public async ValueTask StopCaptureAsync(InternetGatewayDevice internetGatewayDevice, CaptureInterface captureInterface, CancellationToken cancellationToken = default) { - string sid = await GetSidAsync(internetGatewayDevice); + string sid = await GetSidAsync(internetGatewayDevice).ConfigureAwait(false); string timeString20 = DateTime.UtcNow.Ticks.ToString("D20", CultureInfo.InvariantCulture); string timeId = FormattableString.Invariant($"t{timeString20[^13..]}"); Uri captureUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, 443, FormattableString.Invariant($"/cgi-bin/capture_notimeout?iface={captureInterface.Interface}&minor={captureInterface.Minor}&type={captureInterface.Type}&capture=Stop&sid={sid}&useajax=1&xhr=1&{timeId}=nocache")); HttpClient httpClient = httpClientFactory.CreateClient(Constants.DefaultHttpClientName); - using HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(captureUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken); + using HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(captureUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); _ = httpResponseMessage.EnsureSuccessStatusCode(); } - private static async Task GetSidAsync(InternetGatewayDevice internetGatewayDevice) + private static async ValueTask GetSidAsync(InternetGatewayDevice internetGatewayDevice) { - DeviceConfigCreateUrlSidResponse deviceConfigCreateUrlSidResponse = await internetGatewayDevice.DeviceConfigCreateUrlSidAsync(); + DeviceConfigCreateUrlSidResponse deviceConfigCreateUrlSidResponse = await internetGatewayDevice.DeviceConfigCreateUrlSidAsync().ConfigureAwait(false); return deviceConfigCreateUrlSidResponse.UrlSid.Replace("sid=", null, StringComparison.OrdinalIgnoreCase); } diff --git a/RS.Fritz.Manager.API/Services/Capture/ICaptureControlService.cs b/RS.Fritz.Manager.API/Services/Capture/ICaptureControlService.cs index 7fd4e86..4740e72 100644 --- a/RS.Fritz.Manager.API/Services/Capture/ICaptureControlService.cs +++ b/RS.Fritz.Manager.API/Services/Capture/ICaptureControlService.cs @@ -2,9 +2,9 @@ public interface ICaptureControlService { - Task> GetInterfacesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask> GetInterfacesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); - Task StartCaptureAsync(InternetGatewayDevice internetGatewayDevice, FileInfo fileInfo, CaptureInterface captureInterface, int packetCaptureSizeLimit = 1600, CancellationToken cancellationToken = default); + ValueTask StartCaptureAsync(InternetGatewayDevice internetGatewayDevice, FileInfo fileInfo, CaptureInterface captureInterface, int packetCaptureSizeLimit = 1600, CancellationToken cancellationToken = default); - Task StopCaptureAsync(InternetGatewayDevice internetGatewayDevice, CaptureInterface captureInterface, CancellationToken cancellationToken = default); + ValueTask StopCaptureAsync(InternetGatewayDevice internetGatewayDevice, CaptureInterface captureInterface, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/DeviceHosts/DeviceHostsService.cs b/RS.Fritz.Manager.API/Services/DeviceHosts/DeviceHostsService.cs index b8ac6c3..9920ab0 100644 --- a/RS.Fritz.Manager.API/Services/DeviceHosts/DeviceHostsService.cs +++ b/RS.Fritz.Manager.API/Services/DeviceHosts/DeviceHostsService.cs @@ -3,20 +3,11 @@ using System.Runtime.Serialization; using System.Xml; -internal sealed class DeviceHostsService : IDeviceHostsService +internal sealed class DeviceHostsService(IHttpClientFactory httpClientFactory, INetworkService networkService) : IDeviceHostsService { - private readonly IHttpClientFactory httpClientFactory; - private readonly INetworkService networkService; - - public DeviceHostsService(IHttpClientFactory httpClientFactory, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.networkService = networkService; - } - - public async Task GetDeviceHostsAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask GetDeviceHostsAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { - HostsGetHostListPathResponse hostsGetHostListPathResponse = await internetGatewayDevice.HostsGetHostListPathAsync(); + HostsGetHostListPathResponse hostsGetHostListPathResponse = await internetGatewayDevice.HostsGetHostListPathAsync().ConfigureAwait(false); string hostListPath = hostsGetHostListPathResponse.HostListPath; Uri hostListPathUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, internetGatewayDevice.SecurityPort!.Value, hostListPath); Stream deviceHostsListXmlStream = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).GetStreamAsync(hostListPathUri, cancellationToken).ConfigureAwait(false); diff --git a/RS.Fritz.Manager.API/Services/DeviceHosts/Entities/DeviceHost.cs b/RS.Fritz.Manager.API/Services/DeviceHosts/Entities/DeviceHost.cs index 92d542c..3c177e7 100644 --- a/RS.Fritz.Manager.API/Services/DeviceHosts/Entities/DeviceHost.cs +++ b/RS.Fritz.Manager.API/Services/DeviceHosts/Entities/DeviceHost.cs @@ -18,6 +18,11 @@ public readonly record struct DeviceHost( [property: DataMember(Name = "X_AVM-DE_Model", Order = 11)] string Model, [property: DataMember(Name = "X_AVM-DE_URL", Order = 12)] string Url, [property: DataMember(Name = "X_AVM-DE_Guest", Order = 13)] bool Guest, - [property: DataMember(Name = "X_AVM-DE_VPN", Order = 14)] bool Vpn, - [property: DataMember(Name = "X_AVM-DE_WANAccess", Order = 15)] string WanAccess, - [property: DataMember(Name = "X_AVM-DE_Disallow", Order = 16)] bool Disallow); \ No newline at end of file + [property: DataMember(Name = "X_AVM-DE_RequestClient", Order = 14)] bool RequestClient, + [property: DataMember(Name = "X_AVM-DE_VPN", Order = 15)] bool Vpn, + [property: DataMember(Name = "X_AVM-DE_WANAccess", Order = 16)] string WanAccess, + [property: DataMember(Name = "X_AVM-DE_Disallow", Order = 17)] bool Disallow, + [property: DataMember(Name = "X_AVM-DE_IsMeshable", Order = 18)] bool IsMeshable, + [property: DataMember(Name = "X_AVM-DE_Priority", Order = 19)] bool Priority, + [property: DataMember(Name = "X_AVM-DE_FriendlyName", Order = 20)] string FriendlyName, + [property: DataMember(Name = "X_AVM-DE_FriendlyNameIsWriteable", Order = 21)] bool FriendlyNameIsWriteable); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/DeviceHosts/IDeviceHostsService.cs b/RS.Fritz.Manager.API/Services/DeviceHosts/IDeviceHostsService.cs index a6ead7a..838bf5e 100644 --- a/RS.Fritz.Manager.API/Services/DeviceHosts/IDeviceHostsService.cs +++ b/RS.Fritz.Manager.API/Services/DeviceHosts/IDeviceHostsService.cs @@ -2,5 +2,5 @@ public interface IDeviceHostsService { - Task GetDeviceHostsAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask GetDeviceHostsAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/Discovery/DeviceSearchService.cs b/RS.Fritz.Manager.API/Services/Discovery/DeviceSearchService.cs index 38444fb..65956f3 100644 --- a/RS.Fritz.Manager.API/Services/Discovery/DeviceSearchService.cs +++ b/RS.Fritz.Manager.API/Services/Discovery/DeviceSearchService.cs @@ -7,39 +7,27 @@ using System.Text; using System.Xml; -internal sealed class DeviceSearchService : IDeviceSearchService +internal sealed class DeviceSearchService(IHttpClientFactory httpClientFactory, IFritzServiceOperationHandler fritzServiceOperationHandler, IUsersService usersService, INetworkService networkService) + : IDeviceSearchService { private const string InternetGatewayDeviceDeviceType = "urn:dslforum-org:device:InternetGatewayDevice:1"; private const int UPnPMultiCastPort = 1900; private const int ReceiveTimeoutInSeconds = 2; private const int DefaultSendCount = 1; - private readonly IHttpClientFactory httpClientFactory; - private readonly IFritzServiceOperationHandler fritzServiceOperationHandler; - private readonly IUsersService usersService; - private readonly INetworkService networkService; - - public DeviceSearchService(IHttpClientFactory httpClientFactory, IFritzServiceOperationHandler fritzServiceOperationHandler, IUsersService usersService, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.fritzServiceOperationHandler = fritzServiceOperationHandler; - this.usersService = usersService; - this.networkService = networkService; - } - public async ValueTask> GetDevicesAsync(string? deviceType = null, int? sendCount = null, int? timeout = null, CancellationToken cancellationToken = default) { deviceType ??= InternetGatewayDeviceDeviceType; timeout ??= ReceiveTimeoutInSeconds * 1000; sendCount ??= DefaultSendCount; - IEnumerable<(IPAddress LocalIpAddress, IEnumerable Responses)> rawDeviceResponses = await GetRawDeviceResponses(deviceType, sendCount.Value, timeout.Value, cancellationToken); + IEnumerable<(IPAddress LocalIpAddress, IEnumerable Responses)> rawDeviceResponses = await GetRawDeviceResponses(deviceType, sendCount.Value, timeout.Value, cancellationToken).ConfigureAwait(false); IEnumerable<(IPAddress LocalIpAddress, IEnumerable> Responses)> formattedDeviceResponses = rawDeviceResponses.Select(q => (q.LocalIpAddress, GetFormattedDeviceResponses(q.Responses))); IEnumerable> groupedInternetGatewayDeviceResponses = GetGroupedInternetGatewayDeviceResponses(formattedDeviceResponses); - return await TaskExtensions.WhenAllSafe(groupedInternetGatewayDeviceResponses.Select(q => GetInternetGatewayDeviceAsync(q, cancellationToken))); + return await TaskExtensions.WhenAllSafe(groupedInternetGatewayDeviceResponses.Select(q => GetInternetGatewayDeviceAsync(q, cancellationToken))).ConfigureAwait(false); } private static IEnumerable> GetGroupedInternetGatewayDeviceResponses( @@ -58,7 +46,7 @@ private static IEnumerable> GetFormattedDeviceRespons { string value = s[s.IndexOf(':', StringComparison.OrdinalIgnoreCase)..]; - if (value.EndsWith(":", StringComparison.OrdinalIgnoreCase)) + if (value.EndsWith(':')) return value.Replace(":", null, StringComparison.OrdinalIgnoreCase); return value.Replace(": ", null, StringComparison.OrdinalIgnoreCase); @@ -66,7 +54,7 @@ private static IEnumerable> GetFormattedDeviceRespons StringComparer.OrdinalIgnoreCase)); } - private static async ValueTask ReceiveAsync(Socket socket, ICollection responses, int receiveTimeout, CancellationToken cancellationToken) + private static async ValueTask ReceiveAsync(Socket socket, List responses, int receiveTimeout, CancellationToken cancellationToken) { using IMemoryOwner memoryOwner = MemoryPool.Shared.Rent(4096); using var timeoutCancellationTokenSource = new CancellationTokenSource(receiveTimeout); @@ -78,7 +66,7 @@ private static async ValueTask ReceiveAsync(Socket socket, ICollection r try { - int bytesReceived = await socket.ReceiveAsync(buffer, SocketFlags.None, linkedCancellationTokenSource.Token); + int bytesReceived = await socket.ReceiveAsync(buffer, SocketFlags.None, linkedCancellationTokenSource.Token).ConfigureAwait(false); responses.Add(Encoding.UTF8.GetString(buffer.Span[..bytesReceived])); } @@ -122,10 +110,10 @@ private Uri ParseLocation((IPAddress LocalIpAddress, Uri Location) location) for (int i = 0; i < sendCount; i++) { - _ = await socket.SendToAsync(buffer, SocketFlags.None, multiCastIpEndPoint, cancellationToken); + _ = await socket.SendToAsync(buffer, SocketFlags.None, multiCastIpEndPoint, cancellationToken).ConfigureAwait(false); } - await ReceiveAsync(socket, responses, receiveTimeout, cancellationToken); + await ReceiveAsync(socket, responses, receiveTimeout, cancellationToken).ConfigureAwait(false); return new(unicastAddress, responses); } @@ -136,7 +124,7 @@ private Uri ParseLocation((IPAddress LocalIpAddress, Uri Location) location) IEnumerable multicastAddresses = networkService.GetMulticastAddresses(); (IPAddress LocalIpAddress, IEnumerable Responses)[] localAddressesDeviceResponses = await TaskExtensions.WhenAllSafe(multicastAddresses.SelectMany(q => unicastAddresses.Where(r => r.AddressFamily == q.AddressFamily).Select(r => SearchDevicesAsync(r, q, deviceType, sendCount, timeout, cancellationToken)))).ConfigureAwait(false); - return localAddressesDeviceResponses.Where(q => q.Responses.Any(r => r.Any())).Select(q => (q.LocalIpAddress, q.Responses)).Distinct(); + return localAddressesDeviceResponses.Where(q => q.Responses.Any(r => r.Length is not 0)).Select(q => (q.LocalIpAddress, q.Responses)).Distinct(); } private async ValueTask GetUPnPDescription(Uri uri, CancellationToken cancellationToken) @@ -165,7 +153,7 @@ private async Task GetInternetGatewayDeviceAsync(IGroupin internetGatewayDeviceResponses.Select(r => r.Ext).Distinct().Single(), internetGatewayDeviceResponses.Select(r => r.SearchTarget).Distinct().Single(), internetGatewayDeviceResponses.Key, - await GetUPnPDescription(preferredLocation, cancellationToken), + await GetUPnPDescription(preferredLocation, cancellationToken).ConfigureAwait(false), preferredLocation, internetGatewayDeviceResponses.Select(r => r.LocalIpAddress).Distinct().ToList().AsReadOnly()); } diff --git a/RS.Fritz.Manager.API/Services/Discovery/Entities/Device.cs b/RS.Fritz.Manager.API/Services/Discovery/Entities/Device.cs index dfdbfa1..7a99041 100644 --- a/RS.Fritz.Manager.API/Services/Discovery/Entities/Device.cs +++ b/RS.Fritz.Manager.API/Services/Discovery/Entities/Device.cs @@ -13,8 +13,9 @@ public readonly record struct Device( [property: DataMember(Name = "modelNumber", Order = 6)] string ModelNumber, [property: DataMember(Name = "modelURL", Order = 7)] string ModelUrl, [property: DataMember(Name = "UDN", Order = 8)] string UniqueDeviceName, - [property: DataMember(Name = "UPC", Order = 9)] string Upc, - [property: DataMember(Name = "iconList", Order = 10)] IconListItem[] IconList, - [property: DataMember(Name = "serviceList", Order = 11)] ServiceListItem[] ServiceList, - [property: DataMember(Name = "deviceList", Order = 12)] Device[]? DeviceList, - [property: DataMember(Name = "presentationURL", Order = 13)] string PresentationUrl); \ No newline at end of file + [property: DataMember(Name = "serialNumber", Order = 9)] string SerialNumber, + [property: DataMember(Name = "UPC", Order = 10)] string Upc, + [property: DataMember(Name = "iconList", Order = 11)] IconListItem[] IconList, + [property: DataMember(Name = "serviceList", Order = 12)] ServiceListItem[] ServiceList, + [property: DataMember(Name = "deviceList", Order = 13)] Device[]? DeviceList, + [property: DataMember(Name = "presentationURL", Order = 14)] string PresentationUrl); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshService.cs b/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshService.cs index 0ede2c9..6274b46 100644 --- a/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshService.cs +++ b/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshService.cs @@ -2,27 +2,18 @@ using System.Text.Json; -internal sealed class DeviceMeshService : IDeviceMeshService +internal sealed class DeviceMeshService(IHttpClientFactory httpClientFactory, INetworkService networkService) : IDeviceMeshService { - private readonly IHttpClientFactory httpClientFactory; - private readonly INetworkService networkService; - - public DeviceMeshService(IHttpClientFactory httpClientFactory, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.networkService = networkService; - } - - public async Task GetDeviceMeshAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask GetDeviceMeshAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { - HostsGetMeshListPathResponse hostsGetMeshListPathResponse = await internetGatewayDevice.HostsGetMeshListPathAsync(); + HostsGetMeshListPathResponse hostsGetMeshListPathResponse = await internetGatewayDevice.HostsGetMeshListPathAsync().ConfigureAwait(false); string meshListPath = hostsGetMeshListPathResponse.MeshListPath; Uri meshListPathUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, internetGatewayDevice.SecurityPort!.Value, meshListPath); Stream deviceMeshJsonStream = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).GetStreamAsync(meshListPathUri, cancellationToken).ConfigureAwait(false); await using (deviceMeshJsonStream.ConfigureAwait(false)) { - var deviceMesh = (DeviceMesh)(await JsonSerializer.DeserializeAsync(deviceMeshJsonStream, typeof(DeviceMesh), cancellationToken: cancellationToken))!; + var deviceMesh = (DeviceMesh)(await JsonSerializer.DeserializeAsync(deviceMeshJsonStream, typeof(DeviceMesh), cancellationToken: cancellationToken).ConfigureAwait(false))!; return new(meshListPath, meshListPathUri, deviceMesh); } diff --git a/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshStreamConfigurationArrayJsonConverter.cs b/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshStreamConfigurationArrayJsonConverter.cs index b647e97..2589365 100644 --- a/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshStreamConfigurationArrayJsonConverter.cs +++ b/RS.Fritz.Manager.API/Services/MeshHosts/DeviceMeshStreamConfigurationArrayJsonConverter.cs @@ -11,36 +11,36 @@ public override bool CanConvert(Type typeToConvert) => public override DeviceMeshStreamConfiguration[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - if (reader.TokenType != JsonTokenType.StartArray) + if (reader.TokenType is not JsonTokenType.StartArray) throw new JsonException(); var deviceMeshStreamConfigurations = new Collection(); while (reader.Read()) { - if (reader.TokenType == JsonTokenType.EndArray) + if (reader.TokenType is JsonTokenType.EndArray) return deviceMeshStreamConfigurations.ToArray(); - if (reader.TokenType != JsonTokenType.StartArray) + if (reader.TokenType is not JsonTokenType.StartArray) throw new JsonException(); _ = reader.Read(); - if (reader.TokenType != JsonTokenType.String) + if (reader.TokenType is not JsonTokenType.String) throw new JsonException(); string channelWidth = reader.GetString()!; _ = reader.Read(); - if (reader.TokenType != JsonTokenType.Number) + if (reader.TokenType is not JsonTokenType.Number) throw new JsonException(); int supportedStreamCount = reader.GetInt32(); _ = reader.Read(); - if (reader.TokenType != JsonTokenType.EndArray) + if (reader.TokenType is not JsonTokenType.EndArray) throw new JsonException(); deviceMeshStreamConfigurations.Add(new(channelWidth, supportedStreamCount)); @@ -50,7 +50,5 @@ public override DeviceMeshStreamConfiguration[] Read(ref Utf8JsonReader reader, } public override void Write(Utf8JsonWriter writer, DeviceMeshStreamConfiguration[] value, JsonSerializerOptions options) - { - throw new NotSupportedException(); - } + => throw new NotSupportedException(); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/MeshHosts/IDeviceMeshService.cs b/RS.Fritz.Manager.API/Services/MeshHosts/IDeviceMeshService.cs index 95af3ac..c2ba0a4 100644 --- a/RS.Fritz.Manager.API/Services/MeshHosts/IDeviceMeshService.cs +++ b/RS.Fritz.Manager.API/Services/MeshHosts/IDeviceMeshService.cs @@ -2,5 +2,5 @@ public interface IDeviceMeshService { - Task GetDeviceMeshAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask GetDeviceMeshAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/Shared/NetworkService.cs b/RS.Fritz.Manager.API/Services/Shared/NetworkService.cs index 6a5474c..3c30ffa 100644 --- a/RS.Fritz.Manager.API/Services/Shared/NetworkService.cs +++ b/RS.Fritz.Manager.API/Services/Shared/NetworkService.cs @@ -71,5 +71,6 @@ private static bool IsInRange(string startIpAddress, string endIpAddress, IPAddr private static IEnumerable GetIpInterfaces() => NetworkInterface.GetAllNetworkInterfaces() .Where(q => q.OperationalStatus is OperationalStatus.Up && q.NetworkInterfaceType is not NetworkInterfaceType.Loopback) - .Select(q => q.GetIPProperties()); + .Select(q => q.GetIPProperties()) + .Where(q => q.GatewayAddresses.Count is not 0); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/FritzServiceClient.cs b/RS.Fritz.Manager.API/Services/TR-064/FritzServiceClient.cs index d6a86d1..5c101e3 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/FritzServiceClient.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/FritzServiceClient.cs @@ -14,7 +14,7 @@ protected FritzServiceClient(FritzServiceEndpointConfiguration endpointConfigura { Endpoint.Name = endpointConfiguration.ToString(); - SetSslProtocols(SslProtocols.Tls12); + SetSslProtocols(SslProtocols.None); SetCredentials(networkCredential); } diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsRequest.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsRequest.cs new file mode 100644 index 0000000..c4e65b1 --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsRequest.cs @@ -0,0 +1,4 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetStatistics")] +public readonly record struct AvmSpeedtestGetStatisticsRequest; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsResponse.cs new file mode 100644 index 0000000..b7812d6 --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/Entities/AvmSpeedtestGetStatisticsResponse.cs @@ -0,0 +1,10 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetStatisticsResponse")] +public readonly record struct AvmSpeedtestGetStatisticsResponse( + [property: MessageBodyMember(Name = "NewByteCount")] uint ByteCount, + [property: MessageBodyMember(Name = "NewKbitsCurrent")] uint KilobitsCurrent, + [property: MessageBodyMember(Name = "NewKbitsAvg")] uint KilobitsAverage, + [property: MessageBodyMember(Name = "NewPacketCount")] uint PacketCount, + [property: MessageBodyMember(Name = "NewPPSCurrent")] uint PacketsPerSecondCurrent, + [property: MessageBodyMember(Name = "NewPPSAvg")] uint PacketsPerSecondAverage); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/FritzAvmSpeedtestService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/FritzAvmSpeedtestService.cs index 4db63ce..9b6d8e1 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/FritzAvmSpeedtestService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/FritzAvmSpeedtestService.cs @@ -2,17 +2,14 @@ using System.Net; -internal sealed class FritzAvmSpeedtestService : FritzServiceClient, IFritzAvmSpeedtestService +internal sealed class FritzAvmSpeedtestService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzAvmSpeedtestService { public const string ControlUrl = "/upnp/control/x_speedtest"; - public FritzAvmSpeedtestService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(AvmSpeedtestGetInfoRequest avmSpeedtestGetInfoRequest) - { - return Channel.GetInfoAsync(avmSpeedtestGetInfoRequest); - } + => Channel.GetInfoAsync(avmSpeedtestGetInfoRequest); + + public Task GetStatisticsAsync(AvmSpeedtestGetStatisticsRequest avmSpeedtestGetStatisticsRequest) + => Channel.GetStatisticsAsync(avmSpeedtestGetStatisticsRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/IFritzAvmSpeedtestService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/IFritzAvmSpeedtestService.cs index 5978da4..3c55f36 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/IFritzAvmSpeedtestService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/AvmSpeedtest/IFritzAvmSpeedtestService.cs @@ -2,10 +2,15 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:X_AVM-DE_Speedtest:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzAvmSpeedtestService +internal interface IFritzAvmSpeedtestService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:X_AVM-DE_Speedtest:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] [FaultContract(typeof(UPnPFault2))] Task GetInfoAsync(AvmSpeedtestGetInfoRequest avmSpeedtestGetInfoRequest); + + [OperationContract(Action = "urn:dslforum-org:service:X_AVM-DE_Speedtest:1#GetStatistics")] + [FaultContract(typeof(UPnPFault1))] + [FaultContract(typeof(UPnPFault2))] + Task GetStatisticsAsync(AvmSpeedtestGetStatisticsRequest avmSpeedtestGetStatisticsRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/FritzDeviceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/FritzDeviceConfigService.cs index e88b61c..c91d583 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/FritzDeviceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/FritzDeviceConfigService.cs @@ -2,32 +2,20 @@ using System.Net; -internal sealed class FritzDeviceConfigService : FritzServiceClient, IFritzDeviceConfigService +internal sealed class FritzDeviceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzDeviceConfigService { public const string ControlUrl = "/upnp/control/deviceconfig"; - public FritzDeviceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetPersistentDataAsync(DeviceConfigGetPersistentDataRequest deviceConfigGetPersistentDataRequest) - { - return Channel.GetPersistentDataAsync(deviceConfigGetPersistentDataRequest); - } + => Channel.GetPersistentDataAsync(deviceConfigGetPersistentDataRequest); public Task GenerateUuIdAsync(DeviceConfigGenerateUuIdRequest deviceConfigGenerateUuIdRequest) - { - return Channel.GenerateUuIdAsync(deviceConfigGenerateUuIdRequest); - } + => Channel.GenerateUuIdAsync(deviceConfigGenerateUuIdRequest); public Task CreateUrlSidAsync(DeviceConfigCreateUrlSidRequest deviceConfigCreateUrlSidRequest) - { - return Channel.CreateUrlSidAsync(deviceConfigCreateUrlSidRequest); - } + => Channel.CreateUrlSidAsync(deviceConfigCreateUrlSidRequest); public Task GetSupportDataInfoAsync(DeviceConfigGetSupportDataInfoRequest deviceConfigGetSupportDataInfoRequest) - { - return Channel.GetSupportDataInfoAsync(deviceConfigGetSupportDataInfoRequest); - } + => Channel.GetSupportDataInfoAsync(deviceConfigGetSupportDataInfoRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/IFritzDeviceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/IFritzDeviceConfigService.cs index e9eb228..d4f343a 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/IFritzDeviceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceConfig/IFritzDeviceConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:DeviceConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzDeviceConfigService +internal interface IFritzDeviceConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:DeviceConfig:1#GetPersistentData")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/FritzDeviceInfoService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/FritzDeviceInfoService.cs index 682ef38..c25c944 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/FritzDeviceInfoService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/FritzDeviceInfoService.cs @@ -2,32 +2,20 @@ using System.Net; -internal sealed class FritzDeviceInfoService : FritzServiceClient, IFritzDeviceInfoService +internal sealed class FritzDeviceInfoService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential? networkCredential = null) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzDeviceInfoService { public const string ControlUrl = "/upnp/control/deviceinfo"; - public FritzDeviceInfoService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential? networkCredential = null) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetSecurityPortAsync(DeviceInfoGetSecurityPortRequest deviceInfoGetSecurityPortRequest) - { - return Channel.GetSecurityPortAsync(deviceInfoGetSecurityPortRequest); - } + => Channel.GetSecurityPortAsync(deviceInfoGetSecurityPortRequest); public Task GetInfoAsync(DeviceInfoGetInfoRequest deviceInfoGetInfoRequest) - { - return Channel.GetInfoAsync(deviceInfoGetInfoRequest); - } + => Channel.GetInfoAsync(deviceInfoGetInfoRequest); public Task GetDeviceLogAsync(DeviceInfoGetDeviceLogRequest deviceInfoGetDeviceLogRequest) - { - return Channel.GetDeviceLogAsync(deviceInfoGetDeviceLogRequest); - } + => Channel.GetDeviceLogAsync(deviceInfoGetDeviceLogRequest); public Task SetProvisioningCodeAsync(DeviceInfoSetProvisioningCodeRequest setProvisioningCodeRequest) - { - return Channel.SetProvisioningCodeAsync(setProvisioningCodeRequest); - } + => Channel.SetProvisioningCodeAsync(setProvisioningCodeRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/IFritzDeviceInfoService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/IFritzDeviceInfoService.cs index 03f612f..f48ca39 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/IFritzDeviceInfoService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/DeviceInfo/IFritzDeviceInfoService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:DeviceInfo:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzDeviceInfoService +internal interface IFritzDeviceInfoService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:DeviceInfo:1#GetSecurityPort")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameRequest.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameRequest.cs new file mode 100644 index 0000000..448167e --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameRequest.cs @@ -0,0 +1,4 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetFriendlyName")] +public readonly record struct HostsGetFriendlyNameRequest; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameResponse.cs new file mode 100644 index 0000000..a485f57 --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetFriendlyNameResponse.cs @@ -0,0 +1,5 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetFriendlyNameResponse")] +public readonly record struct HostsGetFriendlyNameResponse( + [property: MessageBodyMember(Name = "NewX_AVM-DE_FriendlyName")] string FriendlyName); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoRequest.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoRequest.cs new file mode 100644 index 0000000..d5f838e --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoRequest.cs @@ -0,0 +1,4 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetInfo")] +public readonly record struct HostsGetInfoRequest; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoResponse.cs new file mode 100644 index 0000000..d12b1d0 --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsGetInfoResponse.cs @@ -0,0 +1,9 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "GetInfoResponse")] +public readonly record struct HostsGetInfoResponse( + [property: MessageBodyMember(Name = "NewX_AVM-DE_FriendlynameMinChars")] ushort FriendlynameMinChar, + [property: MessageBodyMember(Name = "NewX_AVM-DE_FriendlynameMaxChars")] ushort FriendlynameMaxChars, + [property: MessageBodyMember(Name = "NewX_AVM-DE_HostnameMinChars")] ushort HostnameMinChars, + [property: MessageBodyMember(Name = "NewX_AVM-DE_HostnameMaxChars")] ushort HostnameMaxChars, + [property: MessageBodyMember(Name = "NewX_AVM-DE_HostnameAllowedChars")] string HostnameAllowedChars); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateRequest.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateRequest.cs new file mode 100644 index 0000000..e36cd4c --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateRequest.cs @@ -0,0 +1,4 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "HostsCheckUpdate")] +public readonly record struct HostsHostsCheckUpdateRequest; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateResponse.cs new file mode 100644 index 0000000..8138dce --- /dev/null +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/Entities/HostsHostsCheckUpdateResponse.cs @@ -0,0 +1,4 @@ +namespace RS.Fritz.Manager.API; + +[MessageContract(WrapperName = "HostsCheckUpdateResponse")] +public readonly record struct HostsHostsCheckUpdateResponse; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/FritzHostsService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/FritzHostsService.cs index af81724..30bffc5 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/FritzHostsService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/FritzHostsService.cs @@ -2,37 +2,32 @@ using System.Net; -internal sealed class FritzHostsService : FritzServiceClient, IFritzHostsService +internal sealed class FritzHostsService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzHostsService { public const string ControlUrl = "/upnp/control/hosts"; - public FritzHostsService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetHostNumberOfEntriesAsync(HostsGetHostNumberOfEntriesRequest hostsGetHostNumberOfEntriesRequest) - { - return Channel.GetHostNumberOfEntriesAsync(hostsGetHostNumberOfEntriesRequest); - } + => Channel.GetHostNumberOfEntriesAsync(hostsGetHostNumberOfEntriesRequest); + + public Task HostsCheckUpdateAsync(HostsHostsCheckUpdateRequest hostsHostsCheckUpdateRequest) + => Channel.HostsCheckUpdateAsync(hostsHostsCheckUpdateRequest); public Task GetHostListPathAsync(HostsGetHostListPathRequest hostsGetHostListPathRequest) - { - return Channel.GetHostListPathAsync(hostsGetHostListPathRequest); - } + => Channel.GetHostListPathAsync(hostsGetHostListPathRequest); public Task GetGenericHostEntryAsync(HostsGetGenericHostEntryRequest hostsGetGenericHostEntryRequest) - { - return Channel.GetGenericHostEntryAsync(hostsGetGenericHostEntryRequest); - } + => Channel.GetGenericHostEntryAsync(hostsGetGenericHostEntryRequest); + + public Task GetInfoAsync(HostsGetInfoRequest hostsGetInfoRequest) + => Channel.GetInfoAsync(hostsGetInfoRequest); public Task GetChangeCounterAsync(HostsGetChangeCounterRequest hostsGetChangeCounterRequest) - { - return Channel.GetChangeCounterAsync(hostsGetChangeCounterRequest); - } + => Channel.GetChangeCounterAsync(hostsGetChangeCounterRequest); public Task GetMeshListPathAsync(HostsGetMeshListPathRequest hostsGetMeshListPathRequest) - { - return Channel.GetMeshListPathAsync(hostsGetMeshListPathRequest); - } + => Channel.GetMeshListPathAsync(hostsGetMeshListPathRequest); + + public Task GetFriendlyNameAsync(HostsGetFriendlyNameRequest hostsGetFriendlyNameRequest) + => Channel.GetFriendlyNameAsync(hostsGetFriendlyNameRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/IFritzHostsService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/IFritzHostsService.cs index 381a33e..61b8acf 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/IFritzHostsService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Hosts/IFritzHostsService.cs @@ -2,13 +2,18 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:Hosts:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzHostsService +internal interface IFritzHostsService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#GetHostNumberOfEntries")] [FaultContract(typeof(UPnPFault1))] [FaultContract(typeof(UPnPFault2))] Task GetHostNumberOfEntriesAsync(HostsGetHostNumberOfEntriesRequest hostsGetHostNumberOfEntriesRequest); + [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#X_AVM-DE_HostsCheckUpdate")] + [FaultContract(typeof(UPnPFault1))] + [FaultContract(typeof(UPnPFault2))] + Task HostsCheckUpdateAsync(HostsHostsCheckUpdateRequest hostsHostsCheckUpdateRequest); + [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetHostListPath")] [FaultContract(typeof(UPnPFault1))] [FaultContract(typeof(UPnPFault2))] @@ -19,6 +24,11 @@ internal interface IFritzHostsService [FaultContract(typeof(UPnPFault2))] Task GetGenericHostEntryAsync(HostsGetGenericHostEntryRequest hostsGetGenericHostEntryRequest); + [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetInfo")] + [FaultContract(typeof(UPnPFault1))] + [FaultContract(typeof(UPnPFault2))] + Task GetInfoAsync(HostsGetInfoRequest hostsGetInfoRequest); + [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetChangeCounter")] [FaultContract(typeof(UPnPFault1))] [FaultContract(typeof(UPnPFault2))] @@ -28,4 +38,9 @@ internal interface IFritzHostsService [FaultContract(typeof(UPnPFault1))] [FaultContract(typeof(UPnPFault2))] Task GetMeshListPathAsync(HostsGetMeshListPathRequest hostsGetMeshListPathRequest); + + [OperationContract(Action = "urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetFriendlyName")] + [FaultContract(typeof(UPnPFault1))] + [FaultContract(typeof(UPnPFault2))] + Task GetFriendlyNameAsync(HostsGetFriendlyNameRequest hostsGetFriendlyNameRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/Entities/LanConfigSecurityGetInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/Entities/LanConfigSecurityGetInfoResponse.cs index a5d1c01..c010bae 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/Entities/LanConfigSecurityGetInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/Entities/LanConfigSecurityGetInfoResponse.cs @@ -4,4 +4,6 @@ public readonly record struct LanConfigSecurityGetInfoResponse( [property: MessageBodyMember(Name = "NewMaxCharsPassword")] ushort MaxCharsPassword, [property: MessageBodyMember(Name = "NewMinCharsPassword")] ushort MinCharsPassword, - [property: MessageBodyMember(Name = "NewAllowedCharsPassword")] string AllowedCharsPassword); \ No newline at end of file + [property: MessageBodyMember(Name = "NewAllowedCharsPassword")] string AllowedCharsPassword, + [property: MessageBodyMember(Name = "NewAllowedCharsUsername")] string AllowedCharsUsername, + [property: MessageBodyMember(Name = "NewX_AVM-DE_IsDefaultPasswordActive")] bool IsDefaultPasswordActive); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/FritzLanConfigSecurityService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/FritzLanConfigSecurityService.cs index 781caac..02247af 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/FritzLanConfigSecurityService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/FritzLanConfigSecurityService.cs @@ -2,37 +2,23 @@ using System.Net; -internal sealed class FritzLanConfigSecurityService : FritzServiceClient, IFritzLanConfigSecurityService +internal sealed class FritzLanConfigSecurityService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential? networkCredential = null) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzLanConfigSecurityService { public const string ControlUrl = "/upnp/control/lanconfigsecurity"; - public FritzLanConfigSecurityService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential? networkCredential = null) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetAnonymousLoginAsync(LanConfigSecurityGetAnonymousLoginRequest lanConfigSecurityGetAnonymousLoginRequest) - { - return Channel.GetAnonymousLoginAsync(lanConfigSecurityGetAnonymousLoginRequest); - } + => Channel.GetAnonymousLoginAsync(lanConfigSecurityGetAnonymousLoginRequest); public Task GetCurrentUserAsync(LanConfigSecurityGetCurrentUserRequest lanConfigSecurityGetCurrentUserRequest) - { - return Channel.GetCurrentUserAsync(lanConfigSecurityGetCurrentUserRequest); - } + => Channel.GetCurrentUserAsync(lanConfigSecurityGetCurrentUserRequest); public Task GetInfoAsync(LanConfigSecurityGetInfoRequest lanConfigSecurityGetInfoRequest) - { - return Channel.GetInfoAsync(lanConfigSecurityGetInfoRequest); - } + => Channel.GetInfoAsync(lanConfigSecurityGetInfoRequest); public Task GetUserListAsync(LanConfigSecurityGetUserListRequest lanConfigSecurityGetUserListRequest) - { - return Channel.GetUserListAsync(lanConfigSecurityGetUserListRequest); - } + => Channel.GetUserListAsync(lanConfigSecurityGetUserListRequest); public Task SetConfigPasswordAsync(LanConfigSecuritySetConfigPasswordRequest lanConfigSecuritySetConfigPasswordRequest) - { - return Channel.SetConfigPasswordAsync(lanConfigSecuritySetConfigPasswordRequest); - } + => Channel.SetConfigPasswordAsync(lanConfigSecuritySetConfigPasswordRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/IFritzLanConfigSecurityService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/IFritzLanConfigSecurityService.cs index 40ccbf5..94380dd 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/IFritzLanConfigSecurityService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanConfigSecurity/IFritzLanConfigSecurityService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:LANConfigSecurity:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzLanConfigSecurityService +internal interface IFritzLanConfigSecurityService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:LANConfigSecurity:1#X_AVM-DE_GetCurrentUser")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/FritzLanEthernetInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/FritzLanEthernetInterfaceConfigService.cs index 856cc77..542a7a6 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/FritzLanEthernetInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/FritzLanEthernetInterfaceConfigService.cs @@ -2,22 +2,14 @@ using System.Net; -internal sealed class FritzLanEthernetInterfaceConfigService : FritzServiceClient, IFritzLanEthernetInterfaceConfigService +internal sealed class FritzLanEthernetInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzLanEthernetInterfaceConfigService { public const string ControlUrl = "/upnp/control/lanethernetifcfg"; - public FritzLanEthernetInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(LanEthernetInterfaceConfigGetInfoRequest lanEthernetInterfaceConfigGetInfoRequest) - { - return Channel.GetInfoAsync(lanEthernetInterfaceConfigGetInfoRequest); - } + => Channel.GetInfoAsync(lanEthernetInterfaceConfigGetInfoRequest); public Task GetStatisticsAsync(LanEthernetInterfaceConfigGetStatisticsRequest lanEthernetInterfaceConfigGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(lanEthernetInterfaceConfigGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(lanEthernetInterfaceConfigGetStatisticsRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/IFritzLanEthernetInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/IFritzLanEthernetInterfaceConfigService.cs index 5d735c3..193a235 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/IFritzLanEthernetInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanEthernetInterfaceConfig/IFritzLanEthernetInterfaceConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:LANEthernetInterfaceConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzLanEthernetInterfaceConfigService +internal interface IFritzLanEthernetInterfaceConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:LANEthernetInterfaceConfig:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/FritzLanHostConfigManagementService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/FritzLanHostConfigManagementService.cs index 19f12ea..033599f 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/FritzLanHostConfigManagementService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/FritzLanHostConfigManagementService.cs @@ -2,42 +2,26 @@ using System.Net; -internal sealed class FritzLanHostConfigManagementService : FritzServiceClient, IFritzLanHostConfigManagementService +internal sealed class FritzLanHostConfigManagementService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzLanHostConfigManagementService { public const string ControlUrl = "/upnp/control/lanhostconfigmgm"; - public FritzLanHostConfigManagementService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(LanHostConfigManagementGetInfoRequest lanHostConfigManagementGetInfoRequest) - { - return Channel.GetInfoAsync(lanHostConfigManagementGetInfoRequest); - } + => Channel.GetInfoAsync(lanHostConfigManagementGetInfoRequest); public Task GetAddressRangeAsync(LanHostConfigManagementGetAddressRangeRequest lanHostConfigManagementGetAddressRangeRequest) - { - return Channel.GetAddressRangeAsync(lanHostConfigManagementGetAddressRangeRequest); - } + => Channel.GetAddressRangeAsync(lanHostConfigManagementGetAddressRangeRequest); public Task GetDnsServersAsync(LanHostConfigManagementGetDnsServersRequest lanHostConfigManagementGetDnsServersRequest) - { - return Channel.GetDnsServersAsync(lanHostConfigManagementGetDnsServersRequest); - } + => Channel.GetDnsServersAsync(lanHostConfigManagementGetDnsServersRequest); public Task GetIpInterfaceNumberOfEntriesAsync(LanHostConfigManagementGetIpInterfaceNumberOfEntriesRequest lanHostConfigManagementGetIpInterfaceNumberOfEntriesRequest) - { - return Channel.GetIpInterfaceNumberOfEntriesAsync(lanHostConfigManagementGetIpInterfaceNumberOfEntriesRequest); - } + => Channel.GetIpInterfaceNumberOfEntriesAsync(lanHostConfigManagementGetIpInterfaceNumberOfEntriesRequest); public Task GetIpRoutersListAsync(LanHostConfigManagementGetIpRoutersListRequest lanHostConfigManagementGetIpRoutersListRequest) - { - return Channel.GetIpRoutersListAsync(lanHostConfigManagementGetIpRoutersListRequest); - } + => Channel.GetIpRoutersListAsync(lanHostConfigManagementGetIpRoutersListRequest); public Task GetSubnetMaskAsync(LanHostConfigManagementGetSubnetMaskRequest lanHostConfigManagementGetSubnetMaskRequest) - { - return Channel.GetSubnetMaskAsync(lanHostConfigManagementGetSubnetMaskRequest); - } + => Channel.GetSubnetMaskAsync(lanHostConfigManagementGetSubnetMaskRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/IFritzLanHostConfigManagementService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/IFritzLanHostConfigManagementService.cs index 64ea9bd..d8989b2 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/IFritzLanHostConfigManagementService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/LanHostConfigManagement/IFritzLanHostConfigManagementService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:LANHostConfigManagement:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzLanHostConfigManagementService +internal interface IFritzLanHostConfigManagementService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:LANHostConfigManagement:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/FritzLayer3ForwardingService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/FritzLayer3ForwardingService.cs index 9a51a78..fd6f1c0 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/FritzLayer3ForwardingService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/FritzLayer3ForwardingService.cs @@ -2,27 +2,17 @@ using System.Net; -internal sealed class FritzLayer3ForwardingService : FritzServiceClient, IFritzLayer3ForwardingService +internal sealed class FritzLayer3ForwardingService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzLayer3ForwardingService { public const string ControlUrl = "/upnp/control/layer3forwarding"; - public FritzLayer3ForwardingService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetDefaultConnectionServiceAsync(Layer3ForwardingGetDefaultConnectionServiceRequest layer3ForwardingGetDefaultConnectionServiceRequest) - { - return Channel.GetDefaultConnectionServiceAsync(layer3ForwardingGetDefaultConnectionServiceRequest); - } + => Channel.GetDefaultConnectionServiceAsync(layer3ForwardingGetDefaultConnectionServiceRequest); public Task GetForwardNumberOfEntriesAsync(Layer3ForwardingGetForwardNumberOfEntriesRequest layer3ForwardingGetForwardNumberOfEntriesRequest) - { - return Channel.GetForwardNumberOfEntriesAsync(layer3ForwardingGetForwardNumberOfEntriesRequest); - } + => Channel.GetForwardNumberOfEntriesAsync(layer3ForwardingGetForwardNumberOfEntriesRequest); public Task GetGenericForwardingEntryAsync(Layer3ForwardingGetGenericForwardingEntryRequest layer3ForwardingGetGenericForwardingEntryRequest) - { - return Channel.GetGenericForwardingEntryAsync(layer3ForwardingGetGenericForwardingEntryRequest); - } + => Channel.GetGenericForwardingEntryAsync(layer3ForwardingGetGenericForwardingEntryRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/IFritzLayer3ForwardingService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/IFritzLayer3ForwardingService.cs index b17ca5c..6abbbf1 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/IFritzLayer3ForwardingService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Layer3Forwarding/IFritzLayer3ForwardingService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:Layer3Forwarding:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzLayer3ForwardingService +internal interface IFritzLayer3ForwardingService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:Layer3Forwarding:1#GetDefaultConnectionService")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/FritzManagementServerService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/FritzManagementServerService.cs index 3d57b9c..a8a5c65 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/FritzManagementServerService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/FritzManagementServerService.cs @@ -2,62 +2,38 @@ using System.Net; -internal sealed class FritzManagementServerService : FritzServiceClient, IFritzManagementServerService +internal sealed class FritzManagementServerService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzManagementServerService { public const string ControlUrl = "/upnp/control/mgmsrv"; - public FritzManagementServerService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(ManagementServerGetInfoRequest managementServerGetInfoRequest) - { - return Channel.GetInfoAsync(managementServerGetInfoRequest); - } + => Channel.GetInfoAsync(managementServerGetInfoRequest); public Task GetTr069FirmwareDownloadEnabledAsync(ManagementServerGetTr069FirmwareDownloadEnabledRequest managementServerGetTr069FirmwareDownloadEnabledRequest) - { - return Channel.GetTr069FirmwareDownloadEnabledAsync(managementServerGetTr069FirmwareDownloadEnabledRequest); - } + => Channel.GetTr069FirmwareDownloadEnabledAsync(managementServerGetTr069FirmwareDownloadEnabledRequest); public Task SetConnectionRequestAuthenticationAsync(ManagementServerSetConnectionRequestAuthenticationRequest managementServerSetConnectionRequestAuthenticationRequest) - { - return Channel.SetConnectionRequestAuthenticationAsync(managementServerSetConnectionRequestAuthenticationRequest); - } + => Channel.SetConnectionRequestAuthenticationAsync(managementServerSetConnectionRequestAuthenticationRequest); public Task SetManagementServerPasswordAsync(ManagementServerSetManagementServerPasswordRequest managementServerSetManagementServerPasswordRequest) - { - return Channel.SetManagementServerPasswordAsync(managementServerSetManagementServerPasswordRequest); - } + => Channel.SetManagementServerPasswordAsync(managementServerSetManagementServerPasswordRequest); public Task SetManagementServerUrlAsync(ManagementServerSetManagementServerUrlRequest managementServerSetManagementServerUrlRequest) - { - return Channel.SetManagementServerUrlAsync(managementServerSetManagementServerUrlRequest); - } + => Channel.SetManagementServerUrlAsync(managementServerSetManagementServerUrlRequest); public Task SetManagementServerUsernameAsync(ManagementServerSetManagementServerUsernameRequest managementServerSetManagementServerUsernameRequest) - { - return Channel.SetManagementServerUsernameAsync(managementServerSetManagementServerUsernameRequest); - } + => Channel.SetManagementServerUsernameAsync(managementServerSetManagementServerUsernameRequest); public Task SetPeriodicInformAsync(ManagementServerSetPeriodicInformRequest managementServerSetPeriodicInformRequest) - { - return Channel.SetPeriodicInformAsync(managementServerSetPeriodicInformRequest); - } + => Channel.SetPeriodicInformAsync(managementServerSetPeriodicInformRequest); public Task SetTr069EnableAsync(ManagementServerSetTr069EnableRequest managementServerSetTr069EnableRequest) - { - return Channel.SetTr069EnableAsync(managementServerSetTr069EnableRequest); - } + => Channel.SetTr069EnableAsync(managementServerSetTr069EnableRequest); public Task SetTr069FirmwareDownloadEnabledAsync(ManagementServerSetTr069FirmwareDownloadEnabledRequest managementServerSetTr069FirmwareDownloadEnabledRequest) - { - return Channel.SetTr069FirmwareDownloadEnabledAsync(managementServerSetTr069FirmwareDownloadEnabledRequest); - } + => Channel.SetTr069FirmwareDownloadEnabledAsync(managementServerSetTr069FirmwareDownloadEnabledRequest); public Task SetUpgradeManagementAsync(ManagementServerSetUpgradeManagementRequest managementServerSetUpgradeManagementRequest) - { - return Channel.SetUpgradeManagementAsync(managementServerSetUpgradeManagementRequest); - } + => Channel.SetUpgradeManagementAsync(managementServerSetUpgradeManagementRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/IFritzManagementServerService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/IFritzManagementServerService.cs index a6d1da8..ec75711 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/IFritzManagementServerService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/ManagementServer/IFritzManagementServerService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:ManagementServer:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzManagementServerService +internal interface IFritzManagementServerService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:ManagementServer:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Time/FritzTimeService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Time/FritzTimeService.cs index 9ec51ae..56292e3 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Time/FritzTimeService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Time/FritzTimeService.cs @@ -2,22 +2,14 @@ using System.Net; -internal sealed class FritzTimeService : FritzServiceClient, IFritzTimeService +internal sealed class FritzTimeService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzTimeService { public const string ControlUrl = "/upnp/control/time"; - public FritzTimeService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(TimeGetInfoRequest timeGetInfoRequest) - { - return Channel.GetInfoAsync(timeGetInfoRequest); - } + => Channel.GetInfoAsync(timeGetInfoRequest); public Task SetNtpServersAsync(TimeSetNtpServersRequest timeSetNtpServersRequest) - { - return Channel.SetNtpServersAsync(timeSetNtpServersRequest); - } + => Channel.SetNtpServersAsync(timeSetNtpServersRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/Time/IFritzTimeService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/Time/IFritzTimeService.cs index 41db0d7..b6a6098 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/Time/IFritzTimeService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/Time/IFritzTimeService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:Time:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzTimeService +internal interface IFritzTimeService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:Time:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceCheckUpdateRequest.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceCheckUpdateRequest.cs index 8c74e5a..879896a 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceCheckUpdateRequest.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceCheckUpdateRequest.cs @@ -1,5 +1,4 @@ namespace RS.Fritz.Manager.API; [MessageContract(WrapperName = "CheckUpdate")] -public readonly record struct UserInterfaceCheckUpdateRequest( - [property: MessageBodyMember(Name = "NewX_AVM-DE_LaborVersion")] string LaborVersion); \ No newline at end of file +public readonly record struct UserInterfaceCheckUpdateRequest; \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceGetInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceGetInfoResponse.cs index 16f5026..e8825f0 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceGetInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/Entities/UserInterfaceGetInfoResponse.cs @@ -10,4 +10,5 @@ public readonly record struct UserInterfaceGetInfoResponse( [property: MessageBodyMember(Name = "NewX_AVM-DE_DownloadURL")] string DownloadUrl, [property: MessageBodyMember(Name = "NewX_AVM-DE_InfoURL")] string InfoUrl, [property: MessageBodyMember(Name = "NewX_AVM-DE_UpdateState")] string UpdateState, - [property: MessageBodyMember(Name = "NewX_AVM-DE_LaborVersion")] string LaborVersion); \ No newline at end of file + [property: MessageBodyMember(Name = "NewX_AVM-DE_BuildType")] string BuildType, + [property: MessageBodyMember(Name = "NewX_AVM-DE_SetupAssistantStatus")] bool SetupAssistantStatus); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/FritzUserInterfaceService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/FritzUserInterfaceService.cs index 22f40e8..17a2660 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/FritzUserInterfaceService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/FritzUserInterfaceService.cs @@ -2,57 +2,35 @@ using System.Net; -internal sealed class FritzUserInterfaceService : FritzServiceClient, IFritzUserInterfaceService +internal sealed class FritzUserInterfaceService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzUserInterfaceService { public const string ControlUrl = "/upnp/control/userif"; - public FritzUserInterfaceService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(UserInterfaceGetInfoRequest userInterfaceGetInfoRequest) - { - return Channel.GetInfoAsync(userInterfaceGetInfoRequest); - } + => Channel.GetInfoAsync(userInterfaceGetInfoRequest); public Task CheckUpdateAsync(UserInterfaceCheckUpdateRequest userInterfaceCheckUpdateRequest) - { - return Channel.CheckUpdateAsync(userInterfaceCheckUpdateRequest); - } + => Channel.CheckUpdateAsync(userInterfaceCheckUpdateRequest); public Task DoPrepareCgiAsync(UserInterfaceDoPrepareCgiRequest userInterfaceDoPrepareCgiRequest) - { - return Channel.DoPrepareCgiAsync(userInterfaceDoPrepareCgiRequest); - } + => Channel.DoPrepareCgiAsync(userInterfaceDoPrepareCgiRequest); public Task DoUpdateAsync(UserInterfaceDoUpdateRequest userInterfaceDoUpdateRequest) - { - return Channel.DoUpdateAsync(userInterfaceDoUpdateRequest); - } + => Channel.DoUpdateAsync(userInterfaceDoUpdateRequest); public Task DoManualUpdateAsync(UserInterfaceDoManualUpdateRequest userInterfaceDoManualUpdateRequest) - { - return Channel.DoManualUpdateAsync(userInterfaceDoManualUpdateRequest); - } + => Channel.DoManualUpdateAsync(userInterfaceDoManualUpdateRequest); public Task GetInternationalConfigAsync(UserInterfaceGetInternationalConfigRequest userInterfaceGetInternationalConfigRequest) - { - return Channel.GetInternationalConfigAsync(userInterfaceGetInternationalConfigRequest); - } + => Channel.GetInternationalConfigAsync(userInterfaceGetInternationalConfigRequest); public Task SetInternationalConfigAsync(UserInterfaceSetInternationalConfigRequest userInterfaceSetInternationalConfigRequest) - { - return Channel.SetInternationalConfigAsync(userInterfaceSetInternationalConfigRequest); - } + => Channel.SetInternationalConfigAsync(userInterfaceSetInternationalConfigRequest); public Task AvmGetInfoAsync(UserInterfaceAvmGetInfoRequest userInterfaceAvmGetInfoRequest) - { - return Channel.AvmGetInfoAsync(userInterfaceAvmGetInfoRequest); - } + => Channel.AvmGetInfoAsync(userInterfaceAvmGetInfoRequest); public Task SetConfigAsync(UserInterfaceSetConfigRequest userInterfaceSetConfigRequest) - { - return Channel.SetConfigAsync(userInterfaceSetConfigRequest); - } + => Channel.SetConfigAsync(userInterfaceSetConfigRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/IFritzUserInterfaceService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/IFritzUserInterfaceService.cs index 99300ba..14a07a0 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/IFritzUserInterfaceService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/UserInterface/IFritzUserInterfaceService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:UserInterface:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzUserInterfaceService +internal interface IFritzUserInterfaceService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:UserInterface:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/FritzWanCommonInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/FritzWanCommonInterfaceConfigService.cs index 6acf4af..ee32511 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/FritzWanCommonInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/FritzWanCommonInterfaceConfigService.cs @@ -2,47 +2,29 @@ using System.Net; -internal sealed class FritzWanCommonInterfaceConfigService : FritzServiceClient, IFritzWanCommonInterfaceConfigService +internal sealed class FritzWanCommonInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanCommonInterfaceConfigService { public const string ControlUrl = "/upnp/control/wancommonifconfig1"; - public FritzWanCommonInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetCommonLinkPropertiesAsync(WanCommonInterfaceConfigGetCommonLinkPropertiesRequest wanCommonInterfaceConfigGetCommonLinkPropertiesRequest) - { - return Channel.GetCommonLinkPropertiesAsync(wanCommonInterfaceConfigGetCommonLinkPropertiesRequest); - } + => Channel.GetCommonLinkPropertiesAsync(wanCommonInterfaceConfigGetCommonLinkPropertiesRequest); public Task GetTotalBytesReceivedAsync(WanCommonInterfaceConfigGetTotalBytesReceivedRequest wanCommonInterfaceConfigGetTotalBytesReceivedRequest) - { - return Channel.GetTotalBytesReceivedAsync(wanCommonInterfaceConfigGetTotalBytesReceivedRequest); - } + => Channel.GetTotalBytesReceivedAsync(wanCommonInterfaceConfigGetTotalBytesReceivedRequest); public Task GetTotalBytesSentAsync(WanCommonInterfaceConfigGetTotalBytesSentRequest wanCommonInterfaceConfigGetTotalBytesSentRequest) - { - return Channel.GetTotalBytesSentAsync(wanCommonInterfaceConfigGetTotalBytesSentRequest); - } + => Channel.GetTotalBytesSentAsync(wanCommonInterfaceConfigGetTotalBytesSentRequest); public Task GetTotalPacketsReceivedAsync(WanCommonInterfaceConfigGetTotalPacketsReceivedRequest wanCommonInterfaceConfigGetTotalPacketsReceivedRequest) - { - return Channel.GetTotalPacketsReceivedAsync(wanCommonInterfaceConfigGetTotalPacketsReceivedRequest); - } + => Channel.GetTotalPacketsReceivedAsync(wanCommonInterfaceConfigGetTotalPacketsReceivedRequest); public Task GetTotalPacketsSentAsync(WanCommonInterfaceConfigGetTotalPacketsSentRequest wanCommonInterfaceConfigGetTotalPacketsSentRequest) - { - return Channel.GetTotalPacketsSentAsync(wanCommonInterfaceConfigGetTotalPacketsSentRequest); - } + => Channel.GetTotalPacketsSentAsync(wanCommonInterfaceConfigGetTotalPacketsSentRequest); public Task SetWanAccessTypeAsync(WanCommonInterfaceConfigSetWanAccessTypeRequest wanCommonInterfaceConfigSetWanAccessTypeRequest) - { - return Channel.SetWanAccessTypeAsync(wanCommonInterfaceConfigSetWanAccessTypeRequest); - } + => Channel.SetWanAccessTypeAsync(wanCommonInterfaceConfigSetWanAccessTypeRequest); public Task GetOnlineMonitorAsync(WanCommonInterfaceConfigGetOnlineMonitorRequest wanCommonInterfaceConfigGetOnlineMonitorRequest) - { - return Channel.GetOnlineMonitorAsync(wanCommonInterfaceConfigGetOnlineMonitorRequest); - } + => Channel.GetOnlineMonitorAsync(wanCommonInterfaceConfigGetOnlineMonitorRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/IFritzWanCommonInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/IFritzWanCommonInterfaceConfigService.cs index 87eef3d..a6c438a 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/IFritzWanCommonInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanCommonInterfaceConfig/IFritzWanCommonInterfaceConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANCommonInterfaceConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanCommonInterfaceConfigService +internal interface IFritzWanCommonInterfaceConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANCommonInterfaceConfig:1#GetTotalBytesReceived")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/Entities/WanDslInterfaceConfigGetDSLDiagnoseInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/Entities/WanDslInterfaceConfigGetDSLDiagnoseInfoResponse.cs index 2864b57..48b5490 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/Entities/WanDslInterfaceConfigGetDSLDiagnoseInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/Entities/WanDslInterfaceConfigGetDSLDiagnoseInfoResponse.cs @@ -13,29 +13,29 @@ public string? Status { get { - if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime == 0 && DslSignalLossTime == 0 && DslActive && DslSync) + if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime is 0 && DslSignalLossTime is 0 && DslActive && DslSync) return "The DSL connection is ready for data traffic. The Customer Premises Equipment (CPE) has set DSL to Active and the DSL chip could sync to ISP destination device."; - if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime == 0 && DslSignalLossTime > 0 && DslSignalLossTime < 300 && DslActive && !DslSync) - return "The Customer Premises Equipment (CPE) Device has lost the sync state since DSLSignalLossTime(in seconds)."; + if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime is 0 && DslSignalLossTime is > 0 and < 300 && DslActive && !DslSync) + return FormattableString.CurrentCulture($"The Customer Premises Equipment (CPE) Device has lost the sync state since {DslSignalLossTime} (in seconds)."); - if ("RUNNING".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime == 0 && DslSignalLossTime > 300 && DslActive && !DslSync) - return "5 minutes passed since the last DSLSync = 1, the Customer Premises Equipment (CPE) device is now instantiating a cable cut measurement. While the diagnose is running the DSLDiagnoseState is set to 'RUNNING'."; + if ("RUNNING".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime is 0 && DslSignalLossTime > 300 && DslActive && !DslSync) + return FormattableString.CurrentCulture($"5 minutes passed since the last {nameof(DslSync)} = 1, the Customer Premises Equipment (CPE) device is now instantiating a cable cut measurement. While the diagnose is running the {nameof(DslDiagnoseState)} is set to 'RUNNING'."); - if ("NO_CALIB".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime == 0 && DslSignalLossTime > 300 && DslActive && !DslSync) - return "The Customer Premises Equipment (CPE) has tried to start a cable cut measurement, but could not initiate the measurement.Therefore no calibration has passed."; + if ("NO_CALIB".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime is 0 && DslSignalLossTime > 300 && DslActive && !DslSync) + return "The Customer Premises Equipment (CPE) has tried to start a cable cut measurement, but could not initiate the measurement. Therefore no calibration has passed."; - if ("DONE_CABLE_OK".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime > 300 && DslActive && !DslSync) + if ("DONE_CABLE_OK".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime > 300 && DslActive && !DslSync) return "The cable cut measurement is finished and no cable cut could be detected."; if ("DONE_CABLE_NOK".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance > 0 && DslLastDiagnoseTime > 0 && DslSignalLossTime > 300 && DslActive && !DslSync) return FormattableString.CurrentCulture($"The cable cut measurement is finished and a problem with the cable connection could be detected at {CableNokDistance} meters."); - if ("DONE_CABLE_OK".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime > 300 && DslActive && !DslSync) + if ("DONE_CABLE_OK".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime > 300 && DslActive && !DslSync) return "The measurement for cable cut is finished but the distance could not be detected or is too inaccurate."; - if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance == -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime == 0 && DslActive && DslSync) - return "When the DSL signal is sync again, all values will be set to default values. Except the DSLLastDiagnoseTime which remains at the value of time in seconds between the last measurement and the resync."; + if ("NONE".Equals(DslDiagnoseState, StringComparison.OrdinalIgnoreCase) && CableNokDistance is -1 && DslLastDiagnoseTime > 0 && DslSignalLossTime is 0 && DslActive && DslSync) + return FormattableString.CurrentCulture($"When the DSL signal is sync again, all values will be set to default values. Except the {nameof(DslLastDiagnoseTime)} which remains at the value of time in seconds between the last measurement and the resync."); return null; } diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/FritzWanDslInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/FritzWanDslInterfaceConfigService.cs index 5683107..5f19585 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/FritzWanDslInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/FritzWanDslInterfaceConfigService.cs @@ -2,32 +2,20 @@ using System.Net; -internal sealed class FritzWanDslInterfaceConfigService : FritzServiceClient, IFritzWanDslInterfaceConfigService +internal sealed class FritzWanDslInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanDslInterfaceConfigService { public const string ControlUrl = "/upnp/control/wandslifconfig1"; - public FritzWanDslInterfaceConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetDslDiagnoseInfoAsync(WanDslInterfaceConfigGetDslDiagnoseInfoRequest wanDslInterfaceConfigGetDslDiagnoseInfoRequest) - { - return Channel.GetDslDiagnoseInfoAsync(wanDslInterfaceConfigGetDslDiagnoseInfoRequest); - } + => Channel.GetDslDiagnoseInfoAsync(wanDslInterfaceConfigGetDslDiagnoseInfoRequest); public Task GetDslInfoAsync(WanDslInterfaceConfigGetDslInfoRequest wanDslInterfaceConfigGetDslInfoRequest) - { - return Channel.GetDslInfoAsync(wanDslInterfaceConfigGetDslInfoRequest); - } + => Channel.GetDslInfoAsync(wanDslInterfaceConfigGetDslInfoRequest); public Task GetInfoAsync(WanDslInterfaceConfigGetInfoRequest wanDslInterfaceConfigGetInfo) - { - return Channel.GetInfoAsync(wanDslInterfaceConfigGetInfo); - } + => Channel.GetInfoAsync(wanDslInterfaceConfigGetInfo); public Task GetStatisticsTotalAsync(WanDslInterfaceConfigGetStatisticsTotalRequest wanDslInterfaceConfigGetStatisticsTotalRequest) - { - return Channel.GetStatisticsTotalAsync(wanDslInterfaceConfigGetStatisticsTotalRequest); - } + => Channel.GetStatisticsTotalAsync(wanDslInterfaceConfigGetStatisticsTotalRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/IFritzWanDslInterfaceConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/IFritzWanDslInterfaceConfigService.cs index 87437ad..58ce31e 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/IFritzWanDslInterfaceConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslInterfaceConfig/IFritzWanDslInterfaceConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANDSLInterfaceConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanDslInterfaceConfigService +internal interface IFritzWanDslInterfaceConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANDSLInterfaceConfig:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/FritzWanDslLinkConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/FritzWanDslLinkConfigService.cs index 27aaea7..9f8c812 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/FritzWanDslLinkConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/FritzWanDslLinkConfigService.cs @@ -2,42 +2,26 @@ using System.Net; -internal sealed class FritzWanDslLinkConfigService : FritzServiceClient, IFritzWanDslLinkConfigService +internal sealed class FritzWanDslLinkConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanDslLinkConfigService { public const string ControlUrl = "/upnp/control/wandsllinkconfig1"; - public FritzWanDslLinkConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WanDslLinkConfigGetInfoRequest wanDslLinkConfigGetInfoRequest) - { - return Channel.GetInfoAsync(wanDslLinkConfigGetInfoRequest); - } + => Channel.GetInfoAsync(wanDslLinkConfigGetInfoRequest); public Task GetDslLinkInfoAsync(WanDslLinkConfigGetDslLinkInfoRequest wanDslLinkConfigGetDslLinkInfoRequest) - { - return Channel.GetDslLinkInfoAsync(wanDslLinkConfigGetDslLinkInfoRequest); - } + => Channel.GetDslLinkInfoAsync(wanDslLinkConfigGetDslLinkInfoRequest); public Task GetDestinationAddressAsync(WanDslLinkConfigGetDestinationAddressRequest wanDslLinkConfigGetDestinationAddressRequest) - { - return Channel.GetDestinationAddressAsync(wanDslLinkConfigGetDestinationAddressRequest); - } + => Channel.GetDestinationAddressAsync(wanDslLinkConfigGetDestinationAddressRequest); public Task GetAtmEncapsulationAsync(WanDslLinkConfigGetAtmEncapsulationRequest wanDslLinkConfigGetAtmEncapsulationRequest) - { - return Channel.GetAtmEncapsulationAsync(wanDslLinkConfigGetAtmEncapsulationRequest); - } + => Channel.GetAtmEncapsulationAsync(wanDslLinkConfigGetAtmEncapsulationRequest); public Task GetAutoConfigAsync(WanDslLinkConfigGetAutoConfigRequest wanDslLinkConfigGetAutoConfigRequest) - { - return Channel.GetAutoConfigAsync(wanDslLinkConfigGetAutoConfigRequest); - } + => Channel.GetAutoConfigAsync(wanDslLinkConfigGetAutoConfigRequest); public Task GetStatisticsAsync(WanDslLinkConfigGetStatisticsRequest wanDslLinkConfigGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(wanDslLinkConfigGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(wanDslLinkConfigGetStatisticsRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/IFritzWanDslLinkConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/IFritzWanDslLinkConfigService.cs index e4daed9..ddc0e5f 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/IFritzWanDslLinkConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanDslLinkConfig/IFritzWanDslLinkConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANDSLLinkConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanDslLinkConfigService +internal interface IFritzWanDslLinkConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANDSLLinkConfig:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/FritzWanEthernetLinkConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/FritzWanEthernetLinkConfigService.cs index fa02b23..1131385 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/FritzWanEthernetLinkConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/FritzWanEthernetLinkConfigService.cs @@ -2,17 +2,11 @@ using System.Net; -internal sealed class FritzWanEthernetLinkConfigService : FritzServiceClient, IFritzWanEthernetLinkConfigService +internal sealed class FritzWanEthernetLinkConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanEthernetLinkConfigService { public const string ControlUrl = "/upnp/control/wanethlinkconfig1"; - public FritzWanEthernetLinkConfigService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetEthernetLinkStatusAsync(WanEthernetLinkConfigGetEthernetLinkStatusRequest wanEthernetLinkConfigGetEthernetLinkStatusRequest) - { - return Channel.GetEthernetLinkStatusAsync(wanEthernetLinkConfigGetEthernetLinkStatusRequest); - } + => Channel.GetEthernetLinkStatusAsync(wanEthernetLinkConfigGetEthernetLinkStatusRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/IFritzWanEthernetLinkConfigService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/IFritzWanEthernetLinkConfigService.cs index c233cfc..cd7abb9 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/IFritzWanEthernetLinkConfigService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanEthernetLinkConfig/IFritzWanEthernetLinkConfigService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANEthernetLinkConfig:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanEthernetLinkConfigService +internal interface IFritzWanEthernetLinkConfigService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANEthernetLinkConfig:1#GetEthernetLinkStatus")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/FritzWanIpConnectionService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/FritzWanIpConnectionService.cs index 219e5cc..cdfff1a 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/FritzWanIpConnectionService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/FritzWanIpConnectionService.cs @@ -2,52 +2,32 @@ using System.Net; -internal sealed class FritzWanIpConnectionService : FritzServiceClient, IFritzWanIpConnectionService +internal sealed class FritzWanIpConnectionService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanIpConnectionService { public const string ControlUrl = "/upnp/control/wanipconnection1"; - public FritzWanIpConnectionService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WanConnectionGetInfoRequest wanConnectionGetInfoRequest) - { - return Channel.GetInfoAsync(wanConnectionGetInfoRequest); - } + => Channel.GetInfoAsync(wanConnectionGetInfoRequest); public Task GetConnectionTypeInfoAsync(WanConnectionGetConnectionTypeInfoRequest wanConnectionGetConnectionTypeInfoRequest) - { - return Channel.GetConnectionTypeInfoAsync(wanConnectionGetConnectionTypeInfoRequest); - } + => Channel.GetConnectionTypeInfoAsync(wanConnectionGetConnectionTypeInfoRequest); public Task GetStatusInfoAsync(WanConnectionGetStatusInfoRequest wanConnectionGetStatusInfoRequest) - { - return Channel.GetStatusInfoAsync(wanConnectionGetStatusInfoRequest); - } + => Channel.GetStatusInfoAsync(wanConnectionGetStatusInfoRequest); public Task GetNatRsipStatusAsync(WanConnectionGetNatRsipStatusRequest wanConnectionGetNatRsipStatusRequest) - { - return Channel.GetNatRsipStatusAsync(wanConnectionGetNatRsipStatusRequest); - } + => Channel.GetNatRsipStatusAsync(wanConnectionGetNatRsipStatusRequest); public Task GetDnsServersAsync(WanConnectionGetDnsServersRequest wanConnectionGetDnsServersRequest) - { - return Channel.GetDnsServersAsync(wanConnectionGetDnsServersRequest); - } + => Channel.GetDnsServersAsync(wanConnectionGetDnsServersRequest); public Task GetPortMappingNumberOfEntriesAsync(WanConnectionGetPortMappingNumberOfEntriesRequest wanConnectionGetPortMappingNumberOfEntriesRequest) - { - return Channel.GetPortMappingNumberOfEntriesAsync(wanConnectionGetPortMappingNumberOfEntriesRequest); - } + => Channel.GetPortMappingNumberOfEntriesAsync(wanConnectionGetPortMappingNumberOfEntriesRequest); public Task GetExternalIpAddressAsync(WanConnectionGetExternalIpAddressRequest wanConnectionGetExternalIpAddressRequest) - { - return Channel.GetExternalIpAddressAsync(wanConnectionGetExternalIpAddressRequest); - } + => Channel.GetExternalIpAddressAsync(wanConnectionGetExternalIpAddressRequest); public Task GetGenericPortMappingEntryAsync(WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return Channel.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest); - } + => Channel.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/IFritzWanIpConnectionService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/IFritzWanIpConnectionService.cs index 7d0d492..1437cc9 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/IFritzWanIpConnectionService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanIpConnection/IFritzWanIpConnectionService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANIPConnection:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanIpConnectionService +internal interface IFritzWanIpConnectionService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANIPConnection:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/FritzWanPppConnectionService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/FritzWanPppConnectionService.cs index e2482ea..9d3fbc1 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/FritzWanPppConnectionService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/FritzWanPppConnectionService.cs @@ -2,67 +2,41 @@ using System.Net; -internal sealed class FritzWanPppConnectionService : FritzServiceClient, IFritzWanPppConnectionService +internal sealed class FritzWanPppConnectionService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWanPppConnectionService { public const string ControlUrl = "/upnp/control/wanpppconn1"; - public FritzWanPppConnectionService(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WanConnectionGetInfoRequest wanConnectionGetInfoRequest) - { - return Channel.GetInfoAsync(wanConnectionGetInfoRequest); - } + => Channel.GetInfoAsync(wanConnectionGetInfoRequest); public Task GetConnectionTypeInfoAsync(WanConnectionGetConnectionTypeInfoRequest wanConnectionGetConnectionTypeInfoRequest) - { - return Channel.GetConnectionTypeInfoAsync(wanConnectionGetConnectionTypeInfoRequest); - } + => Channel.GetConnectionTypeInfoAsync(wanConnectionGetConnectionTypeInfoRequest); public Task GetStatusInfoAsync(WanConnectionGetStatusInfoRequest wanConnectionGetStatusInfoRequest) - { - return Channel.GetStatusInfoAsync(wanConnectionGetStatusInfoRequest); - } + => Channel.GetStatusInfoAsync(wanConnectionGetStatusInfoRequest); public Task GetLinkLayerMaxBitRatesAsync(WanPppConnectionGetLinkLayerMaxBitRatesRequest wanPppConnectionGetLinkLayerMaxBitRatesRequest) - { - return Channel.GetLinkLayerMaxBitRatesAsync(wanPppConnectionGetLinkLayerMaxBitRatesRequest); - } + => Channel.GetLinkLayerMaxBitRatesAsync(wanPppConnectionGetLinkLayerMaxBitRatesRequest); public Task GetUserNameAsync(WanPppConnectionGetUserNameRequest wanPppConnectionGetUserNameRequest) - { - return Channel.GetUserNameAsync(wanPppConnectionGetUserNameRequest); - } + => Channel.GetUserNameAsync(wanPppConnectionGetUserNameRequest); public Task GetNatRsipStatusAsync(WanConnectionGetNatRsipStatusRequest wanConnectionGetNatRsipStatusRequest) - { - return Channel.GetNatRsipStatusAsync(wanConnectionGetNatRsipStatusRequest); - } + => Channel.GetNatRsipStatusAsync(wanConnectionGetNatRsipStatusRequest); public Task GetDnsServersAsync(WanConnectionGetDnsServersRequest wanConnectionGetDnsServersRequest) - { - return Channel.GetDnsServersAsync(wanConnectionGetDnsServersRequest); - } + => Channel.GetDnsServersAsync(wanConnectionGetDnsServersRequest); public Task GetPortMappingNumberOfEntriesAsync(WanConnectionGetPortMappingNumberOfEntriesRequest wanConnectionGetPortMappingNumberOfEntriesRequest) - { - return Channel.GetPortMappingNumberOfEntriesAsync(wanConnectionGetPortMappingNumberOfEntriesRequest); - } + => Channel.GetPortMappingNumberOfEntriesAsync(wanConnectionGetPortMappingNumberOfEntriesRequest); public Task GetExternalIpAddressAsync(WanConnectionGetExternalIpAddressRequest wanConnectionGetExternalIpAddressRequest) - { - return Channel.GetExternalIpAddressAsync(wanConnectionGetExternalIpAddressRequest); - } + => Channel.GetExternalIpAddressAsync(wanConnectionGetExternalIpAddressRequest); public Task GetAutoDisconnectTimeSpanAsync(WanPppConnectionGetAutoDisconnectTimeSpanRequest wanPppConnectionGetAutoDisconnectTimeSpanRequest) - { - return Channel.GetAutoDisconnectTimeSpanAsync(wanPppConnectionGetAutoDisconnectTimeSpanRequest); - } + => Channel.GetAutoDisconnectTimeSpanAsync(wanPppConnectionGetAutoDisconnectTimeSpanRequest); public Task GetGenericPortMappingEntryAsync(WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return Channel.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest); - } + => Channel.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/IFritzWanPppConnectionService.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/IFritzWanPppConnectionService.cs index 9be9a25..0a19ff2 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/IFritzWanPppConnectionService.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WanPppConnection/IFritzWanPppConnectionService.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WANPPPConnection:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWanPppConnectionService +internal interface IFritzWanPppConnectionService : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WANPPPConnection:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetChannelInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetChannelInfoResponse.cs index 6cb8cc7..af84444 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetChannelInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetChannelInfoResponse.cs @@ -3,4 +3,6 @@ [MessageContract(WrapperName = "GetChannelInfoResponse")] public readonly record struct WlanConfigurationGetChannelInfoResponse( [property: MessageBodyMember(Name = "NewChannel")] byte Channel, - [property: MessageBodyMember(Name = "NewPossibleChannels")] string PossibleChannels); \ No newline at end of file + [property: MessageBodyMember(Name = "NewPossibleChannels")] string PossibleChannels, + [property: MessageBodyMember(Name = "NewX_AVM-DE_AutoChannelEnabled")] bool AutoChannelEnabled, + [property: MessageBodyMember(Name = "NewX_AVM-DE_FrequencyBand")] string FrequencyBand); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetInfoResponse.cs index d106beb..cc41ebb 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetInfoResponse.cs @@ -19,4 +19,6 @@ public readonly record struct WlanConfigurationGetInfoResponse( [property: MessageBodyMember(Name = "NewAllowedCharsSSID")] string AllowedCharsSsid, [property: MessageBodyMember(Name = "NewMinCharsPSK")] byte MinCharsPsk, [property: MessageBodyMember(Name = "NewMaxCharsPSK")] byte MaxCharsPsk, - [property: MessageBodyMember(Name = "NewAllowedCharsPSK")] string AllowedCharsPsk); \ No newline at end of file + [property: MessageBodyMember(Name = "NewAllowedCharsPSK")] string AllowedCharsPsk, + [property: MessageBodyMember(Name = "NewX_AVM-DE_FrequencyBand")] string FrequencyBand, + [property: MessageBodyMember(Name = "NewX_AVM-DE_WLANGlobalEnable")] bool WlanGlobalEnable); \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanConnectionInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanConnectionInfoResponse.cs index 0bf119c..98150ff 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanConnectionInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanConnectionInfoResponse.cs @@ -8,6 +8,9 @@ public readonly record struct WlanConfigurationGetWlanConnectionInfoResponse( [property: MessageBodyMember(Name = "NewBeaconType")] string BeaconType, [property: MessageBodyMember(Name = "NewChannel")] byte Channel, [property: MessageBodyMember(Name = "NewStandard")] string Standard, + [property: MessageBodyMember(Name = "NewX_AVM-DE_AutoChannelEnabled")] bool AutoChannelEnabled, + [property: MessageBodyMember(Name = "NewX_AVM-DE_ChannelWidth")] ushort ChannelWidth, + [property: MessageBodyMember(Name = "NewX_AVM-DE_FrequencyBand")] string FrequencyBand, [property: MessageBodyMember(Name = "NewX_AVM-DE_SignalStrength")] byte SignalStrength, [property: MessageBodyMember(Name = "NewX_AVM-DE_Speed")] ushort Speed, [property: MessageBodyMember(Name = "NewX_AVM-DE_SpeedRX")] uint SpeedRx, diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanExtInfoResponse.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanExtInfoResponse.cs index 7534af7..77a847f 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanExtInfoResponse.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/Entities/WlanConfigurationGetWlanExtInfoResponse.cs @@ -4,6 +4,7 @@ public readonly record struct WlanConfigurationGetWlanExtInfoResponse( [property: MessageBodyMember(Name = "NewX_AVM-DE_APEnabled")] string ApEnabled, [property: MessageBodyMember(Name = "NewX_AVM-DE_APType")] string ApType, + [property: MessageBodyMember(Name = "NewX_AVM-DE_FrequencyBand")] string FrequencyBand, [property: MessageBodyMember(Name = "NewX_AVM-DE_TimeoutActive")] string TimeoutActive, [property: MessageBodyMember(Name = "NewX_AVM-DE_Timeout")] string Timeout, [property: MessageBodyMember(Name = "NewX_AVM-DE_TimeRemain")] string TimeRemain, diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration1Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration1Service.cs index 5a15f7d..0064a64 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration1Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration1Service.cs @@ -2,97 +2,59 @@ using System.Net; -internal sealed class FritzWlanConfiguration1Service : FritzServiceClient, IFritzWlanConfiguration1Service +internal sealed class FritzWlanConfiguration1Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWlanConfiguration1Service { public const string ControlUrl = "/upnp/control/wlanconfig1"; - public FritzWlanConfiguration1Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WlanConfigurationGetInfoRequest wlanConfigurationGetInfoRequest) - { - return Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); - } + => Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); public Task GetWlanDeviceListPathAsync(WlanConfigurationGetWlanDeviceListPathRequest wlanConfigurationGetWlanDeviceListPathRequest) - { - return Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); - } + => Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); public Task GetBasBeaconSecurityPropertiesAsync(WlanConfigurationGetBasBeaconSecurityPropertiesRequest wlanConfigurationGetBasBeaconSecurityPropertiesRequest) - { - return Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); - } + => Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); public Task GetBssIdAsync(WlanConfigurationGetBssIdRequest wlanConfigurationGetBssIdRequest) - { - return Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); - } + => Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); public Task GetSsIdAsync(WlanConfigurationGetSsIdRequest wlanConfigurationGetSsIdRequest) - { - return Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); - } + => Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); public Task GetBeaconTypeAsync(WlanConfigurationGetBeaconTypeRequest wlanConfigurationGetBeaconTypeRequest) - { - return Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); - } + => Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); public Task GetChannelInfoAsync(WlanConfigurationGetChannelInfoRequest wlanConfigurationGetChannelInfoRequest) - { - return Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); - } + => Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); public Task GetBeaconAdvertisementAsync(WlanConfigurationGetBeaconAdvertisementRequest wlanConfigurationGetBeaconAdvertisementRequest) - { - return Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); - } + => Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); public Task GetTotalAssociationsAsync(WlanConfigurationGetTotalAssociationsRequest wlanConfigurationGetTotalAssociationsRequest) - { - return Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); - } + => Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); public Task GetIpTvOptimizedAsync(WlanConfigurationGetIpTvOptimizedRequest wlanConfigurationGetIpTvOptimizedRequest) - { - return Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); - } + => Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); public Task GetStatisticsAsync(WlanConfigurationGetStatisticsRequest wlanConfigurationGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); public Task GetPacketStatisticsAsync(WlanConfigurationGetPacketStatisticsRequest wlanConfigurationGetPacketStatisticsRequest) - { - return Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); - } + => Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); public Task GetNightControlAsync(WlanConfigurationGetNightControlRequest wlanConfigurationGetNightControlRequest) - { - return Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); - } + => Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); public Task GetWlanHybridModeAsync(WlanConfigurationGetWlanHybridModeRequest wlanConfigurationGetWlanHybridModeRequest) - { - return Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); - } + => Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); public Task GetWlanExtInfoAsync(WlanConfigurationGetWlanExtInfoRequest wlanConfigurationGetWlanExtInfoRequest) - { - return Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); - } + => Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); public Task GetWpsInfoAsync(WlanConfigurationGetWpsInfoRequest wlanConfigurationGetWpsInfoRequest) - { - return Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); - } + => Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); public Task GetWlanConnectionInfoAsync(WlanConfigurationGetWlanConnectionInfoRequest wlanConfigurationGetWlanConnectionInfoRequest) - { - return Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); - } + => Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration2Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration2Service.cs index adb9668..23763f3 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration2Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration2Service.cs @@ -2,97 +2,59 @@ using System.Net; -internal sealed class FritzWlanConfiguration2Service : FritzServiceClient, IFritzWlanConfiguration2Service +internal sealed class FritzWlanConfiguration2Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWlanConfiguration2Service { public const string ControlUrl = "/upnp/control/wlanconfig2"; - public FritzWlanConfiguration2Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WlanConfigurationGetInfoRequest wlanConfigurationGetInfoRequest) - { - return Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); - } + => Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); public Task GetWlanDeviceListPathAsync(WlanConfigurationGetWlanDeviceListPathRequest wlanConfigurationGetWlanDeviceListPathRequest) - { - return Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); - } + => Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); public Task GetBasBeaconSecurityPropertiesAsync(WlanConfigurationGetBasBeaconSecurityPropertiesRequest wlanConfigurationGetBasBeaconSecurityPropertiesRequest) - { - return Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); - } + => Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); public Task GetBssIdAsync(WlanConfigurationGetBssIdRequest wlanConfigurationGetBssIdRequest) - { - return Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); - } + => Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); public Task GetSsIdAsync(WlanConfigurationGetSsIdRequest wlanConfigurationGetSsIdRequest) - { - return Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); - } + => Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); public Task GetBeaconTypeAsync(WlanConfigurationGetBeaconTypeRequest wlanConfigurationGetBeaconTypeRequest) - { - return Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); - } + => Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); public Task GetChannelInfoAsync(WlanConfigurationGetChannelInfoRequest wlanConfigurationGetChannelInfoRequest) - { - return Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); - } + => Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); public Task GetBeaconAdvertisementAsync(WlanConfigurationGetBeaconAdvertisementRequest wlanConfigurationGetBeaconAdvertisementRequest) - { - return Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); - } + => Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); public Task GetTotalAssociationsAsync(WlanConfigurationGetTotalAssociationsRequest wlanConfigurationGetTotalAssociationsRequest) - { - return Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); - } + => Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); public Task GetIpTvOptimizedAsync(WlanConfigurationGetIpTvOptimizedRequest wlanConfigurationGetIpTvOptimizedRequest) - { - return Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); - } + => Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); public Task GetStatisticsAsync(WlanConfigurationGetStatisticsRequest wlanConfigurationGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); public Task GetPacketStatisticsAsync(WlanConfigurationGetPacketStatisticsRequest wlanConfigurationGetPacketStatisticsRequest) - { - return Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); - } + => Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); public Task GetNightControlAsync(WlanConfigurationGetNightControlRequest wlanConfigurationGetNightControlRequest) - { - return Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); - } + => Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); public Task GetWlanHybridModeAsync(WlanConfigurationGetWlanHybridModeRequest wlanConfigurationGetWlanHybridModeRequest) - { - return Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); - } + => Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); public Task GetWlanExtInfoAsync(WlanConfigurationGetWlanExtInfoRequest wlanConfigurationGetWlanExtInfoRequest) - { - return Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); - } + => Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); public Task GetWpsInfoAsync(WlanConfigurationGetWpsInfoRequest wlanConfigurationGetWpsInfoRequest) - { - return Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); - } + => Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); public Task GetWlanConnectionInfoAsync(WlanConfigurationGetWlanConnectionInfoRequest wlanConfigurationGetWlanConnectionInfoRequest) - { - return Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); - } + => Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration3Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration3Service.cs index 73841bd..1bc6473 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration3Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration3Service.cs @@ -2,97 +2,59 @@ using System.Net; -internal sealed class FritzWlanConfiguration3Service : FritzServiceClient, IFritzWlanConfiguration3Service +internal sealed class FritzWlanConfiguration3Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWlanConfiguration3Service { public const string ControlUrl = "/upnp/control/wlanconfig3"; - public FritzWlanConfiguration3Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WlanConfigurationGetInfoRequest wlanConfigurationGetInfoRequest) - { - return Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); - } + => Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); public Task GetWlanDeviceListPathAsync(WlanConfigurationGetWlanDeviceListPathRequest wlanConfigurationGetWlanDeviceListPathRequest) - { - return Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); - } + => Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); public Task GetBasBeaconSecurityPropertiesAsync(WlanConfigurationGetBasBeaconSecurityPropertiesRequest wlanConfigurationGetBasBeaconSecurityPropertiesRequest) - { - return Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); - } + => Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); public Task GetBssIdAsync(WlanConfigurationGetBssIdRequest wlanConfigurationGetBssIdRequest) - { - return Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); - } + => Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); public Task GetSsIdAsync(WlanConfigurationGetSsIdRequest wlanConfigurationGetSsIdRequest) - { - return Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); - } + => Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); public Task GetBeaconTypeAsync(WlanConfigurationGetBeaconTypeRequest wlanConfigurationGetBeaconTypeRequest) - { - return Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); - } + => Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); public Task GetChannelInfoAsync(WlanConfigurationGetChannelInfoRequest wlanConfigurationGetChannelInfoRequest) - { - return Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); - } + => Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); public Task GetBeaconAdvertisementAsync(WlanConfigurationGetBeaconAdvertisementRequest wlanConfigurationGetBeaconAdvertisementRequest) - { - return Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); - } + => Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); public Task GetTotalAssociationsAsync(WlanConfigurationGetTotalAssociationsRequest wlanConfigurationGetTotalAssociationsRequest) - { - return Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); - } + => Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); public Task GetIpTvOptimizedAsync(WlanConfigurationGetIpTvOptimizedRequest wlanConfigurationGetIpTvOptimizedRequest) - { - return Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); - } + => Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); public Task GetStatisticsAsync(WlanConfigurationGetStatisticsRequest wlanConfigurationGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); public Task GetPacketStatisticsAsync(WlanConfigurationGetPacketStatisticsRequest wlanConfigurationGetPacketStatisticsRequest) - { - return Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); - } + => Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); public Task GetNightControlAsync(WlanConfigurationGetNightControlRequest wlanConfigurationGetNightControlRequest) - { - return Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); - } + => Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); public Task GetWlanHybridModeAsync(WlanConfigurationGetWlanHybridModeRequest wlanConfigurationGetWlanHybridModeRequest) - { - return Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); - } + => Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); public Task GetWlanExtInfoAsync(WlanConfigurationGetWlanExtInfoRequest wlanConfigurationGetWlanExtInfoRequest) - { - return Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); - } + => Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); public Task GetWpsInfoAsync(WlanConfigurationGetWpsInfoRequest wlanConfigurationGetWpsInfoRequest) - { - return Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); - } + => Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); public Task GetWlanConnectionInfoAsync(WlanConfigurationGetWlanConnectionInfoRequest wlanConfigurationGetWlanConnectionInfoRequest) - { - return Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); - } + => Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration4Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration4Service.cs index ba732a1..ac67591 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration4Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/FritzWlanConfiguration4Service.cs @@ -2,97 +2,59 @@ using System.Net; -internal sealed class FritzWlanConfiguration4Service : FritzServiceClient, IFritzWlanConfiguration4Service +internal sealed class FritzWlanConfiguration4Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) + : FritzServiceClient(endpointConfiguration, remoteAddress, networkCredential), IFritzWlanConfiguration4Service { public const string ControlUrl = "/upnp/control/wlanconfig4"; - public FritzWlanConfiguration4Service(FritzServiceEndpointConfiguration endpointConfiguration, EndpointAddress remoteAddress, NetworkCredential networkCredential) - : base(endpointConfiguration, remoteAddress, networkCredential) - { - } - public Task GetInfoAsync(WlanConfigurationGetInfoRequest wlanConfigurationGetInfoRequest) - { - return Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); - } + => Channel.GetInfoAsync(wlanConfigurationGetInfoRequest); public Task GetWlanDeviceListPathAsync(WlanConfigurationGetWlanDeviceListPathRequest wlanConfigurationGetWlanDeviceListPathRequest) - { - return Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); - } + => Channel.GetWlanDeviceListPathAsync(wlanConfigurationGetWlanDeviceListPathRequest); public Task GetBasBeaconSecurityPropertiesAsync(WlanConfigurationGetBasBeaconSecurityPropertiesRequest wlanConfigurationGetBasBeaconSecurityPropertiesRequest) - { - return Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); - } + => Channel.GetBasBeaconSecurityPropertiesAsync(wlanConfigurationGetBasBeaconSecurityPropertiesRequest); public Task GetBssIdAsync(WlanConfigurationGetBssIdRequest wlanConfigurationGetBssIdRequest) - { - return Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); - } + => Channel.GetBssIdAsync(wlanConfigurationGetBssIdRequest); public Task GetSsIdAsync(WlanConfigurationGetSsIdRequest wlanConfigurationGetSsIdRequest) - { - return Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); - } + => Channel.GetSsIdAsync(wlanConfigurationGetSsIdRequest); public Task GetBeaconTypeAsync(WlanConfigurationGetBeaconTypeRequest wlanConfigurationGetBeaconTypeRequest) - { - return Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); - } + => Channel.GetBeaconTypeAsync(wlanConfigurationGetBeaconTypeRequest); public Task GetChannelInfoAsync(WlanConfigurationGetChannelInfoRequest wlanConfigurationGetChannelInfoRequest) - { - return Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); - } + => Channel.GetChannelInfoAsync(wlanConfigurationGetChannelInfoRequest); public Task GetBeaconAdvertisementAsync(WlanConfigurationGetBeaconAdvertisementRequest wlanConfigurationGetBeaconAdvertisementRequest) - { - return Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); - } + => Channel.GetBeaconAdvertisementAsync(wlanConfigurationGetBeaconAdvertisementRequest); public Task GetTotalAssociationsAsync(WlanConfigurationGetTotalAssociationsRequest wlanConfigurationGetTotalAssociationsRequest) - { - return Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); - } + => Channel.GetTotalAssociationsAsync(wlanConfigurationGetTotalAssociationsRequest); public Task GetIpTvOptimizedAsync(WlanConfigurationGetIpTvOptimizedRequest wlanConfigurationGetIpTvOptimizedRequest) - { - return Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); - } + => Channel.GetIpTvOptimizedAsync(wlanConfigurationGetIpTvOptimizedRequest); public Task GetStatisticsAsync(WlanConfigurationGetStatisticsRequest wlanConfigurationGetStatisticsRequest) - { - return Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); - } + => Channel.GetStatisticsAsync(wlanConfigurationGetStatisticsRequest); public Task GetPacketStatisticsAsync(WlanConfigurationGetPacketStatisticsRequest wlanConfigurationGetPacketStatisticsRequest) - { - return Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); - } + => Channel.GetPacketStatisticsAsync(wlanConfigurationGetPacketStatisticsRequest); public Task GetNightControlAsync(WlanConfigurationGetNightControlRequest wlanConfigurationGetNightControlRequest) - { - return Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); - } + => Channel.GetNightControlAsync(wlanConfigurationGetNightControlRequest); public Task GetWlanHybridModeAsync(WlanConfigurationGetWlanHybridModeRequest wlanConfigurationGetWlanHybridModeRequest) - { - return Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); - } + => Channel.GetWlanHybridModeAsync(wlanConfigurationGetWlanHybridModeRequest); public Task GetWlanExtInfoAsync(WlanConfigurationGetWlanExtInfoRequest wlanConfigurationGetWlanExtInfoRequest) - { - return Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); - } + => Channel.GetWlanExtInfoAsync(wlanConfigurationGetWlanExtInfoRequest); public Task GetWpsInfoAsync(WlanConfigurationGetWpsInfoRequest wlanConfigurationGetWpsInfoRequest) - { - return Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); - } + => Channel.GetWpsInfoAsync(wlanConfigurationGetWpsInfoRequest); public Task GetWlanConnectionInfoAsync(WlanConfigurationGetWlanConnectionInfoRequest wlanConfigurationGetWlanConnectionInfoRequest) - { - return Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); - } + => Channel.GetWlanConnectionInfoAsync(wlanConfigurationGetWlanConnectionInfoRequest); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration1Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration1Service.cs index 11dbe42..84a5d4e 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration1Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration1Service.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WLANConfiguration:1")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWlanConfiguration1Service +internal interface IFritzWlanConfiguration1Service : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WLANConfiguration:1#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration2Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration2Service.cs index 78fb01d..22812e7 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration2Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration2Service.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WLANConfiguration:2")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWlanConfiguration2Service +internal interface IFritzWlanConfiguration2Service : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WLANConfiguration:2#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration3Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration3Service.cs index 0be3a9a..fa06a59 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration3Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration3Service.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WLANConfiguration:3")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWlanConfiguration3Service +internal interface IFritzWlanConfiguration3Service : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WLANConfiguration:3#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration4Service.cs b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration4Service.cs index 7096a1a..86aeeb2 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration4Service.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/Services/WlanConfiguration/IFritzWlanConfiguration4Service.cs @@ -2,7 +2,7 @@ [ServiceContract(Namespace = "urn:dslforum-org:service:WLANConfiguration:4")] [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] -internal interface IFritzWlanConfiguration4Service +internal interface IFritzWlanConfiguration4Service : IAsyncDisposable { [OperationContract(Action = "urn:dslforum-org:service:WLANConfiguration:4#GetInfo")] [FaultContract(typeof(UPnPFault1))] diff --git a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ClientFactory.cs b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ClientFactory.cs index ecaac66..118abb3 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ClientFactory.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ClientFactory.cs @@ -2,25 +2,14 @@ using System.Net; -internal sealed class ClientFactory : IClientFactory +internal sealed class ClientFactory(INetworkService networkService) : IClientFactory where T : class { - private readonly INetworkService networkService; - - public ClientFactory(INetworkService networkService) - { - this.networkService = networkService; - } - public T Build(Func createClient, Uri location, bool secure, string controlUrl, ushort? port, NetworkCredential? networkCredential) - { - return createClient(GetEndpointConfiguration(secure), GetEndpointAddress(location, secure, controlUrl, port), networkCredential); - } + => createClient(GetEndpointConfiguration(secure), GetEndpointAddress(location, secure, controlUrl, port), networkCredential); private static FritzServiceEndpointConfiguration GetEndpointConfiguration(bool secure) - { - return secure ? FritzServiceEndpointConfiguration.BasicHttpsBindingIFritzService : FritzServiceEndpointConfiguration.BasicHttpBindingIFritzService; - } + => secure ? FritzServiceEndpointConfiguration.BasicHttpsBindingIFritzService : FritzServiceEndpointConfiguration.BasicHttpBindingIFritzService; private EndpointAddress GetEndpointAddress(Uri location, bool secure, string controlUrl, ushort? port = null) { diff --git a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/FritzServiceOperationHandler.cs b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/FritzServiceOperationHandler.cs index fa1028c..1b0d87b 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/FritzServiceOperationHandler.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/FritzServiceOperationHandler.cs @@ -2,858 +2,519 @@ using System.Net; -internal sealed class FritzServiceOperationHandler : ServiceOperationHandler, IFritzServiceOperationHandler +internal sealed class FritzServiceOperationHandler( + IClientFactory fritzHostsServiceClientFactory, + IClientFactory fritzWanCommonInterfaceConfigServiceClientFactory, + IClientFactory fritzDeviceInfoServiceClientFactory, + IClientFactory fritzLanConfigSecurityServiceClientFactory, + IClientFactory fritzLayer3ForwardingServiceClientFactory, + IClientFactory fritzWanDslInterfaceConfigServiceClientFactory, + IClientFactory fritzWanPppConnectionServiceClientFactory, + IClientFactory fritzWanIpConnectionServiceClientFactory, + IClientFactory fritzWanEthernetLinkConfigServiceClientFactory, + IClientFactory fritzWanDslLinkConfigServiceClientFactory, + IClientFactory fritzAvmSpeedtestServiceClientFactory, + IClientFactory fritzLanEthernetInterfaceConfigServiceClientFactory, + IClientFactory fritzLanHostConfigManagementServiceClientFactory, + IClientFactory fritzWlanConfiguration1ServiceClientFactory, + IClientFactory fritzWlanConfiguration2ServiceClientFactory, + IClientFactory fritzWlanConfiguration3ServiceClientFactory, + IClientFactory fritzWlanConfiguration4ServiceClientFactory, + IClientFactory fritzManagementServerServiceClientFactory, + IClientFactory fritzTimeServiceClientFactory, + IClientFactory fritzUserInterfaceServiceClientFactory, + IClientFactory fritzDeviceConfigServiceClientFactory) + : IFritzServiceOperationHandler { - private readonly IClientFactory fritzHostsServiceClientFactory; - private readonly IClientFactory fritzWanCommonInterfaceConfigServiceClientFactory; - private readonly IClientFactory fritzDeviceInfoServiceClientFactory; - private readonly IClientFactory fritzLanConfigSecurityServiceClientFactory; - private readonly IClientFactory fritzLayer3ForwardingServiceClientFactory; - private readonly IClientFactory fritzWanDslInterfaceConfigServiceClientFactory; - private readonly IClientFactory fritzWanPppConnectionServiceClientFactory; - private readonly IClientFactory fritzWanIpConnectionServiceClientFactory; - private readonly IClientFactory fritzWanEthernetLinkConfigServiceClientFactory; - private readonly IClientFactory fritzWanDslLinkConfigServiceClientFactory; - private readonly IClientFactory fritzAvmSpeedtestServiceClientFactory; - private readonly IClientFactory fritzLanEthernetInterfaceConfigServiceClientFactory; - private readonly IClientFactory fritzLanHostConfigManagementServiceClientFactory; - private readonly IClientFactory fritzWlanConfiguration1ServiceClientFactory; - private readonly IClientFactory fritzWlanConfiguration2ServiceClientFactory; - private readonly IClientFactory fritzWlanConfiguration3ServiceClientFactory; - private readonly IClientFactory fritzWlanConfiguration4ServiceClientFactory; - private readonly IClientFactory fritzManagementServerServiceClientFactory; - private readonly IClientFactory fritzTimeServiceClientFactory; - private readonly IClientFactory fritzUserInterfaceServiceClientFactory; - private readonly IClientFactory fritzDeviceConfigServiceClientFactory; - - public FritzServiceOperationHandler( - IClientFactory fritzHostsServiceClientFactory, - IClientFactory fritzWanCommonInterfaceConfigServiceClientFactory, - IClientFactory fritzDeviceInfoServiceClientFactory, - IClientFactory fritzLanConfigSecurityServiceClientFactory, - IClientFactory fritzLayer3ForwardingServiceClientFactory, - IClientFactory fritzWanDslInterfaceConfigServiceClientFactory, - IClientFactory fritzWanPppConnectionServiceClientFactory, - IClientFactory fritzWanIpConnectionServiceClientFactory, - IClientFactory fritzWanEthernetLinkConfigServiceClientFactory, - IClientFactory fritzWanDslLinkConfigServiceClientFactory, - IClientFactory fritzAvmSpeedtestServiceClientFactory, - IClientFactory fritzLanEthernetInterfaceConfigServiceClientFactory, - IClientFactory fritzLanHostConfigManagementServiceClientFactory, - IClientFactory fritzWlanConfiguration1ServiceClientFactory, - IClientFactory fritzWlanConfiguration2ServiceClientFactory, - IClientFactory fritzWlanConfiguration3ServiceClientFactory, - IClientFactory fritzWlanConfiguration4ServiceClientFactory, - IClientFactory fritzManagementServerServiceClientFactory, - IClientFactory fritzTimeServiceClientFactory, - IClientFactory fritzUserInterfaceServiceClientFactory, - IClientFactory fritzDeviceConfigServiceClientFactory) - { - this.fritzHostsServiceClientFactory = fritzHostsServiceClientFactory; - this.fritzWanCommonInterfaceConfigServiceClientFactory = fritzWanCommonInterfaceConfigServiceClientFactory; - this.fritzDeviceInfoServiceClientFactory = fritzDeviceInfoServiceClientFactory; - this.fritzLanConfigSecurityServiceClientFactory = fritzLanConfigSecurityServiceClientFactory; - this.fritzLayer3ForwardingServiceClientFactory = fritzLayer3ForwardingServiceClientFactory; - this.fritzWanDslInterfaceConfigServiceClientFactory = fritzWanDslInterfaceConfigServiceClientFactory; - this.fritzWanPppConnectionServiceClientFactory = fritzWanPppConnectionServiceClientFactory; - this.fritzWanIpConnectionServiceClientFactory = fritzWanIpConnectionServiceClientFactory; - this.fritzWanEthernetLinkConfigServiceClientFactory = fritzWanEthernetLinkConfigServiceClientFactory; - this.fritzWanDslLinkConfigServiceClientFactory = fritzWanDslLinkConfigServiceClientFactory; - this.fritzAvmSpeedtestServiceClientFactory = fritzAvmSpeedtestServiceClientFactory; - this.fritzLanEthernetInterfaceConfigServiceClientFactory = fritzLanEthernetInterfaceConfigServiceClientFactory; - this.fritzLanHostConfigManagementServiceClientFactory = fritzLanHostConfigManagementServiceClientFactory; - this.fritzWlanConfiguration1ServiceClientFactory = fritzWlanConfiguration1ServiceClientFactory; - this.fritzWlanConfiguration2ServiceClientFactory = fritzWlanConfiguration2ServiceClientFactory; - this.fritzWlanConfiguration3ServiceClientFactory = fritzWlanConfiguration3ServiceClientFactory; - this.fritzWlanConfiguration4ServiceClientFactory = fritzWlanConfiguration4ServiceClientFactory; - this.fritzManagementServerServiceClientFactory = fritzManagementServerServiceClientFactory; - this.fritzTimeServiceClientFactory = fritzTimeServiceClientFactory; - this.fritzUserInterfaceServiceClientFactory = fritzUserInterfaceServiceClientFactory; - this.fritzDeviceConfigServiceClientFactory = fritzDeviceConfigServiceClientFactory; - } - public Task HostsGetHostNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetHostNumberOfEntriesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetHostNumberOfEntriesAsync(default)); + + public Task HostsHostsCheckUpdateAsync(InternetGatewayDevice internetGatewayDevice) + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.HostsCheckUpdateAsync(default)); public Task HostsGetHostListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetHostListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetHostListPathAsync(default)); public Task HostsGetGenericHostEntryAsync(InternetGatewayDevice internetGatewayDevice, HostsGetGenericHostEntryRequest hostsGetGenericHostEntryRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetGenericHostEntryAsync(hostsGetGenericHostEntryRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetGenericHostEntryAsync(hostsGetGenericHostEntryRequest)); + + public Task HostsGetInfoAsync(InternetGatewayDevice internetGatewayDevice) + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetInfoAsync(default)); public Task HostsGetChangeCounterAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetChangeCounterAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetChangeCounterAsync(default)); public Task HostsGetMeshListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetMeshListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetMeshListPathAsync(default)); + + public Task HostsGetFriendlyNameAsync(InternetGatewayDevice internetGatewayDevice) + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzHostsServiceClientFactory, (q, r, t) => new FritzHostsService(q, r, t!), FritzHostsService.ControlUrl), q => q.GetFriendlyNameAsync(default)); public Task WanCommonInterfaceConfigGetCommonLinkPropertiesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetCommonLinkPropertiesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetCommonLinkPropertiesAsync(default)); public Task WanCommonInterfaceConfigGetTotalBytesReceivedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalBytesReceivedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalBytesReceivedAsync(default)); public Task WanCommonInterfaceConfigGetTotalBytesSentAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalBytesSentAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalBytesSentAsync(default)); public Task WanCommonInterfaceConfigGetTotalPacketsReceivedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalPacketsReceivedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalPacketsReceivedAsync(default)); public Task WanCommonInterfaceConfigGetTotalPacketsSentAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalPacketsSentAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetTotalPacketsSentAsync(default)); public Task WanCommonInterfaceConfigGetOnlineMonitorAsync(InternetGatewayDevice internetGatewayDevice, WanCommonInterfaceConfigGetOnlineMonitorRequest wanCommonInterfaceConfigGetOnlineMonitorRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetOnlineMonitorAsync(wanCommonInterfaceConfigGetOnlineMonitorRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.GetOnlineMonitorAsync(wanCommonInterfaceConfigGetOnlineMonitorRequest)); public Task WanCommonInterfaceConfigSetWanAccessTypeAsync(InternetGatewayDevice internetGatewayDevice, WanCommonInterfaceConfigSetWanAccessTypeRequest wanCommonInterfaceConfigSetWanAccessTypeRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.SetWanAccessTypeAsync(wanCommonInterfaceConfigSetWanAccessTypeRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanCommonInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanCommonInterfaceConfigService(q, r, t!), FritzWanCommonInterfaceConfigService.ControlUrl), q => q.SetWanAccessTypeAsync(wanCommonInterfaceConfigSetWanAccessTypeRequest)); public Task DeviceInfoGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.GetInfoAsync(default)); public Task DeviceInfoGetDeviceLogAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.GetDeviceLogAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.GetDeviceLogAsync(default)); public Task DeviceInfoGetSecurityPortAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl, false), q => q.GetSecurityPortAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl, false), q => q.GetSecurityPortAsync(default)); public Task DeviceInfoSetProvisioningCodeAsync(InternetGatewayDevice internetGatewayDevice, DeviceInfoSetProvisioningCodeRequest deviceInfoSetProvisioningCodeRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.SetProvisioningCodeAsync(deviceInfoSetProvisioningCodeRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceInfoServiceClientFactory, (q, r, t) => new FritzDeviceInfoService(q, r, t), FritzDeviceInfoService.ControlUrl), q => q.SetProvisioningCodeAsync(deviceInfoSetProvisioningCodeRequest)); public Task LanConfigSecurityGetAnonymousLoginAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl, false), q => q.GetAnonymousLoginAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl, false), q => q.GetAnonymousLoginAsync(default)); public Task LanConfigSecurityGetCurrentUserAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetCurrentUserAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetCurrentUserAsync(default)); public Task LanConfigSecurityGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetInfoAsync(default)); public Task LanConfigSecurityGetUserListAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetUserListAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.GetUserListAsync(default)); public Task LanConfigSecuritySetConfigPasswordAsync(InternetGatewayDevice internetGatewayDevice, LanConfigSecuritySetConfigPasswordRequest lanConfigSecuritySetConfigPasswordRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.SetConfigPasswordAsync(lanConfigSecuritySetConfigPasswordRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanConfigSecurityServiceClientFactory, (q, r, t) => new FritzLanConfigSecurityService(q, r, t), FritzLanConfigSecurityService.ControlUrl), q => q.SetConfigPasswordAsync(lanConfigSecuritySetConfigPasswordRequest)); public Task Layer3ForwardingGetDefaultConnectionServiceAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetDefaultConnectionServiceAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetDefaultConnectionServiceAsync(default)); public Task Layer3ForwardingGetForwardNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetForwardNumberOfEntriesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetForwardNumberOfEntriesAsync(default)); public Task Layer3ForwardingGetGenericForwardingEntryAsync(InternetGatewayDevice internetGatewayDevice, Layer3ForwardingGetGenericForwardingEntryRequest layer3ForwardingGetGenericForwardingEntryRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetGenericForwardingEntryAsync(layer3ForwardingGetGenericForwardingEntryRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLayer3ForwardingServiceClientFactory, (q, r, t) => new FritzLayer3ForwardingService(q, r, t!), FritzLayer3ForwardingService.ControlUrl), q => q.GetGenericForwardingEntryAsync(layer3ForwardingGetGenericForwardingEntryRequest)); public Task WanDslInterfaceConfigGetDslDiagnoseInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetDslDiagnoseInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetDslDiagnoseInfoAsync(default)); public Task WanDslInterfaceConfigGetDslInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetDslInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetDslInfoAsync(default)); public Task WanDslInterfaceConfigGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetInfoAsync(default)); public Task WanDslInterfaceConfigGetStatisticsTotalAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetStatisticsTotalAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslInterfaceConfigServiceClientFactory, (q, r, t) => new FritzWanDslInterfaceConfigService(q, r, t!), FritzWanDslInterfaceConfigService.ControlUrl), q => q.GetStatisticsTotalAsync(default)); public Task WanIpConnectionGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetInfoAsync(default)); public Task WanIpConnectionGetConnectionTypeInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetConnectionTypeInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetConnectionTypeInfoAsync(default)); public Task WanIpConnectionGetStatusInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetStatusInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetStatusInfoAsync(default)); public Task WanIpConnectionGetNatRsipStatusAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetNatRsipStatusAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetNatRsipStatusAsync(default)); public Task WanIpConnectionGetDnsServersAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetDnsServersAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetDnsServersAsync(default)); public Task WanIpConnectionGetPortMappingNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetPortMappingNumberOfEntriesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetPortMappingNumberOfEntriesAsync(default)); public Task WanIpConnectionGetExternalIpAddressAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetExternalIpAddressAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetExternalIpAddressAsync(default)); public Task WanIpConnectionGetGenericPortMappingEntryAsync(InternetGatewayDevice internetGatewayDevice, WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanIpConnectionServiceClientFactory, (q, r, t) => new FritzWanIpConnectionService(q, r, t!), FritzWanIpConnectionService.ControlUrl), q => q.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest)); public Task WanPppConnectionGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetInfoAsync(default)); public Task WanPppConnectionGetConnectionTypeInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetConnectionTypeInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetConnectionTypeInfoAsync(default)); public Task WanPppConnectionGetStatusInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetStatusInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetStatusInfoAsync(default)); public Task WanPppConnectionGetLinkLayerMaxBitRatesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetLinkLayerMaxBitRatesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetLinkLayerMaxBitRatesAsync(default)); public Task WanPppConnectionGetUserNameAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetUserNameAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetUserNameAsync(default)); public Task WanPppConnectionGetNatRsipStatusAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetNatRsipStatusAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetNatRsipStatusAsync(default)); public Task WanPppConnectionGetDnsServersAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetDnsServersAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetDnsServersAsync(default)); public Task WanPppConnectionGetPortMappingNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetPortMappingNumberOfEntriesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetPortMappingNumberOfEntriesAsync(default)); public Task WanPppConnectionGetExternalIpAddressAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetExternalIpAddressAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetExternalIpAddressAsync(default)); public Task WanPppConnectionGetAutoDisconnectTimeSpanAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetAutoDisconnectTimeSpanAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetAutoDisconnectTimeSpanAsync(default)); public Task WanPppConnectionGetGenericPortMappingEntryAsync(InternetGatewayDevice internetGatewayDevice, WanConnectionGetGenericPortMappingEntryRequest wanConnectionGetGenericPortMappingEntryRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanPppConnectionServiceClientFactory, (q, r, t) => new FritzWanPppConnectionService(q, r, t!), FritzWanPppConnectionService.ControlUrl), q => q.GetGenericPortMappingEntryAsync(wanConnectionGetGenericPortMappingEntryRequest)); public Task WanEthernetLinkConfigGetEthernetLinkStatusAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanEthernetLinkConfigServiceClientFactory, (q, r, t) => new FritzWanEthernetLinkConfigService(q, r, t!), FritzWanEthernetLinkConfigService.ControlUrl), q => q.GetEthernetLinkStatusAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanEthernetLinkConfigServiceClientFactory, (q, r, t) => new FritzWanEthernetLinkConfigService(q, r, t!), FritzWanEthernetLinkConfigService.ControlUrl), q => q.GetEthernetLinkStatusAsync(default)); public Task WanDslLinkConfigGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetInfoAsync(default)); public Task WanDslLinkConfigGetDslLinkInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetDslLinkInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetDslLinkInfoAsync(default)); public Task WanDslLinkConfigGetDestinationAddressAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetDestinationAddressAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetDestinationAddressAsync(default)); public Task WanDslLinkConfigGetAtmEncapsulationAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetAtmEncapsulationAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetAtmEncapsulationAsync(default)); public Task WanDslLinkConfigGetAutoConfigAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetAutoConfigAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetAutoConfigAsync(default)); public Task WanDslLinkConfigGetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWanDslLinkConfigServiceClientFactory, (q, r, t) => new FritzWanDslLinkConfigService(q, r, t!), FritzWanDslLinkConfigService.ControlUrl), q => q.GetStatisticsAsync(default)); public Task AvmSpeedtestGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzAvmSpeedtestServiceClientFactory, (q, r, t) => new FritzAvmSpeedtestService(q, r, t!), FritzAvmSpeedtestService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzAvmSpeedtestServiceClientFactory, (q, r, t) => new FritzAvmSpeedtestService(q, r, t!), FritzAvmSpeedtestService.ControlUrl), q => q.GetInfoAsync(default)); + + public Task AvmSpeedtestGetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzAvmSpeedtestServiceClientFactory, (q, r, t) => new FritzAvmSpeedtestService(q, r, t!), FritzAvmSpeedtestService.ControlUrl), q => q.GetStatisticsAsync(default)); public Task LanEthernetInterfaceConfigGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanEthernetInterfaceConfigServiceClientFactory, (q, r, t) => new FritzLanEthernetInterfaceConfigService(q, r, t!), FritzLanEthernetInterfaceConfigService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanEthernetInterfaceConfigServiceClientFactory, (q, r, t) => new FritzLanEthernetInterfaceConfigService(q, r, t!), FritzLanEthernetInterfaceConfigService.ControlUrl), q => q.GetInfoAsync(default)); public Task LanEthernetInterfaceConfigGetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanEthernetInterfaceConfigServiceClientFactory, (q, r, t) => new FritzLanEthernetInterfaceConfigService(q, r, t!), FritzLanEthernetInterfaceConfigService.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanEthernetInterfaceConfigServiceClientFactory, (q, r, t) => new FritzLanEthernetInterfaceConfigService(q, r, t!), FritzLanEthernetInterfaceConfigService.ControlUrl), q => q.GetStatisticsAsync(default)); public Task LanHostConfigManagementGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetInfoAsync(default)); public Task LanHostConfigManagementGetAddressRangeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetAddressRangeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetAddressRangeAsync(default)); public Task LanHostConfigManagementGetDnsServersAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetDnsServersAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetDnsServersAsync(default)); public Task LanHostConfigManagementGetIpInterfaceNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetIpInterfaceNumberOfEntriesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetIpInterfaceNumberOfEntriesAsync(default)); public Task LanHostConfigManagementGetIpRoutersListAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetIpRoutersListAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetIpRoutersListAsync(default)); public Task LanHostConfigManagementGetSubnetMaskAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetSubnetMaskAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzLanHostConfigManagementServiceClientFactory, (q, r, t) => new FritzLanHostConfigManagementService(q, r, t!), FritzLanHostConfigManagementService.ControlUrl), q => q.GetSubnetMaskAsync(default)); public Task WlanConfiguration1GetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetInfoAsync(default)); public Task WlanConfiguration2GetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetInfoAsync(default)); public Task WlanConfiguration3GetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetInfoAsync(default)); public Task WlanConfiguration4GetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetInfoAsync(default)); public Task WlanConfiguration1GetWlanDeviceListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); public Task WlanConfiguration2GetWlanDeviceListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); public Task WlanConfiguration3GetWlanDeviceListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); public Task WlanConfiguration4GetWlanDeviceListPathAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanDeviceListPathAsync(default)); public Task WlanConfiguration1GetBasBeaconSecurityPropertiesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); public Task WlanConfiguration2GetBasBeaconSecurityPropertiesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); public Task WlanConfiguration3GetBasBeaconSecurityPropertiesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); public Task WlanConfiguration4GetBasBeaconSecurityPropertiesAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBasBeaconSecurityPropertiesAsync(default)); public Task WlanConfiguration1GetBssIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBssIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBssIdAsync(default)); public Task WlanConfiguration2GetBssIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBssIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBssIdAsync(default)); public Task WlanConfiguration3GetBssIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBssIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBssIdAsync(default)); public Task WlanConfiguration4GetBssIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBssIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBssIdAsync(default)); public Task WlanConfiguration1GetSsIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetSsIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetSsIdAsync(default)); public Task WlanConfiguration2GetSsIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetSsIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetSsIdAsync(default)); public Task WlanConfiguration3GetSsIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetSsIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetSsIdAsync(default)); public Task WlanConfiguration4GetSsIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetSsIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetSsIdAsync(default)); public Task WlanConfiguration1GetBeaconTypeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); public Task WlanConfiguration2GetBeaconTypeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); public Task WlanConfiguration3GetBeaconTypeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); public Task WlanConfiguration4GetBeaconTypeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBeaconTypeAsync(default)); public Task WlanConfiguration1GetChannelInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetChannelInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetChannelInfoAsync(default)); public Task WlanConfiguration2GetChannelInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetChannelInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetChannelInfoAsync(default)); public Task WlanConfiguration3GetChannelInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetChannelInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetChannelInfoAsync(default)); public Task WlanConfiguration4GetChannelInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetChannelInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetChannelInfoAsync(default)); public Task WlanConfiguration1GetBeaconAdvertisementAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); public Task WlanConfiguration2GetBeaconAdvertisementAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); public Task WlanConfiguration3GetBeaconAdvertisementAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); public Task WlanConfiguration4GetBeaconAdvertisementAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetBeaconAdvertisementAsync(default)); public Task WlanConfiguration1GetTotalAssociationsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); public Task WlanConfiguration2GetTotalAssociationsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); public Task WlanConfiguration3GetTotalAssociationsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); public Task WlanConfiguration4GetTotalAssociationsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetTotalAssociationsAsync(default)); public Task WlanConfiguration1GetIpTvOptimizedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); public Task WlanConfiguration2GetIpTvOptimizedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); public Task WlanConfiguration3GetIpTvOptimizedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); public Task WlanConfiguration4GetIpTvOptimizedAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetIpTvOptimizedAsync(default)); public Task WlanConfiguration1GetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetStatisticsAsync(default)); public Task WlanConfiguration2GetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetStatisticsAsync(default)); public Task WlanConfiguration3GetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetStatisticsAsync(default)); public Task WlanConfiguration4GetStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetStatisticsAsync(default)); public Task WlanConfiguration1GetPacketStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); public Task WlanConfiguration2GetPacketStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); public Task WlanConfiguration3GetPacketStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); public Task WlanConfiguration4GetPacketStatisticsAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetPacketStatisticsAsync(default)); public Task WlanConfiguration1GetNightControlAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetNightControlAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetNightControlAsync(default)); public Task WlanConfiguration2GetNightControlAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetNightControlAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetNightControlAsync(default)); public Task WlanConfiguration3GetNightControlAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetNightControlAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetNightControlAsync(default)); public Task WlanConfiguration4GetNightControlAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetNightControlAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetNightControlAsync(default)); public Task WlanConfiguration1GetWlanHybridModeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); public Task WlanConfiguration2GetWlanHybridModeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); public Task WlanConfiguration3GetWlanHybridModeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); public Task WlanConfiguration4GetWlanHybridModeAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanHybridModeAsync(default)); public Task WlanConfiguration1GetWlanExtInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); public Task WlanConfiguration2GetWlanExtInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); public Task WlanConfiguration3GetWlanExtInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); public Task WlanConfiguration4GetWlanExtInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanExtInfoAsync(default)); public Task WlanConfiguration1GetWpsInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWpsInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWpsInfoAsync(default)); public Task WlanConfiguration2GetWpsInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWpsInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWpsInfoAsync(default)); public Task WlanConfiguration3GetWpsInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWpsInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWpsInfoAsync(default)); public Task WlanConfiguration4GetWpsInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWpsInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWpsInfoAsync(default)); public Task WlanConfiguration1GetWlanConnectionInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration1ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration1Service(q, r, t!), FritzWlanConfiguration1Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); public Task WlanConfiguration2GetWlanConnectionInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration2ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration2Service(q, r, t!), FritzWlanConfiguration2Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); public Task WlanConfiguration3GetWlanConnectionInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration3ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration3Service(q, r, t!), FritzWlanConfiguration3Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); public Task WlanConfiguration4GetWlanConnectionInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzWlanConfiguration4ServiceClientFactory, (q, r, t) => new FritzWlanConfiguration4Service(q, r, t!), FritzWlanConfiguration4Service.ControlUrl), q => q.GetWlanConnectionInfoAsync(default)); public Task ManagementServerGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.GetInfoAsync(default)); public Task ManagementServerGetTr069FirmwareDownloadEnabledAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.GetTr069FirmwareDownloadEnabledAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.GetTr069FirmwareDownloadEnabledAsync(default)); public Task ManagementServerSetManagementServerUrlAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerUrlRequest managementServerSetManagementServerUrlRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerUrlAsync(managementServerSetManagementServerUrlRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerUrlAsync(managementServerSetManagementServerUrlRequest)); public Task ManagementServerSetManagementServerUsernameAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerUsernameRequest managementServerSetManagementServerUsernameRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerUsernameAsync(managementServerSetManagementServerUsernameRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerUsernameAsync(managementServerSetManagementServerUsernameRequest)); public Task ManagementServerSetManagementServerPasswordAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetManagementServerPasswordRequest managementServerSetManagementServerPasswordRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerPasswordAsync(managementServerSetManagementServerPasswordRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetManagementServerPasswordAsync(managementServerSetManagementServerPasswordRequest)); public Task ManagementServerSetPeriodicInformAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetPeriodicInformRequest managementServerSetPeriodicInformRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetPeriodicInformAsync(managementServerSetPeriodicInformRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetPeriodicInformAsync(managementServerSetPeriodicInformRequest)); public Task ManagementServerSetConnectionRequestAuthenticationAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetConnectionRequestAuthenticationRequest managementServerSetConnectionRequestAuthenticationRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetConnectionRequestAuthenticationAsync(managementServerSetConnectionRequestAuthenticationRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetConnectionRequestAuthenticationAsync(managementServerSetConnectionRequestAuthenticationRequest)); public Task ManagementServerSetUpgradeManagementAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetUpgradeManagementRequest managementServerSetUpgradeManagementRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetUpgradeManagementAsync(managementServerSetUpgradeManagementRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetUpgradeManagementAsync(managementServerSetUpgradeManagementRequest)); public Task ManagementServerSetTr069EnableAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetTr069EnableRequest managementServerSetTr069EnableRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetTr069EnableAsync(managementServerSetTr069EnableRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetTr069EnableAsync(managementServerSetTr069EnableRequest)); public Task ManagementServerSetTr069FirmwareDownloadEnabledAsync(InternetGatewayDevice internetGatewayDevice, ManagementServerSetTr069FirmwareDownloadEnabledRequest managementServerSetTr069FirmwareDownloadEnabledRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetTr069FirmwareDownloadEnabledAsync(managementServerSetTr069FirmwareDownloadEnabledRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzManagementServerServiceClientFactory, (q, r, t) => new FritzManagementServerService(q, r, t!), FritzManagementServerService.ControlUrl), q => q.SetTr069FirmwareDownloadEnabledAsync(managementServerSetTr069FirmwareDownloadEnabledRequest)); public Task TimeGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzTimeServiceClientFactory, (q, r, t) => new FritzTimeService(q, r, t!), FritzTimeService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzTimeServiceClientFactory, (q, r, t) => new FritzTimeService(q, r, t!), FritzTimeService.ControlUrl), q => q.GetInfoAsync(default)); public Task TimeSetNtpServersAsync(InternetGatewayDevice internetGatewayDevice, TimeSetNtpServersRequest timeSetNtpServersRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzTimeServiceClientFactory, (q, r, t) => new FritzTimeService(q, r, t!), FritzTimeService.ControlUrl), q => q.SetNtpServersAsync(timeSetNtpServersRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzTimeServiceClientFactory, (q, r, t) => new FritzTimeService(q, r, t!), FritzTimeService.ControlUrl), q => q.SetNtpServersAsync(timeSetNtpServersRequest)); public Task UserInterfaceGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.GetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.GetInfoAsync(default)); public Task UserInterfaceCheckUpdateAsync(InternetGatewayDevice internetGatewayDevice, UserInterfaceCheckUpdateRequest userInterfaceCheckUpdateRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.CheckUpdateAsync(userInterfaceCheckUpdateRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.CheckUpdateAsync(userInterfaceCheckUpdateRequest)); public Task UserInterfaceDoPrepareCgiAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoPrepareCgiAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoPrepareCgiAsync(default)); public Task UserInterfaceDoUpdateAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoUpdateAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoUpdateAsync(default)); public Task UserInterfaceDoManualUpdateAsync(InternetGatewayDevice internetGatewayDevice, UserInterfaceDoManualUpdateRequest userInterfaceDoManualUpdateRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoManualUpdateAsync(userInterfaceDoManualUpdateRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.DoManualUpdateAsync(userInterfaceDoManualUpdateRequest)); public Task UserInterfaceGetInternationalConfigAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.GetInternationalConfigAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.GetInternationalConfigAsync(default)); public Task UserInterfaceSetInternationalConfigAsync(InternetGatewayDevice internetGatewayDevice, UserInterfaceSetInternationalConfigRequest userInterfaceSetInternationalConfigRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.SetInternationalConfigAsync(userInterfaceSetInternationalConfigRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.SetInternationalConfigAsync(userInterfaceSetInternationalConfigRequest)); public Task UserInterfaceAvmGetInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.AvmGetInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.AvmGetInfoAsync(default)); public Task UserInterfaceSetConfigAsync(InternetGatewayDevice internetGatewayDevice, UserInterfaceSetConfigRequest userInterfaceSetConfigRequest) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.SetConfigAsync(userInterfaceSetConfigRequest)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzUserInterfaceServiceClientFactory, (q, r, t) => new FritzUserInterfaceService(q, r, t!), FritzUserInterfaceService.ControlUrl), q => q.SetConfigAsync(userInterfaceSetConfigRequest)); public Task DeviceConfigGetPersistentDataAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GetPersistentDataAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GetPersistentDataAsync(default)); public Task DeviceConfigGenerateUuIdAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GenerateUuIdAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GenerateUuIdAsync(default)); public Task DeviceConfigCreateUrlSidAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.CreateUrlSidAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.CreateUrlSidAsync(default)); public Task DeviceConfigGetSupportDataInfoAsync(InternetGatewayDevice internetGatewayDevice) - { - return ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GetSupportDataInfoAsync(default)); - } + => ExecuteAsync(GetFritzServiceClient(internetGatewayDevice, fritzDeviceConfigServiceClientFactory, (q, r, t) => new FritzDeviceConfigService(q, r, t!), FritzDeviceConfigService.ControlUrl), q => q.GetSupportDataInfoAsync(default)); private static T GetFritzServiceClient(InternetGatewayDevice internetGatewayDevice, IClientFactory clientFactory, Func createService, string controlUrl, bool secure = true) + => clientFactory.Build(createService, internetGatewayDevice.PreferredLocation, secure, controlUrl, secure ? internetGatewayDevice.SecurityPort : null, internetGatewayDevice.NetworkCredential); + + private static async Task ExecuteAsync(T client, Func> operation) + where T : IAsyncDisposable { - return clientFactory.Build(createService, internetGatewayDevice.PreferredLocation, secure, controlUrl, secure ? internetGatewayDevice.SecurityPort : null, internetGatewayDevice.NetworkCredential); + await using (client.ConfigureAwait(false)) + { + return await operation(client).ConfigureAwait(false); + } } } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/IFritzServiceOperationHandler.cs b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/IFritzServiceOperationHandler.cs index b31c586..d6b3b97 100644 --- a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/IFritzServiceOperationHandler.cs +++ b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/IFritzServiceOperationHandler.cs @@ -4,14 +4,20 @@ public interface IFritzServiceOperationHandler { Task HostsGetHostNumberOfEntriesAsync(InternetGatewayDevice internetGatewayDevice); + Task HostsHostsCheckUpdateAsync(InternetGatewayDevice internetGatewayDevice); + Task HostsGetHostListPathAsync(InternetGatewayDevice internetGatewayDevice); Task HostsGetGenericHostEntryAsync(InternetGatewayDevice internetGatewayDevice, HostsGetGenericHostEntryRequest hostsGetGenericHostEntryRequest); + Task HostsGetInfoAsync(InternetGatewayDevice internetGatewayDevice); + Task HostsGetChangeCounterAsync(InternetGatewayDevice internetGatewayDevice); Task HostsGetMeshListPathAsync(InternetGatewayDevice internetGatewayDevice); + Task HostsGetFriendlyNameAsync(InternetGatewayDevice internetGatewayDevice); + Task WanCommonInterfaceConfigGetTotalBytesReceivedAsync(InternetGatewayDevice internetGatewayDevice); Task WanCommonInterfaceConfigGetTotalBytesSentAsync(InternetGatewayDevice internetGatewayDevice); @@ -112,6 +118,8 @@ public interface IFritzServiceOperationHandler Task AvmSpeedtestGetInfoAsync(InternetGatewayDevice internetGatewayDevice); + Task AvmSpeedtestGetStatisticsAsync(InternetGatewayDevice internetGatewayDevice); + Task LanEthernetInterfaceConfigGetInfoAsync(InternetGatewayDevice internetGatewayDevice); Task LanEthernetInterfaceConfigGetStatisticsAsync(InternetGatewayDevice internetGatewayDevice); diff --git a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ServiceOperationHandler.cs b/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ServiceOperationHandler.cs deleted file mode 100644 index 6b41916..0000000 --- a/RS.Fritz.Manager.API/Services/TR-064/SoapClient/ServiceOperationHandler.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace RS.Fritz.Manager.API; - -internal abstract class ServiceOperationHandler -{ - protected static async Task ExecuteAsync(T client, Func> operation) - { - if (client is not ICommunicationObject) - throw new NotSupportedException(); - - await using (((IAsyncDisposable)client).ConfigureAwait(false)) - { - return await operation(client).ConfigureAwait(false); - } - } -} \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/Users/IUsersService.cs b/RS.Fritz.Manager.API/Services/Users/IUsersService.cs index d96b56f..02b096b 100644 --- a/RS.Fritz.Manager.API/Services/Users/IUsersService.cs +++ b/RS.Fritz.Manager.API/Services/Users/IUsersService.cs @@ -2,5 +2,5 @@ public interface IUsersService { - Task> GetUsersAsync(InternetGatewayDevice internetGatewayDevice); + ValueTask> GetUsersAsync(InternetGatewayDevice internetGatewayDevice); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/Users/UsersService.cs b/RS.Fritz.Manager.API/Services/Users/UsersService.cs index c1ec386..fd77691 100644 --- a/RS.Fritz.Manager.API/Services/Users/UsersService.cs +++ b/RS.Fritz.Manager.API/Services/Users/UsersService.cs @@ -3,18 +3,11 @@ using System.Xml; using System.Xml.Serialization; -internal sealed class UsersService : IUsersService +internal sealed class UsersService(IFritzServiceOperationHandler fritzServiceOperationHandler) : IUsersService { - private readonly IFritzServiceOperationHandler fritzServiceOperationHandler; - - public UsersService(IFritzServiceOperationHandler fritzServiceOperationHandler) - { - this.fritzServiceOperationHandler = fritzServiceOperationHandler; - } - - public async Task> GetUsersAsync(InternetGatewayDevice internetGatewayDevice) + public async ValueTask> GetUsersAsync(InternetGatewayDevice internetGatewayDevice) { - LanConfigSecurityGetUserListResponse lanConfigSecurityGetUserListResponse = await fritzServiceOperationHandler.LanConfigSecurityGetUserListAsync(internetGatewayDevice); + LanConfigSecurityGetUserListResponse lanConfigSecurityGetUserListResponse = await fritzServiceOperationHandler.LanConfigSecurityGetUserListAsync(internetGatewayDevice).ConfigureAwait(false); using var stringReader = new StringReader(lanConfigSecurityGetUserListResponse.UserList); using var xmlTextReader = new XmlTextReader(stringReader); var userList = (UserList)new XmlSerializer(typeof(UserList)).Deserialize(xmlTextReader)!; diff --git a/RS.Fritz.Manager.API/Services/WebUi/IWebUiService.cs b/RS.Fritz.Manager.API/Services/WebUi/IWebUiService.cs index cedc139..63b57e3 100644 --- a/RS.Fritz.Manager.API/Services/WebUi/IWebUiService.cs +++ b/RS.Fritz.Manager.API/Services/WebUi/IWebUiService.cs @@ -2,11 +2,11 @@ public interface IWebUiService { - Task GetUsersAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask GetUsersAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); - Task LogonAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask LogonAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); - Task LogoffAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default); + ValueTask LogoffAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default); - Task ValidateSessionAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default); + ValueTask ValidateSessionAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/WebUi/WebUiService.cs b/RS.Fritz.Manager.API/Services/WebUi/WebUiService.cs index 3ce75da..457874e 100644 --- a/RS.Fritz.Manager.API/Services/WebUi/WebUiService.cs +++ b/RS.Fritz.Manager.API/Services/WebUi/WebUiService.cs @@ -6,20 +6,11 @@ using System.Xml; using System.Xml.Serialization; -internal sealed class WebUiService : IWebUiService +internal sealed class WebUiService(IHttpClientFactory httpClientFactory, INetworkService networkService) : IWebUiService { private const string LoginPath = "//login_sid.lua?version=2"; - private readonly IHttpClientFactory httpClientFactory; - private readonly INetworkService networkService; - - public WebUiService(IHttpClientFactory httpClientFactory, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.networkService = networkService; - } - - public async Task GetUsersAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask GetUsersAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { Uri loginUri = GetLoginUri(internetGatewayDevice); Stream xmlResponseStream = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).GetStreamAsync(loginUri, cancellationToken).ConfigureAwait(false); @@ -30,9 +21,9 @@ public async Task GetUsersAsync(InternetGatewayDevice internet } } - public async Task LogonAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask LogonAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { - WebUiSessionInfo webUiSessionInfo = await GetUsersAsync(internetGatewayDevice, cancellationToken); + WebUiSessionInfo webUiSessionInfo = await GetUsersAsync(internetGatewayDevice, cancellationToken).ConfigureAwait(false); string[] challengeParts = webUiSessionInfo.Challenge.Split('$'); int firstIterationCount = int.Parse(challengeParts[1], CultureInfo.InvariantCulture); byte[] firstSalt = Convert.FromHexString(challengeParts[2]); @@ -44,17 +35,17 @@ public async Task LogonAsync(InternetGatewayDevice internetGat string challengeResponse = FormattableString.Invariant($"{challengeParts[4]}${Convert.ToHexString(secondHash)}"); var parameters = new Dictionary { { "username", internetGatewayDevice.NetworkCredential.UserName }, { "response", challengeResponse } }; - return await GetResponseAsync(internetGatewayDevice, parameters, cancellationToken); + return await GetResponseAsync(internetGatewayDevice, parameters, cancellationToken).ConfigureAwait(false); } - public Task LogoffAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default) + public ValueTask LogoffAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default) { var parameters = new Dictionary { { "logout", string.Empty }, { "sid", sessionId } }; return GetResponseAsync(internetGatewayDevice, parameters, cancellationToken); } - public Task ValidateSessionAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default) + public ValueTask ValidateSessionAsync(InternetGatewayDevice internetGatewayDevice, string sessionId, CancellationToken cancellationToken = default) { var parameters = new Dictionary { { "sid", sessionId } }; @@ -78,11 +69,11 @@ private static byte[] GetHash(byte[] password, byte[] salt, int iterations) private Uri GetLoginUri(InternetGatewayDevice internetGatewayDevice) => networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, 443, LoginPath); - private async Task GetResponseAsync(InternetGatewayDevice internetGatewayDevice, IDictionary parameters, CancellationToken cancellationToken) + private async ValueTask GetResponseAsync(InternetGatewayDevice internetGatewayDevice, IDictionary parameters, CancellationToken cancellationToken) { - var formContent = new FormUrlEncodedContent(parameters); + using var formContent = new FormUrlEncodedContent(parameters); Uri loginUri = GetLoginUri(internetGatewayDevice); - using HttpResponseMessage loginResponse = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).PostAsync(loginUri, formContent, cancellationToken); + using HttpResponseMessage loginResponse = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).PostAsync(loginUri, formContent, cancellationToken).ConfigureAwait(false); Stream xmlResponseStream = await loginResponse.EnsureSuccessStatusCode().Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); await using (xmlResponseStream.ConfigureAwait(false)) diff --git a/RS.Fritz.Manager.API/Services/WlanDevice/IWlanDeviceService.cs b/RS.Fritz.Manager.API/Services/WlanDevice/IWlanDeviceService.cs index 5535f05..aafef7f 100644 --- a/RS.Fritz.Manager.API/Services/WlanDevice/IWlanDeviceService.cs +++ b/RS.Fritz.Manager.API/Services/WlanDevice/IWlanDeviceService.cs @@ -2,5 +2,5 @@ public interface IWlanDeviceService { - Task GetWlanDevicesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); + ValueTask GetWlanDevicesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/RS.Fritz.Manager.API/Services/WlanDevice/WlanDeviceService.cs b/RS.Fritz.Manager.API/Services/WlanDevice/WlanDeviceService.cs index b1db8c6..c7540aa 100644 --- a/RS.Fritz.Manager.API/Services/WlanDevice/WlanDeviceService.cs +++ b/RS.Fritz.Manager.API/Services/WlanDevice/WlanDeviceService.cs @@ -3,20 +3,11 @@ using System.Xml; using System.Xml.Serialization; -internal sealed class WlanDeviceService : IWlanDeviceService +internal sealed class WlanDeviceService(IHttpClientFactory httpClientFactory, INetworkService networkService) : IWlanDeviceService { - private readonly IHttpClientFactory httpClientFactory; - private readonly INetworkService networkService; - - public WlanDeviceService(IHttpClientFactory httpClientFactory, INetworkService networkService) - { - this.httpClientFactory = httpClientFactory; - this.networkService = networkService; - } - - public async Task GetWlanDevicesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) + public async ValueTask GetWlanDevicesAsync(InternetGatewayDevice internetGatewayDevice, CancellationToken cancellationToken = default) { - WlanConfigurationGetWlanDeviceListPathResponse wlanConfigurationGetWlanDeviceListPathResponse = await internetGatewayDevice.WlanConfigurationGetWlanDeviceListPathAsync(1); + WlanConfigurationGetWlanDeviceListPathResponse wlanConfigurationGetWlanDeviceListPathResponse = await internetGatewayDevice.WlanConfigurationGetWlanDeviceListPathAsync(1).ConfigureAwait(false); string wlanDeviceListPath = wlanConfigurationGetWlanDeviceListPathResponse.WlanDeviceListPath; Uri wlanDeviceListPathUri = networkService.FormatUri(Uri.UriSchemeHttps, internetGatewayDevice.PreferredLocation, internetGatewayDevice.SecurityPort!.Value, wlanDeviceListPath); Stream wlanDeviceListXmlStream = await httpClientFactory.CreateClient(Constants.DefaultHttpClientName).GetStreamAsync(wlanDeviceListPathUri, cancellationToken).ConfigureAwait(false); diff --git a/RS.Fritz.Manager.UI/App.xaml.cs b/RS.Fritz.Manager.UI/App.xaml.cs index 95053ad..d32f622 100644 --- a/RS.Fritz.Manager.UI/App.xaml.cs +++ b/RS.Fritz.Manager.UI/App.xaml.cs @@ -33,7 +33,7 @@ public App() protected override async void OnStartup(StartupEventArgs e) { - await host.StartAsync(); + await host.StartAsync().ConfigureAwait(true); SetUiCulture(); @@ -52,7 +52,7 @@ protected override async void OnExit(ExitEventArgs e) using (host) { - await host.StopAsync(); + await host.StopAsync().ConfigureAwait(true); } base.OnExit(e); diff --git a/RS.Fritz.Manager.UI/Entities/DeviceLoginInfo.cs b/RS.Fritz.Manager.UI/Entities/DeviceLoginInfo.cs index 4a172f9..fb7057b 100644 --- a/RS.Fritz.Manager.UI/Entities/DeviceLoginInfo.cs +++ b/RS.Fritz.Manager.UI/Entities/DeviceLoginInfo.cs @@ -71,7 +71,7 @@ private async void Receive(PropertyChangedMessage message) } private void SetLoginInfo() - { - LoginInfoSet = InternetGatewayDevice is not null && User is not null && Password is not null; - } + => LoginInfoSet = InternetGatewayDevice is not null && User is not null && Password is not null; } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Entities/ObservableInternetGatewayDevice.cs b/RS.Fritz.Manager.UI/Entities/ObservableInternetGatewayDevice.cs index 69aefff..4ca3174 100644 --- a/RS.Fritz.Manager.UI/Entities/ObservableInternetGatewayDevice.cs +++ b/RS.Fritz.Manager.UI/Entities/ObservableInternetGatewayDevice.cs @@ -4,19 +4,13 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; -internal sealed class ObservableInternetGatewayDevice : ObservableRecipient +internal sealed class ObservableInternetGatewayDevice(InternetGatewayDevice internetGatewayDevice) : ObservableRecipient(StrongReferenceMessenger.Default) { private IEnumerable users = Enumerable.Empty(); private WanAccessType? wanAccessType; private bool authenticated; - public ObservableInternetGatewayDevice(InternetGatewayDevice internetGatewayDevice) - : base(StrongReferenceMessenger.Default) - { - ApiDevice = internetGatewayDevice; - } - - public InternetGatewayDevice ApiDevice { get; } + public InternetGatewayDevice ApiDevice { get; } = internetGatewayDevice; public IEnumerable Users { @@ -36,13 +30,13 @@ public WanAccessType? WanAccessType set => _ = SetProperty(ref wanAccessType, value, true); } - public async Task GetDeviceTypeAsync() + public async ValueTask GetDeviceTypeAsync() { WanCommonInterfaceConfigGetCommonLinkPropertiesResponse wanCommonInterfaceConfigGetCommonLinkProperties; try { - wanCommonInterfaceConfigGetCommonLinkProperties = await ApiDevice.WanCommonInterfaceConfigGetCommonLinkPropertiesAsync(); + wanCommonInterfaceConfigGetCommonLinkProperties = await ApiDevice.WanCommonInterfaceConfigGetCommonLinkPropertiesAsync().ConfigureAwait(true); } catch (MessageSecurityException) { diff --git a/RS.Fritz.Manager.UI/Infrastructure/FritzServiceViewModel.cs b/RS.Fritz.Manager.UI/Infrastructure/FritzServiceViewModel.cs index b134161..e06c875 100644 --- a/RS.Fritz.Manager.UI/Infrastructure/FritzServiceViewModel.cs +++ b/RS.Fritz.Manager.UI/Infrastructure/FritzServiceViewModel.cs @@ -58,11 +58,11 @@ private set } } - protected abstract Task DoExecuteDefaultCommandAsync(CancellationToken cancellationToken); + protected abstract ValueTask DoExecuteDefaultCommandAsync(CancellationToken cancellationToken); protected virtual void Receive(PropertyChangedMessage message) { - if (message.Sender == DeviceLoginInfo) + if (message.Sender is DeviceLoginInfo) { switch (message.PropertyName) { @@ -99,33 +99,23 @@ protected virtual void FritzServiceViewModelPropertyChanged(object? sender, Prop } protected virtual bool GetCanExecuteDefaultCommand() - { - return (DeviceLoginInfo.InternetGatewayDevice?.Authenticated ?? false) && !DefaultCommandActive && (requiredServiceType is null || ApiDevice.Services.Any(r => r.ServiceType.StartsWith(FormattableString.Invariant($"urn:dslforum-org:service:{requiredServiceType}:"), StringComparison.OrdinalIgnoreCase))); - } + => (DeviceLoginInfo.InternetGatewayDevice?.Authenticated ?? false) && !DefaultCommandActive && (requiredServiceType is null || ApiDevice.Services.Any(r => r.ServiceType.StartsWith(FormattableString.Invariant($"urn:dslforum-org:service:{requiredServiceType}:"), StringComparison.OrdinalIgnoreCase))); protected void UpdateCanExecuteDefaultCommand() - { - CanExecuteDefaultCommand = GetCanExecuteDefaultCommand(); - } + => CanExecuteDefaultCommand = GetCanExecuteDefaultCommand(); protected Task> ExecuteApiAsync(Func> operation, IDictionary? errorReasons = null) where T : struct - { - return DoExecuteApiAsync(operation(ApiDevice), errorReasons); - } + => DoExecuteApiAsync(operation(ApiDevice), errorReasons); protected Task> ExecuteApiAsync(Func> operation, int interfaceNumber, IDictionary? errorReasons = null) where T : struct - { - return DoExecuteApiAsync(operation(ApiDevice, interfaceNumber), errorReasons); - } + => DoExecuteApiAsync(operation(ApiDevice, interfaceNumber), errorReasons); protected Task> ExecuteApiAsync(Func> operation, TRequest request, IDictionary? errorReasons = null) where TRequest : struct where TResponse : struct - { - return DoExecuteApiAsync(operation(ApiDevice, request), errorReasons); - } + => DoExecuteApiAsync(operation(ApiDevice, request), errorReasons); private static async Task> DoExecuteApiAsync(Task operation, IDictionary? errorReasons) where T : struct @@ -134,7 +124,7 @@ protected void UpdateCanExecuteDefaultCommand() try { - return new(await operation, null); + return new(await operation.ConfigureAwait(true), null); } catch (FaultException ex) { @@ -157,7 +147,7 @@ private async Task ExecuteDefaultCommandAsync(bool? showView, CancellationToken { DefaultCommandActive = true; - await DoExecuteDefaultCommandAsync(cancellationToken); + await DoExecuteDefaultCommandAsync(cancellationToken).ConfigureAwait(true); if (showView ?? true) _ = StrongReferenceMessenger.Default.Send(new ActiveViewValueChangedMessage(this)); diff --git a/RS.Fritz.Manager.UI/Infrastructure/ManualOperationViewModel.cs b/RS.Fritz.Manager.UI/Infrastructure/ManualOperationViewModel.cs index 80fc284..28c8256 100644 --- a/RS.Fritz.Manager.UI/Infrastructure/ManualOperationViewModel.cs +++ b/RS.Fritz.Manager.UI/Infrastructure/ManualOperationViewModel.cs @@ -22,16 +22,11 @@ protected ManualOperationViewModel(DeviceLoginInfo deviceLoginInfo, ILogger logg public KeyValuePair? Response { get => response; - private set { _ = SetProperty(ref response, value); } + private set => _ = SetProperty(ref response, value); } - protected virtual TRequest BuildRequest() - { - return default; - } + protected virtual TRequest BuildRequest() => default; - protected override async Task DoExecuteDefaultCommandAsync(CancellationToken cancellationToken) - { - Response = await ExecuteApiAsync(operation, BuildRequest()); - } + protected override async ValueTask DoExecuteDefaultCommandAsync(CancellationToken cancellationToken) + => Response = await ExecuteApiAsync(operation, BuildRequest()).ConfigureAwait(true); } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Infrastructure/ServiceCollectionExtensions.cs b/RS.Fritz.Manager.UI/Infrastructure/ServiceCollectionExtensions.cs index 12852db..a839dda 100644 --- a/RS.Fritz.Manager.UI/Infrastructure/ServiceCollectionExtensions.cs +++ b/RS.Fritz.Manager.UI/Infrastructure/ServiceCollectionExtensions.cs @@ -20,6 +20,7 @@ public static IServiceCollection AddViewModels(this IServiceCollection serviceCo .AddSingleton() .AddSingleton() .AddSingleton() + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/RS.Fritz.Manager.UI/Infrastructure/WanAccessTypeAwareFritzServiceViewModel.cs b/RS.Fritz.Manager.UI/Infrastructure/WanAccessTypeAwareFritzServiceViewModel.cs index 69024b2..37a6359 100644 --- a/RS.Fritz.Manager.UI/Infrastructure/WanAccessTypeAwareFritzServiceViewModel.cs +++ b/RS.Fritz.Manager.UI/Infrastructure/WanAccessTypeAwareFritzServiceViewModel.cs @@ -18,9 +18,7 @@ protected WanAccessTypeAwareFritzServiceViewModel(DeviceLoginInfo deviceLoginInf } protected override bool GetCanExecuteDefaultCommand() - { - return base.GetCanExecuteDefaultCommand() && DeviceLoginInfo.InternetGatewayDevice!.WanAccessType == wanAccessType; - } + => base.GetCanExecuteDefaultCommand() && DeviceLoginInfo.InternetGatewayDevice!.WanAccessType == wanAccessType; private void Receive(PropertyChangedMessage message) { diff --git a/RS.Fritz.Manager.UI/MainWindow/MainWindow.xaml.cs b/RS.Fritz.Manager.UI/MainWindow/MainWindow.xaml.cs index 2c133df..03cf445 100644 --- a/RS.Fritz.Manager.UI/MainWindow/MainWindow.xaml.cs +++ b/RS.Fritz.Manager.UI/MainWindow/MainWindow.xaml.cs @@ -12,8 +12,5 @@ public MainWindow(MainWindowViewModel mainWindowViewModel) DataContext = mainWindowViewModel; } - private void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e) - { - ((MainWindowViewModel)DataContext).DeviceLoginInfo.Password = ((PasswordBox)sender).SecurePassword; - } + private void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e) => ((MainWindowViewModel)DataContext).DeviceLoginInfo.Password = ((PasswordBox)sender).SecurePassword; } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/MainWindow/MainWindowViewModel.cs b/RS.Fritz.Manager.UI/MainWindow/MainWindowViewModel.cs index b898286..f8d9428 100644 --- a/RS.Fritz.Manager.UI/MainWindow/MainWindowViewModel.cs +++ b/RS.Fritz.Manager.UI/MainWindow/MainWindowViewModel.cs @@ -19,8 +19,8 @@ internal sealed class MainWindowViewModel : FritzServiceViewModel private const int ZIndexNoOverlay = -1; private readonly IDeviceSearchService deviceSearchService; - private ObservableCollection devices = new(); - private ObservableCollection users = new(); + private ObservableCollection devices = []; + private ObservableCollection users = []; private ObservableObject? activeView; private string? userMessage; private bool deviceAndLoginControlsEnabled = true; @@ -146,17 +146,17 @@ public MainWindowViewModel( public double MainContentOpacity { - get => mainContentOpacity; set { _ = SetProperty(ref mainContentOpacity, value); } + get => mainContentOpacity; set => _ = SetProperty(ref mainContentOpacity, value); } public bool MainContentIsHitTestVisible { - get => mainContentIsHitTestVisible; set { _ = SetProperty(ref mainContentIsHitTestVisible, value); } + get => mainContentIsHitTestVisible; set => _ = SetProperty(ref mainContentIsHitTestVisible, value); } public int MessageZIndex { - get => messageZIndex; set { _ = SetProperty(ref messageZIndex, value); } + get => messageZIndex; set => _ = SetProperty(ref messageZIndex, value); } public string? UserMessage @@ -184,7 +184,7 @@ private set public bool DeviceAndLoginControlsEnabled { - get => deviceAndLoginControlsEnabled; set { _ = SetProperty(ref deviceAndLoginControlsEnabled, value); } + get => deviceAndLoginControlsEnabled; set => _ = SetProperty(ref deviceAndLoginControlsEnabled, value); } public ObservableCollection Users @@ -296,17 +296,14 @@ protected override void FritzServiceViewModelPropertyChanged(object? sender, Pro } } - protected override async Task DoExecuteDefaultCommandAsync(CancellationToken cancellationToken) + protected override async ValueTask DoExecuteDefaultCommandAsync(CancellationToken cancellationToken) { ActiveView = null; DeviceLoginInfo.InternetGatewayDevice = null; - Devices = new((await deviceSearchService.GetDevicesAsync(cancellationToken: cancellationToken)).Select(q => new ObservableInternetGatewayDevice(q))); + Devices = new((await deviceSearchService.GetDevicesAsync(cancellationToken: cancellationToken).ConfigureAwait(true)).Select(q => new ObservableInternetGatewayDevice(q))); } - protected override bool GetCanExecuteDefaultCommand() - { - return !DefaultCommandActive; - } + protected override bool GetCanExecuteDefaultCommand() => !DefaultCommandActive; private void Receive(PropertyChangedMessage> message) { @@ -339,9 +336,7 @@ private void Receive(PropertyChangedMessage me } private void UpdateCanExecuteLoginCommand() - { - CanExecuteLoginCommand = !LoginCommandActive && DeviceLoginInfo.LoginInfoSet; - } + => CanExecuteLoginCommand = !LoginCommandActive && DeviceLoginInfo.LoginInfoSet; private async Task ExecuteLoginCommandAsync(bool? showView) { @@ -349,7 +344,7 @@ private async Task ExecuteLoginCommandAsync(bool? showView) { LoginCommandActive = true; - await DeviceLoginInfo.InternetGatewayDevice!.GetDeviceTypeAsync(); + await DeviceLoginInfo.InternetGatewayDevice!.GetDeviceTypeAsync().ConfigureAwait(true); LoginButtonImage = new BitmapImage(new("pack://application:,,,/Images/Success.png")); } @@ -368,12 +363,8 @@ private async Task ExecuteLoginCommandAsync(bool? showView) } private void ExecuteCopyMessageCommand() - { - Clipboard.SetText(UserMessage); - } + => Clipboard.SetText(UserMessage); private void ExecuteCloseMessageCommand() - { - UserMessage = null; - } + => UserMessage = null; } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Messaging/ActiveViewValueChangedMessage.cs b/RS.Fritz.Manager.UI/Messaging/ActiveViewValueChangedMessage.cs index fda0f8f..4f9af45 100644 --- a/RS.Fritz.Manager.UI/Messaging/ActiveViewValueChangedMessage.cs +++ b/RS.Fritz.Manager.UI/Messaging/ActiveViewValueChangedMessage.cs @@ -3,10 +3,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging.Messages; -internal sealed class ActiveViewValueChangedMessage : ValueChangedMessage +internal sealed class ActiveViewValueChangedMessage(ObservableObject activeView) : ValueChangedMessage(activeView) { - public ActiveViewValueChangedMessage(ObservableObject activeView) - : base(activeView) - { - } } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Messaging/UserMessageValueChangedMessage.cs b/RS.Fritz.Manager.UI/Messaging/UserMessageValueChangedMessage.cs index cd80591..3c1c1a3 100644 --- a/RS.Fritz.Manager.UI/Messaging/UserMessageValueChangedMessage.cs +++ b/RS.Fritz.Manager.UI/Messaging/UserMessageValueChangedMessage.cs @@ -2,10 +2,6 @@ using CommunityToolkit.Mvvm.Messaging.Messages; -internal sealed class UserMessageValueChangedMessage : ValueChangedMessage +internal sealed class UserMessageValueChangedMessage(UserMessage userMessage) : ValueChangedMessage(userMessage) { - public UserMessageValueChangedMessage(UserMessage userMessage) - : base(userMessage) - { - } } \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Properties/GlobalUsings.cs b/RS.Fritz.Manager.UI/Properties/GlobalUsings.cs index 3eb3b5d..10d9c86 100644 --- a/RS.Fritz.Manager.UI/Properties/GlobalUsings.cs +++ b/RS.Fritz.Manager.UI/Properties/GlobalUsings.cs @@ -1,4 +1,2 @@ -#pragma warning disable SA1200 // Using directives should be placed correctly -global using RS.Fritz.Manager.API; -global using Microsoft.Extensions.Logging; -#pragma warning restore SA1200 // Using directives should be placed correctly \ No newline at end of file +global using RS.Fritz.Manager.API; +global using Microsoft.Extensions.Logging; \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj b/RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj index b53d471..da68801 100644 --- a/RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj +++ b/RS.Fritz.Manager.UI/RS.Fritz.Manager.UI.csproj @@ -1,14 +1,14 @@  WinExe - net7.0-windows10.0.22621.0 + net8.0-windows10.0.22621.0 10.0.22621.0 10.0.10240.0 RS.Fritz.Manager.UI RS.Fritz.Manager.UI RS.Fritz.Manager.UI RS.Fritz.Manager.UI - Copyright 2023 (c) RS. All rights reserved. + Copyright 2021-2024 (c) RS. All rights reserved. Rans4ckeR @@ -19,13 +19,13 @@ preview-all preview true + true enable enable true 0.0.0.1 0.0.0.1 0.0.0.1 - true win-x64;win-arm64 x64;ARM64 app.manifest @@ -39,9 +39,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -61,6 +61,9 @@ Code + + Code + Code @@ -159,6 +162,9 @@ $(DefaultXamlRuntime) Designer + + $(DefaultXamlRuntime) + $(DefaultXamlRuntime) Designer diff --git a/RS.Fritz.Manager.UI/Resources/TR-064/AvmSpeedtestResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/TR-064/AvmSpeedtestResourceDictionary.xaml index 4f237ff..fa6a3b6 100644 --- a/RS.Fritz.Manager.UI/Resources/TR-064/AvmSpeedtestResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/TR-064/AvmSpeedtestResourceDictionary.xaml @@ -35,4 +35,32 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RS.Fritz.Manager.UI/Resources/TR-064/HostsResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/TR-064/HostsResourceDictionary.xaml index 5929922..29ac7ee 100644 --- a/RS.Fritz.Manager.UI/Resources/TR-064/HostsResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/TR-064/HostsResourceDictionary.xaml @@ -15,6 +15,31 @@ + + + + + + + + + + + + + + + @@ -28,6 +53,19 @@ + + + + + + + + + + + diff --git a/RS.Fritz.Manager.UI/Resources/TR-064/LanConfigSecurityResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/TR-064/LanConfigSecurityResourceDictionary.xaml index 5d37f84..53f4183 100644 --- a/RS.Fritz.Manager.UI/Resources/TR-064/LanConfigSecurityResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/TR-064/LanConfigSecurityResourceDictionary.xaml @@ -39,6 +39,8 @@ + + @@ -47,9 +49,13 @@ diff --git a/RS.Fritz.Manager.UI/Resources/TR-064/UserInterfaceResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/TR-064/UserInterfaceResourceDictionary.xaml index b696103..ab11157 100644 --- a/RS.Fritz.Manager.UI/Resources/TR-064/UserInterfaceResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/TR-064/UserInterfaceResourceDictionary.xaml @@ -13,6 +13,7 @@ + @@ -34,8 +35,10 @@ diff --git a/RS.Fritz.Manager.UI/Resources/TR-064/WanCommonInterfaceConfigResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/TR-064/WanCommonInterfaceConfigResourceDictionary.xaml index c6124de..aee9eac 100644 --- a/RS.Fritz.Manager.UI/Resources/TR-064/WanCommonInterfaceConfigResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/TR-064/WanCommonInterfaceConfigResourceDictionary.xaml @@ -13,7 +13,7 @@ - @@ -152,6 +158,8 @@ + + @@ -161,6 +169,10 @@ @@ -264,6 +276,9 @@ + + + @@ -279,18 +294,24 @@ @@ -305,6 +326,7 @@ + @@ -314,20 +336,22 @@ diff --git a/RS.Fritz.Manager.UI/Resources/UPnPResourceDictionary.xaml b/RS.Fritz.Manager.UI/Resources/UPnPResourceDictionary.xaml index 9041c02..07952de 100644 --- a/RS.Fritz.Manager.UI/Resources/UPnPResourceDictionary.xaml +++ b/RS.Fritz.Manager.UI/Resources/UPnPResourceDictionary.xaml @@ -137,6 +137,7 @@ + @@ -151,11 +152,12 @@