def _get_ip_functions()

in msticpy/datamodel/pivot_ti_provider.py [0:0]


def _get_ip_functions(ioc_type_supp, ti_lookup):
    """Get functions for IP IoC Types."""
    # Special case for ipv4 and ipv6
    # we want to merge these into "ip" if these are equivalent
    ioc_queries = defaultdict(dict)
    # Special case for ipv4 and ipv6 - we want to merge these into "ip" if these are equivalent
    ip_types = {"ipv4", "ipv6"}
    ip_all_provs = [
        prov for prov, supp_types in ioc_type_supp.items() if ip_types & supp_types
    ]

    # Register providers where IP v4 and v6 are equivalent, or only support ipv4, as "ip"
    ip_gen_provs = [
        prov
        for prov in ip_all_provs
        if _prov_ipv4v6_equal(ti_lookup.loaded_providers.get(prov))
        or "ipv6" not in ioc_type_supp[prov]
    ]

    _, func_name, func = _create_lookup_func(ti_lookup, "ipv4", "ip", ip_gen_provs)
    ioc_queries["ip"][func_name] = func

    # Also register IP v4 and v6 specific queries
    ip_v4_provs = [
        prov
        for prov in ip_all_provs
        if "ipv4" in ioc_type_supp[prov]
        if prov not in ip_gen_provs
    ]
    _, func_name, func = _create_lookup_func(ti_lookup, "ipv4", "ipv4", ip_v4_provs)
    ioc_queries["ipv4"][func_name] = func

    ip_v6_provs = [
        prov
        for prov in ip_all_provs
        if "ipv6" in ioc_type_supp[prov]
        if prov not in ip_gen_provs
    ]
    _, func_name, func = _create_lookup_func(ti_lookup, "ipv6", "ipv6", ip_v6_provs)
    ioc_queries["ipv6"][func_name] = func

    return ioc_queries