Also zurück zum Thema, ich bin das gerade mal mit unserem Programmierer durchgegangen.
Er würde das Template folgendermaßen anpassen:
Code: Alles auswählen
global depotSelectionAlgorithmByNetworkAddress
depotSelectionAlgorithmByNetworkAddress = \
'''
def selectDepot(clientConfig, masterDepot, alternativeDepots=[]):
selectedDepot = masterDepot
logger.info(u"Choosing depot from list of depots:")
logger.info(u" Master depot: %s" % masterDepot)
for alternativeDepot in alternativeDepots:
logger.info(u" Alternative depot: %s" % alternativeDepot)
if alternativeDepots:
import socket, struct
# Calculate bitmask of host's ipaddress
n = clientConfig['ipAddress'].split('.')
for i in range(4):
n[i] = forceInt(n[i])
ip = (n[0] << 24) + (n[1] << 16) + (n[2] << 8) + n[3]
depots = [ masterDepot ]
depots.extend(alternativeDepots)
for depot in depots:
if not depot.networkAddress:
logger.warning(u"Network address of depot '%s' not known" % depot)
continue
// ÄNDERUNG:
networkAddresses = depot.networkAddress.split(u',')
for networkAddress in networkAddresses:
(network, netmask) = networkAddress.split(u'/')
while (network.count('.') < 3):
network = network + u'.0'
if (netmask.find('.') == -1):
netmask = forceUnicode(socket.inet_ntoa(struct.pack('>I',0xffffffff ^ (1 << 32 - forceInt(netmask)) - 1)))
while (netmask.count('.') < 3):
netmask = netmask + u'.0'
logger.debug(u"Testing if ip %s is part of network %s/%s" % (clientConfig['ipAddress'], network, netmask))
n = network.split('.')
for i in range(4):
n[i] = int(n[i])
network = (n[0] << 24) + (n[1] << 16) + (n[2] << 8) + n[3]
n = netmask.split('.')
for i in range(4):
n[i] = int(n[i])
netmask = (n[0] << 24) + (n[1] << 16) + (n[2] << 8) + n[3]
wildcard = netmask ^ 0xFFFFFFFFL
if (wildcard | ip == wildcard | network):
logger.notice(u"Choosing depot with networkAddress %s for ip %s" % (depot.networkAddress, clientConfig['ipAddress']))
selectedDepot = depot
return selectedDepot
else:
logger.info(u"IP %s does not match networkAddress %s of depot %s" % (clientConfig['ipAddress'], depot.networkAddress, depot))
return selectedDepot
'''
Leider kann ich es nicht testen, da configed das Format der Eingabe fest vorgibt:
Kann UIB hier unterstützen?