** Copyright (C) 2001-2025 Zabbix SIA
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
"golang.zabbix.com/sdk/errs"
"golang.zabbix.com/sdk/log"
"golang.zabbix.com/sdk/plugin/comms"
// ErrBrokerClosed is returned when a request is made on a closed broker.
ErrBrokerClosed = errs.New("broker closed")
// ErrBrokerTimeout is returned when a request sent by broker does not
// receive a response within timeout.
ErrBrokerTimeout = errs.New("broker timeout")
// pluginBroker handles communication with a single plugin.
type pluginBroker struct {
// map of requestID to requests awaiting response from plugin
requests map[uint32]*requestWithResponse
// channel to handle agent to plugin requests
// can have only *request and *requestWithResponse types
// describes a one directional (agent to plugin) request. err chan is closed
// when request is sent out.
// requestWithResponse describes a request that expects a response from the plugin.
// out, err chan are closed when response or error is received.