Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def getIPInfo(addon):
# Generate request to find out where this IP is based
# Return ip info source, ip, location, isp
source = addon.getSetting("ip_info_source")
if (not source in getIPSources()):
addon.setSetting("ip_info_source", getIPSources()[0])
source = getIPSources()[0]
original_source = source
if isAutoSelect(source):
source = getAutoSource()
retry = 0
bad_response = False
services_used = 1
while retry < 6:
debugTrace("Getting IP info from " + source)
start_time = int(time.time())
ip, country, region, city, isp = getIPInfoFrom(source)
end_time = int(time.time())
response_time = end_time - start_time
debugTrace("Got response, IP is " + ip + ", response time in seconds is " + str(response_time))
if ip == "no info":
# Got a response but couldn't format it. No point retrying, move to next service or quit
if isAutoSelect(original_source):
ip, country, region, city, isp = getIPInfoFrom(source)
end_time = int(time.time())
response_time = end_time - start_time
debugTrace("Got response, IP is " + ip + ", response time in seconds is " + str(response_time))
if ip == "no info":
# Got a response but couldn't format it. No point retrying, move to next service or quit
if isAutoSelect(original_source):
errorTrace("common.py", "No location information was returned for IP using " + source + ", using next service")
source = getNextSource(source)
else:
errorTrace("common.py", "No location information was returned for IP using " + source)
break
elif ip == "error" or ip == "no response":
errorTrace("common.py", "Didn't get a good response from " + source)
if isAutoSelect(original_source):
# Only want to retry if this is the first time we've seen an error (recently) otherwise
# we assume it was broken before and it's still broken now and move to the next
if getErrorValue(getIndex(source)) > 1:
source = getNextSource(source)
if ip == "no response": services_used += 1
else:
debugTrace("Retrying " + source + ", in 3 seconds")
xbmc.sleep(3000)
else:
# Only want to retry 2 times if it's not auto select as service is likely broken rather than busy
if retry == 2: break
else:
# Worked, exit loop
break
retry = retry + 1
source = getAutoSource()
retry = 0
bad_response = False
services_used = 1
while retry < 6:
debugTrace("Getting IP info from " + source)
start_time = int(time.time())
ip, country, region, city, isp = getIPInfoFrom(source)
end_time = int(time.time())
response_time = end_time - start_time
debugTrace("Got response, IP is " + ip + ", response time in seconds is " + str(response_time))
if ip == "no info":
# Got a response but couldn't format it. No point retrying, move to next service or quit
if isAutoSelect(original_source):
errorTrace("common.py", "No location information was returned for IP using " + source + ", using next service")
source = getNextSource(source)
else:
errorTrace("common.py", "No location information was returned for IP using " + source)
break
elif ip == "error" or ip == "no response":
errorTrace("common.py", "Didn't get a good response from " + source)
if isAutoSelect(original_source):
# Only want to retry if this is the first time we've seen an error (recently) otherwise
# we assume it was broken before and it's still broken now and move to the next
if getErrorValue(getIndex(source)) > 1:
source = getNextSource(source)
if ip == "no response": services_used += 1
else:
debugTrace("Retrying " + source + ", in 3 seconds")
xbmc.sleep(3000)