diff options
Diffstat (limited to 'proto.c')
-rw-r--r-- | proto.c | 35 |
1 files changed, 25 insertions, 10 deletions
@@ -16,7 +16,30 @@ static int default_proto_handler(struct interface_proto_state *proto, enum interface_proto_cmd cmd, bool force) { + return 0; +} + +struct interface_proto_state *get_default_proto(void) +{ + struct interface_proto_state *proto; + + proto = calloc(1, sizeof(*proto)); + proto->handler = default_proto_handler; + proto->free = default_proto_free; + proto->flags = PROTO_FLAG_IMMEDIATE; + + return proto; +} + +int interface_proto_event(struct interface_proto_state *proto, + enum interface_proto_cmd cmd, bool force) +{ enum interface_event ev; + int ret; + + ret = proto->handler(proto, cmd, force); + if (ret || !(proto->flags & PROTO_FLAG_IMMEDIATE)) + goto out; switch(cmd) { case PROTO_CMD_SETUP: @@ -29,15 +52,7 @@ default_proto_handler(struct interface_proto_state *proto, return -EINVAL; } proto->proto_event(proto, ev); - return 0; -} -struct interface_proto_state *get_default_proto(void) -{ - struct interface_proto_state *proto; - - proto = calloc(1, sizeof(*proto)); - proto->handler = default_proto_handler; - proto->free = default_proto_free; - return proto; +out: + return ret; } |