Mercurial > louis > mq > lightsd
changeset 225:b9be1fdb2f6b
and revert that god damn encoding "fix"
encoding a packet is not an idempotent operation...
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Sat, 08 Aug 2015 01:57:57 -0700 |
parents | af22394620e9 |
children | 339f289c4508 |
files | add_command_pipe.patch add_tag_and_untag.patch fix_usage_and_version.patch pass_pkt_info_around.patch properly_encode_packets_payload.patch remove_assert_on_request_id.patch series |
diffstat | 7 files changed, 1024 insertions(+), 950 deletions(-) [+] |
line wrap: on
line diff
--- a/add_command_pipe.patch Sat Aug 08 01:13:52 2015 -0700 +++ b/add_command_pipe.patch Sat Aug 08 01:57:57 2015 -0700 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 1bf59939e3a0b2c9ab7c201ae836662322cd9fb8 +# Parent 51336c56c6a8d78e341c3aef261c9014d41823eb Add support for a write-only command pipe for easy scripting You can just dump simple JSON-RPC calls in it, it will pair nicely with @@ -593,6 +593,86 @@ lgtd_client_end_send_response(client); lgtd_router_device_list_free(devices); +diff --git a/tests/lightsc b/examples/lightsc.py +rename from tests/lightsc +rename to examples/lightsc.py +diff --git a/examples/lightsc.sh b/examples/lightsc.sh +new file mode 100644 +--- /dev/null ++++ b/examples/lightsc.sh +@@ -0,0 +1,72 @@ ++#!/bin/sh ++ ++# Here is an example script that dims bulbs to a warm orange: ++ ++# #!/bin/sh ++# ++# # Optional (default value: /run/lightsd.cmd): ++# COMMAND_PIPE=/foo/bar/lightsd.cmd ++# ++# . /usr/lib/lightsd/lightsc.sh ++# ++# lightsc set_light_from_hsbk ${*:-'"*"'} 37.469443 1.0 0.05 3500 600 ++ ++# Here is how you could use it: ++# ++# - dim all the bulbs: orange ++# - dim the bulb named kitchen: orange '"kitchen"' ++# - dim the bulb named kitchen and the bulbs tagged bedroom: ++# orange '["kitchen", "#bedroom"]' ++# ++# You can also load this file directly in your shell rc configuration file. ++# ++# NOTE: Keep in mind that arguments must be JSON, you will have to enclose ++# tags and labels into double quotes '"likethis"'. Also keep in mind ++# that the pipe is write-only you cannot read any result back. ++ ++_b64e() { ++ if type base64 >/dev/null 2>&1 ; then ++ base64 ++ elif type b64encode >/dev/null 2>&1 ; then ++ b64encode ++ else ++ cat >/dev/null ++ echo null ++ fi ++} ++ ++_gen_request_id() { ++ if type dd >/dev/null 2>&1 ; then ++ printf '"%s"' `dd if=/dev/urandom bs=8 count=1 2>&- | _b64e` ++ else ++ echo null ++ fi ++} ++ ++lightsc() { ++ if [ $# -lt 2 ] ; then ++ echo >&2 "Usage: $0 METHOD PARAMS ..." ++ return 1 ++ fi ++ ++ local pipe=${COMMAND_PIPE:-/run/lightsd.cmd} ++ if [ ! -p $pipe ] ; then ++ echo >&2 "$pipe cannot be found, is lightsd running?" ++ return 1 ++ fi ++ ++ local method=$1 ; shift ++ local params=$1 ; shift ++ for target in $* ; do ++ params=$params,$target ++ done ++ ++ tee $pipe <<EOF ++{ ++ "jsonrpc": "2.0", ++ "method": "$method", ++ "params": [$params], ++ "id": `_gen_request_id` ++} ++EOF ++} diff --git a/tests/core/CMakeLists.txt b/tests/core/CMakeLists.txt --- a/tests/core/CMakeLists.txt +++ b/tests/core/CMakeLists.txt
--- a/add_tag_and_untag.patch Sat Aug 08 01:13:52 2015 -0700 +++ b/add_tag_and_untag.patch Sat Aug 08 01:57:57 2015 -0700 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 17be115f97424618760345b8372bd788a27dd4a0 +# Parent 803d8ed2122a3e2d6c5f0c6c0bfbbd6b3c5cec1c Add initial support for tag (grouping) and untag (ungrouping) It's a bit rough without an auto-retry mechanism and it doesn't seem to work @@ -301,6 +301,24 @@ + free(devices); + } } +diff --git a/examples/lightsc.py b/examples/lightsc.py +--- a/examples/lightsc.py ++++ b/examples/lightsc.py +@@ -72,6 +72,14 @@ + def get_light_state(socket, target): + return jsonrpc_call(socket, "get_light_state", [target]) + ++ ++def tag(socket, target, tag): ++ return jsonrpc_call(socket, "tag", [target, tag]) ++ ++ ++def untag(socket, target, tag): ++ return jsonrpc_call(socket, "untag", [target, tag]) ++ + if __name__ == "__main__": + s = socket.create_connection(("localhost", 1234)) + h = 0 diff --git a/lifx/bulb.c b/lifx/bulb.c --- a/lifx/bulb.c +++ b/lifx/bulb.c @@ -3039,21 +3057,3 @@ + (void)hdr; + (void)pkt; +} -diff --git a/tests/lightsc b/tests/lightsc ---- a/tests/lightsc -+++ b/tests/lightsc -@@ -72,6 +72,14 @@ - def get_light_state(socket, target): - return jsonrpc_call(socket, "get_light_state", [target]) - -+ -+def tag(socket, target, tag): -+ return jsonrpc_call(socket, "tag", [target, tag]) -+ -+ -+def untag(socket, target, tag): -+ return jsonrpc_call(socket, "untag", [target, tag]) -+ - if __name__ == "__main__": - s = socket.create_connection(("localhost", 1234)) - h = 0
--- a/fix_usage_and_version.patch Sat Aug 08 01:13:52 2015 -0700 +++ b/fix_usage_and_version.patch Sat Aug 08 01:57:57 2015 -0700 @@ -1,7 +1,30 @@ # HG changeset patch -# Parent 0a70598874618551b57f92c9f8fb83769a04487f +# Parent d0442b5bc172c3841cc5a2b577d4ffdf311c9116 UI/Cosmetic fixes +diff --git a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -35,7 +35,9 @@ + INCLUDE(AddAllSubdirectories) + INCLUDE(AddTestFromSources) + +-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -Wextra -Wall -Wstrict-prototypes -std=c99") ++SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} -pipe") ++SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra -Wall -Wstrict-prototypes -std=c99") ++SET(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} "") + + ADD_DEFINITIONS( + # Only relevant for the GNU libc: +@@ -55,7 +57,7 @@ + IF (CMAKE_BUILD_TYPE MATCHES "DEBUG") + ADD_DEFINITIONS("-DQUEUE_MACRO_DEBUG=1") + IF (CMAKE_COMPILER_IS_GNUCC) +- ADD_DEFINITIONS("-g3" "-ggdb") ++ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -ggdb") + ENDIF () + ENDIF () + diff --git a/core/lightsd.c b/core/lightsd.c --- a/core/lightsd.c +++ b/core/lightsd.c @@ -36,12 +59,14 @@ diff --git a/core/version.h.in b/core/version.h.in --- a/core/version.h.in +++ b/core/version.h.in -@@ -29,4 +29,7 @@ +@@ -29,4 +29,9 @@ #pragma once -const char LGTD_VERSION[] = "@LGTD_VERSION@"; +const char LGTD_VERSION[] = ( + "@LIGHTSD_VERSION@\n\n" ++ "cflags: @CMAKE_C_FLAGS@\n" ++ "proctitle_support: @HAVE_PROCTITLE@\n\n" + "Copyright (c) 2014, 2015, Louis Opter <kalessin@kalessin.fr>" +);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pass_pkt_info_around.patch Sat Aug 08 01:57:57 2015 -0700 @@ -0,0 +1,878 @@ +# HG changeset patch +# Parent 9f4ce61eb90c9c37e29271f680060561a36b6f44 +Pass pkt_info around instead of looking it up twice + +And do that spelling fix too. + +diff --git a/core/lightsd.c b/core/lightsd.c +--- a/core/lightsd.c ++++ b/core/lightsd.c +@@ -220,7 +220,7 @@ + argc -= optind; + argv += optind; + +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + if (!lgtd_lifx_timer_setup() || !lgtd_lifx_broadcast_setup()) { + lgtd_err(1, "can't setup lightsd"); + } +diff --git a/core/router.c b/core/router.c +--- a/core/router.c ++++ b/core/router.c +@@ -49,21 +49,19 @@ + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .tags = 0 }; + +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + struct lgtd_lifx_gateway *gw; + LIST_FOREACH(gw, &lgtd_lifx_gateways, link) { +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, + gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + struct lgtd_lifx_bulb *bulb; +@@ -76,8 +74,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("broadcasting %s", pkt_infos->name); ++ if (pkt_info) { ++ lgtd_info("broadcasting %s", pkt_info->name); + } + } + +@@ -91,19 +89,16 @@ + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = bulb->addr }; + +- const struct lgtd_lifx_packet_infos *pkt_infos; +- pkt_infos = lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_DEVICE, + target, + bulb->gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + bulb->dirty_at = lgtd_time_monotonic_msecs(); +@@ -111,7 +106,7 @@ + bulb->expected_power_on = payload->power; + } + +- lgtd_info("sending %s to %s", pkt_infos->name, lgtd_addrtoa(bulb->addr)); ++ lgtd_info("sending %s to %s", pkt_info->name, lgtd_addrtoa(bulb->addr)); + } + + void +@@ -119,7 +114,7 @@ + enum lgtd_lifx_packet_type pkt_type, + void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + + struct lgtd_lifx_site *site; + LIST_FOREACH(site, &tag->sites, link) { +@@ -130,18 +125,16 @@ + union lgtd_lifx_target target; + assert(tag == gw->tags[tag_id]); + target.tags = LGTD_LIFX_WIRE_TAG_ID_TO_VALUE(tag_id); +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_TAGS, + target, + gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + struct lgtd_lifx_bulb *bulb; +@@ -156,8 +149,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("sending %s to #%s", pkt_infos->name, tag->label); ++ if (pkt_info) { ++ lgtd_info("sending %s to #%s", pkt_info->name, tag->label); + } + } + +@@ -166,25 +159,23 @@ + enum lgtd_lifx_packet_type pkt_type, + void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + + struct lgtd_lifx_bulb *bulb; + RB_FOREACH(bulb, lgtd_lifx_bulb_map, &lgtd_lifx_bulbs_table) { + if (!strcmp(bulb->state.label, label)) { + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = bulb->addr }; +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_DEVICE, + target, + bulb->gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + bulb->dirty_at = lgtd_time_monotonic_msecs(); +@@ -194,8 +185,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("sending %s to %s", pkt_infos->name, label); ++ if (pkt_info) { ++ lgtd_info("sending %s to %s", pkt_info->name, label); + } + } + +diff --git a/lifx/broadcast.c b/lifx/broadcast.c +--- a/lifx/broadcast.c ++++ b/lifx/broadcast.c +@@ -117,9 +117,9 @@ + continue; + } + +- const struct lgtd_lifx_packet_infos *pkt_infos = +- lgtd_lifx_wire_get_packet_infos(read.hdr.packet_type); +- if (!pkt_infos) { ++ const struct lgtd_lifx_packet_info *pkt_info = ++ lgtd_lifx_wire_get_packet_info(read.hdr.packet_type); ++ if (!pkt_info) { + lgtd_warnx( + "received unknown packet %#x from [%s]:%hu", + read.hdr.packet_type, peer_addr, peer_port +@@ -129,7 +129,7 @@ + if (!(read.hdr.protocol & LGTD_LIFX_PROTOCOL_ADDRESSABLE)) { + lgtd_warnx( + "received non-addressable packet %s from [%s]:%hu", +- pkt_infos->name, peer_addr, peer_port ++ pkt_info->name, peer_addr, peer_port + ); + continue; + } +@@ -145,8 +145,8 @@ + if (gw) { + void *pkt = &read.buf[LGTD_LIFX_PACKET_HEADER_SIZE]; + gw->last_pkt_at = received_at; +- pkt_infos->decode(pkt); +- pkt_infos->handle(gw, &read.hdr, pkt); ++ pkt_info->decode(pkt); ++ pkt_info->handle(gw, &read.hdr, pkt); + } else { + lgtd_warnx( + "got packet from unknown gateway [%s]:%hu", peer_addr, peer_port +diff --git a/lifx/gateway.c b/lifx/gateway.c +--- a/lifx/gateway.c ++++ b/lifx/gateway.c +@@ -164,24 +164,24 @@ + static bool + lgtd_lifx_gateway_send_to_site_impl(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- const struct lgtd_lifx_packet_infos **pkt_infos) ++ void *pkt, ++ const struct lgtd_lifx_packet_info **pkt_info) + { + assert(gw); +- assert(pkt_infos); ++ assert(pkt_info); + + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = gw->site.as_array }; +- *pkt_infos = lgtd_lifx_wire_setup_header( ++ *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_SITE, + target, + gw->site.as_array, + pkt_type + ); +- assert(*pkt_infos); ++ assert(*pkt_info); + +- lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_type, pkt, (*pkt_infos)->size); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, *pkt_info, pkt); + + return true; // FIXME, have real return values on the send paths... + } +@@ -189,17 +189,17 @@ + static bool + lgtd_lifx_gateway_send_to_site_quiet(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + +- const struct lgtd_lifx_packet_infos *pkt_infos; ++ const struct lgtd_lifx_packet_info *pkt_info; + bool rv = lgtd_lifx_gateway_send_to_site_impl( +- gw, pkt_type, pkt, &pkt_infos ++ gw, pkt_type, pkt, &pkt_info + ); + + lgtd_debug( + "sending %s to site %s", +- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) ++ pkt_info->name, lgtd_addrtoa(gw->site.as_array) + ); + + return rv; // FIXME, have real return values on the send paths... +@@ -208,16 +208,16 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos; ++ const struct lgtd_lifx_packet_info *pkt_info; + bool rv = lgtd_lifx_gateway_send_to_site_impl( +- gw, pkt_type, pkt, &pkt_infos ++ gw, pkt_type, pkt, &pkt_info + ); + + lgtd_info( + "sending %s to site %s", +- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) ++ pkt_info->name, lgtd_addrtoa(gw->site.as_array) + ); + + return rv; // FIXME, have real return values on the send paths... +@@ -387,13 +387,12 @@ + void + lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, + const struct lgtd_lifx_packet_header *hdr, +- enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- int pkt_size) ++ const struct lgtd_lifx_packet_info *pkt_info, ++ void *pkt) + { + assert(gw); + assert(hdr); +- assert(pkt_size >= 0 && pkt_size < LGTD_LIFX_MAX_PACKET_SIZE); ++ assert(pkt_info); + assert(!memcmp(hdr->site, gw->site.as_array, LGTD_LIFX_ADDR_LENGTH)); + assert(gw->pkt_ring_head >= 0); + assert(gw->pkt_ring_head < (int)LGTD_ARRAY_SIZE(gw->pkt_ring)); +@@ -401,19 +400,18 @@ + if (gw->pkt_ring_full) { + lgtd_warnx( + "dropping packet type %s: packet queue on [%s]:%hu is full", +- lgtd_lifx_wire_get_packet_infos(pkt_type)->name, +- gw->ip_addr, gw->port ++ pkt_info->name, gw->ip_addr, gw->port + ); + return; + } + + evbuffer_add(gw->write_buf, hdr, sizeof(*hdr)); + if (pkt) { +- assert((unsigned)pkt_size == le16toh(hdr->size) - sizeof(*hdr)); +- evbuffer_add(gw->write_buf, pkt, pkt_size); ++ assert(pkt_info->size == le16toh(hdr->size) - sizeof(*hdr)); ++ evbuffer_add(gw->write_buf, pkt, pkt_info->size); + } +- gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_size; +- gw->pkt_ring[gw->pkt_ring_head].type = pkt_type; ++ gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_info->size; ++ gw->pkt_ring[gw->pkt_ring_head].type = pkt_info->type; + LGTD_LIFX_GATEWAY_INC_MESSAGE_RING_INDEX(gw->pkt_ring_head); + if (gw->pkt_ring_head == gw->pkt_ring_tail) { + gw->pkt_ring_full = true; +diff --git a/lifx/gateway.h b/lifx/gateway.h +--- a/lifx/gateway.h ++++ b/lifx/gateway.h +@@ -91,13 +91,12 @@ + + void lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *, + const struct lgtd_lifx_packet_header *, +- enum lgtd_lifx_packet_type, +- const void *, +- int); ++ const struct lgtd_lifx_packet_info *, ++ void *); + // This could be on router but it's LIFX specific so I'd rather keep it here: + bool lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *, + enum lgtd_lifx_packet_type, +- const void *); ++ void *); + + void lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *, uint64_t, uint64_t); + +diff --git a/lifx/wire_proto.c b/lifx/wire_proto.c +--- a/lifx/wire_proto.c ++++ b/lifx/wire_proto.c +@@ -48,14 +48,14 @@ + 13, 18, 8, 12, 7, 6, 5, 63 + }; + +-static struct lgtd_lifx_packet_infos_map lgtd_lifx_packet_infos = ++static struct lgtd_lifx_packet_info_map lgtd_lifx_packet_info = + RB_INITIALIZER(&lgtd_lifx_packets_infos); + + RB_GENERATE_STATIC( +- lgtd_lifx_packet_infos_map, +- lgtd_lifx_packet_infos, ++ lgtd_lifx_packet_info_map, ++ lgtd_lifx_packet_info, + link, +- lgtd_lifx_packet_infos_cmp ++ lgtd_lifx_packet_info_cmp + ); + + static void +@@ -75,7 +75,7 @@ + } + + void +-lgtd_lifx_wire_load_packet_infos_map(void) ++lgtd_lifx_wire_load_packet_info_map(void) + { + #define DECODER(x) ((void (*)(void *))(x)) + #define ENCODER(x) ((void (*)(void *))(x)) +@@ -91,7 +91,7 @@ + .decode = lgtd_lifx_wire_null_packet_encoder_decoder, \ + .handle = lgtd_lifx_wire_null_packet_handler + +- static struct lgtd_lifx_packet_infos packet_table[] = { ++ static struct lgtd_lifx_packet_info packet_table[] = { + // Gateway packets: + { + REQUEST_ONLY, +@@ -192,18 +192,18 @@ + + for (int i = 0; i != LGTD_ARRAY_SIZE(packet_table); ++i) { + RB_INSERT( +- lgtd_lifx_packet_infos_map, +- &lgtd_lifx_packet_infos, ++ lgtd_lifx_packet_info_map, ++ &lgtd_lifx_packet_info, + &packet_table[i] + ); + } + } + +-const struct lgtd_lifx_packet_infos * +-lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type packet_type) ++const struct lgtd_lifx_packet_info * ++lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type packet_type) + { +- struct lgtd_lifx_packet_infos pkt_infos = { .type = packet_type }; +- return RB_FIND(lgtd_lifx_packet_infos_map, &lgtd_lifx_packet_infos, &pkt_infos); ++ struct lgtd_lifx_packet_info pkt_info = { .type = packet_type }; ++ return RB_FIND(lgtd_lifx_packet_info_map, &lgtd_lifx_packet_info, &pkt_info); + } + + +@@ -273,7 +273,7 @@ + hdr->packet_type = le16toh(hdr->packet_type); + } + +-const struct lgtd_lifx_packet_infos * ++const struct lgtd_lifx_packet_info * + lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *hdr, + enum lgtd_lifx_target_type target_type, + union lgtd_lifx_target target, +@@ -282,13 +282,13 @@ + { + assert(hdr); + +- const struct lgtd_lifx_packet_infos *pkt_infos = +- lgtd_lifx_wire_get_packet_infos(packet_type); ++ const struct lgtd_lifx_packet_info *pkt_info = ++ lgtd_lifx_wire_get_packet_info(packet_type); + +- assert(pkt_infos); ++ assert(pkt_info); + + memset(hdr, 0, sizeof(*hdr)); +- hdr->size = pkt_infos->size + sizeof(*hdr); ++ hdr->size = pkt_info->size + sizeof(*hdr); + hdr->packet_type = packet_type; + if (site) { + memcpy(hdr->site, site, sizeof(hdr->site)); +@@ -313,7 +313,7 @@ + + lgtd_lifx_wire_encode_header(hdr, flags); + +- return pkt_infos; ++ return pkt_info; + } + + void +diff --git a/lifx/wire_proto.h b/lifx/wire_proto.h +--- a/lifx/wire_proto.h ++++ b/lifx/wire_proto.h +@@ -265,8 +265,8 @@ + + struct lgtd_lifx_gateway; + +-struct lgtd_lifx_packet_infos { +- RB_ENTRY(lgtd_lifx_packet_infos) link; ++struct lgtd_lifx_packet_info { ++ RB_ENTRY(lgtd_lifx_packet_info) link; + const char *name; + enum lgtd_lifx_packet_type type; + unsigned size; +@@ -276,11 +276,11 @@ + const struct lgtd_lifx_packet_header *, + const void *); + }; +-RB_HEAD(lgtd_lifx_packet_infos_map, lgtd_lifx_packet_infos); ++RB_HEAD(lgtd_lifx_packet_info_map, lgtd_lifx_packet_info); + + static inline int +-lgtd_lifx_packet_infos_cmp(struct lgtd_lifx_packet_infos *a, +- struct lgtd_lifx_packet_infos *b) ++lgtd_lifx_packet_info_cmp(struct lgtd_lifx_packet_info *a, ++ struct lgtd_lifx_packet_info *b) + { + return a->type - b->type; + } +@@ -331,10 +331,10 @@ + + enum lgtd_lifx_waveform_type lgtd_lifx_wire_waveform_string_id_to_type(const char *, int); + +-const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type); +-void lgtd_lifx_wire_load_packet_infos_map(void); ++const struct lgtd_lifx_packet_info *lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type); ++void lgtd_lifx_wire_load_packet_info_map(void); + +-const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, ++const struct lgtd_lifx_packet_info *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, + enum lgtd_lifx_target_type, + union lgtd_lifx_target, + const uint8_t *, +diff --git a/tests/core/proto/test_proto_tag_create.c b/tests/core/proto/test_proto_tag_create.c +--- a/tests/core/proto/test_proto_tag_create.c ++++ b/tests/core/proto/test_proto_tag_create.c +@@ -65,7 +65,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + if (!gw) { + errx(1, "missing gateway"); +diff --git a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c +--- a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c ++++ b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c +@@ -61,7 +61,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + (void)gw; + (void)pkt_type; +diff --git a/tests/core/proto/test_proto_tag_update.c b/tests/core/proto/test_proto_tag_update.c +--- a/tests/core/proto/test_proto_tag_update.c ++++ b/tests/core/proto/test_proto_tag_update.c +@@ -69,7 +69,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + if (!gw) { + errx(1, "missing gateway"); +diff --git a/tests/core/router/test_router_send_to_broadcast.c b/tests/core/router/test_router_send_to_broadcast.c +--- a/tests/core/router/test_router_send_to_broadcast.c ++++ b/tests/core/router/test_router_send_to_broadcast.c +@@ -8,7 +8,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + lgtd_tests_insert_mock_gateway(2); + lgtd_tests_insert_mock_gateway(1); +diff --git a/tests/core/router/test_router_send_to_device.c b/tests/core/router/test_router_send_to_device.c +--- a/tests/core/router/test_router_send_to_device.c ++++ b/tests/core/router/test_router_send_to_device.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_invalid_targets.c b/tests/core/router/test_router_send_to_invalid_targets.c +--- a/tests/core/router/test_router_send_to_invalid_targets.c ++++ b/tests/core/router/test_router_send_to_invalid_targets.c +@@ -31,7 +31,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_label.c b/tests/core/router/test_router_send_to_label.c +--- a/tests/core/router/test_router_send_to_label.c ++++ b/tests/core/router/test_router_send_to_label.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_tag.c b/tests/core/router/test_router_send_to_tag.c +--- a/tests/core/router/test_router_send_to_tag.c ++++ b/tests/core/router/test_router_send_to_tag.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); +diff --git a/tests/core/router/test_router_targets_to_devices.c b/tests/core/router/test_router_targets_to_devices.c +--- a/tests/core/router/test_router_targets_to_devices.c ++++ b/tests/core/router/test_router_targets_to_devices.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); +diff --git a/tests/core/router/tests_router_utils.h b/tests/core/router/tests_router_utils.h +--- a/tests/core/router/tests_router_utils.h ++++ b/tests/core/router/tests_router_utils.h +@@ -13,12 +13,9 @@ + void + lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, + const struct lgtd_lifx_packet_header *hdr, +- enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- int pkt_size) ++ const struct lgtd_lifx_packet_info *pkt_info, ++ void *pkt) + { +- (void)pkt_type; +- + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].gw = gw; + // headers are created on the stack so we need to dup them: + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].hdr = malloc( +@@ -30,7 +27,7 @@ + sizeof(*hdr) + ); + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt = pkt; +- lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_size; ++ lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_info->size; + lgtd_tests_gw_pkt_queue_size++; + } + +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id.c b/tests/lifx/gateway/test_gateway_allocate_tag_id.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id.c +@@ -40,7 +40,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c +--- a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c ++++ b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c +@@ -23,7 +23,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet.c b/tests/lifx/gateway/test_gateway_enqueue_packet.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -25,9 +25,7 @@ + LGTD_LIFX_SET_POWER_STATE + ); + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -29,9 +29,7 @@ + gw.pkt_ring_head = 1; + gw.pkt_ring_tail = 2; + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +@@ -65,9 +63,7 @@ + errx(1, "event_add should have been called with gw.write_ev"); + } + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (gw_write_buf_idx != sizeof(pkt) + sizeof(hdr)) { + errx(1, "nothing should have been buffered"); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -31,9 +31,7 @@ + gw.pkt_ring_head = pkt_ring_last_idx; + gw.pkt_ring_tail = 2; + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +diff --git a/tests/lifx/gateway/test_gateway_handle_tag_labels.c b/tests/lifx/gateway/test_gateway_handle_tag_labels.c +--- a/tests/lifx/gateway/test_gateway_handle_tag_labels.c ++++ b/tests/lifx/gateway/test_gateway_handle_tag_labels.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c +--- a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c ++++ b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback.c b/tests/lifx/gateway/test_gateway_write_callback.c +--- a/tests/lifx/gateway/test_gateway_write_callback.c ++++ b/tests/lifx/gateway/test_gateway_write_callback.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c +--- a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c +--- a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c +@@ -42,7 +42,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c +--- a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c +@@ -50,7 +50,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c +--- a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/mock_gateway.h b/tests/lifx/mock_gateway.h +--- a/tests/lifx/mock_gateway.h ++++ b/tests/lifx/mock_gateway.h +@@ -11,7 +11,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + (void)gw; + (void)pkt_type;
--- a/properly_encode_packets_payload.patch Sat Aug 08 01:13:52 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,927 +0,0 @@ -# HG changeset patch -# Parent 719b36bfbb15759d8668f741337694d69f37676c -Re-organize the packet sending code a bit - -Endianess conversion now takes place when enqueuing the packet on the -gateway. We're gonna encode the same packeta multiple times but this is -much better from a code perspective. - -And refactor the code a bit to pass pkt_info (also now spelled -correctly) around instead of looking it up twice. - -diff --git a/core/lightsd.c b/core/lightsd.c ---- a/core/lightsd.c -+++ b/core/lightsd.c -@@ -220,7 +220,7 @@ - argc -= optind; - argv += optind; - -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - if (!lgtd_lifx_timer_setup() || !lgtd_lifx_broadcast_setup()) { - lgtd_err(1, "can't setup lightsd"); - } -diff --git a/core/proto.c b/core/proto.c ---- a/core/proto.c -+++ b/core/proto.c -@@ -107,7 +107,6 @@ - .transition = transition_msecs - }; - -- lgtd_lifx_wire_encode_light_color(&pkt); - SEND_RESULT( - client, lgtd_router_send(targets, LGTD_LIFX_SET_LIGHT_COLOR, &pkt) - ); -@@ -145,7 +144,6 @@ - .waveform = waveform - }; - -- lgtd_lifx_wire_encode_waveform(&pkt); - SEND_RESULT( - client, lgtd_router_send(targets, LGTD_LIFX_SET_WAVEFORM, &pkt) - ); -@@ -284,7 +282,6 @@ - struct lgtd_lifx_packet_tag_labels pkt = { .tags = 0 }; - pkt.tags = LGTD_LIFX_WIRE_TAG_ID_TO_VALUE(tag_id); - strncpy(pkt.label, tag_label, sizeof(pkt.label) - 1); -- lgtd_lifx_wire_encode_tag_labels(&pkt); - bool enqueued = lgtd_lifx_gateway_send_to_site( - site->gw, LGTD_LIFX_SET_TAG_LABELS, &pkt - ); -@@ -306,7 +303,6 @@ - if (!(bulb->state.tags & tag_value)) { - struct lgtd_lifx_packet_tags pkt; - pkt.tags = bulb->state.tags | tag_value; -- lgtd_lifx_wire_encode_tags(&pkt); - lgtd_router_send_to_device(bulb, LGTD_LIFX_SET_TAGS, &pkt); - } - } -@@ -366,7 +362,6 @@ - if (bulb->state.tags & tag_value) { - struct lgtd_lifx_packet_tags pkt; - pkt.tags = bulb->state.tags & ~tag_value; -- lgtd_lifx_wire_encode_tags(&pkt); - lgtd_router_send_to_device(bulb, LGTD_LIFX_SET_TAGS, &pkt); - } - } -diff --git a/core/router.c b/core/router.c ---- a/core/router.c -+++ b/core/router.c -@@ -49,21 +49,19 @@ - struct lgtd_lifx_packet_header hdr; - union lgtd_lifx_target target = { .tags = 0 }; - -- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; -+ const struct lgtd_lifx_packet_info *pkt_info = NULL; - struct lgtd_lifx_gateway *gw; - LIST_FOREACH(gw, &lgtd_lifx_gateways, link) { -- pkt_infos = lgtd_lifx_wire_setup_header( -+ pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_ALL_DEVICES, - target, - gw->site.as_array, - pkt_type - ); -- assert(pkt_infos); -+ assert(pkt_info); - -- lgtd_lifx_gateway_enqueue_packet( -- gw, &hdr, pkt_type, pkt, pkt_infos->size -- ); -+ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); - - if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { - struct lgtd_lifx_bulb *bulb; -@@ -76,8 +74,8 @@ - } - } - -- if (pkt_infos) { -- lgtd_info("broadcasting %s", pkt_infos->name); -+ if (pkt_info) { -+ lgtd_info("broadcasting %s", pkt_info->name); - } - } - -@@ -91,19 +89,16 @@ - struct lgtd_lifx_packet_header hdr; - union lgtd_lifx_target target = { .addr = bulb->addr }; - -- const struct lgtd_lifx_packet_infos *pkt_infos; -- pkt_infos = lgtd_lifx_wire_setup_header( -+ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_DEVICE, - target, - bulb->gw->site.as_array, - pkt_type - ); -- assert(pkt_infos); -+ assert(pkt_info); - -- lgtd_lifx_gateway_enqueue_packet( -- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size -- ); -+ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); - - if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { - bulb->dirty_at = lgtd_time_monotonic_msecs(); -@@ -111,7 +106,7 @@ - bulb->expected_power_on = payload->power; - } - -- lgtd_info("sending %s to %s", pkt_infos->name, lgtd_addrtoa(bulb->addr)); -+ lgtd_info("sending %s to %s", pkt_info->name, lgtd_addrtoa(bulb->addr)); - } - - void -@@ -119,7 +114,7 @@ - enum lgtd_lifx_packet_type pkt_type, - void *pkt) - { -- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; -+ const struct lgtd_lifx_packet_info *pkt_info = NULL; - - struct lgtd_lifx_site *site; - LIST_FOREACH(site, &tag->sites, link) { -@@ -130,18 +125,16 @@ - union lgtd_lifx_target target; - assert(tag == gw->tags[tag_id]); - target.tags = LGTD_LIFX_WIRE_TAG_ID_TO_VALUE(tag_id); -- pkt_infos = lgtd_lifx_wire_setup_header( -+ pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_TAGS, - target, - gw->site.as_array, - pkt_type - ); -- assert(pkt_infos); -+ assert(pkt_info); - -- lgtd_lifx_gateway_enqueue_packet( -- gw, &hdr, pkt_type, pkt, pkt_infos->size -- ); -+ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); - - if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { - struct lgtd_lifx_bulb *bulb; -@@ -156,8 +149,8 @@ - } - } - -- if (pkt_infos) { -- lgtd_info("sending %s to #%s", pkt_infos->name, tag->label); -+ if (pkt_info) { -+ lgtd_info("sending %s to #%s", pkt_info->name, tag->label); - } - } - -@@ -166,25 +159,23 @@ - enum lgtd_lifx_packet_type pkt_type, - void *pkt) - { -- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; -+ const struct lgtd_lifx_packet_info *pkt_info = NULL; - - struct lgtd_lifx_bulb *bulb; - RB_FOREACH(bulb, lgtd_lifx_bulb_map, &lgtd_lifx_bulbs_table) { - if (!strcmp(bulb->state.label, label)) { - struct lgtd_lifx_packet_header hdr; - union lgtd_lifx_target target = { .addr = bulb->addr }; -- pkt_infos = lgtd_lifx_wire_setup_header( -+ pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_DEVICE, - target, - bulb->gw->site.as_array, - pkt_type - ); -- assert(pkt_infos); -+ assert(pkt_info); - -- lgtd_lifx_gateway_enqueue_packet( -- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size -- ); -+ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); - - if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { - bulb->dirty_at = lgtd_time_monotonic_msecs(); -@@ -194,8 +185,8 @@ - } - } - -- if (pkt_infos) { -- lgtd_info("sending %s to %s", pkt_infos->name, label); -+ if (pkt_info) { -+ lgtd_info("sending %s to %s", pkt_info->name, label); - } - } - -diff --git a/lifx/broadcast.c b/lifx/broadcast.c ---- a/lifx/broadcast.c -+++ b/lifx/broadcast.c -@@ -117,9 +117,9 @@ - continue; - } - -- const struct lgtd_lifx_packet_infos *pkt_infos = -- lgtd_lifx_wire_get_packet_infos(read.hdr.packet_type); -- if (!pkt_infos) { -+ const struct lgtd_lifx_packet_info *pkt_info = -+ lgtd_lifx_wire_get_packet_info(read.hdr.packet_type); -+ if (!pkt_info) { - lgtd_warnx( - "received unknown packet %#x from [%s]:%hu", - read.hdr.packet_type, peer_addr, peer_port -@@ -129,7 +129,7 @@ - if (!(read.hdr.protocol & LGTD_LIFX_PROTOCOL_ADDRESSABLE)) { - lgtd_warnx( - "received non-addressable packet %s from [%s]:%hu", -- pkt_infos->name, peer_addr, peer_port -+ pkt_info->name, peer_addr, peer_port - ); - continue; - } -@@ -145,8 +145,8 @@ - if (gw) { - void *pkt = &read.buf[LGTD_LIFX_PACKET_HEADER_SIZE]; - gw->last_pkt_at = received_at; -- pkt_infos->decode(pkt); -- pkt_infos->handle(gw, &read.hdr, pkt); -+ pkt_info->decode(pkt); -+ pkt_info->handle(gw, &read.hdr, pkt); - } else { - lgtd_warnx( - "got packet from unknown gateway [%s]:%hu", peer_addr, peer_port -diff --git a/lifx/gateway.c b/lifx/gateway.c ---- a/lifx/gateway.c -+++ b/lifx/gateway.c -@@ -164,24 +164,24 @@ - static bool - lgtd_lifx_gateway_send_to_site_impl(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt, -- const struct lgtd_lifx_packet_infos **pkt_infos) -+ void *pkt, -+ const struct lgtd_lifx_packet_info **pkt_info) - { - assert(gw); -- assert(pkt_infos); -+ assert(pkt_info); - - struct lgtd_lifx_packet_header hdr; - union lgtd_lifx_target target = { .addr = gw->site.as_array }; -- *pkt_infos = lgtd_lifx_wire_setup_header( -+ *pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_SITE, - target, - gw->site.as_array, - pkt_type - ); -- assert(*pkt_infos); -+ assert(*pkt_info); - -- lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_type, pkt, (*pkt_infos)->size); -+ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, *pkt_info, pkt); - - return true; // FIXME, have real return values on the send paths... - } -@@ -189,17 +189,17 @@ - static bool - lgtd_lifx_gateway_send_to_site_quiet(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { - -- const struct lgtd_lifx_packet_infos *pkt_infos; -+ const struct lgtd_lifx_packet_info *pkt_info; - bool rv = lgtd_lifx_gateway_send_to_site_impl( -- gw, pkt_type, pkt, &pkt_infos -+ gw, pkt_type, pkt, &pkt_info - ); - - lgtd_debug( - "sending %s to site %s", -- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) -+ pkt_info->name, lgtd_addrtoa(gw->site.as_array) - ); - - return rv; // FIXME, have real return values on the send paths... -@@ -208,16 +208,16 @@ - bool - lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { -- const struct lgtd_lifx_packet_infos *pkt_infos; -+ const struct lgtd_lifx_packet_info *pkt_info; - bool rv = lgtd_lifx_gateway_send_to_site_impl( -- gw, pkt_type, pkt, &pkt_infos -+ gw, pkt_type, pkt, &pkt_info - ); - - lgtd_info( - "sending %s to site %s", -- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) -+ pkt_info->name, lgtd_addrtoa(gw->site.as_array) - ); - - return rv; // FIXME, have real return values on the send paths... -@@ -387,13 +387,12 @@ - void - lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, - const struct lgtd_lifx_packet_header *hdr, -- enum lgtd_lifx_packet_type pkt_type, -- const void *pkt, -- int pkt_size) -+ const struct lgtd_lifx_packet_info *pkt_info, -+ void *pkt) - { - assert(gw); - assert(hdr); -- assert(pkt_size >= 0 && pkt_size < LGTD_LIFX_MAX_PACKET_SIZE); -+ assert(pkt_info); - assert(!memcmp(hdr->site, gw->site.as_array, LGTD_LIFX_ADDR_LENGTH)); - assert(gw->pkt_ring_head >= 0); - assert(gw->pkt_ring_head < (int)LGTD_ARRAY_SIZE(gw->pkt_ring)); -@@ -401,19 +400,19 @@ - if (gw->pkt_ring_full) { - lgtd_warnx( - "dropping packet type %s: packet queue on [%s]:%hu is full", -- lgtd_lifx_wire_get_packet_infos(pkt_type)->name, -- gw->ip_addr, gw->port -+ pkt_info->name, gw->ip_addr, gw->port - ); - return; - } - - evbuffer_add(gw->write_buf, hdr, sizeof(*hdr)); - if (pkt) { -- assert((unsigned)pkt_size == le16toh(hdr->size) - sizeof(*hdr)); -- evbuffer_add(gw->write_buf, pkt, pkt_size); -+ assert(pkt_info->size == le16toh(hdr->size) - sizeof(*hdr)); -+ pkt_info->encode(pkt); -+ evbuffer_add(gw->write_buf, pkt, pkt_info->size); - } -- gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_size; -- gw->pkt_ring[gw->pkt_ring_head].type = pkt_type; -+ gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_info->size; -+ gw->pkt_ring[gw->pkt_ring_head].type = pkt_info->type; - LGTD_LIFX_GATEWAY_INC_MESSAGE_RING_INDEX(gw->pkt_ring_head); - if (gw->pkt_ring_head == gw->pkt_ring_tail) { - gw->pkt_ring_full = true; -diff --git a/lifx/gateway.h b/lifx/gateway.h ---- a/lifx/gateway.h -+++ b/lifx/gateway.h -@@ -91,13 +91,12 @@ - - void lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *, - const struct lgtd_lifx_packet_header *, -- enum lgtd_lifx_packet_type, -- const void *, -- int); -+ const struct lgtd_lifx_packet_info *, -+ void *); - // This could be on router but it's LIFX specific so I'd rather keep it here: - bool lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *, - enum lgtd_lifx_packet_type, -- const void *); -+ void *); - - void lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *, uint64_t, uint64_t); - -diff --git a/lifx/wire_proto.c b/lifx/wire_proto.c ---- a/lifx/wire_proto.c -+++ b/lifx/wire_proto.c -@@ -48,14 +48,14 @@ - 13, 18, 8, 12, 7, 6, 5, 63 - }; - --static struct lgtd_lifx_packet_infos_map lgtd_lifx_packet_infos = -+static struct lgtd_lifx_packet_info_map lgtd_lifx_packet_info = - RB_INITIALIZER(&lgtd_lifx_packets_infos); - - RB_GENERATE_STATIC( -- lgtd_lifx_packet_infos_map, -- lgtd_lifx_packet_infos, -+ lgtd_lifx_packet_info_map, -+ lgtd_lifx_packet_info, - link, -- lgtd_lifx_packet_infos_cmp -+ lgtd_lifx_packet_info_cmp - ); - - static void -@@ -75,7 +75,7 @@ - } - - void --lgtd_lifx_wire_load_packet_infos_map(void) -+lgtd_lifx_wire_load_packet_info_map(void) - { - #define DECODER(x) ((void (*)(void *))(x)) - #define ENCODER(x) ((void (*)(void *))(x)) -@@ -91,7 +91,7 @@ - .decode = lgtd_lifx_wire_null_packet_encoder_decoder, \ - .handle = lgtd_lifx_wire_null_packet_handler - -- static struct lgtd_lifx_packet_infos packet_table[] = { -+ static struct lgtd_lifx_packet_info packet_table[] = { - // Gateway packets: - { - REQUEST_ONLY, -@@ -192,18 +192,18 @@ - - for (int i = 0; i != LGTD_ARRAY_SIZE(packet_table); ++i) { - RB_INSERT( -- lgtd_lifx_packet_infos_map, -- &lgtd_lifx_packet_infos, -+ lgtd_lifx_packet_info_map, -+ &lgtd_lifx_packet_info, - &packet_table[i] - ); - } - } - --const struct lgtd_lifx_packet_infos * --lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type packet_type) -+const struct lgtd_lifx_packet_info * -+lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type packet_type) - { -- struct lgtd_lifx_packet_infos pkt_infos = { .type = packet_type }; -- return RB_FIND(lgtd_lifx_packet_infos_map, &lgtd_lifx_packet_infos, &pkt_infos); -+ struct lgtd_lifx_packet_info pkt_info = { .type = packet_type }; -+ return RB_FIND(lgtd_lifx_packet_info_map, &lgtd_lifx_packet_info, &pkt_info); - } - - -@@ -273,7 +273,7 @@ - hdr->packet_type = le16toh(hdr->packet_type); - } - --const struct lgtd_lifx_packet_infos * -+const struct lgtd_lifx_packet_info * - lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *hdr, - enum lgtd_lifx_target_type target_type, - union lgtd_lifx_target target, -@@ -282,13 +282,13 @@ - { - assert(hdr); - -- const struct lgtd_lifx_packet_infos *pkt_infos = -- lgtd_lifx_wire_get_packet_infos(packet_type); -+ const struct lgtd_lifx_packet_info *pkt_info = -+ lgtd_lifx_wire_get_packet_info(packet_type); - -- assert(pkt_infos); -+ assert(pkt_info); - - memset(hdr, 0, sizeof(*hdr)); -- hdr->size = pkt_infos->size + sizeof(*hdr); -+ hdr->size = pkt_info->size + sizeof(*hdr); - hdr->packet_type = packet_type; - if (site) { - memcpy(hdr->site, site, sizeof(hdr->site)); -@@ -313,7 +313,7 @@ - - lgtd_lifx_wire_encode_header(hdr, flags); - -- return pkt_infos; -+ return pkt_info; - } - - void -diff --git a/lifx/wire_proto.h b/lifx/wire_proto.h ---- a/lifx/wire_proto.h -+++ b/lifx/wire_proto.h -@@ -265,8 +265,8 @@ - - struct lgtd_lifx_gateway; - --struct lgtd_lifx_packet_infos { -- RB_ENTRY(lgtd_lifx_packet_infos) link; -+struct lgtd_lifx_packet_info { -+ RB_ENTRY(lgtd_lifx_packet_info) link; - const char *name; - enum lgtd_lifx_packet_type type; - unsigned size; -@@ -276,11 +276,11 @@ - const struct lgtd_lifx_packet_header *, - const void *); - }; --RB_HEAD(lgtd_lifx_packet_infos_map, lgtd_lifx_packet_infos); -+RB_HEAD(lgtd_lifx_packet_info_map, lgtd_lifx_packet_info); - - static inline int --lgtd_lifx_packet_infos_cmp(struct lgtd_lifx_packet_infos *a, -- struct lgtd_lifx_packet_infos *b) -+lgtd_lifx_packet_info_cmp(struct lgtd_lifx_packet_info *a, -+ struct lgtd_lifx_packet_info *b) - { - return a->type - b->type; - } -@@ -331,10 +331,10 @@ - - enum lgtd_lifx_waveform_type lgtd_lifx_wire_waveform_string_id_to_type(const char *, int); - --const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type); --void lgtd_lifx_wire_load_packet_infos_map(void); -+const struct lgtd_lifx_packet_info *lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type); -+void lgtd_lifx_wire_load_packet_info_map(void); - --const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, -+const struct lgtd_lifx_packet_info *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, - enum lgtd_lifx_target_type, - union lgtd_lifx_target, - const uint8_t *, -diff --git a/tests/core/proto/test_proto_tag_create.c b/tests/core/proto/test_proto_tag_create.c ---- a/tests/core/proto/test_proto_tag_create.c -+++ b/tests/core/proto/test_proto_tag_create.c -@@ -65,7 +65,7 @@ - bool - lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { - if (!gw) { - errx(1, "missing gateway"); -diff --git a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c ---- a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c -+++ b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c -@@ -61,7 +61,7 @@ - bool - lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { - (void)gw; - (void)pkt_type; -diff --git a/tests/core/proto/test_proto_tag_update.c b/tests/core/proto/test_proto_tag_update.c ---- a/tests/core/proto/test_proto_tag_update.c -+++ b/tests/core/proto/test_proto_tag_update.c -@@ -69,7 +69,7 @@ - bool - lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { - if (!gw) { - errx(1, "missing gateway"); -diff --git a/tests/core/router/test_router_send_to_broadcast.c b/tests/core/router/test_router_send_to_broadcast.c ---- a/tests/core/router/test_router_send_to_broadcast.c -+++ b/tests/core/router/test_router_send_to_broadcast.c -@@ -8,7 +8,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - lgtd_tests_insert_mock_gateway(2); - lgtd_tests_insert_mock_gateway(1); -diff --git a/tests/core/router/test_router_send_to_device.c b/tests/core/router/test_router_send_to_device.c ---- a/tests/core/router/test_router_send_to_device.c -+++ b/tests/core/router/test_router_send_to_device.c -@@ -7,7 +7,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); - struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); -diff --git a/tests/core/router/test_router_send_to_invalid_targets.c b/tests/core/router/test_router_send_to_invalid_targets.c ---- a/tests/core/router/test_router_send_to_invalid_targets.c -+++ b/tests/core/router/test_router_send_to_invalid_targets.c -@@ -31,7 +31,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); - lgtd_tests_insert_mock_bulb(gw_1, 1); -diff --git a/tests/core/router/test_router_send_to_label.c b/tests/core/router/test_router_send_to_label.c ---- a/tests/core/router/test_router_send_to_label.c -+++ b/tests/core/router/test_router_send_to_label.c -@@ -7,7 +7,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); - struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); -diff --git a/tests/core/router/test_router_send_to_tag.c b/tests/core/router/test_router_send_to_tag.c ---- a/tests/core/router/test_router_send_to_tag.c -+++ b/tests/core/router/test_router_send_to_tag.c -@@ -7,7 +7,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); - struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); -diff --git a/tests/core/router/test_router_targets_to_devices.c b/tests/core/router/test_router_targets_to_devices.c ---- a/tests/core/router/test_router_targets_to_devices.c -+++ b/tests/core/router/test_router_targets_to_devices.c -@@ -41,7 +41,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); - struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); -diff --git a/tests/core/router/tests_router_utils.h b/tests/core/router/tests_router_utils.h ---- a/tests/core/router/tests_router_utils.h -+++ b/tests/core/router/tests_router_utils.h -@@ -13,12 +13,9 @@ - void - lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, - const struct lgtd_lifx_packet_header *hdr, -- enum lgtd_lifx_packet_type pkt_type, -- const void *pkt, -- int pkt_size) -+ const struct lgtd_lifx_packet_info *pkt_info, -+ void *pkt) - { -- (void)pkt_type; -- - lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].gw = gw; - // headers are created on the stack so we need to dup them: - lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].hdr = malloc( -@@ -30,7 +27,7 @@ - sizeof(*hdr) - ); - lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt = pkt; -- lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_size; -+ lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_info->size; - lgtd_tests_gw_pkt_queue_size++; - } - -diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id.c b/tests/lifx/gateway/test_gateway_allocate_tag_id.c ---- a/tests/lifx/gateway/test_gateway_allocate_tag_id.c -+++ b/tests/lifx/gateway/test_gateway_allocate_tag_id.c -@@ -40,7 +40,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c ---- a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c -+++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c -@@ -41,7 +41,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c ---- a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c -+++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c -@@ -41,7 +41,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c ---- a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c -+++ b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c -@@ -23,7 +23,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet.c b/tests/lifx/gateway/test_gateway_enqueue_packet.c ---- a/tests/lifx/gateway/test_gateway_enqueue_packet.c -+++ b/tests/lifx/gateway/test_gateway_enqueue_packet.c -@@ -5,7 +5,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -@@ -17,7 +17,7 @@ - union lgtd_lifx_target target = { .tags = 0 }; - - struct lgtd_lifx_packet_header hdr; -- lgtd_lifx_wire_setup_header( -+ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_ALL_DEVICES, - target, -@@ -25,9 +25,7 @@ - LGTD_LIFX_SET_POWER_STATE - ); - -- lgtd_lifx_gateway_enqueue_packet( -- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) -- ); -+ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); - - if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { - errx(1, "header incorrectly buffered"); -diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c ---- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c -+++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c -@@ -5,7 +5,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -@@ -17,7 +17,7 @@ - union lgtd_lifx_target target = { .tags = 0 }; - - struct lgtd_lifx_packet_header hdr; -- lgtd_lifx_wire_setup_header( -+ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_ALL_DEVICES, - target, -@@ -29,9 +29,7 @@ - gw.pkt_ring_head = 1; - gw.pkt_ring_tail = 2; - -- lgtd_lifx_gateway_enqueue_packet( -- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) -- ); -+ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); - - if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { - errx(1, "header incorrectly buffered"); -@@ -65,9 +63,7 @@ - errx(1, "event_add should have been called with gw.write_ev"); - } - -- lgtd_lifx_gateway_enqueue_packet( -- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) -- ); -+ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); - - if (gw_write_buf_idx != sizeof(pkt) + sizeof(hdr)) { - errx(1, "nothing should have been buffered"); -diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c ---- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c -+++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c -@@ -5,7 +5,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -@@ -17,7 +17,7 @@ - union lgtd_lifx_target target = { .tags = 0 }; - - struct lgtd_lifx_packet_header hdr; -- lgtd_lifx_wire_setup_header( -+ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( - &hdr, - LGTD_LIFX_TARGET_ALL_DEVICES, - target, -@@ -31,9 +31,7 @@ - gw.pkt_ring_head = pkt_ring_last_idx; - gw.pkt_ring_tail = 2; - -- lgtd_lifx_gateway_enqueue_packet( -- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) -- ); -+ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); - - if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { - errx(1, "header incorrectly buffered"); -diff --git a/tests/lifx/gateway/test_gateway_handle_tag_labels.c b/tests/lifx/gateway/test_gateway_handle_tag_labels.c ---- a/tests/lifx/gateway/test_gateway_handle_tag_labels.c -+++ b/tests/lifx/gateway/test_gateway_handle_tag_labels.c -@@ -7,7 +7,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c ---- a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c -+++ b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c -@@ -5,7 +5,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_write_callback.c b/tests/lifx/gateway/test_gateway_write_callback.c ---- a/tests/lifx/gateway/test_gateway_write_callback.c -+++ b/tests/lifx/gateway/test_gateway_write_callback.c -@@ -43,7 +43,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c ---- a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c -+++ b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c -@@ -43,7 +43,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c ---- a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c -+++ b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c -@@ -42,7 +42,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c ---- a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c -+++ b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c -@@ -50,7 +50,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c ---- a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c -+++ b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c -@@ -43,7 +43,7 @@ - int - main(void) - { -- lgtd_lifx_wire_load_packet_infos_map(); -+ lgtd_lifx_wire_load_packet_info_map(); - - struct lgtd_lifx_gateway gw; - memset(&gw, 0, sizeof(gw)); -diff --git a/tests/lifx/mock_gateway.h b/tests/lifx/mock_gateway.h ---- a/tests/lifx/mock_gateway.h -+++ b/tests/lifx/mock_gateway.h -@@ -11,7 +11,7 @@ - bool - lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, - enum lgtd_lifx_packet_type pkt_type, -- const void *pkt) -+ void *pkt) - { - (void)gw; - (void)pkt_type;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remove_assert_on_request_id.patch Sat Aug 08 01:57:57 2015 -0700 @@ -0,0 +1,17 @@ +# HG changeset patch +# Parent 5b607d851a9c8d71384dd29984f629f18f3366ca +Don't abort on request without an id in debug builds + +We made it optional. + +diff --git a/core/jsonrpc.c b/core/jsonrpc.c +--- a/core/jsonrpc.c ++++ b/core/jsonrpc.c +@@ -1118,7 +1118,6 @@ + } + + assert(request.method); +- assert(request.id); + + for (int i = 0; i != LGTD_ARRAY_SIZE(methods); i++) { + int parsed_method_namelen = LGTD_JSONRPC_TOKEN_LEN(request.method);
--- a/series Sat Aug 08 01:13:52 2015 -0700 +++ b/series Sat Aug 08 01:57:57 2015 -0700 @@ -9,6 +9,7 @@ fix_lifx_wire_float_endian_functions_naming.patch ignore_pcaps.patch fix_unused_unused_attribute.patch -properly_encode_packets_payload.patch #-skip +pass_pkt_info_around.patch #-skip relax_timings.patch +remove_assert_on_request_id.patch fix_targeting_on_big_endian_architectures.patch