123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- //------------------------------------------------------------------------------
- // Copyright (c) 2020-2022 EMQ Technologies Co., Ltd. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //------------------------------------------------------------------------------
- syntax = "proto3";
- option csharp_namespace = "Emqx.Exhook.V2";
- option go_package = "emqx.io/grpc/exhook";
- option java_multiple_files = true;
- option java_package = "io.emqx.exhook";
- option java_outer_classname = "EmqxExHookProto";
- // The exhook proto version should be fixed as `v2` in EMQX v5.x
- // to make sure the exhook proto version is compatible
- package emqx.exhook.v2;
- service HookProvider {
- rpc OnProviderLoaded(ProviderLoadedRequest) returns (LoadedResponse) {};
- rpc OnProviderUnloaded(ProviderUnloadedRequest) returns (EmptySuccess) {};
- rpc OnClientConnect(ClientConnectRequest) returns (EmptySuccess) {};
- rpc OnClientConnack(ClientConnackRequest) returns (EmptySuccess) {};
- rpc OnClientConnected(ClientConnectedRequest) returns (EmptySuccess) {};
- rpc OnClientDisconnected(ClientDisconnectedRequest) returns (EmptySuccess) {};
- rpc OnClientAuthenticate(ClientAuthenticateRequest) returns (ValuedResponse) {};
- rpc OnClientAuthorize(ClientAuthorizeRequest) returns (ValuedResponse) {};
- rpc OnClientSubscribe(ClientSubscribeRequest) returns (EmptySuccess) {};
- rpc OnClientUnsubscribe(ClientUnsubscribeRequest) returns (EmptySuccess) {};
- rpc OnSessionCreated(SessionCreatedRequest) returns (EmptySuccess) {};
- rpc OnSessionSubscribed(SessionSubscribedRequest) returns (EmptySuccess) {};
- rpc OnSessionUnsubscribed(SessionUnsubscribedRequest) returns (EmptySuccess) {};
- rpc OnSessionResumed(SessionResumedRequest) returns (EmptySuccess) {};
- rpc OnSessionDiscarded(SessionDiscardedRequest) returns (EmptySuccess) {};
- rpc OnSessionTakenover(SessionTakenoverRequest) returns (EmptySuccess) {};
- rpc OnSessionTerminated(SessionTerminatedRequest) returns (EmptySuccess) {};
- rpc OnMessagePublish(MessagePublishRequest) returns (ValuedResponse) {};
- rpc OnMessageDelivered(MessageDeliveredRequest) returns (EmptySuccess) {};
- rpc OnMessageDropped(MessageDroppedRequest) returns (EmptySuccess) {};
- rpc OnMessageAcked(MessageAckedRequest) returns (EmptySuccess) {};
- }
- //------------------------------------------------------------------------------
- // Request
- //------------------------------------------------------------------------------
- message ProviderLoadedRequest {
- BrokerInfo broker = 1;
- RequestMeta meta = 2;
- }
- message ProviderUnloadedRequest {
- RequestMeta meta = 1;
- }
- message ClientConnectRequest {
- ConnInfo conninfo = 1;
- // MQTT CONNECT packet's properties (MQTT v5.0)
- //
- // It should be empty on MQTT v3.1.1/v3.1 or others protocol
- repeated Property props = 2;
- RequestMeta meta = 3;
- }
- message ClientConnackRequest {
- ConnInfo conninfo = 1;
- string result_code = 2;
- repeated Property props = 3;
- RequestMeta meta = 4;
- }
- message ClientConnectedRequest {
- ClientInfo clientinfo = 1;
- RequestMeta meta = 2;
- }
- message ClientDisconnectedRequest {
- ClientInfo clientinfo = 1;
- string reason = 2;
- RequestMeta meta = 3;
- }
- message ClientAuthenticateRequest {
- ClientInfo clientinfo = 1;
- bool result = 2;
- RequestMeta meta = 3;
- }
- message ClientAuthorizeRequest {
- ClientInfo clientinfo = 1;
- enum AuthorizeReqType {
- PUBLISH = 0;
- SUBSCRIBE = 1;
- }
- AuthorizeReqType type = 2;
- string topic = 3;
- bool result = 4;
- RequestMeta meta = 5;
- }
- message ClientSubscribeRequest {
- ClientInfo clientinfo = 1;
- repeated Property props = 2;
- repeated TopicFilter topic_filters = 3;
- RequestMeta meta = 4;
- }
- message ClientUnsubscribeRequest {
- ClientInfo clientinfo = 1;
- repeated Property props = 2;
- repeated TopicFilter topic_filters = 3;
- RequestMeta meta = 4;
- }
- message SessionCreatedRequest {
- ClientInfo clientinfo = 1;
- RequestMeta meta = 2;
- }
- message SessionSubscribedRequest {
- ClientInfo clientinfo = 1;
- string topic = 2;
- SubOpts subopts = 3;
- RequestMeta meta = 4;
- }
- message SessionUnsubscribedRequest {
- ClientInfo clientinfo = 1;
- string topic = 2;
- RequestMeta meta = 3;
- }
- message SessionResumedRequest {
- ClientInfo clientinfo = 1;
- RequestMeta meta = 2;
- }
- message SessionDiscardedRequest {
- ClientInfo clientinfo = 1;
- RequestMeta meta = 2;
- }
- message SessionTakenoverRequest {
- ClientInfo clientinfo = 1;
- RequestMeta meta = 2;
- }
- message SessionTerminatedRequest {
- ClientInfo clientinfo = 1;
- string reason = 2;
- RequestMeta meta = 3;
- }
- message MessagePublishRequest {
- Message message = 1;
- RequestMeta meta = 2;
- }
- message MessageDeliveredRequest {
- ClientInfo clientinfo = 1;
- Message message = 2;
- RequestMeta meta = 3;
- }
- message MessageDroppedRequest {
- Message message = 1;
- string reason = 2;
- RequestMeta meta = 3;
- }
- message MessageAckedRequest {
- ClientInfo clientinfo = 1;
- Message message = 2;
- RequestMeta meta = 3;
- }
- //------------------------------------------------------------------------------
- // Response
- //------------------------------------------------------------------------------
- // Responsed by `ProviderLoadedRequest`
- message LoadedResponse {
- repeated HookSpec hooks = 1;
- }
- // Responsed by `ClientAuthenticateRequest` `ClientAuthorizeRequest` `MessagePublishRequest`
- message ValuedResponse {
- // The responded value type
- // - contiune: Use the responded value and execute the next hook
- // - ignore: Ignore the responded value
- // - stop_and_return: Use the responded value and stop the chain executing
- enum ResponsedType {
- CONTINUE = 0;
- IGNORE = 1;
- STOP_AND_RETURN = 2;
- }
- ResponsedType type = 1;
- oneof value {
- // Boolean result, used on the 'client.authenticate', 'client.authorize' hooks
- bool bool_result = 3;
- // Message result, used on the 'message.*' hooks
- Message message = 4;
- }
- }
- // no Response by other Requests
- message EmptySuccess { }
- //------------------------------------------------------------------------------
- // Basic data types
- //------------------------------------------------------------------------------
- message BrokerInfo {
- string version = 1;
- string sysdescr = 2;
- int64 uptime = 3;
- string datetime = 4;
- }
- message HookSpec {
- // The registered hooks name
- //
- // Available value:
- // "client.connect", "client.connack"
- // "client.connected", "client.disconnected"
- // "client.authenticate", "client.authorize"
- // "client.subscribe", "client.unsubscribe"
- //
- // "session.created", "session.subscribed"
- // "session.unsubscribed", "session.resumed"
- // "session.discarded", "session.takenover"
- // "session.terminated"
- //
- // "message.publish", "message.delivered"
- // "message.acked", "message.dropped"
- string name = 1;
- // The topic filters for message hooks
- repeated string topics = 2;
- }
- message ConnInfo {
- string node = 1;
- string clientid = 2;
- string username = 3;
- string peerhost = 4;
- uint32 sockport = 5;
- string proto_name = 6;
- string proto_ver = 7;
- uint32 keepalive = 8;
- }
- message ClientInfo {
- string node = 1;
- string clientid = 2;
- string username = 3;
- string password = 4;
- string peerhost = 5;
- uint32 sockport = 6;
- string protocol = 7;
- string mountpoint = 8;
- bool is_superuser = 9;
- bool anonymous = 10;
- // common name of client TLS cert
- string cn = 11;
- // subject of client TLS cert
- string dn = 12;
- }
- message Message {
- string node = 1;
- string id = 2;
- uint32 qos = 3;
- string from = 4;
- string topic = 5;
- bytes payload = 6;
- uint64 timestamp = 7;
- // The key of header can be:
- // - username:
- // * Readonly
- // * The username of sender client
- // * Value type: utf8 string
- // - protocol:
- // * Readonly
- // * The protocol name of sender client
- // * Value type: string enum with "mqtt", "mqtt-sn", ...
- // - peerhost:
- // * Readonly
- // * The peerhost of sender client
- // * Value type: ip address string
- // - allow_publish:
- // * Writable
- // * Whether to allow the message to be published by emqx
- // * Value type: string enum with "true", "false", default is "true"
- //
- // Notes: All header may be missing, which means that the message does not
- // carry these headers. We can guarantee that clients coming from MQTT,
- // MQTT-SN, CoAP, LwM2M and other natively supported protocol clients will
- // carry these headers, but there is no guarantee that messages published
- // by other means will do, e.g. messages published by HTTP-API
- map<string, string> headers = 8;
- }
- message Property {
- string name = 1;
- string value = 2;
- }
- message TopicFilter {
- string name = 1;
- uint32 qos = 2;
- }
- message SubOpts {
- // The QoS level
- uint32 qos = 1;
- // The group name for shared subscription
- string share = 2;
- // The Retain Handling option (MQTT v5.0)
- //
- // 0 = Send retained messages at the time of the subscribe
- // 1 = Send retained messages at subscribe only if the subscription does
- // not currently exist
- // 2 = Do not send retained messages at the time of the subscribe
- uint32 rh = 3;
- // The Retain as Published option (MQTT v5.0)
- //
- // If 1, Application Messages forwarded using this subscription keep the
- // RETAIN flag they were published with.
- // If 0, Application Messages forwarded using this subscription have the
- // RETAIN flag set to 0.
- // Retained messages sent when the subscription is established have the RETAIN flag set to 1.
- uint32 rap = 4;
- // The No Local option (MQTT v5.0)
- //
- // If the value is 1, Application Messages MUST NOT be forwarded to a
- // connection with a ClientID equal to the ClientID of the publishing
- uint32 nl = 5;
- }
- message RequestMeta {
- string node = 1;
- string version = 2;
- string sysdescr = 3;
- string cluster_name = 4;
- }
|