[systemd-devel] [RFC 5/6] proxy-discoveryd: Add the basic parts for handling DBus methods
Lennart Poettering
lennart at poettering.net
Sun Apr 12 12:59:35 PDT 2015
On Sun, 12.04.15 12:53, Marcel Holtmann (marcel at holtmann.org) wrote:
> Hi Lennart,
>
> >>>> +
> >>>> +static int method_find_proxy(sd_bus *bus, sd_bus_message *message, void *userdata, sd_bus_error *error) {
> >>>> + _cleanup_free_ char *p = strdup("DIRECT");
> >>>
> >>> Please don't mix variable declarations and function invocations in one
> >>> line (also see CODING_STYLE). Also, missing OOM check...
> >>>
> >>>> + Manager *m = userdata;
> >>>> + int r;
> >>>> +
> >>>> + assert(bus);
> >>>> + assert(message);
> >>>> + assert(m);
> >>>> +
> >>>> + r = proxy_execute(m->default_proxies, message);
> >>>> + if (r < 0)
> >>>> + sd_bus_reply_method_return(message, "s", p);
> >>>
> >>> Hmm, is this right? Shouldn't we return the error code to the client
> >>> instead of eating up and returning "DIRECT"?
> >>>
> >>> Also, why allocate "DIRECT" with strdup() at all?
> >>
> >> There are no errors. Either you get a proxy directive or you return
> >> DIRECT to indicate no proxy. What would you do in an error case
> >> anyway. The backup is always assume no proxy.
> >
> > Well, so far it has been our coding styles to propagate errors up if
> > they cause the invoked operations to fail, and allow the higher up
> > code deal with them and possibly eat them up. I mean, the HTTP client
> > can eat the error up and downgrade to DIRECT on its own, there's no
> > need to do this from our side already.
>
> of course it can, but it also does not help you at all. You are not making anything better here.
>
> I think that one clean interface to this needs to be a API
> compatible libproxy. Similar to what we did in PACrunner since that
> allows existing application to just use systemd-proxydiscoverd.
Well, clients have to deal with errors anyway, since they are talking
to this via dbus. I mean, the service might simply be missing on the
system, and the client code should then downgrade to DIRECT
anyway... Hence, the right client side behaviour is to eat up *all*
error conditions, regardless if they stem from the dbus code, the
socket calls used by dbus or ultimately from the proxy discovery
daemon...
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list