| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- /*
 
-  * libwebsockets - small server side websockets and web server implementation
 
-  *
 
-  * Copyright (C) 2010 - 2021 Andy Green <andy@warmcat.com>
 
-  *
 
-  * Permission is hereby granted, free of charge, to any person obtaining a copy
 
-  * of this software and associated documentation files (the "Software"), to
 
-  * deal in the Software without restriction, including without limitation the
 
-  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 
-  * sell copies of the Software, and to permit persons to whom the Software is
 
-  * furnished to do so, subject to the following conditions:
 
-  *
 
-  * The above copyright notice and this permission notice shall be included in
 
-  * all copies or substantial portions of the Software.
 
-  *
 
-  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
-  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
-  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
-  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
-  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
-  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 
-  * IN THE SOFTWARE.
 
-  */
 
- /** \defgroup conmon Connection Latency information
 
-  * ## Connection Latency information
 
-  *
 
-  * When LWS_WITH_CONMON is enabled at build, collects detailed statistics
 
-  * about the client connection setup latency, available to the connection
 
-  * itself
 
-  */
 
- ///@{
 
- /* enough for 4191s, or just over an hour */
 
- typedef uint32_t lws_conmon_interval_us_t;
 
- /*
 
-  * Connection latency information... note that not all wsi actually make
 
-  * connections, for example h2 streams after the initial one will have 0
 
-  * for everything except ciu_txn_resp.
 
-  *
 
-  * If represented in JSON, it should look like this
 
-  *
 
-  *     {
 
-  *        "peer": "46.105.127.147",
 
-  *        "dns_us": 1234,
 
-  *        "dns_disp": 1,
 
-  *        "sockconn_us": 1234,
 
-  *        "tls_us": 1234,
 
-  *        "txn_resp_us": 1234,
 
-  *        "dns":["46.105.127.147", "2001:41d0:2:ee93::1"],
 
-  *        "prot_specific": {
 
-  *        	"protocol": "http",
 
-  *        	"resp": 200
 
-  *        }
 
-  *      }
 
-  *
 
-  * The indexes in "dns_disp" are declared in lws_conmon_dns_disposition_t
 
-  * below.
 
-  *
 
-  * "prot_specific" may not be present if the protocol doesn't have anything
 
-  * to report or is not supported.
 
-  */
 
- typedef enum lws_conmon_pcol {
 
- 	LWSCONMON_PCOL_NONE,
 
- 	LWSCONMON_PCOL_HTTP, /* .protocol_specific.http is valid */
 
- } lws_conmon_pcol_t;
 
- typedef enum lws_conmon_dns_disposition {
 
- 	LWSCONMON_DNS_NONE,
 
- 	/**< did not attempt DNS */
 
- 	LWSCONMON_DNS_OK				= 1,
 
- 	/**< DNS lookup did give results */
 
- 	LWSCONMON_DNS_SERVER_UNREACHABLE		= 2,
 
- 	/**< DNS server was not reachable */
 
- 	LWSCONMON_DNS_NO_RESULT				= 3
 
- 	/**< DNS server replied but nothing usable */
 
- } lws_conmon_dns_disposition_t;
 
- struct lws_conmon {
 
- 	lws_sockaddr46				peer46;
 
- 	/**< The peer we actually connected to, if any.  .peer46.sa4.sa_family
 
- 	 * is either 0 if invalid, or the AF_ */
 
- 	union {
 
- 		struct {
 
- 			int	response;
 
- 			/**< h1 http response code */
 
- 		} http;
 
- 	} protocol_specific;
 
- 	/**< possibly-present protocol-specific additional information.  This
 
- 	 * is only valid for the first transaction after connection and does
 
- 	 * not capture results for persistent or muxed connections like ws
 
- 	 * messages, mqtt messages, or h2 streams */
 
- 	struct addrinfo				*dns_results_copy;
 
- 	/**< NULL, or Allocated copy of dns results, owned by this object and
 
- 	 * freed when object destroyed.
 
- 	 * Only set if client flag LCCSCF_CONMON applied  */
 
- 	lws_conmon_interval_us_t		ciu_dns;
 
- 	/**< 0, or if a socket connection, us taken to acquire this DNS response
 
- 	 *
 
- 	 */
 
- 	lws_conmon_interval_us_t		ciu_sockconn;
 
- 	/**< 0, or if connection-based, the us interval between the socket
 
- 	 * connect() attempt that succeeded, and the connection setup */
 
- 	lws_conmon_interval_us_t		ciu_tls;
 
- 	/**< 0 if no tls, or us taken to establish the tls tunnel */
 
- 	lws_conmon_interval_us_t		ciu_txn_resp;
 
- 	/**< 0, or if the protocol supports transactions, the interval between
 
- 	 * sending the initial transaction request and starting to receive the
 
- 	 * response */
 
- 	lws_conmon_pcol_t			pcol;
 
- 	/**< indicates which extra protocol_specific info member is valid,
 
- 	 *   if any */
 
- 	lws_conmon_dns_disposition_t		dns_disposition;
 
- 	/**< indicates general disposition of DNS request */
 
- };
 
- /**
 
-  * lws_conmon_wsi_take() - create a connection latency object from client wsi
 
-  *
 
-  * \param context: lws wsi
 
-  * \param dest: conmon struct to fill
 
-  *
 
-  * Copies wsi conmon data into the caller's struct.  Passes ownership of
 
-  * any allocations in the addrinfo list to the caller, lws will not delete that
 
-  * any more on wsi close after this call.  The caller must call
 
-  * lws_conmon_release() on the struct to destroy any addrinfo in the struct
 
-  * that is prepared by this eventually but it can defer it as long as it wants.
 
-  *
 
-  * Other than the addrinfo list, the contents of the returned object are
 
-  * completely selfcontained and don't point outside of the object itself, ie,
 
-  * everything else in there remains in scope while the object itself does.
 
-  */
 
- LWS_VISIBLE LWS_EXTERN void
 
- lws_conmon_wsi_take(struct lws *wsi, struct lws_conmon *dest);
 
- /**
 
-  * lws_conmon_release() - free any allocations in the conmon struct
 
-  *
 
-  * \param conmon: pointer to conmon struct
 
-  *
 
-  * Destroys any allocations in the conmon struct so it can go out of scope.
 
-  * It doesn't free \p dest itself, it's designed to clean out a struct that
 
-  * is on the stack or embedded in another object.
 
-  */
 
- LWS_VISIBLE LWS_EXTERN void
 
- lws_conmon_release(struct lws_conmon *conmon);
 
- ///@}
 
 
  |