-portblock: PORT '{' portitems '}' ';'
-{
- if (port > 0 && port <= 0xFFFF)
- add_listener(port, host, pass, tconn, tping);
- else
- parse_error("Port %d is out of range", port);
- MyFree(host);
+portblock: PORT '{' portitems '}' ';' {
+ struct ListenerFlags flags_here;
+ struct SLink *link;
+ if (hosts == NULL) {
+ struct SLink *link;
+ link = make_link();
+ DupString(link->value.cp, "*");
+ link->flags = 0;
+ link->next = hosts;
+ hosts = link;
+ }
+ for (link = hosts; link != NULL; link = link->next) {
+ memcpy(&flags_here, &listen_flags, sizeof(flags_here));
+ switch (link->flags & (USE_IPV4 | USE_IPV6)) {
+ case USE_IPV4:
+ FlagSet(&flags_here, LISTEN_IPV4);
+ break;
+ case USE_IPV6:
+ FlagSet(&flags_here, LISTEN_IPV6);
+ break;
+ default: /* 0 or USE_IPV4|USE_IPV6 */
+ FlagSet(&flags_here, LISTEN_IPV4);
+ FlagSet(&flags_here, LISTEN_IPV6);
+ break;
+ }
+ if (link->flags & 65535)
+ port = link->flags & 65535;
+ add_listener(port, link->value.cp, pass, &flags_here);
+ }
+ free_slist(&hosts);