import tempfile
import yaml
+
def quote(arg):
"""Return a quoted string"""
return '"' + arg + '"'
+
def get_vector_sub_type(rust_type):
return rust_type[4:-1]
+
def is_vector_of(rust_type):
- return rust_type.startswith('Vec<')
+ return rust_type.startswith("Vec<")
+
def is_type_native(rust_type):
if is_vector_of(rust_type):
sub_type = get_vector_sub_type(rust_type)
return is_type_native(sub_type)
- return rust_type in ['bool', 'u8', 'u16', 'u32', 'u64', 'f64', 'String']
+ return rust_type in ["bool", "u8", "u16", "u32", "u64", "f64", "String"]
+
def is_value_rust_default(rust_type, value):
"""Is a value the same as its corresponding Rust default?"""
- if rust_type == 'bool':
- return value == 'false'
- if rust_type in ('u8', 'u16', 'u32', 'u64'):
- return value in (0, '0', '')
- if rust_type == 'f64':
- return value in ('0.0', 0.0)
- if rust_type == 'String':
- return value == ''
- if rust_type == 'Vec<String>':
- return value == '' or value == '[]'
+ if rust_type == "bool":
+ return value == "false"
+ if rust_type in ("u8", "u16", "u32", "u64"):
+ return value in (0, "0", "")
+ if rust_type == "f64":
+ return value in ("0.0", 0.0)
+ if rust_type == "String":
+ return value == ""
+ if rust_type == "Vec<String>":
+ return value == "" or value == "[]"
if is_vector_of(rust_type):
- return value == '[]'
+ return value == "[]"
return False
+
def get_rust_field_name(name):
- return name.replace('-', '_').lower()
+ return name.replace("-", "_").lower()
+
def get_rust_object_name(name):
- object_name = ''
+ object_name = ""
capitalize = True
for char in name:
- if char in ['-', '_']:
+ if char in ["-", "_"]:
capitalize = True
continue
if capitalize:
return object_name
+
def gen_rust_vec_default_functions(name, type_name, def_value):
"""Generate Rust code for the default handling of a vector for type_name"""
- ret = f'// DEFAULT HANDLING for {name}\n'
- ret += f'fn default_value_{name}() -> Vec<dnsdistsettings::{type_name}> {{\n'
+ ret = f"// DEFAULT HANDLING for {name}\n"
+ ret += f"fn default_value_{name}() -> Vec<dnsdistsettings::{type_name}> {{\n"
ret += f' let msg = "default value defined for `{name}\' should be valid YAML";'
- ret += f' let deserialized: Vec<dnsdistsettings::{type_name}> = serde_yaml::from_str({quote(def_value)}).expect(&msg);\n'
- ret += ' deserialized\n'
- ret += '}\n'
- ret += f'fn default_value_equal_{name}(value: &Vec<dnsdistsettings::{type_name}>)'
- ret += '-> bool {\n'
- ret += f' let def = default_value_{name}();\n'
- ret += ' &def == value\n'
- ret += '}\n\n'
+ ret += f" let deserialized: Vec<dnsdistsettings::{type_name}> = serde_yaml::from_str({quote(def_value)}).expect(&msg);\n"
+ ret += " deserialized\n"
+ ret += "}\n"
+ ret += f"fn default_value_equal_{name}(value: &Vec<dnsdistsettings::{type_name}>)"
+ ret += "-> bool {\n"
+ ret += f" let def = default_value_{name}();\n"
+ ret += " &def == value\n"
+ ret += "}\n\n"
return ret
+
# Example snippet generated
# fn default_value_general_query_local_address() -> Vec<String> {
# vec![String::from("0.0.0.0"), ]
-#}
-#fn default_value_equal_general_query_local_address(value: &Vec<String>) -> bool {
+# }
+# fn default_value_equal_general_query_local_address(value: &Vec<String>) -> bool {
# let def = default_value_general_query_local_address();
# &def == value
-#}
+# }
def gen_rust_stringvec_default_functions(default, name):
"""Generate Rust code for the default handling of a vector for Strings"""
- ret = f'// DEFAULT HANDLING for {name}\n'
- ret += f'fn default_value_{name}() -> Vec<String> {{\n'
- parts = re.split('[ \t,]+', default)
+ ret = f"// DEFAULT HANDLING for {name}\n"
+ ret += f"fn default_value_{name}() -> Vec<String> {{\n"
+ parts = re.split("[ \t,]+", default)
if len(parts) > 0:
- ret += ' vec![\n'
+ ret += " vec![\n"
for part in parts:
- if part == '':
+ if part == "":
continue
- ret += f' String::from({quote(part)}),\n'
- ret += ' ]\n'
+ ret += f" String::from({quote(part)}),\n"
+ ret += " ]\n"
else:
- ret += ' vec![]\n'
- ret += '}\n'
- ret += f'fn default_value_equal_{name}(value: &Vec<String>) -> bool {{\n'
- ret += f' let def = default_value_{name}();\n'
- ret += ' &def == value\n'
- ret += '}\n\n'
+ ret += " vec![]\n"
+ ret += "}\n"
+ ret += f"fn default_value_equal_{name}(value: &Vec<String>) -> bool {{\n"
+ ret += f" let def = default_value_{name}();\n"
+ ret += " &def == value\n"
+ ret += "}\n\n"
return ret
+
def gen_rust_default_functions(rust_type, default, name):
"""Generate Rust code for the default handling"""
- if rust_type in ['Vec<String>']:
+ if rust_type in ["Vec<String>"]:
return gen_rust_stringvec_default_functions(default, name)
- ret = f'// DEFAULT HANDLING for {name}\n'
- ret += f'fn default_value_{name}() -> {rust_type} {{\n'
+ ret = f"// DEFAULT HANDLING for {name}\n"
+ ret += f"fn default_value_{name}() -> {rust_type} {{\n"
rustdef = quote(default)
ret += f" String::from({rustdef})\n"
- ret += '}\n'
- if rust_type == 'String':
- rust_type = 'str'
- ret += f'fn default_value_equal_{name}(value: &{rust_type})'
- ret += '-> bool {\n'
- ret += f' value == default_value_{name}()\n'
- ret += '}\n\n'
+ ret += "}\n"
+ if rust_type == "String":
+ rust_type = "str"
+ ret += f"fn default_value_equal_{name}(value: &{rust_type})"
+ ret += "-> bool {\n"
+ ret += f" value == default_value_{name}()\n"
+ ret += "}\n\n"
return ret
+
def write_rust_default_trait_impl(struct, skip_namespace=False):
"""Generate Rust code for the default Trait for a structure"""
- namespace = 'dnsdistsettings::' if not skip_namespace else ''
- result = ''
- result += f'impl Default for {namespace}{struct} {{\n'
- result += ' fn default() -> Self {\n'
+ namespace = "dnsdistsettings::" if not skip_namespace else ""
+ result = ""
+ result += f"impl Default for {namespace}{struct} {{\n"
+ result += " fn default() -> Self {\n"
result += f' let deserialized: {namespace}{struct} = serde_yaml::from_str("").unwrap();\n'
- result += ' deserialized\n'
- result += ' }\n'
- result += '}\n\n'
+ result += " deserialized\n"
+ result += " }\n"
+ result += "}\n\n"
return result
-def get_rust_serde_annotations(rust_type, default, rename, obj, field, default_functions):
- rename_value = f'rename = "{rename}", ' if rename else ''
+
+def get_rust_serde_annotations(
+ rust_type, default, rename, obj, field, default_functions
+):
+ rename_value = f'rename = "{rename}", ' if rename else ""
if default is None:
if not rename_value:
- return ''
- return f'#[serde({rename_value})]'
+ return ""
+ return f"#[serde({rename_value})]"
if default is True or is_value_rust_default(rust_type, default):
return f'#[serde({rename_value}default, skip_serializing_if = "crate::is_default")]'
type_upper = rust_type.capitalize()
- if rust_type == 'bool':
- return f'''#[serde({rename_value}default = "crate::{type_upper}::<{default}>::value", skip_serializing_if = "crate::if_true")]'''
- if rust_type in ['String', 'Vec<String>']:
- basename = obj + '_' + field
- default_functions.append(gen_rust_default_functions(rust_type, default, basename))
- return f'''#[serde({rename_value}default = "crate::default_value_{basename}", skip_serializing_if = "crate::default_value_equal_{basename}")]'''
- return f'''#[serde({rename_value}default = "crate::{type_upper}::<{default}>::value", skip_serializing_if = "crate::{type_upper}::<{default}>::is_equal")]'''
+ if rust_type == "bool":
+ return f"""#[serde({rename_value}default = "crate::{type_upper}::<{default}>::value", skip_serializing_if = "crate::if_true")]"""
+ if rust_type in ["String", "Vec<String>"]:
+ basename = obj + "_" + field
+ default_functions.append(
+ gen_rust_default_functions(rust_type, default, basename)
+ )
+ return f"""#[serde({rename_value}default = "crate::default_value_{basename}", skip_serializing_if = "crate::default_value_equal_{basename}")]"""
+ return f"""#[serde({rename_value}default = "crate::{type_upper}::<{default}>::value", skip_serializing_if = "crate::{type_upper}::<{default}>::is_equal")]"""
+
def get_converted_serde_type(rust_type):
if is_type_native(rust_type):
if is_vector_of(rust_type):
sub_type = get_vector_sub_type(rust_type)
- if sub_type in ['Action', 'Selector']:
+ if sub_type in ["Action", "Selector"]:
return rust_type
- if sub_type in ['QueryRuleConfiguration', 'ResponseRuleConfiguration']:
- return f'Vec<{sub_type}Serde>'
- return f'Vec<dnsdistsettings::{sub_type}>'
-
- return f'dnsdistsettings::{rust_type}'
-
-def get_rust_struct_fields_from_definition(name, keys, default_functions, indent, special_serde_object=False):
- if not 'parameters' in keys:
- return ''
- output = ''
- for parameter in keys['parameters']:
- parameter_name = get_rust_field_name(parameter['name']) if not 'rename' in parameter else parameter['rename']
- rust_type = parameter['type']
- if 'rust-type' in parameter:
- rust_type = parameter['rust-type']
+ if sub_type in ["QueryRuleConfiguration", "ResponseRuleConfiguration"]:
+ return f"Vec<{sub_type}Serde>"
+ return f"Vec<dnsdistsettings::{sub_type}>"
+
+ return f"dnsdistsettings::{rust_type}"
+
+
+def get_rust_struct_fields_from_definition(
+ name, keys, default_functions, indent, special_serde_object=False
+):
+ if not "parameters" in keys:
+ return ""
+ output = ""
+ for parameter in keys["parameters"]:
+ parameter_name = (
+ get_rust_field_name(parameter["name"])
+ if not "rename" in parameter
+ else parameter["rename"]
+ )
+ rust_type = parameter["type"]
+ if "rust-type" in parameter:
+ rust_type = parameter["rust-type"]
if special_serde_object:
rust_type = get_converted_serde_type(rust_type)
else:
# cxx does not support Enums, so we have to convert them to opaque types
- if rust_type == 'Action':
- rust_type = 'SharedDNSAction'
- elif rust_type == 'ResponseAction':
- rust_type = 'SharedDNSResponseAction'
- elif rust_type == 'Selector':
- rust_type = 'SharedDNSSelector'
- elif rust_type == 'Vec<Selector>':
- rust_type = 'Vec<SharedDNSSelector>'
- rename = parameter['name'] if parameter_name != parameter['name'] else None
- if special_serde_object or not 'skip-serde' in keys or not keys['skip-serde']:
- default_str = get_rust_serde_annotations(rust_type, parameter['default'] if 'default' in parameter else None, rename, get_rust_field_name(name), parameter_name, default_functions)
+ if rust_type == "Action":
+ rust_type = "SharedDNSAction"
+ elif rust_type == "ResponseAction":
+ rust_type = "SharedDNSResponseAction"
+ elif rust_type == "Selector":
+ rust_type = "SharedDNSSelector"
+ elif rust_type == "Vec<Selector>":
+ rust_type = "Vec<SharedDNSSelector>"
+ rename = parameter["name"] if parameter_name != parameter["name"] else None
+ if special_serde_object or not "skip-serde" in keys or not keys["skip-serde"]:
+ default_str = get_rust_serde_annotations(
+ rust_type,
+ parameter["default"] if "default" in parameter else None,
+ rename,
+ get_rust_field_name(name),
+ parameter_name,
+ default_functions,
+ )
if default_str:
- output += indent + default_str + '\n'
- output += f'{indent}{parameter_name}: {rust_type},\n'
+ output += indent + default_str + "\n"
+ output += f"{indent}{parameter_name}: {rust_type},\n"
return output
-def get_rust_struct_from_definition(name, keys, default_functions, indent_spaces=4, special_serde_object=False):
- if not 'parameters' in keys:
- return ''
+
+def get_rust_struct_from_definition(
+ name, keys, default_functions, indent_spaces=4, special_serde_object=False
+):
+ if not "parameters" in keys:
+ return ""
obj_name = get_rust_object_name(name)
- indent = ' '*indent_spaces
- output = ''
- if special_serde_object or not 'skip-serde' in keys or not keys['skip-serde']:
- output += f'''{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
+ indent = " " * indent_spaces
+ output = ""
+ if special_serde_object or not "skip-serde" in keys or not keys["skip-serde"]:
+ output += f"""{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
{indent}#[serde(deny_unknown_fields)]
-'''
- elif name == 'global':
- output += f'{indent}#[derive(Default)]\n'
+"""
+ elif name == "global":
+ output += f"{indent}#[derive(Default)]\n"
- name_suffix = 'Serde' if name == 'global' and special_serde_object else ''
- output += f'''{indent}struct {obj_name}Configuration{name_suffix} {{
-'''
+ name_suffix = "Serde" if name == "global" and special_serde_object else ""
+ output += f"""{indent}struct {obj_name}Configuration{name_suffix} {{
+"""
indent_spaces += 4
- indent = ' '*indent_spaces
- output += get_rust_struct_fields_from_definition(name, keys, default_functions, indent, special_serde_object=special_serde_object)
- output += ' }\n'
- if special_serde_object or not 'skip-serde' in keys or not keys['skip-serde']:
- default_functions.append(write_rust_default_trait_impl(f'{obj_name}Configuration{name_suffix}', special_serde_object))
+ indent = " " * indent_spaces
+ output += get_rust_struct_fields_from_definition(
+ name, keys, default_functions, indent, special_serde_object=special_serde_object
+ )
+ output += " }\n"
+ if special_serde_object or not "skip-serde" in keys or not keys["skip-serde"]:
+ default_functions.append(
+ write_rust_default_trait_impl(
+ f"{obj_name}Configuration{name_suffix}", special_serde_object
+ )
+ )
return output
+
def should_validate_type(rust_type):
if is_vector_of(rust_type):
sub_type = get_vector_sub_type(rust_type)
return should_validate_type(sub_type)
- if rust_type in ['bool', 'u8', 'u16', 'u32', 'u64', 'f64', 'String']:
+ if rust_type in ["bool", "u8", "u16", "u32", "u64", "f64", "String"]:
return False
- if rust_type in ['Action', 'Selector', 'dnsdistsettings::SelectorsConfiguration']:
+ if rust_type in ["Action", "Selector", "dnsdistsettings::SelectorsConfiguration"]:
return False
return True
+
def get_validation_for_field(field_name, rust_type):
if not should_validate_type(rust_type):
- return ''
+ return ""
if not is_vector_of(rust_type):
- return f' self.{field_name}.validate()?;\n'
+ return f" self.{field_name}.validate()?;\n"
- return f''' for sub_type in &self.{field_name} {{
+ return f""" for sub_type in &self.{field_name} {{
sub_type.validate()?;
}}
-'''
+"""
+
-def get_struct_validation_function_from_definition(name, parameters, special_serde_object=False):
+def get_struct_validation_function_from_definition(
+ name, parameters, special_serde_object=False
+):
if len(parameters) == 0:
- return ''
- namespace = 'dnsdistsettings::' if not special_serde_object else ''
- suffix = 'Serde' if special_serde_object else ''
+ return ""
+ namespace = "dnsdistsettings::" if not special_serde_object else ""
+ suffix = "Serde" if special_serde_object else ""
struct_name = get_rust_object_name(name)
- output = f'''impl {namespace}{struct_name}Configuration{suffix} {{
+ output = f"""impl {namespace}{struct_name}Configuration{suffix} {{
fn validate(&self) -> Result<(), ValidationError> {{
-'''
+"""
for parameter in parameters:
- field_name = get_rust_field_name(parameter['name']) if parameter['name'] != 'namespace' else 'name_space'
- rust_type = parameter['type']
+ field_name = (
+ get_rust_field_name(parameter["name"])
+ if parameter["name"] != "namespace"
+ else "name_space"
+ )
+ rust_type = parameter["type"]
output += get_validation_for_field(field_name, rust_type)
- output += ''' Ok(())
+ output += """ Ok(())
}
-}'''
+}"""
return output
+
def get_definitions_from_file(def_file):
- with open(def_file, 'rt', encoding="utf-8") as fd:
+ with open(def_file, "rt", encoding="utf-8") as fd:
definitions = yaml.safe_load(fd.read())
return definitions
+
def include_file(out_fp, include_file_name):
- with open(include_file_name, mode='r', encoding='utf-8') as in_fp:
+ with open(include_file_name, mode="r", encoding="utf-8") as in_fp:
basename = os.path.basename(include_file_name)
- out_fp.write(f'// START INCLUDE {basename}\n')
+ out_fp.write(f"// START INCLUDE {basename}\n")
out_fp.write(in_fp.read())
- out_fp.write(f'// END INCLUDE {basename}\n')
+ out_fp.write(f"// END INCLUDE {basename}\n")
+
def generate_flat_settings_for_cxx(definitions, src_dir, out_file_path):
cxx_flat_settings_fp = get_temporary_file_for_generated_code(out_file_path)
- include_file(cxx_flat_settings_fp, src_dir + '/dnsdist-configuration-yaml-items-pre-in.cc')
+ include_file(
+ cxx_flat_settings_fp, src_dir + "/dnsdist-configuration-yaml-items-pre-in.cc"
+ )
# first we do runtime-settable settings
- cxx_flat_settings_fp.write('''#if defined(HAVE_YAML_CONFIGURATION)
+ cxx_flat_settings_fp.write("""#if defined(HAVE_YAML_CONFIGURATION)
#include "rust/cxx.h"
#include "rust/lib.rs.h"
#include "dnsdist-configuration-yaml-internal.hh"
namespace dnsdist::configuration::yaml
{
void convertRuntimeFlatSettingsFromRust(const dnsdist::rust::settings::GlobalConfiguration& yamlConfig, dnsdist::configuration::RuntimeConfiguration& config)
-{\n''')
+{\n""")
for category_name, keys in definitions.items():
- if not 'parameters' in keys:
+ if not "parameters" in keys:
continue
- if 'category' in keys:
- category_name = keys['category']
+ if "category" in keys:
+ category_name = keys["category"]
else:
category_name = get_rust_field_name(category_name)
- for parameter in keys['parameters']:
- if not 'internal-field-name' in parameter or not 'runtime-configurable' in parameter or not parameter['runtime-configurable']:
+ for parameter in keys["parameters"]:
+ if (
+ not "internal-field-name" in parameter
+ or not "runtime-configurable" in parameter
+ or not parameter["runtime-configurable"]
+ ):
continue
- internal_field_name = parameter['internal-field-name']
- rust_field_name = get_rust_field_name(parameter['name']) if not 'rename' in parameter else parameter['rename']
- default = parameter['default'] if parameter['type'] != 'String' else '"' + parameter['default'] + '"'
- cxx_flat_settings_fp.write(f' if (config.{internal_field_name} == {default}) {{\n')
- if parameter['type'] != 'String':
- cxx_flat_settings_fp.write(f' config.{internal_field_name} = yamlConfig.{category_name}.{rust_field_name};\n')
+ internal_field_name = parameter["internal-field-name"]
+ rust_field_name = (
+ get_rust_field_name(parameter["name"])
+ if not "rename" in parameter
+ else parameter["rename"]
+ )
+ default = (
+ parameter["default"]
+ if parameter["type"] != "String"
+ else '"' + parameter["default"] + '"'
+ )
+ cxx_flat_settings_fp.write(
+ f" if (config.{internal_field_name} == {default}) {{\n"
+ )
+ if parameter["type"] != "String":
+ cxx_flat_settings_fp.write(
+ f" config.{internal_field_name} = yamlConfig.{category_name}.{rust_field_name};\n"
+ )
else:
- cxx_flat_settings_fp.write(f' config.{internal_field_name} = std::string(yamlConfig.{category_name}.{rust_field_name});\n')
- cxx_flat_settings_fp.write(' }\n')
+ cxx_flat_settings_fp.write(
+ f" config.{internal_field_name} = std::string(yamlConfig.{category_name}.{rust_field_name});\n"
+ )
+ cxx_flat_settings_fp.write(" }\n")
- cxx_flat_settings_fp.write('''}\n''')
+ cxx_flat_settings_fp.write("""}\n""")
# then immutable ones
- cxx_flat_settings_fp.write('''void convertImmutableFlatSettingsFromRust(const dnsdist::rust::settings::GlobalConfiguration& yamlConfig, dnsdist::configuration::ImmutableConfiguration& config)
-{\n''')
+ cxx_flat_settings_fp.write("""void convertImmutableFlatSettingsFromRust(const dnsdist::rust::settings::GlobalConfiguration& yamlConfig, dnsdist::configuration::ImmutableConfiguration& config)
+{\n""")
for category_name, keys in definitions.items():
- if not 'parameters' in keys:
+ if not "parameters" in keys:
continue
- if 'category' in keys:
- category_name = keys['category']
+ if "category" in keys:
+ category_name = keys["category"]
else:
category_name = get_rust_field_name(category_name)
- for parameter in keys['parameters']:
- if not 'internal-field-name' in parameter or not 'runtime-configurable' in parameter or parameter['runtime-configurable']:
+ for parameter in keys["parameters"]:
+ if (
+ not "internal-field-name" in parameter
+ or not "runtime-configurable" in parameter
+ or parameter["runtime-configurable"]
+ ):
continue
- internal_field_name = parameter['internal-field-name']
- rust_field_name = get_rust_field_name(parameter['name']) if not 'rename' in parameter else parameter['rename']
- default = parameter['default'] if parameter['type'] != 'String' else '"' + parameter['default'] + '"'
- cxx_flat_settings_fp.write(f' if (config.{internal_field_name} == {default}) {{\n')
- if parameter['type'] != 'String':
- cxx_flat_settings_fp.write(f' config.{internal_field_name} = yamlConfig.{category_name}.{rust_field_name};\n')
+ internal_field_name = parameter["internal-field-name"]
+ rust_field_name = (
+ get_rust_field_name(parameter["name"])
+ if not "rename" in parameter
+ else parameter["rename"]
+ )
+ default = (
+ parameter["default"]
+ if parameter["type"] != "String"
+ else '"' + parameter["default"] + '"'
+ )
+ cxx_flat_settings_fp.write(
+ f" if (config.{internal_field_name} == {default}) {{\n"
+ )
+ if parameter["type"] != "String":
+ cxx_flat_settings_fp.write(
+ f" config.{internal_field_name} = yamlConfig.{category_name}.{rust_field_name};\n"
+ )
else:
- cxx_flat_settings_fp.write(f' config.{internal_field_name} = std::string(yamlConfig.{category_name}.{rust_field_name});\n')
- cxx_flat_settings_fp.write(' }\n')
+ cxx_flat_settings_fp.write(
+ f" config.{internal_field_name} = std::string(yamlConfig.{category_name}.{rust_field_name});\n"
+ )
+ cxx_flat_settings_fp.write(" }\n")
- cxx_flat_settings_fp.write('''}\n
+ cxx_flat_settings_fp.write("""}\n
}
#endif /* defined(HAVE_YAML_CONFIGURATION) */
-''')
+""")
+
+ os.rename(
+ cxx_flat_settings_fp.name,
+ out_file_path + "/dnsdist-configuration-yaml-items-generated.cc",
+ )
- os.rename(cxx_flat_settings_fp.name, out_file_path + '/dnsdist-configuration-yaml-items-generated.cc')
def generate_actions_config(output, def_dir, response, default_functions):
- suffix = 'ResponseAction' if response else 'Action'
+ suffix = "ResponseAction" if response else "Action"
actions_definitions = get_actions_definitions(def_dir, response)
- action_buffer = ''
+ action_buffer = ""
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- indent = ' ' * 4
- if not 'skip-serde' in action or not action['skip-serde']:
- action_buffer += f'''{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
-{indent}#[serde(deny_unknown_fields)]\n'''
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ indent = " " * 4
+ if not "skip-serde" in action or not action["skip-serde"]:
+ action_buffer += f"""{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
+{indent}#[serde(deny_unknown_fields)]\n"""
else:
- action_buffer += f'{indent}#[derive(Default)]\n'
+ action_buffer += f"{indent}#[derive(Default)]\n"
- action_buffer += f'{indent}struct {struct_name} {{\n'
+ action_buffer += f"{indent}struct {struct_name} {{\n"
- indent = ' ' * 8
- if not 'skip-serde' in action or not action['skip-serde']:
+ indent = " " * 8
+ if not "skip-serde" in action or not action["skip-serde"]:
action_buffer += f'{indent}#[serde(default, skip_serializing_if = "crate::is_default")]\n'
- action_buffer += f'{indent}name: String,\n'
+ action_buffer += f"{indent}name: String,\n"
- action_buffer += get_rust_struct_fields_from_definition(struct_name, action, default_functions, indent)
+ action_buffer += get_rust_struct_fields_from_definition(
+ struct_name, action, default_functions, indent
+ )
- action_buffer += ' }\n\n'
+ action_buffer += " }\n\n"
output.write(action_buffer)
+
def generate_selectors_config(output, def_dir, default_functions):
- suffix = 'Selector'
+ suffix = "Selector"
selectors_definitions = get_selectors_definitions(def_dir)
- selector_buffer = ''
+ selector_buffer = ""
for selector in selectors_definitions:
- name = get_rust_object_name(selector['name'])
- struct_name = f'{name}{suffix}Configuration'
- indent = ' ' * 4
- if not 'skip-serde' in selector or not selector['skip-serde']:
- selector_buffer += f'''{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
-{indent}#[serde(deny_unknown_fields)]\n'''
+ name = get_rust_object_name(selector["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ indent = " " * 4
+ if not "skip-serde" in selector or not selector["skip-serde"]:
+ selector_buffer += f"""{indent}#[derive(Deserialize, Serialize, Debug, PartialEq)]
+{indent}#[serde(deny_unknown_fields)]\n"""
else:
- selector_buffer += f'{indent}#[derive(Default)]\n'
+ selector_buffer += f"{indent}#[derive(Default)]\n"
- selector_buffer += f'{indent}struct {struct_name} {{\n'
+ selector_buffer += f"{indent}struct {struct_name} {{\n"
- indent = ' ' * 8
- if not 'skip-serde' in selector or not selector['skip-serde']:
+ indent = " " * 8
+ if not "skip-serde" in selector or not selector["skip-serde"]:
selector_buffer += f'{indent}#[serde(default, skip_serializing_if = "crate::is_default")]\n'
- selector_buffer += f'{indent}name: String,\n'
+ selector_buffer += f"{indent}name: String,\n"
- selector_buffer += get_rust_struct_fields_from_definition(struct_name, selector, default_functions, indent)
+ selector_buffer += get_rust_struct_fields_from_definition(
+ struct_name, selector, default_functions, indent
+ )
- selector_buffer += ' }\n\n'
+ selector_buffer += " }\n\n"
output.write(selector_buffer)
+
def generate_cpp_action_headers(def_dir, cxx_dest_dir):
cpp_action_headers_fp = get_temporary_file_for_generated_code(cxx_dest_dir)
- header_buffer = ''
+ header_buffer = ""
# query actions
actions_definitions = get_actions_definitions(def_dir, False)
- suffix = 'Action'
+ suffix = "Action"
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- header_buffer += f'struct {struct_name};\n'
- header_buffer += f'std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config);\n'
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ header_buffer += f"struct {struct_name};\n"
+ header_buffer += f"std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config);\n"
# response actions
actions_definitions = get_actions_definitions(def_dir, True)
- suffix = 'ResponseAction'
+ suffix = "ResponseAction"
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- header_buffer += f'struct {struct_name};\n'
- header_buffer += f'std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config);\n'
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ header_buffer += f"struct {struct_name};\n"
+ header_buffer += f"std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config);\n"
cpp_action_headers_fp.write(header_buffer)
- os.rename(cpp_action_headers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated.hh')
+ os.rename(
+ cpp_action_headers_fp.name,
+ f"{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated.hh",
+ )
+
def generate_cpp_selector_headers(def_dir, cxx_dest_dir):
cpp_selector_headers_fp = get_temporary_file_for_generated_code(cxx_dest_dir)
- header_buffer = ''
+ header_buffer = ""
selectors_definitions = get_selectors_definitions(def_dir)
- suffix = 'Selector'
+ suffix = "Selector"
for selector in selectors_definitions:
- name = get_rust_object_name(selector['name'])
- struct_name = f'{name}{suffix}Configuration'
- header_buffer += f'struct {struct_name};\n'
- header_buffer += f'std::shared_ptr<DNS{suffix}> get{name}{suffix}(const {struct_name}& config);\n'
+ name = get_rust_object_name(selector["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ header_buffer += f"struct {struct_name};\n"
+ header_buffer += f"std::shared_ptr<DNS{suffix}> get{name}{suffix}(const {struct_name}& config);\n"
cpp_selector_headers_fp.write(header_buffer)
- os.rename(cpp_selector_headers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated.hh')
+ os.rename(
+ cpp_selector_headers_fp.name,
+ f"{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated.hh",
+ )
+
def get_cpp_parameters(struct_name, parameters, skip_name):
- output = ''
+ output = ""
for parameter in parameters:
- name = parameter['name']
- ptype = parameter['type']
- if name == 'name' and skip_name:
+ name = parameter["name"]
+ ptype = parameter["type"]
+ if name == "name" and skip_name:
continue
pname = get_rust_field_name(name)
if len(output) > 0:
- output += ', '
- field = f'{struct_name}.{pname}'
- if ptype == 'PacketBuffer':
- field = f'PacketBuffer({field}.data(), {field}.data() + {field}.size())'
- elif ptype == 'DNSName':
- field = f'DNSName(std::string({field}))'
- elif ptype == 'ComboAddress':
- field = f'ComboAddress(std::string({field}))'
- elif ptype == 'String':
- field = f'std::string({field})'
- elif ptype == 'ResponseConfig':
- field = f'convertResponseConfig({field})'
- elif ptype == 'Vec<SVCRecordParameters>':
- field = f'convertSVCRecordParameters({field})'
- elif ptype == 'SOAParams':
- field = f'convertSOAParams({field})'
- elif ptype == 'RCode':
+ output += ", "
+ field = f"{struct_name}.{pname}"
+ if ptype == "PacketBuffer":
+ field = f"PacketBuffer({field}.data(), {field}.data() + {field}.size())"
+ elif ptype == "DNSName":
+ field = f"DNSName(std::string({field}))"
+ elif ptype == "ComboAddress":
+ field = f"ComboAddress(std::string({field}))"
+ elif ptype == "String":
+ field = f"std::string({field})"
+ elif ptype == "ResponseConfig":
+ field = f"convertResponseConfig({field})"
+ elif ptype == "Vec<SVCRecordParameters>":
+ field = f"convertSVCRecordParameters({field})"
+ elif ptype == "SOAParams":
+ field = f"convertSOAParams({field})"
+ elif ptype == "RCode":
field = f'dnsdist::configuration::yaml::strToRCode("{struct_name}", "{name}", {field})'
- elif ptype == 'Opcode':
+ elif ptype == "Opcode":
field = f'dnsdist::configuration::yaml::strToOpcode("{struct_name}", "{name}", {field})'
output += field
return output
+
def generate_cpp_action_wrappers(def_dir, cxx_dest_dir):
cpp_action_wrappers_fp = get_temporary_file_for_generated_code(cxx_dest_dir)
- wrappers_buffer = ''
+ wrappers_buffer = ""
# query actions
actions_definitions = get_actions_definitions(def_dir, False)
- suffix = 'Action'
+ suffix = "Action"
for action in actions_definitions:
- if 'skip-rust' in action and action['skip-rust']:
+ if "skip-rust" in action and action["skip-rust"]:
continue
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- parameters = get_cpp_parameters('config', action['parameters'], True) if 'parameters' in action else ''
- wrappers_buffer += f'''std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config)
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ parameters = (
+ get_cpp_parameters("config", action["parameters"], True)
+ if "parameters" in action
+ else ""
+ )
+ wrappers_buffer += f"""std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config)
{{
auto action = dnsdist::actions::get{name}{suffix}({parameters});
return newDNSActionWrapper(std::move(action), config.name);
}}
-'''
+"""
# response actions
actions_definitions = get_actions_definitions(def_dir, True)
- suffix = 'ResponseAction'
+ suffix = "ResponseAction"
for action in actions_definitions:
- if 'skip-rust' in action and action['skip-rust']:
+ if "skip-rust" in action and action["skip-rust"]:
continue
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- parameters = get_cpp_parameters('config', action['parameters'], True) if 'parameters' in action else ''
- wrappers_buffer += f'''std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config)
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ parameters = (
+ get_cpp_parameters("config", action["parameters"], True)
+ if "parameters" in action
+ else ""
+ )
+ wrappers_buffer += f"""std::shared_ptr<DNS{suffix}Wrapper> get{name}{suffix}(const {struct_name}& config)
{{
auto action = dnsdist::actions::get{name}{suffix}({parameters});
return newDNSResponseActionWrapper(std::move(action), config.name);
}}
-'''
+"""
cpp_action_wrappers_fp.write(wrappers_buffer)
- os.rename(cpp_action_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated-body.hh')
+ os.rename(
+ cpp_action_wrappers_fp.name,
+ f"{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated-body.hh",
+ )
+
def generate_cpp_selector_wrappers(def_dir, cxx_dest_dir):
cpp_selector_wrappers_fp = get_temporary_file_for_generated_code(cxx_dest_dir)
- wrappers_buffer = ''
+ wrappers_buffer = ""
selectors_definitions = get_selectors_definitions(def_dir)
- suffix = 'Selector'
+ suffix = "Selector"
for selector in selectors_definitions:
- if 'skip-rust' in selector and selector['skip-rust']:
+ if "skip-rust" in selector and selector["skip-rust"]:
continue
- name = get_rust_object_name(selector['name'])
- struct_name = f'{name}{suffix}Configuration'
- parameters = get_cpp_parameters('config', selector['parameters'], True) if 'parameters' in selector else ''
- wrappers_buffer += f'''std::shared_ptr<DNS{suffix}> get{name}{suffix}(const {struct_name}& config)
+ name = get_rust_object_name(selector["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ parameters = (
+ get_cpp_parameters("config", selector["parameters"], True)
+ if "parameters" in selector
+ else ""
+ )
+ wrappers_buffer += f"""std::shared_ptr<DNS{suffix}> get{name}{suffix}(const {struct_name}& config)
{{
auto selector = dnsdist::selectors::get{name}{suffix}({parameters});
return newDNSSelector(std::move(selector), config.name);
}}
-'''
+"""
cpp_selector_wrappers_fp.write(wrappers_buffer)
- os.rename(cpp_selector_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated-body.hh')
+ os.rename(
+ cpp_selector_wrappers_fp.name,
+ f"{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated-body.hh",
+ )
+
def generate_rust_actions_enum(output, def_dir, response):
- suffix = 'ResponseAction' if response else 'Action'
+ suffix = "ResponseAction" if response else "Action"
actions_definitions = get_actions_definitions(def_dir, response)
- enum_buffer = f'''#[allow(clippy::upper_case_acronyms)]
+ enum_buffer = f"""#[allow(clippy::upper_case_acronyms)]
#[derive(Default, Serialize, Deserialize, Debug, PartialEq)]
#[serde(tag = "type")]
enum {suffix} {{
#[default]
Default,
-'''
+"""
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- struct_name = f'{name}{suffix}Configuration'
- if struct_name in ['ContinueActionConfiguration']:
+ name = get_rust_object_name(action["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ if struct_name in ["ContinueActionConfiguration"]:
# special version for Serde
- enum_buffer += f' {name}({struct_name}Serde),\n'
+ enum_buffer += f" {name}({struct_name}Serde),\n"
else:
- enum_buffer += f' {name}(dnsdistsettings::{struct_name}),\n'
+ enum_buffer += f" {name}(dnsdistsettings::{struct_name}),\n"
- enum_buffer += '}\n\n'
+ enum_buffer += "}\n\n"
output.write(enum_buffer)
+
def generate_rust_selectors_enum(output, def_dir):
- suffix = 'Selector'
+ suffix = "Selector"
selectors_definitions = get_selectors_definitions(def_dir)
- enum_buffer = f'''#[allow(clippy::upper_case_acronyms)]
+ enum_buffer = f"""#[allow(clippy::upper_case_acronyms)]
#[derive(Default, Serialize, Deserialize, Debug, PartialEq)]
#[serde(tag = "type")]
enum {suffix} {{
#[default]
Default,
-'''
+"""
for selector in selectors_definitions:
- name = get_rust_object_name(selector['name'])
- struct_name = f'{name}{suffix}Configuration'
- if struct_name in ['AndSelectorConfiguration', 'OrSelectorConfiguration', 'NotSelectorConfiguration']:
+ name = get_rust_object_name(selector["name"])
+ struct_name = f"{name}{suffix}Configuration"
+ if struct_name in [
+ "AndSelectorConfiguration",
+ "OrSelectorConfiguration",
+ "NotSelectorConfiguration",
+ ]:
# special version for Serde
- enum_buffer += f' {name}({struct_name}Serde),\n'
+ enum_buffer += f" {name}({struct_name}Serde),\n"
else:
- enum_buffer += f' {name}(dnsdistsettings::{struct_name}),\n'
+ enum_buffer += f" {name}(dnsdistsettings::{struct_name}),\n"
- enum_buffer += '}\n\n'
+ enum_buffer += "}\n\n"
output.write(enum_buffer)
+
def get_actions_definitions(def_dir, response):
- def_file = f'{def_dir}/dnsdist-response-actions-definitions.yml' if response else f'{def_dir}/dnsdist-actions-definitions.yml'
+ def_file = (
+ f"{def_dir}/dnsdist-response-actions-definitions.yml"
+ if response
+ else f"{def_dir}/dnsdist-actions-definitions.yml"
+ )
return get_definitions_from_file(def_file)
+
def get_selectors_definitions(def_dir):
- def_file = f'{def_dir}/dnsdist-selectors-definitions.yml'
+ def_file = f"{def_dir}/dnsdist-selectors-definitions.yml"
return get_definitions_from_file(def_file)
+
def generate_cpp_action_selector_functions_callable_from_rust(output, def_dir):
- output_buffer = '''
+ output_buffer = """
/*
* Functions callable from Rust (actions and selectors)
*/
unsafe extern "C++" {
-'''
+"""
# first query actions
actions_definitions = get_actions_definitions(def_dir, False)
- suffix = 'Action'
+ suffix = "Action"
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- output_buffer += f' fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}Wrapper>>;\n'
+ name = get_rust_object_name(action["name"])
+ output_buffer += f" fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}Wrapper>>;\n"
# then response actions
actions_definitions = get_actions_definitions(def_dir, True)
- suffix = 'ResponseAction'
+ suffix = "ResponseAction"
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- output_buffer += f' fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}Wrapper>>;\n'
+ name = get_rust_object_name(action["name"])
+ output_buffer += f" fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}Wrapper>>;\n"
# then selectors
selectors_definitions = get_selectors_definitions(def_dir)
- suffix = 'Selector'
+ suffix = "Selector"
for selector in selectors_definitions:
- name = get_rust_object_name(selector['name'])
- output_buffer += f' fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}>>;\n'
+ name = get_rust_object_name(selector["name"])
+ output_buffer += f" fn get{name}{suffix}(config: &{name}{suffix}Configuration) -> Result<SharedPtr<DNS{suffix}>>;\n"
- output_buffer += ' }\n'
+ output_buffer += " }\n"
output.write(output_buffer)
+
def generate_rust_action_to_config(output, def_dir, response):
- suffix = 'ResponseAction' if response else 'Action'
+ suffix = "ResponseAction" if response else "Action"
actions_definitions = get_actions_definitions(def_dir, response)
- function_name = 'get_one_action_from_serde' if not response else 'get_one_response_action_from_serde'
- enum_buffer = f'''fn {function_name}(action: &{suffix}) -> Result<dnsdistsettings::SharedDNS{suffix}, cxx::Exception> {{
+ function_name = (
+ "get_one_action_from_serde"
+ if not response
+ else "get_one_response_action_from_serde"
+ )
+ enum_buffer = f"""fn {function_name}(action: &{suffix}) -> Result<dnsdistsettings::SharedDNS{suffix}, cxx::Exception> {{
match action {{
{suffix}::Default => {{}}
-'''
+"""
for action in actions_definitions:
- name = get_rust_object_name(action['name'])
- if name in ['Continue']:
- enum_buffer += f''' {suffix}::{name}(cont) => {{
+ name = get_rust_object_name(action["name"])
+ if name in ["Continue"]:
+ enum_buffer += f""" {suffix}::{name}(cont) => {{
let config = dnsdistsettings::{name}{suffix}Configuration {{
action: get_one_action_from_serde(&cont.action)?,
..Default::default()
action: dnsdistsettings::get{name}{suffix}(&config)?,
}});
}}
-'''
+"""
else:
- enum_buffer += f''' {suffix}::{name}(config) => {{
+ enum_buffer += f""" {suffix}::{name}(config) => {{
return Ok(dnsdistsettings::SharedDNS{suffix} {{
action: dnsdistsettings::get{name}{suffix}(config)?,
}});
}}
-'''
+"""
- enum_buffer += ''' }
+ enum_buffer += """ }
panic!("no action")
}
-'''
+"""
output.write(enum_buffer)
+
def generate_rust_selector_to_config(output, def_dir):
- suffix = 'Selector'
+ suffix = "Selector"
selectors_definitions = get_selectors_definitions(def_dir)
- function_name = 'get_one_selector_from_serde'
- enum_buffer = f'''fn {function_name}(selector: &{suffix}) -> Result<dnsdistsettings::SharedDNS{suffix}, cxx::Exception> {{
+ function_name = "get_one_selector_from_serde"
+ enum_buffer = f"""fn {function_name}(selector: &{suffix}) -> Result<dnsdistsettings::SharedDNS{suffix}, cxx::Exception> {{
match selector {{
{suffix}::Default => {{}}
-'''
+"""
for selector in selectors_definitions:
- name = get_rust_object_name(selector['name'])
+ name = get_rust_object_name(selector["name"])
var = name.lower()
- if name in ['And', 'Or']:
- enum_buffer += f''' {suffix}::{name}({var}) => {{
+ if name in ["And", "Or"]:
+ enum_buffer += f""" {suffix}::{name}({var}) => {{
let mut config: dnsdistsettings::{name}{suffix}Configuration = Default::default();
for sub_selector in &{var}.selectors {{
config.selectors.push(get_one_selector_from_serde(sub_selector)?)
selector: dnsdistsettings::get{name}{suffix}(&config)?
}})
}}
-'''
- elif name in ['Not']:
- enum_buffer += f''' {suffix}::{name}({var}) => {{
+"""
+ elif name in ["Not"]:
+ enum_buffer += f""" {suffix}::{name}({var}) => {{
let mut config: dnsdistsettings::{name}{suffix}Configuration = Default::default();
match get_one_selector_from_serde(&{var}.selector) {{
Ok(sel) => config.selector = sel,
Err(e) => return Err(e),
}}
}}
-'''
+"""
else:
- enum_buffer += f''' {suffix}::{name}({var}) => {{
+ enum_buffer += f""" {suffix}::{name}({var}) => {{
match dnsdistsettings::get{name}{suffix}({var}) {{
Ok(sel) => return Ok(dnsdistsettings::SharedDNS{suffix} {{
selector: sel,
Err(e) => return Err(e),
}}
}}
-'''
+"""
- enum_buffer += ''' }
+ enum_buffer += """ }
panic!("No selector")
}
-'''
+"""
output.write(enum_buffer)
-def handle_structures(generated_fp, definitions, default_functions, validation_functions):
+
+def handle_structures(
+ generated_fp, definitions, default_functions, validation_functions
+):
for definition_name, keys in definitions.items():
- generated_fp.write(get_rust_struct_from_definition(definition_name, keys, default_functions) + '\n')
- if definition_name not in ['global', 'proto_buf_meta', 'proxy_protocol_value', 'query_rule', 'response_rule']:
- validation_functions.append(get_struct_validation_function_from_definition(definition_name, keys['parameters'] if 'parameters' in keys else []))
+ generated_fp.write(
+ get_rust_struct_from_definition(definition_name, keys, default_functions)
+ + "\n"
+ )
+ if definition_name not in [
+ "global",
+ "proto_buf_meta",
+ "proxy_protocol_value",
+ "query_rule",
+ "response_rule",
+ ]:
+ validation_functions.append(
+ get_struct_validation_function_from_definition(
+ definition_name, keys["parameters"] if "parameters" in keys else []
+ )
+ )
+
def get_temporary_file_for_generated_code(directory):
- generated_fp = tempfile.NamedTemporaryFile(mode='w+t', encoding='utf-8', dir=directory, delete=False)
- generated_fp.write('// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!\n')
+ generated_fp = tempfile.NamedTemporaryFile(
+ mode="w+t", encoding="utf-8", dir=directory, delete=False
+ )
+ generated_fp.write(
+ "// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!\n"
+ )
return generated_fp
+
def main():
if len(sys.argv) != 4:
- print(f'Usage: {sys.argv[0]} <path/to/definitions/files> <rust/output/dir> <cxx/build/root/dir>')
+ print(
+ f"Usage: {sys.argv[0]} <path/to/definitions/files> <rust/output/dir> <cxx/build/root/dir>"
+ )
sys.exit(1)
definitions_dir = sys.argv[1]
rust_dir = sys.argv[2]
cxx_build_dir = sys.argv[3]
- definitions = get_definitions_from_file(definitions_dir + '/dnsdist-settings-definitions.yml')
+ definitions = get_definitions_from_file(
+ definitions_dir + "/dnsdist-settings-definitions.yml"
+ )
default_functions = []
validation_functions = []
generate_cpp_selector_headers(definitions_dir, cxx_build_dir)
generate_cpp_selector_wrappers(definitions_dir, cxx_build_dir)
- generated_fp = get_temporary_file_for_generated_code(f'{rust_dir}/rust/src/')
- include_file(generated_fp, f'{rust_dir}/rust-pre-in.rs')
+ generated_fp = get_temporary_file_for_generated_code(f"{rust_dir}/rust/src/")
+ include_file(generated_fp, f"{rust_dir}/rust-pre-in.rs")
generate_actions_config(generated_fp, definitions_dir, False, default_functions)
generate_actions_config(generated_fp, definitions_dir, True, default_functions)
generate_selectors_config(generated_fp, definitions_dir, default_functions)
- handle_structures(generated_fp, definitions, default_functions, validation_functions)
+ handle_structures(
+ generated_fp, definitions, default_functions, validation_functions
+ )
- generate_cpp_action_selector_functions_callable_from_rust(generated_fp, definitions_dir)
+ generate_cpp_action_selector_functions_callable_from_rust(
+ generated_fp, definitions_dir
+ )
- include_file(generated_fp, f'{rust_dir}/rust-middle-in.rs')
+ include_file(generated_fp, f"{rust_dir}/rust-middle-in.rs")
# we are now outside of the dnsdistsettings namespace
# generate the special global configuration Serde structure
for definition_name, keys in definitions.items():
- if definition_name == 'global':
- generated_fp.write(get_rust_struct_from_definition(definition_name, keys, default_functions, special_serde_object=True) + '\n')
- validation_functions.append(get_struct_validation_function_from_definition(definition_name, keys['parameters'] if 'parameters' in keys else [], True))
+ if definition_name == "global":
+ generated_fp.write(
+ get_rust_struct_from_definition(
+ definition_name, keys, default_functions, special_serde_object=True
+ )
+ + "\n"
+ )
+ validation_functions.append(
+ get_struct_validation_function_from_definition(
+ definition_name,
+ keys["parameters"] if "parameters" in keys else [],
+ True,
+ )
+ )
generate_rust_actions_enum(generated_fp, definitions_dir, False)
generate_rust_actions_enum(generated_fp, definitions_dir, True)
# the generated functions for the default values and validation
for function_def in default_functions:
- generated_fp.write(function_def + '\n')
+ generated_fp.write(function_def + "\n")
for function_def in validation_functions:
- generated_fp.write(function_def + '\n')
+ generated_fp.write(function_def + "\n")
generate_rust_action_to_config(generated_fp, definitions_dir, False)
generate_rust_action_to_config(generated_fp, definitions_dir, True)
generate_rust_selector_to_config(generated_fp, definitions_dir)
- include_file(generated_fp, rust_dir + '/rust-post-in.rs')
+ include_file(generated_fp, rust_dir + "/rust-post-in.rs")
+
+ os.rename(generated_fp.name, rust_dir + "/rust/src/lib.rs")
- os.rename(generated_fp.name, rust_dir + '/rust/src/lib.rs')
+ generate_flat_settings_for_cxx(definitions, rust_dir, f"{cxx_build_dir}")
- generate_flat_settings_for_cxx(definitions, rust_dir, f'{cxx_build_dir}')
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
struct ExpectedStep
{
public:
- enum class ExpectedRequest { handshakeClient, readFromClient, writeToClient, closeClient, connectToBackend, readFromBackend, writeToBackend, closeBackend };
-
- ExpectedStep(ExpectedRequest r, IOState n, size_t b = 0, std::function<void(int descriptor)> fn = nullptr): cb(fn), request(r), nextState(n), bytes(b)
+ enum class ExpectedRequest
+ {
+ handshakeClient,
+ readFromClient,
+ writeToClient,
+ closeClient,
+ connectToBackend,
+ readFromBackend,
+ writeToBackend,
+ closeBackend
+ };
+
+ ExpectedStep(ExpectedRequest r, IOState n, size_t b = 0, std::function<void(int descriptor)> fn = nullptr) :
+ cb(fn), request(r), nextState(n), bytes(b)
{
}
static PacketBuffer s_backendReadBuffer;
static PacketBuffer s_backendWriteBuffer;
-std::ostream& operator<<(std::ostream &os, const ExpectedStep::ExpectedRequest d);
+std::ostream& operator<<(std::ostream& os, const ExpectedStep::ExpectedRequest d);
-std::ostream& operator<<(std::ostream &os, const ExpectedStep::ExpectedRequest d)
+std::ostream& operator<<(std::ostream& os, const ExpectedStep::ExpectedRequest d)
{
- static const std::vector<std::string> requests = { "handshake with client", "read from client", "write to client", "close connection to client", "connect to the backend", "read from the backend", "write to the backend", "close connection to backend" };
- os<<requests.at(static_cast<size_t>(d));
+ static const std::vector<std::string> requests = {"handshake with client", "read from client", "write to client", "close connection to client", "connect to the backend", "read from the backend", "write to the backend", "close connection to backend"};
+ os << requests.at(static_cast<size_t>(d));
return os;
}
class MockupTLSConnection : public TLSConnection
{
public:
- MockupTLSConnection(int descriptor, bool client = false): d_descriptor(descriptor), d_client(client)
+ MockupTLSConnection(int descriptor, bool client = false) :
+ d_descriptor(descriptor), d_client(client)
{
}
- ~MockupTLSConnection() { }
+ ~MockupTLSConnection() {}
IOState tryHandshake() override
{
return step.nextState;
}
- IOState tryRead(PacketBuffer& buffer, size_t& pos, size_t toRead, bool allowIncomplete=false) override
+ IOState tryRead(PacketBuffer& buffer, size_t& pos, size_t toRead, bool allowIncomplete = false) override
{
(void)allowIncomplete;
auto step = getStep();
(void)timeout;
}
- size_t read(void* buffer, size_t bufferSize, const struct timeval&readTimeout, const struct timeval& totalTimeout={0,0}, bool allowIncomplete=false) override
+ size_t read(void* buffer, size_t bufferSize, const struct timeval& readTimeout, const struct timeval& totalTimeout = {0, 0}, bool allowIncomplete = false) override
{
(void)buffer;
(void)bufferSize;
(void)writeTimeout;
return 0;
}
+
private:
ExpectedStep getStep() const
{
{
}
- int run(struct timeval* tv, int timeout=500) override
+ int run(struct timeval* tv, int timeout = 500) override
{
(void)timeout;
int ret = 0;
static void testInit(const std::string& name, TCPClientThreadData& threadData)
{
#ifdef DEBUGLOG_ENABLED
- cerr<<name<<endl;
+ cerr << name << endl;
#else
- (void) name;
+ (void)name;
#endif
TestFixture::reset();
pwQ.getHeader()->rd = 1;
uint16_t querySize = static_cast<uint16_t>(query.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes, sizeBytes + 2);
{
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::NeedWrite },
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::NeedRead },
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 1 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 1 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, query.size() - 3 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 1 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, query.size() - 1},
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::NeedWrite},
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::NeedRead},
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 1},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 1},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, query.size() - 3},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 1},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, query.size() - 1},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
/* 10k self-generated REFUSED pipelined on the same connection */
size_t count = 10000;
- s_steps = { { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done } };
+ s_steps = {{ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done}};
for (size_t idx = 0; idx < count; idx++) {
s_readBuffer.insert(s_readBuffer.end(), query.begin(), query.end());
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2 });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2});
};
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::closeClient, IOState::Done });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::closeClient, IOState::Done});
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, query.size() - 2 - 2 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, query.size() - 2 - 2},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, 1 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, 1},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
pwQ.getHeader()->rd = 1;
uint16_t querySize = static_cast<uint16_t>(query.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes, sizeBytes + 2);
{
s_readBuffer.insert(s_readBuffer.end(), query.begin(), query.end());
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, proxyPayload.size() - s_proxyProtocolMinimumHeaderSize },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, proxyPayload.size() - s_proxyProtocolMinimumHeaderSize},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 65537},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer.insert(s_readBuffer.begin(), proxyPayload.begin(), proxyPayload.end());
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize },
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer.insert(s_readBuffer.begin(), proxyPayload.begin(), proxyPayload.end());
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, proxyPayload.size() - s_proxyProtocolMinimumHeaderSize - 1},
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, s_proxyProtocolMinimumHeaderSize},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, proxyPayload.size() - s_proxyProtocolMinimumHeaderSize - 1},
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
auto shortQuery = query;
shortQuery.resize(sizeof(dnsheader) - 1);
uint16_t shortQuerySize = static_cast<uint16_t>(shortQuery.size());
- const uint8_t shortSizeBytes[] = { static_cast<uint8_t>(shortQuerySize / 256), static_cast<uint8_t>(shortQuerySize % 256) };
+ const uint8_t shortSizeBytes[] = {static_cast<uint8_t>(shortQuerySize / 256), static_cast<uint8_t>(shortQuerySize % 256)};
shortQuery.insert(shortQuery.begin(), shortSizeBytes, shortSizeBytes + 2);
uint16_t querySize = static_cast<uint16_t>(query.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes, sizeBytes + 2);
auto backend = std::make_shared<DownstreamState>(getBackendAddress("42", 53));
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_backendReadBuffer = responsePacket;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_readBuffer = shortQuery;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
s_backendReadBuffer = shortQuery;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size()},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
appendPayloadEditingID(s_backendReadBuffer, query, 1);
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* connect to backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::NeedWrite, 0, [&threadData](int desc) {
- /* set the outgoing descriptor (backend connection) as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- }
- },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::NeedWrite, 0, [&threadData](int desc) {
+ /* set the outgoing descriptor (backend connection) as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* send query */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 1 },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() - 1 },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 1},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() - 1},
/* read response */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 1 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 1 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, query.size() - 3 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 1 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 1},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 1},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, query.size() - 3},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 1},
/* write response to client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, query.size() - 1 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1 },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, query.size() - 1},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1},
/* read second query */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* write second query to backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
/* read second response */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* write second response */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size()},
/* read from client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* close connection to client */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* close connection to the backend, eventually */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend (5 tries by default) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend (retrying 5 times) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend, connection closed on first write (5 attempts) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend, connection closed on first write (5 attempts) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
/* reading the response */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* send the response to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size()},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* then eventually the backend one */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend, connection closed on first write */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* and now reconnection fails (1) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* 2 */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* 3 */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* 4 */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
- (void)descriptor;
- throw NetworkError("Connection refused by the backend");
- }
- },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int descriptor) {
+ (void)descriptor;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_readBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend, connection closed on read, 5 attempts, last one succeeds */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend, connection closed on read, 5 attempts, last one succeeds */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* this time it works */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* sending the response to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size()},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* the eventually the backend one */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
/* sending the response to the client, the connection has been closed */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* and eventually the backend one */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
appendPayloadEditingID(s_backendReadBuffer, query, idx);
}
- s_steps = { { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- /* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() + 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2 }
- };
+ s_steps = {{ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ /* opening a connection to the backend */
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() + 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2}};
for (size_t idx = 0; idx < count - 1; idx++) {
/* read a new query */
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2});
/* pass it to the backend */
- s_steps.push_back({ ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() + 2 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 });
- s_steps.push_back({ ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() + 2});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2});
+ s_steps.push_back({ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2});
/* send the response */
- s_steps.push_back({ ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2 });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() + 2});
};
/* close the connection with the backend */
- s_steps.push_back({ ExpectedStep::ExpectedRequest::closeBackend, IOState::Done });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::closeBackend, IOState::Done});
/* close the connection with the client */
- s_steps.push_back({ ExpectedStep::ExpectedRequest::closeClient, IOState::Done });
+ s_steps.push_back({ExpectedStep::ExpectedRequest::closeClient, IOState::Done});
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
appendPayloadEditingID(s_backendReadBuffer, query, idx);
}
- s_steps = { { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
- /* close the connection with the client */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done }
- };
+ s_steps = {{ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
+ /* close the connection with the client */
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done}};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
pwQ.getHeader()->rd = 1;
pwQ.getHeader()->id = htons(counter);
uint16_t querySize = static_cast<uint16_t>(query.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes, sizeBytes + 2);
totalQueriesSize += query.size();
++counter;
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
totalResponsesSize += response.size();
++counter;
}
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (4) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (5) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
/* no response ready yet, but the backend becomes ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* set the outgoing descriptor (backend connection) as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* set the outgoing descriptor (backend connection) as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* no more queries from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* reading a response from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size()},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size()},
/* reading a response from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size()},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size()},
/* reading a response from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size()},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size()},
/* reading a response from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size()},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size()},
/* reading a response from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size()},
/* sending it to the client, the client descriptor becomes ready */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
- /* set the incoming descriptor (client connection) as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
+ /* set the incoming descriptor (client connection) as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* client is closing the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (4) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2},
/* sending the response right away (self-answered) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size()},
/* reading a query from the client (5) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2},
/* sending query to the backend (5) */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
/* reading a response from the backend (1) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
- /* set the backend descriptor as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
+ /* set the backend descriptor as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* sending it to the client (1) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
- /* set the client descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
+ /* set the client descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* reading a response from the backend (5) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size()},
/* sending it to the client (5) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size()},
/* try to read from the backend but there is no answer ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData, &timeout](int desc) {
- /* set the backend descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData, &timeout](int desc) {
+ /* set the backend descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ timeout = true;
+ }},
/* reading from the client (not ready) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* A timeout occurs */
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
- s_processQuery = [backend,&responses](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
+ s_processQuery = [backend, &responses](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
static size_t count = 0;
if (count++ == 3) {
/* self answered */
bool timeout = false;
int backendDesc;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* read response size and the beginning of the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 1, [&threadData](int desc) {
- /* set the backend descriptor as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 1, [&threadData](int desc) {
+ /* set the backend descriptor as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* trying to read an additional query, if any */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
- /* set the client descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* set the client descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* reading the remaining bytes of response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 3 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 3},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size()},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* the response (2) is already there */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
/* sending response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData](int desc) {
- /* set the client descriptor as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData](int desc) {
+ /* set the client descriptor as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* reading a query from the client (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (3) to the backend, short write */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 1, [&threadData,&backendDesc](int desc) {
- /* set the backend descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- backendDesc = desc;
- /* but client is ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 1, [&threadData, &backendDesc](int desc) {
+ /* set the backend descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ backendDesc = desc;
+ /* but client is ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* reading a query from the client (4) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2},
/* reading a query from the client (5) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2, [&threadData,&backendDesc](int desc) {
- (void)desc;
- /* set the backend descriptor as ready now */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDesc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2, [&threadData, &backendDesc](int desc) {
+ (void)desc;
+ /* set the backend descriptor as ready now */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDesc);
+ }},
/* nothing else to read from the client for now */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
- /* set the client descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* set the client descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* finishing sending the query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() - 1 },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() - 1},
/* sending the query (4) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size()},
/* sending the query (5) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
/* reading a response from the backend (3) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2},
/* sending it to the client (3) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size()},
/* reading a response from the backend (4) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2},
/* sending it to the client (4) but short write */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, responses.at(3).size() - 1, [&threadData](int desc) {
- /* set the client descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, responses.at(3).size() - 1, [&threadData](int desc) {
+ /* set the client descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* reading a response from the backend (5) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2, [&threadData](int desc) {
- (void)desc;
- /* set the client descriptor as ready to resume sending */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2, [&threadData](int desc) {
+ (void)desc;
+ /* set the client descriptor as ready to resume sending */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* resume sending it to the client (4) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1 },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, 1},
/* sending it to the client (5) */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size()},
/* nothing to read from the client, then timeout later */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData,&timeout](int desc) {
- /* set the client descriptor as NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData, &timeout](int desc) {
+ /* set the client descriptor as NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ timeout = true;
+ }},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* query is dropped, closing the connection to the client */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0, [&timeout](int desc) {
- (void)desc;
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0, [&timeout](int desc) {
+ (void)desc;
+ timeout = true;
+ }},
/* closing a connection to the backend after a timeout */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
counter = 0;
- s_processQuery = [backend,&counter](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
+ s_processQuery = [backend, &counter](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
if (counter == 0) {
++counter;
int backendDescriptor = -1;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptor](int desc) {
- backendDescriptor = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptor](int desc) {
+ backendDescriptor = desc;
+ }},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* query is dropped, closing the connection to the client */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0, [&threadData,&backendDescriptor](int desc) {
- (void)desc;
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptor);
- } },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0, [&threadData, &backendDescriptor](int desc) {
+ (void)desc;
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptor);
+ }},
/* reading the response to the first query from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
counter = 0;
- s_processQuery = [backend,&counter](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
+ s_processQuery = [backend, &counter](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
(void)dq;
if (counter == 0) {
++counter;
bool timeout = false;
int backendDescriptor = -1;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&timeout,&backendDescriptor](int desc) {
- backendDescriptor = desc;
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&timeout, &backendDescriptor](int desc) {
+ backendDescriptor = desc;
+ timeout = true;
+ }},
/* nothing from the client either */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* the client times out, and we will set the backend descriptor to ready at that point */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
/* sending response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size()},
/* reading the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
- /* setting the client descriptor ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
+ /* setting the client descriptor ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* try to read from the client again, get query (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* setting the backend descriptor NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* setting the backend descriptor NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* try to read from the client again, nothing yet */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData,&backendDescriptor](int desc) {
- /* the client descriptor becomes NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- /* the backend one is ready, though */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backendDescriptor);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData, &backendDescriptor](int desc) {
+ /* the client descriptor becomes NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ /* the backend one is ready, though */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backendDescriptor);
+ }},
/* reading the response (3) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2},
/* sending response (3) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&timeout](int desc) {
- (void)desc;
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&timeout](int desc) {
+ (void)desc;
+ timeout = true;
+ }},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* client times out again, this time we close the connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
expectedWriteBuffer = s_backendReadBuffer;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a third query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* no response ready yet but the backend descriptor becomes ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* nothing from the client either */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the client descriptor is NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the client descriptor is NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* read the response (2) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
/* trying to send response (2) to the client but blocking */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, 0 },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::NeedWrite, 0},
/* reading the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
/* trying to read from the backend again, connection closes on us */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
/* so we close the connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* try opening a new connection to the backend, it fails (5) times */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
- (void)desc;
- throw NetworkError("Connection refused by the backend");
- } },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
+ (void)desc;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* try opening a new connection to the backend, it fails (5) times */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done,0, [](int desc) {
- (void)desc;
- throw NetworkError("Connection refused by the backend");
- } },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
+ (void)desc;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* try opening a new connection to the backend, it fails (5) times */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done,0, [](int desc) {
- (void)desc;
- throw NetworkError("Connection refused by the backend");
- } },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
+ (void)desc;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* try opening a new connection to the backend, it fails (5) times */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done,0, [](int desc) {
- (void)desc;
- throw NetworkError("Connection refused by the backend");
- } },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
+ (void)desc;
+ throw NetworkError("Connection refused by the backend");
+ }},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* try opening a new connection to the backend, it fails (5) times */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done,0, [](int desc) {
- (void)desc;
- throw NetworkError("Connection refused by the backend");
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [](int desc) {
+ (void)desc;
+ throw NetworkError("Connection refused by the backend");
+ }},
/* closing a connection to the backend, client becomes ready */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0, [&threadData](int desc) {
- (void)desc;
- /* the client descriptor is ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0, [&threadData](int desc) {
+ (void)desc;
+ /* the client descriptor is ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* sending response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size()},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size()},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
pwAXFRQuery.getHeader()->rd = 0;
pwAXFRQuery.getHeader()->id = 42;
uint16_t axfrQuerySize = static_cast<uint16_t>(axfrQuery.size());
- const uint8_t axfrQuerySizeBytes[] = { static_cast<uint8_t>(axfrQuerySize / 256), static_cast<uint8_t>(axfrQuerySize % 256) };
+ const uint8_t axfrQuerySizeBytes[] = {static_cast<uint8_t>(axfrQuerySize / 256), static_cast<uint8_t>(axfrQuerySize % 256)};
axfrQuery.insert(axfrQuery.begin(), axfrQuerySizeBytes, axfrQuerySizeBytes + 2);
const DNSName name("powerdns.com.");
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
{
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
{
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
pwSecondQuery.getHeader()->rd = 1;
pwSecondQuery.getHeader()->id = 84;
uint16_t secondQuerySize = static_cast<uint16_t>(secondQuery.size());
- const uint8_t secondQuerySizeBytes[] = { static_cast<uint8_t>(secondQuerySize / 256), static_cast<uint8_t>(secondQuerySize % 256) };
+ const uint8_t secondQuerySizeBytes[] = {static_cast<uint8_t>(secondQuerySize / 256), static_cast<uint8_t>(secondQuerySize % 256)};
secondQuery.insert(secondQuery.begin(), secondQuerySizeBytes, secondQuerySizeBytes + 2);
}
pwSecondResponse.xfr32BitInt(0x01020304);
pwSecondResponse.commit();
uint16_t responseSize = static_cast<uint16_t>(secondResponse.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
secondResponse.insert(secondResponse.begin(), sizeBytes, sizeBytes + 2);
}
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, axfrQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, axfrQuery.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, axfrQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, axfrQuery.size()},
/* no response ready yet, but setting the backend descriptor readable */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* no more query from the client for now */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 , [&threadData](int desc) {
- (void)desc;
- /* the client descriptor becomes NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ (void)desc;
+ /* the client descriptor becomes NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(-1);
+ }},
/* read the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(0).size() - 2},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(0).size()},
/* reading the response (2) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(1).size() - 2},
/* sending response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(1).size()},
/* reading the response (3) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(2).size() - 2},
/* sending response (3) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(2).size(), [&threadData](int desc) {
- (void)desc;
- /* the client descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(2).size(), [&threadData](int desc) {
+ (void)desc;
+ /* the client descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* trying to read from the client, getting a second query */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, secondQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, secondQuery.size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, secondQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, secondQuery.size()},
/* reading the response (4) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, secondResponse.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, secondResponse.size() - 2},
/* sending response (4) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, secondResponse.size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, secondResponse.size()},
/* trying to read from the client, getting EOF */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
pwAXFRQuery.getHeader()->rd = 0;
pwAXFRQuery.getHeader()->id = 42;
uint16_t axfrQuerySize = static_cast<uint16_t>(axfrQuery.size());
- const uint8_t axfrQuerySizeBytes[] = { static_cast<uint8_t>(axfrQuerySize / 256), static_cast<uint8_t>(axfrQuerySize % 256) };
+ const uint8_t axfrQuerySizeBytes[] = {static_cast<uint8_t>(axfrQuerySize / 256), static_cast<uint8_t>(axfrQuerySize % 256)};
axfrQuery.insert(axfrQuery.begin(), axfrQuerySizeBytes, axfrQuerySizeBytes + 2);
const DNSName name("powerdns.com.");
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
{
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
{
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, axfrQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, axfrQuery.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + axfrQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + axfrQuery.size()},
/* no response ready yet, but setting the backend descriptor readable */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* no more query from the client for now */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 , [&threadData](int desc) {
- (void)desc;
- /* the client descriptor becomes NOT ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ (void)desc;
+ /* the client descriptor becomes NOT ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(-1);
+ }},
/* read the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(0).size() - 2},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(0).size()},
/* reading the response (2) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, axfrResponses.at(1).size() - 2},
/* sending response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, axfrResponses.at(1).size()},
/* reading the response (3) from the backend, get EOF!! */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [proxyEnabledBackend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
pwFirstQuery.getHeader()->rd = 1;
pwFirstQuery.getHeader()->id = 84;
uint16_t firstQuerySize = static_cast<uint16_t>(firstQuery.size());
- const uint8_t firstQuerySizeBytes[] = { static_cast<uint8_t>(firstQuerySize / 256), static_cast<uint8_t>(firstQuerySize % 256) };
+ const uint8_t firstQuerySizeBytes[] = {static_cast<uint8_t>(firstQuerySize / 256), static_cast<uint8_t>(firstQuerySize % 256)};
firstQuery.insert(firstQuery.begin(), firstQuerySizeBytes, firstQuerySizeBytes + 2);
}
pwFirstResponse.commit();
uint16_t responseSize = static_cast<uint16_t>(firstResponse.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
firstResponse.insert(firstResponse.begin(), sizeBytes, sizeBytes + 2);
}
pwIXFRQuery.getHeader()->rd = 0;
pwIXFRQuery.getHeader()->id = 42;
uint16_t ixfrQuerySize = static_cast<uint16_t>(ixfrQuery.size());
- const uint8_t ixfrQuerySizeBytes[] = { static_cast<uint8_t>(ixfrQuerySize / 256), static_cast<uint8_t>(ixfrQuerySize % 256) };
+ const uint8_t ixfrQuerySizeBytes[] = {static_cast<uint8_t>(ixfrQuerySize / 256), static_cast<uint8_t>(ixfrQuerySize % 256)};
ixfrQuery.insert(ixfrQuery.begin(), ixfrQuerySizeBytes, ixfrQuerySizeBytes + 2);
}
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
}
pwSecondQuery.getHeader()->rd = 1;
pwSecondQuery.getHeader()->id = 84;
uint16_t secondQuerySize = static_cast<uint16_t>(secondQuery.size());
- const uint8_t secondQuerySizeBytes[] = { static_cast<uint8_t>(secondQuerySize / 256), static_cast<uint8_t>(secondQuerySize % 256) };
+ const uint8_t secondQuerySizeBytes[] = {static_cast<uint8_t>(secondQuerySize / 256), static_cast<uint8_t>(secondQuerySize % 256)};
secondQuery.insert(secondQuery.begin(), secondQuerySizeBytes, secondQuerySizeBytes + 2);
}
pwSecondResponse.xfr32BitInt(0x01020304);
pwSecondResponse.commit();
uint16_t responseSize = static_cast<uint16_t>(secondResponse.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
secondResponse.insert(secondResponse.begin(), sizeBytes, sizeBytes + 2);
}
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, firstQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, firstQuery.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, firstQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, firstQuery.size()},
/* no response ready yet, but setting the backend descriptor readable */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* try to read a second query from the client, none yet */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* read the response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, firstResponse.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, firstResponse.size() - 2},
/* sending response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, firstResponse.size(), [&threadData](int desc) {
- (void)desc;
- /* client descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, firstResponse.size(), [&threadData](int desc) {
+ (void)desc;
+ /* client descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, ixfrQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, ixfrQuery.size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, ixfrQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, ixfrQuery.size()},
/* read the response (ixfr 1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, ixfrResponses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, ixfrResponses.at(0).size() - 2},
/* sending response (ixfr 1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, ixfrResponses.at(0).size(), [&threadData](int desc) {
- (void)desc;
- /* the client descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, ixfrResponses.at(0).size(), [&threadData](int desc) {
+ (void)desc;
+ /* the client descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* trying to read from the client, getting a second query */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, secondQuery.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, secondQuery.size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, secondQuery.size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, secondQuery.size()},
/* reading the response (4) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, secondResponse.size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, secondResponse.size() - 2},
/* sending response (4) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, secondResponse.size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, secondResponse.size()},
/* trying to read from the client, getting EOF */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
expectedWriteBuffer.insert(expectedWriteBuffer.end(), responses.at(2).begin(), responses.at(2).end());
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(0).size()},
/* got the response */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size()},
/* sending the response (1) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size()},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* backend is not ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a third query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* backend is not ready yet, but the descriptor becomes ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- }},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* nothing from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* backend closes the connection on us */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0 },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 0},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* opening a new connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(1).size()},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* got the response for 2 */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size()},
/* sending the response (2) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size()},
/* got the response for 3 */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size()},
/* sending the response (3) to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData](int desc) {
- /* the client descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData](int desc) {
+ /* the client descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0},
};
s_processQuery = [proxyEnabledBackend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
appendPayloadEditingID(expectedBackendWriteBuffer, queries.at(2), 2);
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, proxyPayload.size() + queries.at(0).size()},
/* we try to read the response, not ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* backend is not ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a third query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* backend is not ready yet, but the descriptor becomes ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* the backend descriptor becomes ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- }},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* the backend descriptor becomes ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0},
};
s_processQuery = [proxyEnabledBackend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* backend is not ready yet */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 0 },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::NeedWrite, 0},
/* reading a second query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* reading a third query from the client */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2, [&timeout](int desc) {
- (void)desc;
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2, [&timeout](int desc) {
+ (void)desc;
+ timeout = true;
+ }},
/* trying to read more from the client but nothing to read */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* closing the client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done, 0},
/* closing the backend connection */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done, 0},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
int backend2Desc = -1;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend (1) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backend1Desc](int desc) {
- backend1Desc = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backend1Desc](int desc) {
+ backend1Desc = desc;
+ }},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* opening a connection to the SECOND backend (2) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backend2Desc](int desc) {
- backend2Desc = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backend2Desc](int desc) {
+ backend2Desc = desc;
+ }},
/* sending query (3) to backend 2 */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (4) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2},
/* sending query to the second backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* nothing more to read from the client at that moment */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData, &backend1Desc](int desc) {
- (void)desc;
- /* but the first backend becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend1Desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData, &backend1Desc](int desc) {
+ (void)desc;
+ /* but the first backend becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend1Desc);
+ }},
/* reading response (1) from the first backend (1) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData,&backend1Desc](int desc) {
- /* client becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- /* first backend is no longer readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData, &backend1Desc](int desc) {
+ /* client becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ /* first backend is no longer readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
+ }},
/* no response ready from the backend yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (5) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2, [&threadData](int desc) {
- /* client is not ready anymore */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2, [&threadData](int desc) {
+ /* client is not ready anymore */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* sending query (5) to the first backend (1) */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
/* no response ready yet, but the first backend becomes ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- /* set the outgoing descriptor (backend connection) as ready */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ /* set the outgoing descriptor (backend connection) as ready */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* trying to read from client, nothing yet */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* reading response (2) from the first backend (1) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData,&backend1Desc,&backend2Desc](int desc) {
- /* client is NOT readable, backend1 is not readable, backend 2 becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend2Desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData, &backend1Desc, &backend2Desc](int desc) {
+ /* client is NOT readable, backend1 is not readable, backend 2 becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend2Desc);
+ }},
/* no more response ready yet from backend 1 */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading response (3) from the second backend (2) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData,&backend1Desc,&backend2Desc](int desc) {
- (void)desc;
- /* backend 2 is no longer readable, backend 1 becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend2Desc);
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend1Desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData, &backend1Desc, &backend2Desc](int desc) {
+ (void)desc;
+ /* backend 2 is no longer readable, backend 1 becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend2Desc);
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend1Desc);
+ }},
/* no more response ready yet from backend 2 */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading response (5) from the first backend (1) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&threadData,&backend1Desc,&backend2Desc](int desc) {
- (void)desc;
- /* backend 1 is no longer readable, backend 2 becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend2Desc);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&threadData, &backend1Desc, &backend2Desc](int desc) {
+ (void)desc;
+ /* backend 1 is no longer readable, backend 2 becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend1Desc);
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backend2Desc);
+ }},
/* no more response ready yet from backend 1 */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading response (4) from the second backend (2) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size(), [&threadData,&backend2Desc](int desc) {
- (void)desc;
- /* backend 2 is no longer readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend2Desc);
- /* client becomes readable */
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size(), [&threadData, &backend2Desc](int desc) {
+ (void)desc;
+ /* backend 2 is no longer readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(backend2Desc);
+ /* client becomes readable */
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backends */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend1](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
bool timeout = false;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* sending query to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet, but mark the descriptor as ready */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData](int desc) {
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(desc);
+ }},
/* nothing more from the client either */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0},
/* reading response (1) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size()},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size()},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size()},
/* reading response (2) from the backend */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size(), [&threadData](int desc) {
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* sending it to the client. we don't have anything else to send to the client, no new query from it either, until we time out */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&timeout](int desc) {
- (void)desc;
- timeout = true;
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&timeout](int desc) {
+ (void)desc;
+ timeout = true;
+ }},
/* closing a connection to the backend */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
pwQ.getHeader()->rd = 1;
pwQ.getHeader()->id = counter;
uint16_t querySize = static_cast<uint16_t>(query.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes, sizeBytes + 2);
totalQueriesSize += query.size();
++counter;
pwR.commit();
uint16_t responseSize = static_cast<uint16_t>(response.size());
- const uint8_t sizeBytes[] = { static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256) };
+ const uint8_t sizeBytes[] = {static_cast<uint8_t>(responseSize / 256), static_cast<uint8_t>(responseSize % 256)};
response.insert(response.begin(), sizeBytes, sizeBytes + 2);
totalResponsesSize += response.size();
++counter;
expectedWriteBuffer.insert(expectedWriteBuffer.end(), responses.at(4).begin(), responses.at(4).end());
expectedWriteBuffer.insert(expectedWriteBuffer.end(), responses.at(3).begin(), responses.at(3).end());
- std::vector<int> backendDescriptors = { -1, -1, -1, -1, -1 };
+ std::vector<int> backendDescriptors = {-1, -1, -1, -1, -1};
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
/* reading a query from the client (1) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
/* opening a connection to the backend (1) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
- backendDescriptors.at(0) = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
+ backendDescriptors.at(0) = desc;
+ }},
/* sending query (1) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(0).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (2) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
/* opening a connection to the backend (2) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
- backendDescriptors.at(1) = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
+ backendDescriptors.at(1) = desc;
+ }},
/* sending query (2) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(1).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (3) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(2).size() - 2},
/* opening a connection to the backend (3) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
- backendDescriptors.at(2) = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
+ backendDescriptors.at(2) = desc;
+ }},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(2).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (4) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(3).size() - 2},
/* opening a connection to the backend (4) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
- backendDescriptors.at(3) = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
+ backendDescriptors.at(3) = desc;
+ }},
/* sending query (3) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(3).size()},
/* no response ready yet */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0},
/* reading a query from the client (5) */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(4).size() - 2},
/* opening a connection to the backend (5) */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
- backendDescriptors.at(4) = desc;
- } },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done, 0, [&backendDescriptors](int desc) {
+ backendDescriptors.at(4) = desc;
+ }},
/* sending query (5) to the backend */
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size() },
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, queries.at(4).size()},
/* no response ready yet, client stops being readable, first backend has a response */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData,&backendDescriptors](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(0));
- } },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::NeedRead, 0, [&threadData, &backendDescriptors](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(0));
+ }},
/* trying to read from the client but nothing yet */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0 , [&threadData](int desc) {
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
- } },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&threadData](int desc) {
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setNotReady(desc);
+ }},
/* reading response (1) from the first backend (1) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(0).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData,&backendDescriptors](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(2));
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(0).size(), [&threadData, &backendDescriptors](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(2));
+ }},
/* reading response (3) from the third backend (3) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(2).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData,&backendDescriptors](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(1));
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(2).size(), [&threadData, &backendDescriptors](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(1));
+ }},
/* reading response (2) from the second backend (2) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(1).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData,&backendDescriptors](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(4));
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(1).size(), [&threadData, &backendDescriptors](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(4));
+ }},
/* reading response (5) from the fifth backend (5) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(4).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&threadData,&backendDescriptors](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(3));
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(4).size(), [&threadData, &backendDescriptors](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(backendDescriptors.at(3));
+ }},
/* reading response (4) from the fourth backend (4) */
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2 },
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, responses.at(3).size() - 2},
/* sending it to the client */
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size(), [&threadData](int desc) {
- (void)desc;
- dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
- } },
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, responses.at(3).size(), [&threadData](int desc) {
+ (void)desc;
+ dynamic_cast<MockupFDMultiplexer*>(threadData.mplexer.get())->setReady(-1);
+ }},
/* client closes the connection */
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0 },
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 0},
/* closing client connection */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done},
/* closing a connection to the backends */
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::closeBackend, IOState::Done },
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
}
bool timeout = false;
- s_steps = { { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&timeout](int desc) {
+ s_steps = {{ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(0).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, queries.at(1).size() - 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::NeedRead, 0, [&timeout](int desc) {
(void)desc;
timeout = true;
}},
- /* close the connection with the client */
- { ExpectedStep::ExpectedRequest::closeClient, IOState::Done }
- };
+ /* close the connection with the client */
+ {ExpectedStep::ExpectedRequest::closeClient, IOState::Done}};
s_processQuery = [backend](DNSQuestion& dq, std::shared_ptr<DownstreamState>& selectedBackend) -> ProcessQueryResult {
selectedBackend = backend;
pwQ.getHeader()->id = 0;
auto querySize = static_cast<uint16_t>(query.size());
- const std::array<uint8_t, 2> sizeBytes{ static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256) };
+ const std::array<uint8_t, 2> sizeBytes{static_cast<uint8_t>(querySize / 256), static_cast<uint8_t>(querySize % 256)};
query.insert(query.begin(), sizeBytes.begin(), sizeBytes.end());
auto backend = std::make_shared<DownstreamState>(getBackendAddress("42", 53));
s_backendReadBuffer = query;
s_steps = {
- { ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2 },
+ {ExpectedStep::ExpectedRequest::handshakeClient, IOState::Done},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromClient, IOState::Done, query.size() - 2},
/* opening a connection to the backend */
- { ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done },
- { ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size() },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2 },
- { ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2 },
- { ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size() },
+ {ExpectedStep::ExpectedRequest::connectToBackend, IOState::Done},
+ {ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, query.size()},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, 2},
+ {ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, query.size() - 2},
+ {ExpectedStep::ExpectedRequest::writeToClient, IOState::Done, query.size()},
};
for (size_t idx = 1; idx < nbQueries; idx++) {
appendPayloadEditingID(s_readBuffer, query, idx);