X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fuser-event.c;h=8cad1a91a624f5f55cd17d49858edfab3820133c;hp=1f7004509041123091ff85b9234c7e8b08133fed;hb=999fd1a2053421b55cdd876049c40beb2921807f;hpb=edcfca78ac49793e295ac97328942321f39e3996 diff --git a/discover/user-event.c b/discover/user-event.c index 1f70045..8cad1a9 100644 --- a/discover/user-event.c +++ b/discover/user-event.c @@ -54,6 +54,8 @@ static const char *event_action_name(enum event_action action) return "add"; case EVENT_ACTION_REMOVE: return "remove"; + case EVENT_ACTION_URL: + return "url"; case EVENT_ACTION_DHCP: return "dhcp"; default: @@ -430,6 +432,18 @@ static int user_event_remove(struct user_event *uev, struct event *event) return 0; } +static int user_event_url(struct user_event *uev, struct event *event) +{ + struct device_handler *handler = uev->handler; + const char *url; + + url = event_get_param(event, "url"); + if (url) + device_handler_process_url(handler, url); + + return 0; +} + static void user_event_handle_message(struct user_event *uev, char *buf, int len) { @@ -453,6 +467,9 @@ static void user_event_handle_message(struct user_event *uev, char *buf, case EVENT_ACTION_REMOVE: result = user_event_remove(uev, event); break; + case EVENT_ACTION_URL: + result = user_event_url(uev, event); + break; case EVENT_ACTION_CONF: result = user_event_conf(uev, event); break; @@ -471,10 +488,10 @@ static void user_event_handle_message(struct user_event *uev, char *buf, static int user_event_process(void *arg) { struct user_event *uev = arg; - char buf[PBOOT_USER_EVENT_SIZE]; + char buf[PBOOT_USER_EVENT_SIZE + 1]; int len; - len = recvfrom(uev->socket, buf, sizeof(buf), 0, NULL, NULL); + len = recvfrom(uev->socket, buf, PBOOT_USER_EVENT_SIZE, 0, NULL, NULL); if (len < 0) { pb_log("%s: socket read failed: %s", __func__, strerror(errno)); @@ -486,6 +503,8 @@ static int user_event_process(void *arg) return 0; } + buf[len] = '\0'; + pb_debug("%s: %u bytes\n", __func__, len); user_event_handle_message(uev, buf, len);