From d64f12553eb6ceb67ed6f6a5b2ceb6c061d375ba Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Tue, 8 Aug 2017 21:19:09 -0700 Subject: fixes #44 open protocol by "name" (symbol) instead number fixes #38 Make protocols "pluggable", or at least optional This is a breaking change, as we've done away with the central registered list of protocols, and instead demand the user call nng_xxx_open() where xxx is a protocol name. (We did keep a table around in the compat framework though.) There is a nice way for protocols to plug in via an nni_proto_open(), where they can use a generic constructor that they use to build a protocol specific constructor (passing their ops vector in.) --- src/protocol/survey/respond.c | 12 +++++++++--- src/protocol/survey/survey.c | 14 +++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'src/protocol/survey') diff --git a/src/protocol/survey/respond.c b/src/protocol/survey/respond.c index 089e730e..4db79b86 100644 --- a/src/protocol/survey/respond.c +++ b/src/protocol/survey/respond.c @@ -504,10 +504,16 @@ static nni_proto_sock_ops nni_resp_sock_ops = { }; nni_proto nni_respondent_proto = { - .proto_self = NNG_PROTO_RESPONDENT, - .proto_peer = NNG_PROTO_SURVEYOR, - .proto_name = "respondent", + .proto_version = NNI_PROTOCOL_VERSION, + .proto_self = { NNG_PROTO_RESPONDENT_V0, "respondent" }, + .proto_peer = { NNG_PROTO_SURVEYOR_V0, "surveyor" }, .proto_flags = NNI_PROTO_FLAG_SNDRCV, .proto_sock_ops = &nni_resp_sock_ops, .proto_pipe_ops = &nni_resp_pipe_ops, }; + +int +nng_respondent0_open(nng_socket *sidp) +{ + return (nni_proto_open(sidp, &nni_respondent_proto)); +} diff --git a/src/protocol/survey/survey.c b/src/protocol/survey/survey.c index 633e1491..91fe4ad3 100644 --- a/src/protocol/survey/survey.c +++ b/src/protocol/survey/survey.c @@ -470,13 +470,17 @@ static nni_proto_sock_ops nni_surv_sock_ops = { .sock_sfilter = nni_surv_sock_sfilter, }; -// This is the global protocol structure -- our linkage to the core. -// This should be the only global non-static symbol in this file. nni_proto nni_surveyor_proto = { - .proto_self = NNG_PROTO_SURVEYOR, - .proto_peer = NNG_PROTO_RESPONDENT, - .proto_name = "surveyor", + .proto_version = NNI_PROTOCOL_VERSION, + .proto_self = { NNG_PROTO_SURVEYOR_V0, "surveyor" }, + .proto_peer = { NNG_PROTO_RESPONDENT_V0, "respondent" }, .proto_flags = NNI_PROTO_FLAG_SNDRCV, .proto_sock_ops = &nni_surv_sock_ops, .proto_pipe_ops = &nni_surv_pipe_ops, }; + +int +nng_surveyor0_open(nng_socket *sidp) +{ + return (nni_proto_open(sidp, &nni_surveyor_proto)); +} -- cgit v1.2.3-70-g09d2