+ if (c->state != CLIENT_IDLE)
+ return;
+
+ if ((n_args = sscanf(s, "%63s %63s", cmd, arg)) < 1 ) {
+ client_output_printf(c, "- Failed to parse command, try \"HELP\".\n");
+ c->state = CLIENT_DEAD;
+ return;
+ }
+
+ if (strcmp(cmd, "HELP") == 0) {
+ client_output_printf(c,
+ "+ Available commands are:\n"
+ "+ RESOLVE-HOSTNAME <hostname>\n"
+ "+ RESOLVE-HOSTNAME-IPV6 <hostname>\n"
+ "+ RESOLVE-HOSTNAME-IPV4 <hostname>\n"
+ "+ RESOLVE-ADDRESS <address>\n");
+ c->state = CLIENT_DEAD; }
+ else if (strcmp(cmd, "FUCK") == 0 && n_args == 1) {
+ client_output_printf(c, "FUCK: Go fuck yourself!\n");
+ c->state = CLIENT_DEAD;
+ } else if (strcmp(cmd, "RESOLVE-HOSTNAME-IPV4") == 0 && n_args == 2) {
+ c->state = CLIENT_RESOLVE_HOSTNAME;
+ c->host_name_resolver = avahi_host_name_resolver_new(avahi_server, -1, AF_UNSPEC, arg, AF_INET, host_name_resolver_callback, c);
+ } else if (strcmp(cmd, "RESOLVE-HOSTNAME-IPV6") == 0 && n_args == 2) {
+ c->state = CLIENT_RESOLVE_HOSTNAME;
+ c->host_name_resolver = avahi_host_name_resolver_new(avahi_server, -1, AF_UNSPEC, arg, AF_INET6, host_name_resolver_callback, c);
+ } else if (strcmp(cmd, "RESOLVE-HOSTNAME") == 0 && n_args == 2) {
+ c->state = CLIENT_RESOLVE_HOSTNAME;
+ c->host_name_resolver = avahi_host_name_resolver_new(avahi_server, -1, AF_UNSPEC, arg, AF_UNSPEC, host_name_resolver_callback, c);
+ } else if (strcmp(cmd, "RESOLVE-ADDRESS") == 0 && n_args == 2) {
+ AvahiAddress addr;
+
+ if (!(avahi_address_parse(arg, AF_UNSPEC, &addr))) {
+ client_output_printf(c, "- Failed to parse address \"%s\".\n", arg);
+ c->state = CLIENT_DEAD;
+ } else {
+ c->state = CLIENT_RESOLVE_ADDRESS;
+ c->address_resolver = avahi_address_resolver_new(avahi_server, -1, AF_UNSPEC, &addr, address_resolver_callback, c);
+ }
+ } else {
+ client_output_printf(c, "- Invalid command \"%s\", try \"HELP\".\n", cmd);
+ c->state = CLIENT_DEAD;
+ }