123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /*
- This file is part of GNUnet.
- Copyright (C) 2009-2016 GNUnet e.V.
- GNUnet 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, either version 3 of the License,
- or (at your option) any later version.
- GNUnet 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 <http://www.gnu.org/licenses/>.
- SPDX-License-Identifier: AGPL3.0-or-later
- */
- /**
- * @author Christian Grothoff
- *
- * @file
- * Monitoring / diagnostics API for the transport service
- *
- * @defgroup transport TRANSPORT service
- * Communication with other peers
- *
- * @see [Documentation](https://gnunet.org/transport-service)
- *
- * @{
- */
- #ifndef GNUNET_TRANSPORT_MONITOR_SERVICE_H
- #define GNUNET_TRANSPORT_MONITOR_SERVICE_H
- #ifdef __cplusplus
- extern "C"
- {
- #if 0 /* keep Emacsens' auto-indent happy */
- }
- #endif
- #endif
- #include "gnunet_util_lib.h"
- #include "gnunet_ats_transport_service.h"
- #include "gnunet_transport_communication_service.h"
- /**
- * Version number of the transport API.
- */
- #define GNUNET_TRANSPORT_MONITOR_VERSION 0x00000000
- /**
- * Information about another peer's address.
- */
- struct GNUNET_TRANSPORT_MonitorInformation
- {
- /**
- * Address we have for the peer, human-readable, 0-terminated, in UTF-8.
- */
- const char *address;
- /**
- * Network type of the address.
- */
- enum GNUNET_NetworkType nt;
- /**
- * Connection status.
- */
- enum GNUNET_TRANSPORT_ConnectionStatus cs;
- /**
- * Number of messages pending transmission for this @e address.
- */
- uint32_t num_msg_pending;
- /**
- * Number of bytes pending transmission for this @e address.
- */
- uint32_t num_bytes_pending;
- /**
- * When was this address last validated.
- */
- struct GNUNET_TIME_Absolute last_validation;
- /**
- * When does this address expire.
- */
- struct GNUNET_TIME_Absolute valid_until;
- /**
- * Time of the next validation operation.
- */
- struct GNUNET_TIME_Absolute next_validation;
- /**
- * Current estimate of the RTT.
- */
- struct GNUNET_TIME_Relative rtt;
- };
- /**
- * Function to call with information about a peer.
- *
- * If one_shot was set to #GNUNET_YES to iterate over all peers once,
- * a final call with NULL for peer and address will follow when done.
- * In this case state and timeout do not contain valid values.
- *
- * The #GNUNET_TRANSPORT_monitor_peers_cancel() call MUST not be called from
- * within this function!
- *
- *
- * @param cls closure
- * @param peer peer this update is about,
- * NULL if this is the final last callback for a iteration operation
- * @param mi monitoring data on the peer
- */
- typedef void
- (*GNUNET_TRANSPORT_MonitorCallback) (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_TRANSPORT_MonitorInformation *mi);
- /**
- * Handle for a #GNUNET_TRANSPORT_monitor() operation.
- */
- struct GNUNET_TRANSPORT_MonitorContext;
- /**
- * Return information about a specific peer or all peers currently known to
- * transport service once or in monitoring mode. To obtain information about
- * a specific peer, a peer identity can be passed. To obtain information about
- * all peers currently known to transport service, NULL can be passed as peer
- * identity.
- *
- * For each peer, the callback is called with information about the address used
- * to communicate with this peer, the state this peer is currently in and the
- * the current timeout for this state.
- *
- * Upon completion, the #GNUNET_TRANSPORT_PeerIterateCallback is called one
- * more time with `NULL`. After this, the operation must no longer be
- * explicitly canceled.
- *
- * The #GNUNET_TRANSPORT_monitor_peers_cancel call MUST not be called in the
- * the peer_callback!
- *
- * @param cfg configuration to use
- * @param peer a specific peer identity to obtain information for,
- * NULL for all peers
- * @param one_shot #GNUNET_YES to return the current state and then end (with NULL+NULL),
- * #GNUNET_NO to monitor peers continuously
- * @param cb function to call with the results
- * @param cb_cls closure for @a mc
- */
- struct GNUNET_TRANSPORT_MonitorContext *
- GNUNET_TRANSPORT_monitor (const struct GNUNET_CONFIGURATION_Handle *cfg,
- const struct GNUNET_PeerIdentity *peer,
- int one_shot,
- GNUNET_TRANSPORT_MonitorCallback cb,
- void *cb_cls);
- /**
- * Cancel request to monitor peers
- *
- * @param mc handle for the request to cancel
- */
- void
- GNUNET_TRANSPORT_monitor_cancel (struct GNUNET_TRANSPORT_MonitorContext *mc);
- #if 0 /* keep Emacsens' auto-indent happy */
- {
- #endif
- #ifdef __cplusplus
- }
- #endif
- /* ifndef GNUNET_TRANSPORT_MONITOR_SERVICE_H */
- #endif
- /** @} */ /* end of group */
- /* end of gnunet_transport_monitor_service.h */
|