static long ParsePorts (string ports)
{
long mask = 0;
int sep = ports.IndexOf ('-');
if (sep >= 0) {
// range
ushort from = ParsePort (ports.Substring (0, sep));
ushort to = ParsePort (ports.Substring (sep + 1));
for (int port = from; port <= to; port++)
mask |= (long) (1ul << (port - AccessPolicy.MinPort));
} else {
// single
ushort port = ParsePort (ports);
mask |= (long) (1ul << (port - AccessPolicy.MinPort));
}
return mask;
}