aws-sdk-rust 0.1.42

Important Enhancements: 1) Supports V2 and V4 API Signatures for third party S3 compliant products like Ceph 2) Works from behind proxies 3) Returned data can be in Rust structs, JSON or XML Works only for S3. Other AWS Storage features are coming soon!
<!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="Source to the Rust file `src/http/client/net.rs`.">
    <meta name="keywords" content="rust, rustlang, rust-lang">

    <title>net.rs.html -- source</title>

    <link rel="stylesheet" type="text/css" href="../../../../normalize.css">
    <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css">
    <link rel="stylesheet" type="text/css" href="../../../../main.css">
    

    <link rel="shortcut icon" href="https://lambdastackio.github.io/static/images/favicon.ico">
    
</head>
<body class="rustdoc source">
    <!--[if lte IE 8]>
    <div class="warning">
        This old browser is unsupported and will most likely display funky
        things.
    </div>
    <![endif]-->

    

    <nav class="sidebar">
        <a href='../../../../aws_sdk_rust/index.html'><img src='https://lambdastackio.github.io/static/images/lambdastack-200x200.png' alt='logo' width='100'></a>
        
    </nav>

    <nav class="sub">
        <form class="search-form js-only">
            <div class="search-container">
                <input class="search-input" name="search"
                       autocomplete="off"
                       placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
                       type="search">
            </div>
        </form>
    </nav>

    <section id='main' class="content"><pre class="line-numbers"><span id="1">  1</span>
<span id="2">  2</span>
<span id="3">  3</span>
<span id="4">  4</span>
<span id="5">  5</span>
<span id="6">  6</span>
<span id="7">  7</span>
<span id="8">  8</span>
<span id="9">  9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
</pre><pre class="rust ">
<span class="comment">/*
 Copyright 2017 LambdaStack All rights reserved.

 Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
*/</span>

<span class="comment">// Copyright (c) 2016 Chef Software Inc. and/or applicable contributors</span>
<span class="comment">//</span>
<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
<span class="comment">// you may not use this file except in compliance with the License.</span>
<span class="comment">// You may obtain a copy of the License at</span>
<span class="comment">//</span>
<span class="comment">//     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="comment">//</span>
<span class="comment">// Unless required by applicable law or agreed to in writing, software</span>
<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="comment">// See the License for the specific language governing permissions and</span>
<span class="comment">// limitations under the License.</span>

<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">io</span>::{<span class="ident">Read</span>, <span class="ident">Write</span>};

<span class="kw">use</span> <span class="ident">httparse</span>;
<span class="kw">use</span> <span class="ident">hyper</span>;
<span class="kw">use</span> <span class="ident">hyper</span>::<span class="ident">method</span>::<span class="ident">Method</span>;
<span class="kw">use</span> <span class="ident">hyper</span>::<span class="ident">version</span>::<span class="ident">HttpVersion</span>;
<span class="kw">use</span> <span class="ident">hyper</span>::<span class="ident">net</span>::{<span class="ident">HttpConnector</span>, <span class="ident">HttpsStream</span>, <span class="ident">NetworkConnector</span>, <span class="ident">SslClient</span>};

<span class="kw">use</span> <span class="ident">http</span>::<span class="ident">client</span>::<span class="ident">proxy</span>::<span class="ident">Proxy</span>;

<span class="doccomment">/// A connector that uses an HTTP proxy server (pass-through for plaintext and tunneled for SSL</span>
<span class="doccomment">/// sessions).</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">ProxyHttpsConnector</span><span class="op">&lt;</span><span class="ident">S</span>: <span class="ident">SslClient</span><span class="op">&gt;</span> {
    <span class="ident">proxy</span>: <span class="ident">Proxy</span>,
    <span class="ident">proxy_connector</span>: <span class="ident">HttpConnector</span>,
    <span class="ident">ssl_client</span>: <span class="ident">S</span>,
}

<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">S</span>: <span class="ident">SslClient</span><span class="op">&gt;</span> <span class="ident">ProxyHttpsConnector</span><span class="op">&lt;</span><span class="ident">S</span><span class="op">&gt;</span> {
    <span class="doccomment">/// Creates a new connection using the provided proxy server configuration and SSL</span>
    <span class="doccomment">/// implementation.</span>
    <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">proxy</span>: <span class="ident">Proxy</span>, <span class="ident">ssl</span>: <span class="ident">S</span>) <span class="op">-&gt;</span> <span class="ident">hyper</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="self">Self</span><span class="op">&gt;</span> {
        <span class="prelude-val">Ok</span>(<span class="ident">ProxyHttpsConnector</span> {
            <span class="ident">proxy</span>: <span class="ident">proxy</span>,
            <span class="ident">proxy_connector</span>: <span class="ident">HttpConnector</span>,
            <span class="ident">ssl_client</span>: <span class="ident">ssl</span>,
        })
    }
}

<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">S</span>: <span class="ident">SslClient</span><span class="op">&gt;</span> <span class="ident">NetworkConnector</span> <span class="kw">for</span> <span class="ident">ProxyHttpsConnector</span><span class="op">&lt;</span><span class="ident">S</span><span class="op">&gt;</span> {
    <span class="kw">type</span> <span class="ident">Stream</span> <span class="op">=</span> <span class="ident">HttpsStream</span><span class="op">&lt;</span><span class="ident">S</span>::<span class="ident">Stream</span><span class="op">&gt;</span>;

    <span class="kw">fn</span> <span class="ident">connect</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">host</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">port</span>: <span class="ident">u16</span>, <span class="ident">scheme</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-&gt;</span> <span class="ident">hyper</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="self">Self</span>::<span class="ident">Stream</span><span class="op">&gt;</span> {
        <span class="comment">// Initial connection to the proxy server, using an `HttpConnector`</span>
        <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stream</span> <span class="op">=</span> <span class="macro">try</span><span class="macro">!</span>(<span class="self">self</span>.<span class="ident">proxy_connector</span>
            .<span class="ident">connect</span>(<span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">host</span>(), <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">port</span>(), <span class="string">&quot;http&quot;</span>));
        <span class="kw">match</span> <span class="ident">scheme</span> {
            <span class="string">&quot;https&quot;</span> <span class="op">=&gt;</span> {
                <span class="comment">// If the target URL is an `&quot;https&quot;` scheme, then we use proxy/TCP tunneling as</span>
                <span class="comment">// per the RFC draft:</span>
                <span class="comment">// http://www.web-cache.com/Writings/Internet-Drafts/draft-luotonen-web-proxy-tunneling-01.txt</span>
                <span class="comment">//</span>
                <span class="comment">// We can&#39;t yet use hyper directly and therefore use the underlying http parsing</span>
                <span class="comment">// library to establish the connection and parse the response. This implementation</span>
                <span class="comment">// is largely based on hyper&#39;s internal proxy tunneling code.</span>
                <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">connect_msg</span> <span class="op">=</span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{method} {host}:{port} {version}\r\nHost \
                                               {host}:{port}\r\n&quot;</span>,
                                              <span class="ident">method</span> <span class="op">=</span> <span class="ident">Method</span>::<span class="ident">Connect</span>,
                                              <span class="ident">version</span> <span class="op">=</span> <span class="ident">HttpVersion</span>::<span class="ident">Http11</span>,
                                              <span class="ident">host</span> <span class="op">=</span> <span class="ident">host</span>,
                                              <span class="ident">port</span> <span class="op">=</span> <span class="ident">port</span>);
                <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">header_value</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">authorization_header_value</span>() {
                    <span class="ident">connect_msg</span>.<span class="ident">push_str</span>(<span class="kw-2">&amp;</span><span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;Proxy-Authorization: {}\r\n&quot;</span>, <span class="ident">header_value</span>));
                };
                <span class="ident">connect_msg</span>.<span class="ident">push_str</span>(<span class="string">&quot;\r\n&quot;</span>);
                <span class="macro">debug</span><span class="macro">!</span>(<span class="string">&quot;Proxy {}:{} {:?}&quot;</span>,
                       <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">host</span>(),
                       <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">port</span>(),
                       <span class="ident">connect_msg</span>.<span class="ident">trim</span>().<span class="ident">replace</span>(<span class="string">&quot;\r\n&quot;</span>, <span class="string">&quot;, &quot;</span>));
                <span class="macro">try</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">write_all</span>(<span class="ident">connect_msg</span>.<span class="ident">as_bytes</span>()));
                <span class="macro">try</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">flush</span>());
                <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buf</span> <span class="op">=</span> [<span class="number">0</span>; <span class="number">1024</span>];
                <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">n</span> <span class="op">=</span> <span class="number">0</span>;
                <span class="kw">while</span> <span class="ident">n</span> <span class="op">&lt;</span> <span class="ident">buf</span>.<span class="ident">len</span>() {
                    <span class="ident">n</span> <span class="op">+=</span> <span class="macro">try</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">read</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">buf</span>[<span class="ident">n</span>..]));
                    <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">headers</span> <span class="op">=</span> [<span class="ident">httparse</span>::<span class="ident">EMPTY_HEADER</span>; <span class="number">10</span>];
                    <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">httparse</span>::<span class="ident">Response</span>::<span class="ident">new</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">headers</span>);
                    <span class="kw">if</span> <span class="macro">try</span><span class="macro">!</span>(<span class="ident">res</span>.<span class="ident">parse</span>(<span class="kw-2">&amp;</span><span class="ident">buf</span>[..<span class="ident">n</span>])).<span class="ident">is_complete</span>() {
                        <span class="kw">let</span> <span class="ident">code</span> <span class="op">=</span> <span class="ident">res</span>.<span class="ident">code</span>.<span class="ident">expect</span>(<span class="string">&quot;complete parsing lost code&quot;</span>);
                        <span class="kw">if</span> <span class="ident">code</span> <span class="op">&gt;=</span> <span class="number">200</span> <span class="op">&amp;&amp;</span> <span class="ident">code</span> <span class="op">&lt;</span> <span class="number">300</span> {
                            <span class="macro">debug</span><span class="macro">!</span>(<span class="string">&quot;Proxy {}:{} CONNECT success = {}&quot;</span>,
                                   <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">host</span>(),
                                   <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">port</span>(),
                                   <span class="ident">code</span>);
                            <span class="kw">return</span> <span class="self">self</span>.<span class="ident">ssl_client</span>
                                .<span class="ident">wrap_client</span>(<span class="ident">stream</span>, <span class="ident">host</span>)
                                .<span class="ident">map</span>(<span class="ident">HttpsStream</span>::<span class="ident">Https</span>);
                        } <span class="kw">else</span> {
                            <span class="macro">debug</span><span class="macro">!</span>(<span class="string">&quot;Proxy {}:{} CONNECT failed response = {}&quot;</span>,
                                   <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">host</span>(),
                                   <span class="self">self</span>.<span class="ident">proxy</span>.<span class="ident">port</span>(),
                                   <span class="ident">code</span>);
                            <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">hyper</span>::<span class="ident">Error</span>::<span class="ident">Status</span>);
                        }
                    }
                }
                <span class="prelude-val">Err</span>(<span class="ident">hyper</span>::<span class="ident">Error</span>::<span class="ident">TooLarge</span>)
            }
            _ <span class="op">=&gt;</span> <span class="prelude-val">Ok</span>(<span class="ident">HttpsStream</span>::<span class="ident">Http</span>(<span class="ident">stream</span>)),
        }
    }
}
</pre>
</section>
    <section id='search' class="content hidden"></section>

    <section class="footer"></section>

    <aside id="help" class="hidden">
        <div>
            <h1 class="hidden">Help</h1>

            <div class="shortcuts">
                <h2>Keyboard Shortcuts</h2>

                <dl>
                    <dt>?</dt>
                    <dd>Show this help dialog</dd>
                    <dt>S</dt>
                    <dd>Focus the search field</dd>
                    <dt>&larrb;</dt>
                    <dd>Move up in search results</dd>
                    <dt>&rarrb;</dt>
                    <dd>Move down in search results</dd>
                    <dt>&#9166;</dt>
                    <dd>Go to active search result</dd>
                    <dt>+</dt>
                    <dd>Collapse/expand all sections</dd>
                </dl>
            </div>

            <div class="infos">
                <h2>Search Tricks</h2>

                <p>
                    Prefix searches with a type followed by a colon (e.g.
                    <code>fn:</code>) to restrict the search to a given type.
                </p>

                <p>
                    Accepted types are: <code>fn</code>, <code>mod</code>,
                    <code>struct</code>, <code>enum</code>,
                    <code>trait</code>, <code>type</code>, <code>macro</code>,
                    and <code>const</code>.
                </p>

                <p>
                    Search functions by type signature (e.g.
                    <code>vec -> usize</code> or <code>* -> vec</code>)
                </p>
            </div>
        </div>
    </aside>

    

    <script>
        window.rootPath = "../../../../";
        window.currentCrate = "aws_sdk_rust";
    </script>
    <script src="../../../../main.js"></script>
    <script defer src="../../../../search-index.js"></script>
</body>
</html>