Files
metasploit-gs/api/Rex/Proto/Http/Client.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

4758 lines
210 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>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Rex::Proto::Http::Client
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../../../css/style.css" type="text/css" />
<link rel="stylesheet" href="../../../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Rex::Proto::Http::Client";
relpath = '../../../';
</script>
<script type="text/javascript" charset="utf-8" src="../../../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../../../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../../../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../../../_index.html">Index (C)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span>
&raquo;
<span class="title">Client</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Rex::Proto::Http::Client
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Rex::Proto::Http::Client</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/rex/proto/http/client.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>Acts as a client to an HTTP server, sending requests and receiving responses.</p>
<p>See the RFC: <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">www.w3.org/Protocols/rfc2616/rfc2616.html</a></p>
</div>
</div>
<div class="tags">
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#comm-instance_method" title="#comm (instance method)">#<strong>comm</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>An optional comm to use for creating the underlying socket.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#config-instance_method" title="#config (instance method)">#<strong>config</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The client request configuration.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#config_types-instance_method" title="#config_types (instance method)">#<strong>config_types</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The client request configuration classes.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#conn-instance_method" title="#conn (instance method)">#<strong>conn</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The underlying connection.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#context-instance_method" title="#context (instance method)">#<strong>context</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The calling context to pass to the socket.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#hostname-instance_method" title="#hostname (instance method)">#<strong>hostname</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>:nodoc:.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#junk_pipeline-instance_method" title="#junk_pipeline (instance method)">#<strong>junk_pipeline</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>When parsing the request, thunk off the first response from the server, since junk.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#kerberos_authenticator-instance_method" title="#kerberos_authenticator (instance method)">#<strong>kerberos_authenticator</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Auth.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#krb_encryptor-instance_method" title="#krb_encryptor (instance method)">#<strong>krb_encryptor</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>The established kerberos connection info.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#local_host-instance_method" title="#local_host (instance method)">#<strong>local_host</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The local host of the client.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#local_port-instance_method" title="#local_port (instance method)">#<strong>local_port</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The local port of the client.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#ntlm_client-instance_method" title="#ntlm_client (instance method)">#<strong>ntlm_client</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>The established NTLM connection info.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#password-instance_method" title="#password (instance method)">#<strong>password</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Auth.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#pipeline-instance_method" title="#pipeline (instance method)">#<strong>pipeline</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Whether or not pipelining is in use.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#port-instance_method" title="#port (instance method)">#<strong>port</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>:nodoc:.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#proxies-instance_method" title="#proxies (instance method)">#<strong>proxies</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The proxy list.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#ssl-instance_method" title="#ssl (instance method)">#<strong>ssl</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>https.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#ssl_version-instance_method" title="#ssl_version (instance method)">#<strong>ssl_version</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>https.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#sslkeylogfile-instance_method" title="#sslkeylogfile (instance method)">#<strong>sslkeylogfile</strong> &#x21d2; String </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>The SSL key log file for the connected socket.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#subscriber-instance_method" title="#subscriber (instance method)">#<strong>subscriber</strong> &#x21d2; Rex::Proto::Http::HttpSubscriber </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The HTTP subscriber.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#username-instance_method" title="#username (instance method)">#<strong>username</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Auth.</p>
</div></span>
</li>
</ul>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#_send_recv-instance_method" title="#_send_recv (instance method)">#<strong>_send_recv</strong>(req, t = -1,, persist = false) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Transmit an HTTP request and receive the response.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#basic_auth_header-instance_method" title="#basic_auth_header (instance method)">#<strong>basic_auth_header</strong>(username, password) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Converts username and password into the HTTP Basic authorization string.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#channel_binding-instance_method" title="#channel_binding (instance method)">#<strong>channel_binding</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#close-instance_method" title="#close (instance method)">#<strong>close</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Closes the connection to the remote server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#conn%3F-instance_method" title="#conn? (instance method)">#<strong>conn?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns whether or not the conn is valid.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#connect-instance_method" title="#connect (instance method)">#<strong>connect</strong>(t = -1)) &#x21d2; Rex::Socket::Tcp </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Connects to the remote server if possible.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#digest_auth-instance_method" title="#digest_auth (instance method)">#<strong>digest_auth</strong>(opts = {}) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Send a series of requests to complete Digest Authentication.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(host, port = 80, context = {}, ssl = nil, ssl_version = nil, proxies = nil, username = &#39;&#39;, password = &#39;&#39;, kerberos_authenticator: nil, comm: nil, subscriber: nil, sslkeylogfile: nil) &#x21d2; Client </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Creates a new client instance.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#kerberos_auth-instance_method" title="#kerberos_auth (instance method)">#<strong>kerberos_auth</strong>(opts = {}, mechanism: Rex::Proto::Gss::Mechanism::KERBEROS) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#negotiate_auth-instance_method" title="#negotiate_auth (instance method)">#<strong>negotiate_auth</strong>(opts = {}) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Builds a series of requests to complete Negotiate Auth.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#peerinfo-instance_method" title="#peerinfo (instance method)">#<strong>peerinfo</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Target host addr and port for this connection.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#pipelining%3F-instance_method" title="#pipelining? (instance method)">#<strong>pipelining?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Whether or not connections should be pipelined.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#read_response-instance_method" title="#read_response (instance method)">#<strong>read_response</strong>(t = -1,, opts = {}) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Read a response from the server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#request_cgi-instance_method" title="#request_cgi (instance method)">#<strong>request_cgi</strong>(opts = {}) &#x21d2; ClientRequest </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Create a CGI compatible request.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#request_raw-instance_method" title="#request_raw (instance method)">#<strong>request_raw</strong>(opts = {}) &#x21d2; ClientRequest </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Create an arbitrary HTTP request.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_auth-instance_method" title="#send_auth (instance method)">#<strong>send_auth</strong>(res, opts, t, persist) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Resends an HTTP Request with the proper authentication headers set.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_recv-instance_method" title="#send_recv (instance method)">#<strong>send_recv</strong>(req, t = -1,, persist = false) &#x21d2; Response </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Sends a request and gets a response back.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_request-instance_method" title="#send_request (instance method)">#<strong>send_request</strong>(req, t = -1)) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Send an HTTP request to the server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#set_config-instance_method" title="#set_config (instance method)">#<strong>set_config</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Set configuration options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stop-instance_method" title="#stop (instance method)">#<strong>stop</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Cleans up any outstanding connections and other resources.</p>
</div></span>
</li>
</ul>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(host, port = 80, context = {}, ssl = nil, ssl_version = nil, proxies = nil, username = &#39;&#39;, password = &#39;&#39;, kerberos_authenticator: nil, comm: nil, subscriber: nil, sslkeylogfile: nil) &#x21d2; <tt><span class='object_link'><a href="" title="Rex::Proto::Http::Client (class)">Client</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Creates a new client instance</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>subscriber</span>
<span class='type'>(<tt><span class='object_link'><a href="HttpSubscriber.html" title="Rex::Proto::Http::HttpSubscriber (class)">Rex::Proto::Http::HttpSubscriber</a></span></tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>A subscriber to Http requests/responses</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 24</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_host'>host</span><span class='comma'>,</span> <span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='int'>80</span><span class='comma'>,</span> <span class='id identifier rubyid_context'>context</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='id identifier rubyid_ssl'>ssl</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_ssl_version'>ssl_version</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_proxies'>proxies</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_username'>username</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_password'>password</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>kerberos_authenticator:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>comm:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>subscriber:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>sslkeylogfile:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_hostname'>hostname</span> <span class='op'>=</span> <span class='id identifier rubyid_host'>host</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_context'>context</span> <span class='op'>=</span> <span class='id identifier rubyid_context'>context</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl'>ssl</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl'>ssl</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_version'>ssl_version</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl_version'>ssl_version</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_proxies'>proxies</span> <span class='op'>=</span> <span class='id identifier rubyid_proxies'>proxies</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_username'>username</span> <span class='op'>=</span> <span class='id identifier rubyid_username'>username</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_password'>password</span> <span class='op'>=</span> <span class='id identifier rubyid_password'>password</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_comm'>comm</span> <span class='op'>=</span> <span class='id identifier rubyid_comm'>comm</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_subscriber'>subscriber</span> <span class='op'>=</span> <span class='id identifier rubyid_subscriber'>subscriber</span> <span class='op'>||</span> <span class='const'><span class='object_link'><a href="HttpSubscriber.html" title="Rex::Proto::Http::HttpSubscriber (class)">HttpSubscriber</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_sslkeylogfile'>sslkeylogfile</span> <span class='op'>=</span> <span class='id identifier rubyid_sslkeylogfile'>sslkeylogfile</span>
<span class='comment'># Take ClientRequest&#39;s defaults, but override with our own
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ClientRequest.html#DefaultConfig-constant" title="Rex::Proto::Http::ClientRequest::DefaultConfig (constant)">DefaultConfig</a></span></span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>read_max_data</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lparen'>(</span><span class='int'>1024</span> <span class='op'>*</span> <span class='int'>1024</span> <span class='op'>*</span> <span class='int'>1</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vhost</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssl_server_name_indication</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_hostname'>hostname</span>
<span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>agent</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../UserAgent.html" title="Rex::UserAgent (module)">UserAgent</a></span></span><span class='period'>.</span><span class='id identifier rubyid_session_agent'><span class='object_link'><a href="../../UserAgent.html#session_agent-class_method" title="Rex::UserAgent.session_agent (method)">session_agent</a></span></span>
<span class='comment'># XXX: This info should all be controlled by ClientRequest
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_config_types'>config_types</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_encode_mode</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hex-normal</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hex-all</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hex-random</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hex-noslashes</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u-normal</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u-random</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u-all</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_encode_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_full_url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_method_uri_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_uri_version_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_method_uri_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>space</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tab</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>apache</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_uri_version_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>space</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tab</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>apache</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method_random_valid</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method_random_invalid</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method_random_case</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>version_random_valid</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>version_random_invalid</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_dir_self_reference</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_dir_fake_relative</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_use_backslashes</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_fake_headers</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_fake_headers_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_get_params</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_get_params_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_post_params</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pad_post_params_count</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>shuffle_get_params</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>shuffle_post_params</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_fake_end</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri_fake_params_start</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>header_folding</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>chunked_size</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>partial</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id="comm=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="comm-instance_method">
#<strong>comm</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>An optional comm to use for creating the underlying socket.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
695
696
697</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 695</span>
<span class='kw'>def</span> <span class='id identifier rubyid_comm'>comm</span>
<span class='ivar'>@comm</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="config=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="config-instance_method">
#<strong>config</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The client request configuration</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
699
700
701</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 699</span>
<span class='kw'>def</span> <span class='id identifier rubyid_config'>config</span>
<span class='ivar'>@config</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="config_types=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="config_types-instance_method">
#<strong>config_types</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The client request configuration classes</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
703
704
705</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 703</span>
<span class='kw'>def</span> <span class='id identifier rubyid_config_types'>config_types</span>
<span class='ivar'>@config_types</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="conn=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="conn-instance_method">
#<strong>conn</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The underlying connection.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
719
720
721</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 719</span>
<span class='kw'>def</span> <span class='id identifier rubyid_conn'>conn</span>
<span class='ivar'>@conn</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="context=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="context-instance_method">
#<strong>context</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The calling context to pass to the socket</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
723
724
725</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 723</span>
<span class='kw'>def</span> <span class='id identifier rubyid_context'>context</span>
<span class='ivar'>@context</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="hostname=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="hostname-instance_method">
#<strong>hostname</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>:nodoc:</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
743
744
745</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 743</span>
<span class='kw'>def</span> <span class='id identifier rubyid_hostname'>hostname</span>
<span class='ivar'>@hostname</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="junk_pipeline=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="junk_pipeline-instance_method">
#<strong>junk_pipeline</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>When parsing the request, thunk off the first response from the server, since junk</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
733
734
735</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 733</span>
<span class='kw'>def</span> <span class='id identifier rubyid_junk_pipeline'>junk_pipeline</span>
<span class='ivar'>@junk_pipeline</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="kerberos_authenticator=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="kerberos_authenticator-instance_method">
#<strong>kerberos_authenticator</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Auth</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
730
731
732</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 730</span>
<span class='kw'>def</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span>
<span class='ivar'>@kerberos_authenticator</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="krb_encryptor=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="krb_encryptor-instance_method">
#<strong>krb_encryptor</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>The established kerberos connection info</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
759
760
761</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 759</span>
<span class='kw'>def</span> <span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span>
<span class='ivar'>@krb_encryptor</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="local_host=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="local_host-instance_method">
#<strong>local_host</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The local host of the client.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
711
712
713</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 711</span>
<span class='kw'>def</span> <span class='id identifier rubyid_local_host'>local_host</span>
<span class='ivar'>@local_host</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="local_port=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="local_port-instance_method">
#<strong>local_port</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The local port of the client.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
715
716
717</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 715</span>
<span class='kw'>def</span> <span class='id identifier rubyid_local_port'>local_port</span>
<span class='ivar'>@local_port</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="ntlm_client=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ntlm_client-instance_method">
#<strong>ntlm_client</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>The established NTLM connection info</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
754
755
756</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 754</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span>
<span class='ivar'>@ntlm_client</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="password=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="password-instance_method">
#<strong>password</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Auth</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
730
731
732</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 730</span>
<span class='kw'>def</span> <span class='id identifier rubyid_password'>password</span>
<span class='ivar'>@password</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="pipeline=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="pipeline-instance_method">
#<strong>pipeline</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Whether or not pipelining is in use.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
707
708
709</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 707</span>
<span class='kw'>def</span> <span class='id identifier rubyid_pipeline'>pipeline</span>
<span class='ivar'>@pipeline</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="port=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="port-instance_method">
#<strong>port</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>:nodoc:</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
743
744
745</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 743</span>
<span class='kw'>def</span> <span class='id identifier rubyid_port'>port</span>
<span class='ivar'>@port</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="proxies=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="proxies-instance_method">
#<strong>proxies</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The proxy list</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
727
728
729</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 727</span>
<span class='kw'>def</span> <span class='id identifier rubyid_proxies'>proxies</span>
<span class='ivar'>@proxies</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="ssl=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ssl-instance_method">
#<strong>ssl</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>https</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
741
742
743</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 741</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ssl'>ssl</span>
<span class='ivar'>@ssl</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="ssl_version=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ssl_version-instance_method">
#<strong>ssl_version</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>https</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
741
742
743</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 741</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ssl_version'>ssl_version</span>
<span class='ivar'>@ssl_version</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="sslkeylogfile=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="sslkeylogfile-instance_method">
#<strong>sslkeylogfile</strong> &#x21d2; <tt>String</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>The SSL key log file for the connected socket.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
749
750
751</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 749</span>
<span class='kw'>def</span> <span class='id identifier rubyid_sslkeylogfile'>sslkeylogfile</span>
<span class='ivar'>@sslkeylogfile</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="subscriber=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="subscriber-instance_method">
#<strong>subscriber</strong> &#x21d2; <tt><span class='object_link'><a href="HttpSubscriber.html" title="Rex::Proto::Http::HttpSubscriber (class)">Rex::Proto::Http::HttpSubscriber</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The HTTP subscriber.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="HttpSubscriber.html" title="Rex::Proto::Http::HttpSubscriber (class)">Rex::Proto::Http::HttpSubscriber</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The HTTP subscriber</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
736
737
738</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 736</span>
<span class='kw'>def</span> <span class='id identifier rubyid_subscriber'>subscriber</span>
<span class='ivar'>@subscriber</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="username=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="username-instance_method">
#<strong>username</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Auth</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
730
731
732</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 730</span>
<span class='kw'>def</span> <span class='id identifier rubyid_username'>username</span>
<span class='ivar'>@username</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="_send_recv-instance_method">
#<strong>_send_recv</strong>(req, t = -1,, persist = false) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Transmit an HTTP request and receive the response</p>
<p>If persist is set, then the request will attempt to reuse an existing connection.</p>
<p>Call this directly instead of <span class='object_link'><a href="#send_recv-instance_method" title="Rex::Proto::Http::Client#send_recv (method)">#send_recv</a></span> if you dont want automatic authentication handling.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 231</span>
<span class='kw'>def</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span> <span class='op'>=</span> <span class='op'>-</span><span class='int'>1</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='ivar'>@pipeline</span> <span class='op'>=</span> <span class='id identifier rubyid_persist'>persist</span>
<span class='id identifier rubyid_subscriber'>subscriber</span><span class='period'>.</span><span class='id identifier rubyid_on_request'>on_request</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:opts</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span>
<span class='id identifier rubyid_req'>req</span> <span class='op'>=</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_ntlm_client'>ntlm_client</span><span class='comma'>,</span> <span class='id identifier rubyid_req'>req</span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:opts</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span>
<span class='id identifier rubyid_req'>req</span> <span class='op'>=</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span><span class='comma'>,</span> <span class='id identifier rubyid_req'>req</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_send_request'>send_request</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_read_response'>read_response</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='label'>original_request:</span> <span class='id identifier rubyid_req'>req</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:opts</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span>
<span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_ntlm_client'>ntlm_client</span><span class='comma'>,</span> <span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:opts</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span>
<span class='id identifier rubyid_req'>req</span> <span class='op'>=</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span><span class='comma'>,</span> <span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span>
<span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_peerinfo'>peerinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_peerinfo'>peerinfo</span> <span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span>
<span class='id identifier rubyid_subscriber'>subscriber</span><span class='period'>.</span><span class='id identifier rubyid_on_response'>on_response</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="basic_auth_header-instance_method">
#<strong>basic_auth_header</strong>(username, password) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Converts username and password into the HTTP Basic authorization string.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>A value suitable for use as an Authorization header</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
346
347
348
349</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 346</span>
<span class='kw'>def</span> <span class='id identifier rubyid_basic_auth_header'>basic_auth_header</span><span class='lparen'>(</span><span class='id identifier rubyid_username'>username</span><span class='comma'>,</span> <span class='id identifier rubyid_password'>password</span><span class='rparen'>)</span>
<span class='id identifier rubyid_auth_str'>auth_str</span> <span class='op'>=</span> <span class='id identifier rubyid_username'>username</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_password'>password</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Basic </span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_encode_base64'>encode_base64</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_str'>auth_str</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="channel_binding-instance_method">
#<strong>channel_binding</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
553
554
555
556
557
558
559</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 553</span>
<span class='kw'>def</span> <span class='id identifier rubyid_channel_binding'>channel_binding</span>
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:peer_cert</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_peer_cert'>peer_cert</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>nil</span>
<span class='kw'>else</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>NTLM</span><span class='op'>::</span><span class='const'>ChannelBinding</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='const'>OpenSSL</span><span class='op'>::</span><span class='const'>X509</span><span class='op'>::</span><span class='const'>Certificate</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_peer_cert'>peer_cert</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="close-instance_method">
#<strong>close</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Closes the connection to the remote server.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
196
197
198
199
200
201
202
203
204</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 196</span>
<span class='kw'>def</span> <span class='id identifier rubyid_close'>close</span>
<span class='kw'>if</span> <span class='id identifier rubyid_conn'>conn</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
<span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_shutdown'>shutdown</span>
<span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_conn'>conn</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ntlm_client'>ntlm_client</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="conn?-instance_method">
#<strong>conn?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns whether or not the conn is valid.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
665
666
667</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 665</span>
<span class='kw'>def</span> <span class='id identifier rubyid_conn?'>conn?</span>
<span class='id identifier rubyid_conn'>conn</span> <span class='op'>!=</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="connect-instance_method">
#<strong>connect</strong>(t = -1)) &#x21d2; <tt>Rex::Socket::Tcp</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Connects to the remote server if possible.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>t</span>
<span class='type'>(<tt>Integer</tt>)</span>
<em class="default">(defaults to: <tt>-1)</tt>)</em>
&mdash;
<div class='inline'>
<p>Timeout</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Rex::Socket::Tcp</tt>)</span>
</li>
</ul>
<p class="tag_title">See Also:</p>
<ul class="see">
<li>Socket::Tcp.create</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 165</span>
<span class='kw'>def</span> <span class='id identifier rubyid_connect'>connect</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span> <span class='op'>=</span> <span class='op'>-</span><span class='int'>1</span><span class='rparen'>)</span>
<span class='comment'># If we already have a connection and we aren&#39;t pipelining, close it.
</span> <span class='kw'>if</span> <span class='id identifier rubyid_conn'>conn</span>
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_pipelining?'>pipelining?</span>
<span class='id identifier rubyid_close'>close</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='id identifier rubyid_conn'>conn</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_timeout'>timeout</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='id identifier rubyid_t'>t</span> <span class='op'>==</span> <span class='op'>-</span><span class='int'>1</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='int'>0</span> <span class='op'>:</span> <span class='id identifier rubyid_t'>t</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_conn'>conn</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='op'>::</span><span class='const'>Tcp</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PeerHost</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PeerHostname</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssl_server_name_indication</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vhost</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PeerPort</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LocalHost</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_local_host'>local_host</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LocalPort</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_local_port'>local_port</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Context</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_context'>context</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SSL</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_ssl'>ssl</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SSLVersion</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_ssl_version'>ssl_version</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SSLKeyLogFile</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_sslkeylogfile'>sslkeylogfile</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Proxies</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_proxies'>proxies</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Timeout</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_timeout'>timeout</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Comm</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_comm'>comm</span>
<span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="digest_auth-instance_method">
#<strong>digest_auth</strong>(opts = {}) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Send a series of requests to complete Digest Authentication</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>the options used to build an HTTP request</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>the last valid HTTP response we received</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 354</span>
<span class='kw'>def</span> <span class='id identifier rubyid_digest_auth'>digest_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>timeout</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>20</span>
<span class='id identifier rubyid_digest_user'>digest_user</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_digest_password'>digest_password</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_method'>method</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_iis'>iis</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DigestAuthIIS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span> <span class='kw'>or</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DigestAuthIIS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_iis'>iis</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>response</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_resp'>resp</span>
<span class='comment'># Get authentication-challenge from server, and read out parameters required
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_path'>path</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_method'>method</span>
<span class='rbrace'>}</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_code'>code</span> <span class='op'>!=</span> <span class='int'>401</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='comment'># Don&#39;t anchor this regex to the beginning of string because header
</span> <span class='comment'># folding makes it appear later when the server presents multiple
</span> <span class='comment'># WWW-Authentication options (such as is the case with IIS configured
</span> <span class='comment'># for Digest or NTLM).
</span> <span class='id identifier rubyid_resp'>resp</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>www-authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Digest (.*)</span><span class='regexp_end'>/</span></span>
<span class='id identifier rubyid_parameters'>parameters</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='op'>::</span><span class='const'>Regexp</span><span class='period'>.</span><span class='id identifier rubyid_last_match'>last_match</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>,[[:space:]]*</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_p'>p</span><span class='op'>|</span>
<span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>=</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='int'>2</span><span class='rparen'>)</span>
<span class='id identifier rubyid_parameters'>parameters</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>&quot;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_auth_digest'>auth_digest</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="AuthDigest.html" title="Rex::Proto::Http::AuthDigest (class)">AuthDigest</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='id identifier rubyid_auth'>auth</span> <span class='op'>=</span> <span class='id identifier rubyid_auth_digest'>auth_digest</span><span class='period'>.</span><span class='id identifier rubyid_digest'>digest</span><span class='lparen'>(</span><span class='id identifier rubyid_digest_user'>digest_user</span><span class='comma'>,</span> <span class='id identifier rubyid_digest_password'>digest_password</span><span class='comma'>,</span> <span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='id identifier rubyid_path'>path</span><span class='comma'>,</span> <span class='id identifier rubyid_parameters'>parameters</span><span class='comma'>,</span> <span class='id identifier rubyid_iis'>iis</span><span class='rparen'>)</span>
<span class='id identifier rubyid_headers'>headers</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_auth'>auth</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>, </span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_headers'>headers</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='comment'># Send main request with authentication
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>uri</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_path'>path</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_method'>method</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_headers'>headers</span>
<span class='rbrace'>}</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Errno</span><span class='op'>::</span><span class='const'>EPIPE</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="kerberos_auth-instance_method">
#<strong>kerberos_auth</strong>(opts = {}, mechanism: Rex::Proto::Gss::Mechanism::KERBEROS) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 421</span>
<span class='kw'>def</span> <span class='id identifier rubyid_kerberos_auth'>kerberos_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='label'>mechanism:</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss.html" title="Rex::Proto::Gss (module)">Gss</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html" title="Rex::Proto::Gss::Mechanism (module)">Mechanism</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html#KERBEROS-constant" title="Rex::Proto::Gss::Mechanism::KERBEROS (constant)">KERBEROS</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>timeout</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>20</span>
<span class='id identifier rubyid_auth_result'>auth_result</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span><span class='period'>.</span><span class='id identifier rubyid_authenticate'>authenticate</span><span class='lparen'>(</span><span class='label'>mechanism:</span> <span class='id identifier rubyid_mechanism'>mechanism</span><span class='rparen'>)</span>
<span class='id identifier rubyid_gss_data'>gss_data</span> <span class='op'>=</span> <span class='id identifier rubyid_auth_result'>auth_result</span><span class='lbracket'>[</span><span class='symbol'>:security_blob</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_gss_data_b64'>gss_data_b64</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_encode_base64'>encode_base64</span><span class='lparen'>(</span><span class='id identifier rubyid_gss_data'>gss_data</span><span class='rparen'>)</span>
<span class='comment'># Separate options for the auth requests
</span> <span class='id identifier rubyid_auth_opts'>auth_opts</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span>
<span class='kw'>case</span> <span class='id identifier rubyid_mechanism'>mechanism</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss.html" title="Rex::Proto::Gss (module)">Gss</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html" title="Rex::Proto::Gss::Mechanism (module)">Mechanism</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html#KERBEROS-constant" title="Rex::Proto::Gss::Mechanism::KERBEROS (constant)">KERBEROS</a></span></span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Kerberos </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_gss_data_b64'>gss_data_b64</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss.html" title="Rex::Proto::Gss (module)">Gss</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html" title="Rex::Proto::Gss::Mechanism (module)">Mechanism</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html#SPNEGO-constant" title="Rex::Proto::Gss::Mechanism::SPNEGO (constant)">SPNEGO</a></span></span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Negotiate </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_gss_data_b64'>gss_data_b64</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>no_body_for_auth</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>krb_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>begin</span>
<span class='comment'># Send the auth request
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='comment'># Get the challenge and craft the response
</span> <span class='id identifier rubyid_response'>response</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_scan'>scan</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Kerberos ([A-Z0-9\x2b\x2f=]+)</span><span class='regexp_end'>/ni</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>unless</span> <span class='id identifier rubyid_response'>response</span>
<span class='id identifier rubyid_decoded'>decoded</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_decode_base64'>decode_base64</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mutual_auth_result'>mutual_auth_result</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span><span class='period'>.</span><span class='id identifier rubyid_parse_gss_init_response'>parse_gss_init_response</span><span class='lparen'>(</span><span class='id identifier rubyid_decoded'>decoded</span><span class='comma'>,</span> <span class='id identifier rubyid_auth_result'>auth_result</span><span class='lbracket'>[</span><span class='symbol'>:session_key</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_krb_encryptor'>krb_encryptor</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span><span class='period'>.</span><span class='id identifier rubyid_get_message_encryptor'>get_message_encryptor</span><span class='lparen'>(</span><span class='id identifier rubyid_mutual_auth_result'>mutual_auth_result</span><span class='lbracket'>[</span><span class='symbol'>:ap_rep_subkey</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='id identifier rubyid_auth_result'>auth_result</span><span class='lbracket'>[</span><span class='symbol'>:client_sequence_number</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='id identifier rubyid_mutual_auth_result'>mutual_auth_result</span><span class='lbracket'>[</span><span class='symbol'>:server_sequence_number</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>no_body_for_auth</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='comment'># If the body wasn&#39;t sent in the authentication, now do the actual request
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Errno</span><span class='op'>::</span><span class='const'>EPIPE</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="negotiate_auth-instance_method">
#<strong>negotiate_auth</strong>(opts = {}) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Builds a series of requests to complete Negotiate Auth. Works essentially the same way as Digest auth. Same pipelining concerns exist.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>a customizable set of options</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">provider</span>
<span class="type">(<tt>"Negotiate"</tt>, <tt>"<span class='object_link'><a href="../NTLM.html" title="Rex::Proto::NTLM (module)">NTLM</a></span>"</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>What Negotiate provider to use</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>the last valid HTTP response we received</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 480</span>
<span class='kw'>def</span> <span class='id identifier rubyid_negotiate_auth'>negotiate_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>timeout</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>20</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='kw'>and</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_provider'>provider</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate </span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>else</span>
<span class='id identifier rubyid_provider'>provider</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>NTLM </span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GET</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_workstation_name'>workstation_name</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_rand_text_alpha'>rand_text_alpha</span><span class='lparen'>(</span><span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>6</span><span class='op'>..</span><span class='int'>13</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_domain_name'>domain_name</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>domain</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_ntlm_client'>ntlm_client</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>NTLM</span><span class='op'>::</span><span class='const'>Client</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>workstation:</span> <span class='id identifier rubyid_workstation_name'>workstation_name</span><span class='comma'>,</span>
<span class='label'>domain:</span> <span class='id identifier rubyid_domain_name'>domain_name</span>
<span class='rparen'>)</span>
<span class='id identifier rubyid_type1'>type1</span> <span class='op'>=</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span><span class='period'>.</span><span class='id identifier rubyid_init_context'>init_context</span>
<span class='kw'>begin</span>
<span class='comment'># Separate options for the auth requests
</span> <span class='id identifier rubyid_auth_opts'>auth_opts</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_provider'>provider</span> <span class='op'>+</span> <span class='id identifier rubyid_type1'>type1</span><span class='period'>.</span><span class='id identifier rubyid_encode64'>encode64</span>
<span class='kw'>if</span> <span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>no_body_for_auth</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_request</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ntlm_transform_response</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># First request to get the challenge
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_code'>code</span> <span class='op'>==</span> <span class='int'>401</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='comment'># Get the challenge and craft the response
</span> <span class='id identifier rubyid_ntlm_challenge'>ntlm_challenge</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_scan'>scan</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_provider'>provider</span><span class='embexpr_end'>}</span><span class='tstring_content'>([A-Z0-9\x2b\x2f=]+)</span><span class='regexp_end'>/ni</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>unless</span> <span class='id identifier rubyid_ntlm_challenge'>ntlm_challenge</span>
<span class='id identifier rubyid_ntlm_message_3'>ntlm_message_3</span> <span class='op'>=</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span><span class='period'>.</span><span class='id identifier rubyid_init_context'>init_context</span><span class='lparen'>(</span><span class='id identifier rubyid_ntlm_challenge'>ntlm_challenge</span><span class='comma'>,</span> <span class='id identifier rubyid_channel_binding'>channel_binding</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ntlm_client'>ntlm_client</span> <span class='op'>=</span> <span class='id identifier rubyid_ntlm_client'>ntlm_client</span>
<span class='comment'># Send the response
</span> <span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_provider'>provider</span><span class='embexpr_end'>}</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ntlm_message_3'>ntlm_message_3</span><span class='period'>.</span><span class='id identifier rubyid_encode64'>encode64</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_opts'>auth_opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>no_body_for_auth</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='comment'># If the body wasn&#39;t sent in the authentication, now do the actual request
</span> <span class='id identifier rubyid_r'>r</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_to'>to</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Errno</span><span class='op'>::</span><span class='const'>EPIPE</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="peerinfo-instance_method">
#<strong>peerinfo</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Target host addr and port for this connection</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
679
680
681
682
683
684
685
686
687
688
689
690</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 679</span>
<span class='kw'>def</span> <span class='id identifier rubyid_peerinfo'>peerinfo</span>
<span class='kw'>if</span> <span class='id identifier rubyid_conn'>conn</span>
<span class='id identifier rubyid_pi'>pi</span> <span class='op'>=</span> <span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_peerinfo'>peerinfo</span> <span class='op'>||</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='id identifier rubyid_pi'>pi</span>
<span class='kw'>return</span> <span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_pi'>pi</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_pi'>pi</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="pipelining?-instance_method">
#<strong>pipelining?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Whether or not connections should be pipelined.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
672
673
674</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 672</span>
<span class='kw'>def</span> <span class='id identifier rubyid_pipelining?'>pipelining?</span>
<span class='id identifier rubyid_pipeline'>pipeline</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="read_response-instance_method">
#<strong>read_response</strong>(t = -1,, opts = {}) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Read a response from the server</p>
<p>Wait at most t seconds for the full response to be read in. If t is specified as a negative value, it indicates an indefinite wait cycle. If t is specified as nil or 0, it indicates no response parsing is required.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 568</span>
<span class='kw'>def</span> <span class='id identifier rubyid_read_response'>read_response</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span> <span class='op'>=</span> <span class='op'>-</span><span class='int'>1</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='comment'># Return a nil response if timeout is nil or 0
</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_t'>t</span> <span class='op'>==</span> <span class='int'>0</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Response.html#initialize-instance_method" title="Rex::Proto::Http::Response#initialize (method)">new</a></span></span>
<span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_max_data'>max_data</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>read_max_data</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_original_request'>original_request</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:original_request</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='kw'>nil</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_parse_opts'>parse_opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_original_request'>original_request</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_parse_opts'>parse_opts</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>orig_method:</span> <span class='id identifier rubyid_original_request'>original_request</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>method</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
<span class='kw'>end</span>
<span class='const'>Timeout</span><span class='period'>.</span><span class='id identifier rubyid_timeout'>timeout</span><span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span> <span class='op'>&lt;</span> <span class='int'>0</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='kw'>nil</span> <span class='op'>:</span> <span class='id identifier rubyid_t'>t</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>while</span> <span class='lparen'>(</span>
<span class='op'>!</span><span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span> <span class='kw'>and</span>
<span class='id identifier rubyid_rv'>rv</span> <span class='op'>!=</span> <span class='const'><span class='object_link'><a href="Packet.html" title="Rex::Proto::Http::Packet (class)">Packet</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html" title="Rex::Proto::Http::Packet::ParseCode (module)">ParseCode</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html#Completed-constant" title="Rex::Proto::Http::Packet::ParseCode::Completed (constant)">Completed</a></span></span> <span class='kw'>and</span>
<span class='id identifier rubyid_rv'>rv</span> <span class='op'>!=</span> <span class='const'><span class='object_link'><a href="Packet.html" title="Rex::Proto::Http::Packet (class)">Packet</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html" title="Rex::Proto::Http::Packet::ParseCode (module)">ParseCode</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html#Error-constant" title="Rex::Proto::Http::Packet::ParseCode::Error (constant)">Error</a></span></span>
<span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_buff'>buff</span> <span class='op'>=</span> <span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_get_once'>get_once</span><span class='lparen'>(</span><span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_max_data'>max_data</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span>
<span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_buff'>buff</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_parse_opts'>parse_opts</span><span class='rparen'>)</span>
<span class='comment'># Handle unexpected disconnects
</span> <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Errno</span><span class='op'>::</span><span class='const'>EPIPE</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>EOFError</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>IOError</span>
<span class='kw'>case</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_state'>state</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Packet.html" title="Rex::Proto::Http::Packet (class)">Packet</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseState.html" title="Rex::Proto::Http::Packet::ParseState (module)">ParseState</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseState.html#ProcessingHeader-constant" title="Rex::Proto::Http::Packet::ParseState::ProcessingHeader (constant)">ProcessingHeader</a></span></span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Packet.html" title="Rex::Proto::Http::Packet (class)">Packet</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseState.html" title="Rex::Proto::Http::Packet::ParseState (module)">ParseState</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseState.html#ProcessingBody-constant" title="Rex::Proto::Http::Packet::ParseState::ProcessingBody (constant)">ProcessingBody</a></span></span>
<span class='comment'># truncated request, good enough
</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='symbol'>:truncated</span>
<span class='kw'>end</span>
<span class='kw'>break</span>
<span class='kw'>end</span>
<span class='comment'># This is a dirty hack for broken HTTP servers
</span> <span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="Packet.html" title="Rex::Proto::Http::Packet (class)">Packet</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html" title="Rex::Proto::Http::Packet::ParseCode (module)">ParseCode</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Packet/ParseCode.html#Completed-constant" title="Rex::Proto::Http::Packet::ParseCode::Completed (constant)">Completed</a></span></span>
<span class='id identifier rubyid_rbody'>rbody</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span>
<span class='id identifier rubyid_rbufq'>rbufq</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_bufq'>bufq</span>
<span class='id identifier rubyid_rblob'>rblob</span> <span class='op'>=</span> <span class='id identifier rubyid_rbody'>rbody</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='id identifier rubyid_rbufq'>rbufq</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='id identifier rubyid_tries'>tries</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='kw'>begin</span>
<span class='comment'># XXX: This doesn&#39;t deal with chunked encoding
</span> <span class='kw'>while</span> <span class='id identifier rubyid_tries'>tries</span> <span class='op'>&lt;</span> <span class='int'>1000</span> <span class='kw'>and</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Content-Type</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='kw'>and</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Content-Type</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>text/html</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='id identifier rubyid_rblob'>rblob</span> <span class='op'>!~</span> <span class='tstring'><span class='regexp_beg'>%r{</span><span class='tstring_content'>&lt;/html&gt;</span><span class='regexp_end'>}i</span></span>
<span class='id identifier rubyid_buff'>buff</span> <span class='op'>=</span> <span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_get_once'>get_once</span><span class='lparen'>(</span><span class='op'>-</span><span class='int'>1</span><span class='comma'>,</span> <span class='float'>0.05</span><span class='rparen'>)</span>
<span class='kw'>break</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_buff'>buff</span>
<span class='id identifier rubyid_rblob'>rblob</span> <span class='op'>+=</span> <span class='id identifier rubyid_buff'>buff</span>
<span class='id identifier rubyid_tries'>tries</span> <span class='op'>+=</span> <span class='int'>1</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Errno</span><span class='op'>::</span><span class='const'>EPIPE</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>EOFError</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>IOError</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_bufq'>bufq</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span> <span class='op'>=</span> <span class='id identifier rubyid_rblob'>rblob</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_resp'>resp</span>
<span class='comment'># As a last minute hack, we check to see if we&#39;re dealing with a 100 Continue here.
</span> <span class='comment'># Most of the time this is handled by the parser via check_100()
</span> <span class='kw'>if</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_proto'>proto</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1.1</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_code'>code</span> <span class='op'>==</span> <span class='int'>100</span> <span class='kw'>and</span> <span class='op'>!</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:skip_100</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='comment'># Read the real response from the body if we found one
</span> <span class='comment'># If so, our real response became the body, so we re-parse it.
</span> <span class='kw'>if</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^HTTP</span><span class='regexp_end'>/</span></span>
<span class='id identifier rubyid_body'>body</span> <span class='op'>=</span> <span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Response.html#initialize-instance_method" title="Rex::Proto::Http::Response#initialize (method)">new</a></span></span>
<span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_max_data'>max_data</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>read_max_data</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_resp'>resp</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_body'>body</span><span class='comma'>,</span> <span class='id identifier rubyid_parse_opts'>parse_opts</span><span class='rparen'>)</span>
<span class='comment'># We found a 100 Continue but didn&#39;t read the real reply yet
</span> <span class='comment'># Otherwise reread the reply, but don&#39;t try this hack again
</span> <span class='kw'>else</span>
<span class='id identifier rubyid_resp'>resp</span> <span class='op'>=</span> <span class='id identifier rubyid_read_response'>read_response</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='label'>skip_100:</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_resp'>resp</span>
<span class='kw'>rescue</span> <span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='comment'># Allow partial response due to timeout
</span> <span class='id identifier rubyid_resp'>resp</span> <span class='kw'>if</span> <span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>partial</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="request_cgi-instance_method">
#<strong>request_cgi</strong>(opts = {}) &#x21d2; <tt><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Create a CGI compatible request</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">Content-Type</span>
<span class="type">(<tt>'ctype'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value, default for POST requests: <code>application/x-www-form-urlencoded</code></p>
</div>
</li>
<li>
<span class="name">URI</span>
<span class="type">(<tt>'encode_params'Bool</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>encode the GET or POST variables (names and values), default: true</p>
</div>
</li>
<li>
<span class="name">GET</span>
<span class="type">(<tt>'vars_get'Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>variables as a hash to be translated into a query string</p>
</div>
</li>
<li>
<span class="name">POST</span>
<span class="type">(<tt>'vars_post'Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>variables as a hash to be translated into POST data</p>
</div>
</li>
<li>
<span class="name">POST</span>
<span class="type">(<tt>'vars_form_data'Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>form_data variables as a hash to be translated into multi-part POST form data</p>
</div>
</li>
<li>
<span class="name">User-Agent</span>
<span class="type">(<tt>'agent'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">Connection</span>
<span class="type">(<tt>'connection'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">Cookie</span>
<span class="type">(<tt>'cookie'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'data'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>data (only useful with some methods, see rfc2616)</p>
</div>
</li>
<li>
<span class="name">URI</span>
<span class="type">(<tt>'encode'Bool</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>encode the supplied URI, default: false</p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'headers'Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>headers, e.g. <code>{ &quot;X-MyHeader&quot; =&gt; &quot;value&quot; }</code></p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'method'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>method to use in the request, not limited to standard methods defined by rfc2616, default: GET</p>
</div>
</li>
<li>
<span class="name">protocol,</span>
<span class="type">(<tt>'proto'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>default: HTTP</p>
</div>
</li>
<li>
<span class="name">raw</span>
<span class="type">(<tt>'query'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>query string</p>
</div>
</li>
<li>
<span class="name">Raw</span>
<span class="type">(<tt>'raw_headers'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>HTTP headers</p>
</div>
</li>
<li>
<span class="name">the</span>
<span class="type">(<tt>'uri'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>URI to request</p>
</div>
</li>
<li>
<span class="name">version</span>
<span class="type">(<tt>'version'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>of the protocol, default: 1.1</p>
</div>
</li>
<li>
<span class="name">Host</span>
<span class="type">(<tt>'vhost'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
149
150
151
152
153
154
155
156
157</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 149</span>
<span class='kw'>def</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_port'>port</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssl</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl'>ssl</span>
<span class='const'><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="ClientRequest.html#initialize-instance_method" title="Rex::Proto::Http::ClientRequest#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="request_raw-instance_method">
#<strong>request_raw</strong>(opts = {}) &#x21d2; <tt><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Create an arbitrary HTTP request</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">User-Agent</span>
<span class="type">(<tt>'agent'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">Connection</span>
<span class="type">(<tt>'connection'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">Cookie</span>
<span class="type">(<tt>'cookie'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'data'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>data (only useful with some methods, see rfc2616)</p>
</div>
</li>
<li>
<span class="name">URI</span>
<span class="type">(<tt>'encode'Bool</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>encode the supplied URI, default: false</p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'headers'Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>headers, e.g. <code>{ &quot;X-MyHeader&quot; =&gt; &quot;value&quot; }</code></p>
</div>
</li>
<li>
<span class="name">HTTP</span>
<span class="type">(<tt>'method'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>method to use in the request, not limited to standard methods defined by rfc2616, default: GET</p>
</div>
</li>
<li>
<span class="name">protocol,</span>
<span class="type">(<tt>'proto'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>default: HTTP</p>
</div>
</li>
<li>
<span class="name">raw</span>
<span class="type">(<tt>'query'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>query string</p>
</div>
</li>
<li>
<span class="name">Raw</span>
<span class="type">(<tt>'raw_headers'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>HTTP headers</p>
</div>
</li>
<li>
<span class="name">the</span>
<span class="type">(<tt>'uri'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>URI to request</p>
</div>
</li>
<li>
<span class="name">version</span>
<span class="type">(<tt>'version'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>of the protocol, default: 1.1</p>
</div>
</li>
<li>
<span class="name">Host</span>
<span class="type">(<tt>'vhost'String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>header value</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
127
128
129
130
131
132
133
134
135</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 127</span>
<span class='kw'>def</span> <span class='id identifier rubyid_request_raw'>request_raw</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_port'>port</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssl</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl'>ssl</span>
<span class='const'><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="ClientRequest.html#initialize-instance_method" title="Rex::Proto::Http::ClientRequest#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_auth-instance_method">
#<strong>send_auth</strong>(res, opts, t, persist) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Resends an HTTP Request with the proper authentication headers set. If we do not support the authentication type the server requires we return the original response object</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>res</span>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>the HTTP Response object</p>
</div>
</li>
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>the options used to generate the original HTTP request</p>
</div>
</li>
<li>
<span class='name'>t</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>the timeout for the request in seconds</p>
</div>
</li>
<li>
<span class='name'>persist</span>
<span class='type'>(<tt>Boolean</tt>)</span>
&mdash;
<div class='inline'>
<p>whether or not to persist the TCP connection (pipelining)</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>the last valid HTTP response object we received</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 276</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_auth'>send_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_username'>username</span> <span class='kw'>and</span> <span class='op'>!</span><span class='lparen'>(</span><span class='id identifier rubyid_username'>username</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_username'>username</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_password'>password</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:kerberos_authenticator</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:kerberos_authenticator</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:kerberos_authenticator</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_supported_auths'>supported_auths</span> <span class='op'>=</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='comment'># if several providers are available, the client may want one in particular
</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>preferred_auth</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Basic</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Basic</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>headers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authorization</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_basic_auth_header'>basic_auth_header</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_req'>req</span> <span class='op'>=</span> <span class='id identifier rubyid_request_cgi'>request_cgi</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Digest</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Digest</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_temp_response'>temp_response</span> <span class='op'>=</span> <span class='id identifier rubyid_digest_auth'>digest_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_temp_response'>temp_response</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_temp_response'>temp_response</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>NTLM</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>NTLM</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>NTLM</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_temp_response'>temp_response</span> <span class='op'>=</span> <span class='id identifier rubyid_negotiate_auth'>negotiate_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_temp_response'>temp_response</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_temp_response'>temp_response</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Kerberos</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Kerberos</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Kerberos</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_temp_response'>temp_response</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_auth'>kerberos_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='label'>mechanism:</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss.html" title="Rex::Proto::Gss (module)">Gss</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html" title="Rex::Proto::Gss::Mechanism (module)">Mechanism</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html#KERBEROS-constant" title="Rex::Proto::Gss::Mechanism::KERBEROS (constant)">KERBEROS</a></span></span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_temp_response'>temp_response</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_temp_response'>temp_response</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_temp_response'>temp_response</span> <span class='op'>=</span> <span class='id identifier rubyid_negotiate_auth'>negotiate_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_temp_response'>temp_response</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_temp_response'>temp_response</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_supported_auths'>supported_auths</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_preferred_auth'>preferred_auth</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_preferred_auth'>preferred_auth</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Kerberos</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_kerberos_authenticator'>kerberos_authenticator</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>provider</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Negotiate</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_temp_response'>temp_response</span> <span class='op'>=</span> <span class='id identifier rubyid_kerberos_auth'>kerberos_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='label'>mechanism:</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss.html" title="Rex::Proto::Gss (module)">Gss</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html" title="Rex::Proto::Gss::Mechanism (module)">Mechanism</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Gss/Mechanism.html#SPNEGO-constant" title="Rex::Proto::Gss::Mechanism::SPNEGO (constant)">SPNEGO</a></span></span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_temp_response'>temp_response</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Http.html" title="Rex::Proto::Http (module)">Http</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_temp_response'>temp_response</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_recv-instance_method">
#<strong>send_recv</strong>(req, t = -1,, persist = false) &#x21d2; <tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Sends a request and gets a response back</p>
<p>If the request is a 401, and we have creds, it will attempt to complete authentication and return the final response</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Response.html" title="Rex::Proto::Http::Response (class)">Response</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
213
214
215
216
217
218
219</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 213</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_recv'>send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span> <span class='op'>=</span> <span class='op'>-</span><span class='int'>1</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid__send_recv'>_send_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span> <span class='kw'>and</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_code'>code</span> <span class='op'>==</span> <span class='int'>401</span> <span class='kw'>and</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WWW-Authenticate</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_send_auth'>send_auth</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='comma'>,</span> <span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span><span class='comma'>,</span> <span class='id identifier rubyid_persist'>persist</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_res'>res</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_request-instance_method">
#<strong>send_request</strong>(req, t = -1)) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Send an HTTP request to the server</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>req</span>
<span class='type'>(<tt><span class='object_link'><a href="Request.html" title="Rex::Proto::Http::Request (class)">Request</a></span></tt>, <tt><span class='object_link'><a href="ClientRequest.html" title="Rex::Proto::Http::ClientRequest (class)">ClientRequest</a></span></tt>, <tt>#to_s</tt>)</span>
&mdash;
<div class='inline'>
<p>The request to send</p>
</div>
</li>
<li>
<span class='name'>t</span>
<span class='type'>(<tt>Integer</tt>)</span>
<em class="default">(defaults to: <tt>-1)</tt>)</em>
&mdash;
<div class='inline'>
<p>Timeout</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
261
262
263
264</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 261</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_request'>send_request</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='comma'>,</span> <span class='id identifier rubyid_t'>t</span> <span class='op'>=</span> <span class='op'>-</span><span class='int'>1</span><span class='rparen'>)</span>
<span class='id identifier rubyid_connect'>connect</span><span class='lparen'>(</span><span class='id identifier rubyid_t'>t</span><span class='rparen'>)</span>
<span class='id identifier rubyid_conn'>conn</span><span class='period'>.</span><span class='id identifier rubyid_put'>put</span><span class='lparen'>(</span><span class='id identifier rubyid_req'>req</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="set_config-instance_method">
#<strong>set_config</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Set configuration options</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 82</span>
<span class='kw'>def</span> <span class='id identifier rubyid_set_config'>set_config</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_var'>var</span><span class='comma'>,</span> <span class='id identifier rubyid_val'>val</span><span class='op'>|</span>
<span class='comment'># Default type is string
</span> <span class='id identifier rubyid_typ'>typ</span> <span class='op'>=</span> <span class='id identifier rubyid_config_types'>config_types</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>string</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># These are enum types
</span> <span class='kw'>if</span> <span class='id identifier rubyid_typ'>typ</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_typ'>typ</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_val'>val</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The specified value for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_var'>var</span><span class='embexpr_end'>}</span><span class='tstring_content'> is not one of the valid choices</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='comment'># The caller should have converted these to proper ruby types, but
</span> <span class='comment'># take care of the case where they didn&#39;t before setting the
</span> <span class='comment'># config.
</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_typ'>typ</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bool</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span> <span class='op'>==</span> <span class='kw'>true</span> <span class='op'>||</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^(t|y|1)</span><span class='regexp_end'>/i</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_typ'>typ</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>integer</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stop-instance_method">
#<strong>stop</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Cleans up any outstanding connections and other resources.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
658
659
660</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/client.rb', line 658</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stop'>stop</span>
<span class='id identifier rubyid_close'>close</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:04:11 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>