Files
google-apis-rs/rustls/trait.Session.html
2021-04-02 00:20:57 +08:00

107 lines
43 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `Session` trait in crate `rustls`."><meta name="keywords" content="rust, rustlang, rust-lang, Session"><title>rustls::Session - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../rustls/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Trait Session</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.get_alpn_protocol">get_alpn_protocol</a><a href="#tymethod.export_keying_material">export_keying_material</a><a href="#tymethod.read_tls">read_tls</a><a href="#tymethod.write_tls">write_tls</a><a href="#tymethod.process_new_packets">process_new_packets</a><a href="#tymethod.wants_read">wants_read</a><a href="#tymethod.wants_write">wants_write</a><a href="#tymethod.is_handshaking">is_handshaking</a><a href="#tymethod.set_buffer_limit">set_buffer_limit</a><a href="#tymethod.send_close_notify">send_close_notify</a><a href="#tymethod.get_peer_certificates">get_peer_certificates</a><a href="#tymethod.get_protocol_version">get_protocol_version</a><a href="#tymethod.get_negotiated_ciphersuite">get_negotiated_ciphersuite</a></div><a class="sidebar-title" href="#provided-methods">Provided Methods</a><div class="sidebar-links"><a href="#method.complete_io">complete_io</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class="location"><a href="index.html">rustls</a></p><div id="sidebar-vars" data-name="Session" data-ty="trait" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Trait <a href="index.html">rustls</a>::<wbr><a class="trait" href="">Session</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/rustls/session.rs.html#26-210" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class="rust trait">pub trait Session: QuicExt + <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> {
fn <a href="#tymethod.read_tls" class="fnname">read_tls</a>(&amp;mut self, rd: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.write_tls" class="fnname">write_tls</a>(&amp;mut self, wr: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.process_new_packets" class="fnname">process_new_packets</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.wants_read" class="fnname">wants_read</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
<div class="item-spacer"></div> fn <a href="#tymethod.wants_write" class="fnname">wants_write</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
<div class="item-spacer"></div> fn <a href="#tymethod.is_handshaking" class="fnname">is_handshaking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
<div class="item-spacer"></div> fn <a href="#tymethod.set_buffer_limit" class="fnname">set_buffer_limit</a>(&amp;mut self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>);
<div class="item-spacer"></div> fn <a href="#tymethod.send_close_notify" class="fnname">send_close_notify</a>(&amp;mut self);
<div class="item-spacer"></div> fn <a href="#tymethod.get_peer_certificates" class="fnname">get_peer_certificates</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="../rustls/struct.Certificate.html" title="struct rustls::Certificate">Certificate</a>&gt;&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.get_alpn_protocol" class="fnname">get_alpn_protocol</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.get_protocol_version" class="fnname">get_protocol_version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../rustls/internal/msgs/enums/enum.ProtocolVersion.html" title="enum rustls::internal::msgs::enums::ProtocolVersion">ProtocolVersion</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.export_keying_material" class="fnname">export_keying_material</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;;
<div class="item-spacer"></div> fn <a href="#tymethod.get_negotiated_ciphersuite" class="fnname">get_negotiated_ciphersuite</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'static <a class="struct" href="../rustls/struct.SupportedCipherSuite.html" title="struct rustls::SupportedCipherSuite">SupportedCipherSuite</a>&gt;;
fn <a href="#method.complete_io" class="fnname">complete_io</a>&lt;T&gt;(&amp;mut self, io: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;<br>&nbsp;&nbsp;&nbsp; <span class="where">where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T: <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a></span>,
{ ... }
}</pre></div><div class="docblock"><p>Generalises <code>ClientSession</code> and <code>ServerSession</code></p>
</div><h2 id="required-methods" class="small-section-header">Required methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><h3 id="tymethod.read_tls" class="method"><code>fn <a href="#tymethod.read_tls" class="fnname">read_tls</a>(&amp;mut self, rd: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#40" title="goto source code">[src]</a></h3><div class="docblock"><p>Read TLS content from <code>rd</code>. This method does internal
buffering, so <code>rd</code> can supply TLS messages in arbitrary-
sized chunks (like a socket or pipe might).</p>
<p>You should call <code>process_new_packets</code> each time a call to
this function succeeds.</p>
<p>The returned error only relates to IO on <code>rd</code>. TLS-level
errors are emitted from <code>process_new_packets</code>.</p>
<p>This function returns <code>Ok(0)</code> when the underlying <code>rd</code> does
so. This typically happens when a socket is cleanly closed,
or a file is at EOF.</p>
</div><h3 id="tymethod.write_tls" class="method"><code>fn <a href="#tymethod.write_tls" class="fnname">write_tls</a>(&amp;mut self, wr: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#53" title="goto source code">[src]</a></h3><div class="docblock"><p>Writes TLS messages to <code>wr</code>.</p>
<p>On success the function returns <code>Ok(n)</code> where <code>n</code> is a number
of bytes written to <code>wr</code>, number of bytes after encoding and
encryption.</p>
<p>Note that after function return the session buffer maybe not
yet fully flushed. <a href="#tymethod.wants_write"><code>wants_write</code></a> function can be used
to check if output buffer is not empty.</p>
</div><h3 id="tymethod.process_new_packets" class="method"><code>fn <a href="#tymethod.process_new_packets" class="fnname">process_new_packets</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#62" title="goto source code">[src]</a></h3><div class="docblock"><p>Processes any new packets read by a previous call to <code>read_tls</code>.
Errors from this function relate to TLS protocol errors, and
are fatal to the session. Future calls after an error will do
no new work and will return the same error.</p>
<p>Success from this function can mean new plaintext is available:
obtain it using <code>read</code>.</p>
</div><h3 id="tymethod.wants_read" class="method"><code>fn <a href="#tymethod.wants_read" class="fnname">wants_read</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/session.rs.html#66" title="goto source code">[src]</a></h3><div class="docblock"><p>Returns true if the caller should call <code>read_tls</code> as soon
as possible.</p>
</div><h3 id="tymethod.wants_write" class="method"><code>fn <a href="#tymethod.wants_write" class="fnname">wants_write</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/session.rs.html#70" title="goto source code">[src]</a></h3><div class="docblock"><p>Returns true if the caller should call <code>write_tls</code> as soon
as possible.</p>
</div><h3 id="tymethod.is_handshaking" class="method"><code>fn <a href="#tymethod.is_handshaking" class="fnname">is_handshaking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/session.rs.html#75" title="goto source code">[src]</a></h3><div class="docblock"><p>Returns true if the session is currently perform the TLS
handshake. During this time plaintext written to the
session is buffered in memory.</p>
</div><h3 id="tymethod.set_buffer_limit" class="method"><code>fn <a href="#tymethod.set_buffer_limit" class="fnname">set_buffer_limit</a>(&amp;mut self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</code><a class="srclink" href="../src/rustls/session.rs.html#83" title="goto source code">[src]</a></h3><div class="docblock"><p>Sets a limit on the internal buffers used to buffer
unsent plaintext (prior to completing the TLS handshake)
and unsent TLS records.</p>
<p>By default, there is no limit. The limit can be set
at any time, even if the current buffer use is higher.</p>
</div><h3 id="tymethod.send_close_notify" class="method"><code>fn <a href="#tymethod.send_close_notify" class="fnname">send_close_notify</a>(&amp;mut self)</code><a class="srclink" href="../src/rustls/session.rs.html#88" title="goto source code">[src]</a></h3><div class="docblock"><p>Queues a close_notify fatal alert to be sent in the next
<code>write_tls</code> call. This informs the peer that the
connection is being closed.</p>
</div><h3 id="tymethod.get_peer_certificates" class="method"><code>fn <a href="#tymethod.get_peer_certificates" class="fnname">get_peer_certificates</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="../rustls/struct.Certificate.html" title="struct rustls::Certificate">Certificate</a>&gt;&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#103" title="goto source code">[src]</a></h3><div class="docblock"><p>Retrieves the certificate chain used by the peer to authenticate.</p>
<p>The order of the certificate chain is as it appears in the TLS
protocol: the first certificate relates to the peer, the
second certifies the first, the third certifies the second, and
so on.</p>
<p>For clients, this is the certificate chain of the server.</p>
<p>For servers, this is the certificate chain of the client,
if client authentication was completed.</p>
<p>The return value is None until this value is available.</p>
</div><h3 id="tymethod.get_alpn_protocol" class="method"><code>fn <a href="#tymethod.get_alpn_protocol" class="fnname">get_alpn_protocol</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#110" title="goto source code">[src]</a></h3><div class="docblock"><p>Retrieves the protocol agreed with the peer via ALPN.</p>
<p>A return value of None after handshake completion
means no protocol was agreed (because no protocols
were offered or accepted by the peer).</p>
</div><h3 id="tymethod.get_protocol_version" class="method"><code>fn <a href="#tymethod.get_protocol_version" class="fnname">get_protocol_version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../rustls/internal/msgs/enums/enum.ProtocolVersion.html" title="enum rustls::internal::msgs::enums::ProtocolVersion">ProtocolVersion</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#115" title="goto source code">[src]</a></h3><div class="docblock"><p>Retrieves the protocol version agreed with the peer.</p>
<p>This returns None until the version is agreed.</p>
</div><h3 id="tymethod.export_keying_material" class="method"><code>fn <a href="#tymethod.export_keying_material" class="fnname">export_keying_material</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;output: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;label: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;context: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#130-135" title="goto source code">[src]</a></h3><div class="docblock"><p>Derives key material from the agreed session secrets.</p>
<p>This function fills in <code>output</code> with <code>output.len()</code> bytes of key
material derived from the master session secret using <code>label</code>
and <code>context</code> for diversification.</p>
<p>See RFC5705 for more details on what this does and is for.</p>
<p>For TLS1.3 connections, this function does not use the
&quot;early&quot; exporter at any point.</p>
<p>This function fails if called prior to the handshake completing;
check with <code>is_handshaking()</code> first.</p>
</div><h3 id="tymethod.get_negotiated_ciphersuite" class="method"><code>fn <a href="#tymethod.get_negotiated_ciphersuite" class="fnname">get_negotiated_ciphersuite</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'static <a class="struct" href="../rustls/struct.SupportedCipherSuite.html" title="struct rustls::SupportedCipherSuite">SupportedCipherSuite</a>&gt;</code><a class="srclink" href="../src/rustls/session.rs.html#140" title="goto source code">[src]</a></h3><div class="docblock"><p>Retrieves the ciphersuite agreed with the peer.</p>
<p>This returns None until the ciphersuite is agreed.</p>
</div></div><span class="loading-content">Loading content...</span><h2 id="provided-methods" class="small-section-header">Provided methods<a href="#provided-methods" class="anchor"></a></h2><div class="methods"><h3 id="method.complete_io" class="method"><code>fn <a href="#method.complete_io" class="fnname">complete_io</a>&lt;T&gt;(&amp;mut self, io: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;T: <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a>,&nbsp;</span></code><a class="srclink" href="../src/rustls/session.rs.html#164-209" title="goto source code">[src]</a></h3><div class="docblock"><p>This function uses <code>io</code> to complete any outstanding IO for
this session.</p>
<p>This is a convenience function which solely uses other parts
of the public API.</p>
<p>What this means depends on the session state:</p>
<ul>
<li>If the session <code>is_handshaking()</code>, then IO is performed until
the handshake is complete.</li>
<li>Otherwise, if <code>wants_write</code> is true, <code>write_tls</code> is invoked
until it is all written.</li>
<li>Otherwise, if <code>wants_read</code> is true, <code>read_tls</code> is invoked
once.</li>
</ul>
<p>The return value is the number of bytes read from and written
to <code>io</code>, respectively.</p>
<p>This function will block if <code>io</code> blocks.</p>
<p>Errors from TLS record handling (ie, from <code>process_new_packets()</code>)
are wrapped in an <code>io::ErrorKind::InvalidData</code>-kind error.</p>
</div></div><span class="loading-content">Loading content...</span><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div class="item-list" id="implementors-list"><h3 id="impl-Session" class="impl"><code class="in-band">impl Session for <a class="struct" href="../rustls/struct.ClientSession.html" title="struct rustls::ClientSession">ClientSession</a></code><a href="#impl-Session" class="anchor"></a><a class="srclink" href="../src/rustls/client/mod.rs.html#706-767" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.read_tls" class="method hidden"><code>fn <a href="#method.read_tls" class="fnname">read_tls</a>(&amp;mut self, rd: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#707-709" title="goto source code">[src]</a></h4><h4 id="method.write_tls" class="method"><code>fn <a href="#method.write_tls" class="fnname">write_tls</a>(&amp;mut self, wr: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#712-714" title="goto source code">[src]</a></h4><div class="docblock"><p>Writes TLS messages to <code>wr</code>.</p>
</div><h4 id="method.process_new_packets" class="method hidden"><code>fn <a href="#method.process_new_packets" class="fnname">process_new_packets</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#716-718" title="goto source code">[src]</a></h4><h4 id="method.wants_read" class="method hidden"><code>fn <a href="#method.wants_read" class="fnname">wants_read</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/client/mod.rs.html#720-722" title="goto source code">[src]</a></h4><h4 id="method.wants_write" class="method hidden"><code>fn <a href="#method.wants_write" class="fnname">wants_write</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/client/mod.rs.html#724-726" title="goto source code">[src]</a></h4><h4 id="method.is_handshaking" class="method hidden"><code>fn <a href="#method.is_handshaking" class="fnname">is_handshaking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/client/mod.rs.html#728-730" title="goto source code">[src]</a></h4><h4 id="method.set_buffer_limit" class="method hidden"><code>fn <a href="#method.set_buffer_limit" class="fnname">set_buffer_limit</a>(&amp;mut self, len: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</code><a class="srclink" href="../src/rustls/client/mod.rs.html#732-734" title="goto source code">[src]</a></h4><h4 id="method.send_close_notify" class="method hidden"><code>fn <a href="#method.send_close_notify" class="fnname">send_close_notify</a>(&amp;mut self)</code><a class="srclink" href="../src/rustls/client/mod.rs.html#736-738" title="goto source code">[src]</a></h4><h4 id="method.get_peer_certificates" class="method hidden"><code>fn <a href="#method.get_peer_certificates" class="fnname">get_peer_certificates</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="../rustls/struct.Certificate.html" title="struct rustls::Certificate">Certificate</a>&gt;&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#740-742" title="goto source code">[src]</a></h4><h4 id="method.get_alpn_protocol" class="method hidden"><code>fn <a href="#method.get_alpn_protocol" class="fnname">get_alpn_protocol</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#744-746" title="goto source code">[src]</a></h4><h4 id="method.get_protocol_version" class="method hidden"><code>fn <a href="#method.get_protocol_version" class="fnname">get_protocol_version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../rustls/internal/msgs/enums/enum.ProtocolVersion.html" title="enum rustls::internal::msgs::enums::ProtocolVersion">ProtocolVersion</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#748-750" title="goto source code">[src]</a></h4><h4 id="method.export_keying_material" class="method hidden"><code>fn <a href="#method.export_keying_material" class="fnname">export_keying_material</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;output: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;label: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;context: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#752-760" title="goto source code">[src]</a></h4><h4 id="method.get_negotiated_ciphersuite" class="method hidden"><code>fn <a href="#method.get_negotiated_ciphersuite" class="fnname">get_negotiated_ciphersuite</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'static <a class="struct" href="../rustls/struct.SupportedCipherSuite.html" title="struct rustls::SupportedCipherSuite">SupportedCipherSuite</a>&gt;</code><a class="srclink" href="../src/rustls/client/mod.rs.html#762-766" title="goto source code">[src]</a></h4></div><h3 id="impl-Session-1" class="impl"><code class="in-band">impl Session for <a class="struct" href="../rustls/struct.ServerSession.html" title="struct rustls::ServerSession">ServerSession</a></code><a href="#impl-Session-1" class="anchor"></a><a class="srclink" href="../src/rustls/server/mod.rs.html#648-707" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.read_tls-1" class="method hidden"><code>fn <a href="#method.read_tls-1" class="fnname">read_tls</a>(&amp;mut self, rd: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#649-651" title="goto source code">[src]</a></h4><h4 id="method.write_tls-1" class="method"><code>fn <a href="#method.write_tls-1" class="fnname">write_tls</a>(&amp;mut self, wr: &amp;mut dyn <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#654-656" title="goto source code">[src]</a></h4><div class="docblock"><p>Writes TLS messages to <code>wr</code>.</p>
</div><h4 id="method.process_new_packets-1" class="method hidden"><code>fn <a href="#method.process_new_packets-1" class="fnname">process_new_packets</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#658-660" title="goto source code">[src]</a></h4><h4 id="method.wants_read-1" class="method hidden"><code>fn <a href="#method.wants_read-1" class="fnname">wants_read</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/server/mod.rs.html#662-664" title="goto source code">[src]</a></h4><h4 id="method.wants_write-1" class="method hidden"><code>fn <a href="#method.wants_write-1" class="fnname">wants_write</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/server/mod.rs.html#666-668" title="goto source code">[src]</a></h4><h4 id="method.is_handshaking-1" class="method hidden"><code>fn <a href="#method.is_handshaking-1" class="fnname">is_handshaking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code><a class="srclink" href="../src/rustls/server/mod.rs.html#670-672" title="goto source code">[src]</a></h4><h4 id="method.set_buffer_limit-1" class="method hidden"><code>fn <a href="#method.set_buffer_limit-1" class="fnname">set_buffer_limit</a>(&amp;mut self, len: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</code><a class="srclink" href="../src/rustls/server/mod.rs.html#674-676" title="goto source code">[src]</a></h4><h4 id="method.send_close_notify-1" class="method hidden"><code>fn <a href="#method.send_close_notify-1" class="fnname">send_close_notify</a>(&amp;mut self)</code><a class="srclink" href="../src/rustls/server/mod.rs.html#678-680" title="goto source code">[src]</a></h4><h4 id="method.get_peer_certificates-1" class="method hidden"><code>fn <a href="#method.get_peer_certificates-1" class="fnname">get_peer_certificates</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="../rustls/struct.Certificate.html" title="struct rustls::Certificate">Certificate</a>&gt;&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#682-684" title="goto source code">[src]</a></h4><h4 id="method.get_alpn_protocol-1" class="method hidden"><code>fn <a href="#method.get_alpn_protocol-1" class="fnname">get_alpn_protocol</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#686-688" title="goto source code">[src]</a></h4><h4 id="method.get_protocol_version-1" class="method hidden"><code>fn <a href="#method.get_protocol_version-1" class="fnname">get_protocol_version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../rustls/internal/msgs/enums/enum.ProtocolVersion.html" title="enum rustls::internal::msgs::enums::ProtocolVersion">ProtocolVersion</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#690-692" title="goto source code">[src]</a></h4><h4 id="method.export_keying_material-1" class="method hidden"><code>fn <a href="#method.export_keying_material-1" class="fnname">export_keying_material</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;output: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;label: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;context: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="enum" href="../rustls/enum.TLSError.html" title="enum rustls::TLSError">TLSError</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#694-702" title="goto source code">[src]</a></h4><h4 id="method.get_negotiated_ciphersuite-1" class="method hidden"><code>fn <a href="#method.get_negotiated_ciphersuite-1" class="fnname">get_negotiated_ciphersuite</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'static <a class="struct" href="../rustls/struct.SupportedCipherSuite.html" title="struct rustls::SupportedCipherSuite">SupportedCipherSuite</a>&gt;</code><a class="srclink" href="../src/rustls/server/mod.rs.html#704-706" title="goto source code">[src]</a></h4></div></div><span class="loading-content">Loading content...</span><script type="text/javascript" src="../implementors/rustls/trait.Session.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="rustls"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>