static VALUE rg_lookup_service(int argc, VALUE *argv, VALUE self) { VALUE service, protocol, domain, cancellable; GError *error = NULL; GList *targets; rb_scan_args(argc, argv, "31", &service, &protocol, &domain, &cancellable); targets = g_resolver_lookup_service(_SELF(self), RVAL2CSTR(service), RVAL2CSTR(protocol), RVAL2CSTR(domain), RVAL2GCANCELLABLE(cancellable), &error); if (targets == NULL) rbgio_raise_error(error); return GLIST2ARY_UNREF_FREE(targets); }
static void lookup_one_sync (const char *arg) { GError *error = NULL; if (strchr (arg, '/')) { GList *targets; /* service/protocol/domain */ char **parts = g_strsplit (arg, "/", 3); if (!parts || !parts[2]) usage (); targets = g_resolver_lookup_service (resolver, parts[0], parts[1], parts[2], cancellable, &error); print_resolved_service (arg, targets, error); } else if (g_hostname_is_ip_address (arg)) { GInetAddress *addr = g_inet_address_new_from_string (arg); char *name; name = g_resolver_lookup_by_address (resolver, addr, cancellable, &error); print_resolved_name (arg, name, error); g_object_unref (addr); } else { GList *addresses; addresses = g_resolver_lookup_by_name (resolver, arg, cancellable, &error); print_resolved_addresses (arg, addresses, error); } }