#!/usr/bin/env bash
set -e

FAILED_ASN=0
TOTAL_ASN=0

function processing_list() {
	local LIST_MERGED="/tmp/list_m"
	local LIST6_MERGED="/tmp/list6_m"

	echo "(2) Processing IP addresses..."
	./mergeipaddrlist.py "$1" > $LIST_MERGED
	./mergeipaddrlist.py "$2" > $LIST6_MERGED
	./ipaddr2list.py "$LIST_MERGED" "$3" "$LIST6_MERGED" > "$4"
	rm -f $LIST_MERGED $LIST6_MERGED
}

function create_list() {
	LIST=/tmp/list
	LIST6=/tmp/list6

	for i in "${@:4}"; do
		TOTAL_ASN=$(( TOTAL_ASN + 1 ))
		if ! ./get_routes_by_asn.sh "$i" >> $LIST; then
			echo "Could not fetch route for ${i} (${1})"
			FAILED_ASN=$(( FAILED_ASN + 1 ))
		fi
		if ! ./get_routes6_by_asn.sh "$i" >> $LIST6; then
			echo "Could not fetch route6 for ${i} (${1})"
			FAILED_ASN=$(( FAILED_ASN + 1 ))
		fi
	done

	#TODO: ipv6 addresses
	if [ ! -z "$3" ];  then
	    # Split comma separated list of additional networks to add
	    echo "$3" | tr "," "\n" >> $LIST
	fi

	processing_list "$LIST" "$LIST6" "$1" "$2"
	rm -f $LIST $LIST6
}

cd "$(dirname "${0}")" || exit 1
. ./common.sh || exit 1

echo "(1) Downloading Apple routes..."
DEST="../src/lib/inc_generated/ndpi_asn_apple.c.inc"
create_list NDPI_PROTOCOL_APPLE $DEST "" "AS714" "AS6185" "AS2709"
echo "(3) Apple IPs are available in $DEST"

echo "(1) Downloading Facebook routes..."
DEST=../src/lib/inc_generated/ndpi_asn_facebook.c.inc
create_list NDPI_PROTOCOL_FACEBOOK $DEST "" "AS63293" "AS54115" "AS34825" "AS32934"
echo "(3) Facebook IPs are available in $DEST"

echo "(1) Downloading Netflix routes..."
DEST=../src/lib/inc_generated/ndpi_asn_netflix.c.inc
create_list NDPI_PROTOCOL_NETFLIX $DEST "" "AS55095" "AS40027" "AS394406" "AS2906"
echo "(3) Netflix IPs are available in $DEST"

echo "(1) Downloading Teamviewer routes..."
DEST=../src/lib/inc_generated/ndpi_asn_teamviewer.c.inc
create_list NDPI_PROTOCOL_TEAMVIEWER $DEST "" "AS43304" "AS212710" "AS208187" "AS208175"
echo "(3) Teamviewer IPs are available in $DEST"

echo "(1) Downloading Telegram routes..."
DEST=../src/lib/inc_generated/ndpi_asn_telegram.c.inc
create_list NDPI_PROTOCOL_TELEGRAM $DEST "" "AS62041" "AS62014" "AS59930" "AS44907" "AS211157"
echo "(3) Telegram IPs are available in $DEST"

echo "(1) Downloading Twitter routes..."
DEST=../src/lib/inc_generated/ndpi_asn_twitter.c.inc
create_list NDPI_PROTOCOL_TWITTER $DEST "" "AS63179" "AS54888" "AS35995" "AS13414"
echo "(3) Twitter IPs are available in $DEST"

echo "(1) Downloading Webex routes..."
DEST=../src/lib/inc_generated/ndpi_asn_webex.c.inc
create_list NDPI_PROTOCOL_WEBEX $DEST "" "AS6577" "AS399937" "AS16472" "AS13445"
echo "(3) Webex IPs are available in $DEST"

echo "(1) Downloading Tencent routes..."
DEST=../src/lib/inc_generated/ndpi_asn_tencent.c.inc
create_list NDPI_PROTOCOL_TENCENT $DEST "" "AS45090" "AS137876" "AS133478" "AS132591" "AS132203"
echo "(3) Tencent IPs are available in $DEST"

echo "(1) Downloading OpenDNS routes..."
DEST=../src/lib/inc_generated/ndpi_asn_opendns.c.inc
create_list NDPI_PROTOCOL_OPENDNS $DEST "" "AS36692" "AS30607"
echo "(3) OpenDNS IPs are available in $DEST"

echo "(1) Downloading Dropbox routes..."
DEST=../src/lib/inc_generated/ndpi_asn_dropbox.c.inc
create_list NDPI_PROTOCOL_DROPBOX $DEST "" "AS62190" "AS54372" "AS393874" "AS203719" "AS200499" "AS19679"
echo "(3) Dropbox IPs are available in $DEST"

echo "(1) Downloading Starcraft routes..." #Starcraft or a more generic Blizzard stuff?
DEST=../src/lib/inc_generated/ndpi_asn_starcraft.c.inc
create_list NDPI_PROTOCOL_STARCRAFT $DEST "" "AS57976" "AS32163"
echo "(3) Starcraft IPs are available in $DEST"

echo "(1) Downloading UbuntuOne routes..." #Canonical
DEST=../src/lib/inc_generated/ndpi_asn_ubuntuone.c.inc
create_list NDPI_PROTOCOL_UBUNTUONE $DEST "" "AS41231" "AS11210"
echo "(3) UbuntuOne IPs are available in $DEST"

echo "(1) Downloading Twitch routes..."
DEST=../src/lib/inc_generated/ndpi_asn_twitch.c.inc
create_list NDPI_PROTOCOL_TWITCH $DEST "" "AS46489" "AS397153"
echo "(3) Twitch IPs are available in $DEST"

echo "(1) Downloading Hotspot Shield routes..." #AnchorFree
DEST=../src/lib/inc_generated/ndpi_asn_hotspotshield.c.inc
create_list NDPI_PROTOCOL_HOTSPOT_SHIELD $DEST "" "AS26642"
echo "(3) Hotspot Shield IPs are available in $DEST"

echo "(1) Downloading GitHub routes..."
DEST=../src/lib/inc_generated/ndpi_asn_github.c.inc
create_list NDPI_PROTOCOL_GITHUB $DEST "" "AS36459"
echo "(3) GitHub IPs are available in $DEST"

echo "(1) Downloading Steam routes..." #Valve
DEST=../src/lib/inc_generated/ndpi_asn_steam.c.inc
create_list NDPI_PROTOCOL_STEAM $DEST "" "AS32590"
echo "(3) Steam IPs are available in $DEST"

echo "(1) Downloading Bloomberg routes..."
DEST=../src/lib/inc_generated/ndpi_asn_bloomberg.c.inc
create_list NDPI_PROTOCOL_BLOOMBERG $DEST "" "AS8188" "AS58850" "AS33220" "AS33181" "AS199559" "AS17063" "AS13908" "AS10361"
echo "(3) Bloomberg IPs are available in $DEST"

echo "(1) Downloading Edgecast routes..."
DEST=../src/lib/inc_generated/ndpi_asn_edgecast.c.inc
create_list NDPI_PROTOCOL_EDGECAST $DEST "" "AS15133"
echo "(3) Edgecast IPs are available in $DEST"

echo "(1) Downloading LogMeIn/GoTo..."
DEST=../src/lib/inc_generated/ndpi_asn_goto.c.inc
create_list NDPI_PROTOCOL_GOTO $DEST "" "AS395424" "AS21866" "AS213380" "AS20104" "AS16815"
echo "(3) LogMeIn/GoTo IPs are available in $DEST"

echo "(1) Downloading RiotGames..."
DEST=../src/lib/inc_generated/ndpi_asn_riotgames.c.inc
create_list NDPI_PROTOCOL_RIOTGAMES $DEST "" "AS6507"
echo "(3) RiotGames IPs are available in $DEST"

echo "(1) Downloading Threema..."
DEST=../src/lib/inc_generated/ndpi_asn_threema.c.inc
create_list NDPI_PROTOCOL_THREEMA $DEST "" "AS29691"
echo "(3) Threema IPs are available in $DEST"

echo "(1) Downloading AliBaba..."
DEST=../src/lib/inc_generated/ndpi_asn_alibaba.c.inc
create_list NDPI_PROTOCOL_ALIBABA $DEST "" "AS59055" "AS59054" "AS59053" "AS59052" "AS59051" "AS59028" "AS45104" "AS45103" "AS45102" "AS37963" "AS34947" "AS211914" "AS134963"
echo "(3) AliBaba IPs are available in $DEST"

echo "(1) Downloading AVAST..."
DEST=../src/lib/inc_generated/ndpi_asn_avast.c.inc
create_list NDPI_PROTOCOL_AVAST $DEST "" "AS198605"
echo "(3) AVAST IPs are available in $DEST"

echo "(1) Downloading Discord..."
DEST=../src/lib/inc_generated/ndpi_asn_discord.c.inc
create_list NDPI_PROTOCOL_DISCORD $DEST "" "AS49544"
echo "(3) Discord IPs are available in $DEST"

echo "(1) Downloading LINE..."
DEST=../src/lib/inc_generated/ndpi_asn_line.c.inc
create_list NDPI_PROTOCOL_LINE $DEST "125.209.252.0/24" "AS38631"
echo "(3) Line IPs are available in $DEST"

echo "(1) Downloading VK..."
DEST=../src/lib/inc_generated/ndpi_asn_vk.c.inc
create_list NDPI_PROTOCOL_VK $DEST "" "AS47541"
echo "(3) VK IPs are available in $DEST"

echo "(1) Downloading Yandex..."
DEST=../src/lib/inc_generated/ndpi_asn_yandex.c.inc
create_list NDPI_PROTOCOL_YANDEX $DEST "" "AS44534" "AS207207" "AS202611" "AS13238"
echo "(3) Yandex IPs are available in $DEST"

echo "(1) Downloading Yandex Cloud..."
DEST=../src/lib/inc_generated/ndpi_asn_yandex_cloud.c.inc
create_list NDPI_PROTOCOL_YANDEX_CLOUD $DEST "" "AS210656" "AS200350"
echo "(3) Yandex Cloud IPs are available in $DEST"

echo "(1) Downloading Disney+..." #Only "Disney Streaming Services"
DEST=../src/lib/inc_generated/ndpi_asn_disney_plus.c.inc
create_list NDPI_PROTOCOL_DISNEYPLUS $DEST "" "AS400805" "AS398849" "AS22604" "AS11251"
echo "(3) Disney+ IPs are available in $DEST"

echo "(1) Downloading Hulu..."
DEST=../src/lib/inc_generated/ndpi_asn_hulu.c.inc
create_list NDPI_PROTOCOL_HULU $DEST "" "AS23286"
echo "(3) Hulu IPs are available in $DEST"

echo "(1) Downloading EpicGames.."
DEST=../src/lib/inc_generated/ndpi_asn_epicgames.c.inc
create_list NDPI_PROTOCOL_EPICGAMES $DEST "" "AS4356" "AS397645" "AS395701" "AS393326"
echo "(3) EpicGames IPs are available in $DEST"

echo "(1) Downloading Nvidia..."
DEST=../src/lib/inc_generated/ndpi_asn_nvidia.c.inc
create_list NDPI_PROTOCOL_NVIDIA $DEST "" "AS60977" "AS50889" "AS20347" "AS11414"
echo "(3) Nvidia IPs are available in $DEST"

echo "(1) Downloading Roblox..."
DEST=../src/lib/inc_generated/ndpi_asn_roblox.c.inc
create_list NDPI_PROTOCOL_ROBLOX $DEST "" "AS22697"
echo "(3) Roblox IPs are available in $DEST"

if [ ${TOTAL_ASN} -eq 0 ] || [ ${TOTAL_ASN} -eq ${FAILED_ASN} ]; then
	printf '%s: %s\n' "${0}" "All download(s) failed, ./get_routes_by_asn.sh broken?"
	exit 1
else
	exit 0
fi