import React from 'react' import _ from 'lodash' import { formatTimeStamp, formatTimeDelta } from '../../utils.js' export function TimeStamp({ t, deltaTo, title }) { return t ? ( {title}: {formatTimeStamp(t)} {deltaTo && ( ({formatTimeDelta(1000 * (t - deltaTo))}) )} ) : ( ) } export function ConnectionInfo({ conn }) { return ( {conn.sni && ( )}
Address: {conn.address.join(':')}
TLS SNI: {conn.sni}
) } export function CertificateInfo({ flow }) { // @todo We should fetch human-readable certificate representation from the server return (
{flow.client_conn.cert && [

Client Certificate

,
{flow.client_conn.cert}
]} {flow.server_conn.cert && [

Server Certificate

,
{flow.server_conn.cert}
]}
) } export function Timing({ flow }) { const { server_conn: sc, client_conn: cc, request: req, response: res } = flow const timestamps = [ { title: "Server conn. initiated", t: sc.timestamp_start, deltaTo: req.timestamp_start }, { title: "Server conn. TCP handshake", t: sc.timestamp_tcp_setup, deltaTo: req.timestamp_start }, { title: "Server conn. SSL handshake", t: sc.timestamp_ssl_setup, deltaTo: req.timestamp_start }, { title: "Client conn. established", t: cc.timestamp_start, deltaTo: req.timestamp_start }, { title: "Client conn. SSL handshake", t: cc.timestamp_ssl_setup, deltaTo: req.timestamp_start }, { title: "First request byte", t: req.timestamp_start, }, { title: "Request complete", t: req.timestamp_end, deltaTo: req.timestamp_start }, res && { title: "First response byte", t: res.timestamp_start, deltaTo: req.timestamp_start }, res && { title: "Response complete", t: res.timestamp_end, deltaTo: req.timestamp_start } ] return (

Timing

{timestamps.filter(v => v).sort((a, b) => a.t - b.t).map(item => ( ))}
) } export default function Details({ flow }) { return (

Client Connection

Server Connection

) }