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

2566 lines
85 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Rex::Proto::Http::Server
&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::Server";
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 (S)</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">Server</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::Server
</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::Server</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Includes:</dt>
<dd><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Rex::Proto</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/rex/proto/http/server.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>Acts as an HTTP server, processing requests and dispatching them to registered procs. Some of this server was modeled after webrick.</p>
</div>
</div>
<div class="tags">
</div>
<h2>
Constant Summary
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
</h2>
<dl class="constants">
<dt id="ExtensionMimeTypes-constant" class="">ExtensionMimeTypes =
<div class="docstring">
<div class="discussion">
<p>A hash that associated a file extension with a mime type for use as the content type of responses.</p>
</div>
</div>
<div class="tags">
</div>
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>rhtml</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/html</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>html</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/html</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>htm</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/htm</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>jpg</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/jpeg</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>jpeg</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/jpeg</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>gif</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/gif</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>png</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/png</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>bmp</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/bmp</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>txt</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/plain</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>css</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/css</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ico</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>image/x-icon</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='rbrace'>}</span></pre></dd>
<dt id="DefaultServer-constant" class="">DefaultServer =
<div class="docstring">
<div class="discussion">
<p>The default server name that will be returned in the Server attribute of a response.</p>
</div>
</div>
<div class="tags">
</div>
</dt>
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Rex</span><span class='tstring_end'>&quot;</span></span></pre></dd>
</dl>
<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>Returns the value of attribute comm.</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>Returns the value of attribute context.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#listen_host-instance_method" title="#listen_host (instance method)">#<strong>listen_host</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute listen_host.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#listen_port-instance_method" title="#listen_port (instance method)">#<strong>listen_port</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute listen_port.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#listener-instance_method" title="#listener (instance method)">#<strong>listener</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute listener.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#resources-instance_method" title="#resources (instance method)">#<strong>resources</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute resources.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#server_name-instance_method" title="#server_name (instance method)">#<strong>server_name</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute server_name.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#ssl-instance_method" title="#ssl (instance method)">#<strong>ssl</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute ssl.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#ssl_cert-instance_method" title="#ssl_cert (instance method)">#<strong>ssl_cert</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute ssl_cert.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#ssl_cipher-instance_method" title="#ssl_cipher (instance method)">#<strong>ssl_cipher</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute ssl_cipher.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#ssl_compression-instance_method" title="#ssl_compression (instance method)">#<strong>ssl_compression</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute ssl_compression.</p>
</div></span>
</li>
<li class="public ">
<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="summary_desc"><div class='inline'>
<p>Returns the value of attribute ssl_version.</p>
</div></span>
</li>
</ul>
<h2>
Class Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#hardcore_alias-class_method" title="hardcore_alias (class method)">.<strong>hardcore_alias</strong>(*args) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the hardcore alias for the HTTP service.</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="#add_resource-instance_method" title="#add_resource (instance method)">#<strong>add_resource</strong>(name, opts) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds a resource handler, such as one for /, which will be called whenever the resource is requested.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_response_headers-instance_method" title="#add_response_headers (instance method)">#<strong>add_response_headers</strong>(resp) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds Server headers and stuff.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#alias-instance_method" title="#alias (instance method)">#<strong>alias</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>HTTP server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#close_client-instance_method" title="#close_client (instance method)">#<strong>close_client</strong>(cli) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Closes the supplied client, if valid.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#dispatch_request-instance_method" title="#dispatch_request (instance method)">#<strong>dispatch_request</strong>(cli, request) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Dispatches the supplied request for a given connection.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(port = 80, listen_host = &#39;0.0.0.0&#39;, ssl = false, context = {}, comm = nil, ssl_cert = nil, ssl_compression = false, ssl_cipher = nil, ssl_version = nil) &#x21d2; Server </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Initializes an HTTP server as listening on the provided port and hostname.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#inspect-instance_method" title="#inspect (instance method)">#<strong>inspect</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>More readable inspect that only shows the url and resources.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mime_type-instance_method" title="#mime_type (instance method)">#<strong>mime_type</strong>(file) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the mime type associated with the supplied file.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mount-instance_method" title="#mount (instance method)">#<strong>mount</strong>(root, handler, long_call = false, *args) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Mounts a directory or resource as being serviced by the supplied handler.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#on_client_connect-instance_method" title="#on_client_connect (instance method)">#<strong>on_client_connect</strong>(cli) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Extends new clients with the ServerClient module and initializes them.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#on_client_data-instance_method" title="#on_client_data (instance method)">#<strong>on_client_data</strong>(cli) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Processes data coming in from a client.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#remove_resource-instance_method" title="#remove_resource (instance method)">#<strong>remove_resource</strong>(name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Removes the supplied resource handler.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_e404-instance_method" title="#send_e404 (instance method)">#<strong>send_e404</strong>(cli, request) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Sends a 404 error to the client for a given request.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#start-instance_method" title="#start (instance method)">#<strong>start</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Listens on the defined port and host and starts monitoring for clients.</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>Terminates the monitor thread and turns off the listener.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#unmount-instance_method" title="#unmount (instance method)">#<strong>unmount</strong>(root) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Remove the mount point.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#wait-instance_method" title="#wait (instance method)">#<strong>wait</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Waits for the HTTP service to terminate.</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>(port = 80, listen_host = &#39;0.0.0.0&#39;, ssl = false, context = {}, comm = nil, ssl_cert = nil, ssl_compression = false, ssl_cipher = nil, ssl_version = nil) &#x21d2; <tt><span class='object_link'><a href="" title="Rex::Proto::Http::Server (class)">Server</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Initializes an HTTP server as listening on the provided port and hostname.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 48</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</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_listen_host'>listen_host</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_ssl'>ssl</span> <span class='op'>=</span> <span class='kw'>false</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_comm'>comm</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_ssl_cert'>ssl_cert</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_ssl_compression'>ssl_compression</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span>
<span class='id identifier rubyid_ssl_cipher'>ssl_cipher</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='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listen_host'>listen_host</span> <span class='op'>=</span> <span class='id identifier rubyid_listen_host'>listen_host</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listen_port'>listen_port</span> <span class='op'>=</span> <span class='id identifier rubyid_port'>port</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_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_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_ssl_cert'>ssl_cert</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl_cert'>ssl_cert</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_compression'>ssl_compression</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl_compression'>ssl_compression</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_cipher'>ssl_cipher</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl_cipher'>ssl_cipher</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_listener'>listener</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_resources'>resources</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_server_name'>server_name</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#DefaultServer-constant" title="Rex::Proto::Http::Server::DefaultServer (constant)">DefaultServer</a></span></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>Returns the value of attribute comm.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
223
224
225</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 223</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="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>Returns the value of attribute context.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
223
224
225</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 223</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="listen_host=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="listen_host-instance_method">
#<strong>listen_host</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute listen_host.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
223
224
225</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 223</span>
<span class='kw'>def</span> <span class='id identifier rubyid_listen_host'>listen_host</span>
<span class='ivar'>@listen_host</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="listen_port=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="listen_port-instance_method">
#<strong>listen_port</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute listen_port.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
223
224
225</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 223</span>
<span class='kw'>def</span> <span class='id identifier rubyid_listen_port'>listen_port</span>
<span class='ivar'>@listen_port</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="listener=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="listener-instance_method">
#<strong>listener</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute listener.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
225
226
227</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 225</span>
<span class='kw'>def</span> <span class='id identifier rubyid_listener'>listener</span>
<span class='ivar'>@listener</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="resources=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="resources-instance_method">
#<strong>resources</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute resources.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
225
226
227</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 225</span>
<span class='kw'>def</span> <span class='id identifier rubyid_resources'>resources</span>
<span class='ivar'>@resources</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="server_name=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="server_name-instance_method">
#<strong>server_name</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute server_name.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
223
224
225</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 223</span>
<span class='kw'>def</span> <span class='id identifier rubyid_server_name'>server_name</span>
<span class='ivar'>@server_name</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>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ssl.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 224</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_cert=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ssl_cert-instance_method">
#<strong>ssl_cert</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ssl_cert.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 224</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ssl_cert'>ssl_cert</span>
<span class='ivar'>@ssl_cert</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="ssl_cipher=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ssl_cipher-instance_method">
#<strong>ssl_cipher</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ssl_cipher.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 224</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ssl_cipher'>ssl_cipher</span>
<span class='ivar'>@ssl_cipher</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="ssl_compression=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="ssl_compression-instance_method">
#<strong>ssl_compression</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ssl_compression.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 224</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ssl_compression'>ssl_compression</span>
<span class='ivar'>@ssl_compression</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>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ssl_version.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 224</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>
</div>
<div id="class_method_details" class="method_details_list">
<h2>Class Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="hardcore_alias-class_method">
.<strong>hardcore_alias</strong>(*args) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the hardcore alias for the HTTP service</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
76
77
78</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 76</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_hardcore_alias'>hardcore_alias</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='lparen'>(</span><span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>0</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='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='lparen'>(</span><span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>1</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='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>4</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='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></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="add_resource-instance_method">
#<strong>add_resource</strong>(name, opts) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds a resource handler, such as one for /, which will be called whenever the resource is requested. The “opts” parameter can have any of the following:</p>
<p>Proc (proc) - The procedure to call when a request comes in for this resource. LongCall (bool) - Hints to the server that this resource may have long</p>
<pre class="code ruby"><code class="ruby">request processing times.
</code></pre>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
161
162
163
164
165
166
167
168
169
170
171
172
173</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 161</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_resource'>add_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_resources'>resources</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The supplied resource &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; is already added.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_caller'>caller</span>
<span class='kw'>end</span>
<span class='comment'># If a procedure was passed, mount the resource with it.
</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'>Proc</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mount'>mount</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="Handler.html" title="Rex::Proto::Http::Handler (class)">Handler</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Handler/Proc.html" title="Rex::Proto::Http::Handler::Proc (class)">Proc</a></span></span><span class='comma'>,</span> <span class='kw'>false</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'>Proc</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'>VirtualDirectory</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You must specify a procedure.</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_response_headers-instance_method">
#<strong>add_response_headers</strong>(resp) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds Server headers and stuff.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
185
186
187</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 185</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_response_headers'>add_response_headers</span><span class='lparen'>(</span><span class='id identifier rubyid_resp'>resp</span><span class='rparen'>)</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'>Server</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_server_name'>server_name</span> <span class='kw'>if</span> <span class='kw'>not</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'>Server</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="alias-instance_method">
#<strong>alias</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>HTTP server.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
83
84
85</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 83</span>
<span class='kw'>def</span> <span class='kw'>alias</span>
<span class='kw'>super</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>HTTP Server</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="close_client-instance_method">
#<strong>close_client</strong>(cli) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Closes the supplied client, if valid.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
134
135
136</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 134</span>
<span class='kw'>def</span> <span class='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="dispatch_request-instance_method">
#<strong>dispatch_request</strong>(cli, request) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Dispatches the supplied request for a given connection.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
275
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 275</span>
<span class='kw'>def</span> <span class='id identifier rubyid_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='comment'># Is the client requesting keep-alive?
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Connection</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Connection</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Keep-Alive</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_keepalive'>keepalive</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>end</span>
<span class='comment'># Search for the resource handler for the requested URL. This is pretty
</span> <span class='comment'># inefficient right now, but we can spruce it up later.
</span> <span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='id identifier rubyid_len'>len</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='id identifier rubyid_resources'>resources</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_val'>val</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_resource'>resource</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_k'>k</span><span class='embexpr_end'>}</span><span class='regexp_end'>/</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_k'>k</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='id identifier rubyid_len'>len</span><span class='rparen'>)</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span>
<span class='id identifier rubyid_len'>len</span> <span class='op'>=</span> <span class='id identifier rubyid_k'>k</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
<span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span> <span class='op'>=</span> <span class='id identifier rubyid_k'>k</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='rparen'>)</span>
<span class='comment'># Create an instance of the handler for this resource
</span> <span class='id identifier rubyid_handler'>handler</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_p'>p</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='comment'># If the handler class requires a relative resource...
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='period'>.</span><span class='id identifier rubyid_relative_resource_required?'>relative_resource_required?</span><span class='rparen'>)</span>
<span class='comment'># Substituted the mount point root in the request to make things
</span> <span class='comment'># relative to the mount point.
</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_relative_resource'>relative_resource</span> <span class='op'>=</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_resource'>resource</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='embexpr_end'>}</span><span class='regexp_end'>/</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='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_relative_resource'>relative_resource</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_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_relative_resource'>relative_resource</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_relative_resource'>relative_resource</span> <span class='op'>!~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\/</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># If we found the resource handler for this resource, call its
</span> <span class='comment'># procedure.
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</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="../../ThreadFactory.html" title="Rex::ThreadFactory (class)">ThreadFactory</a></span></span><span class='period'>.</span><span class='id identifier rubyid_spawn'><span class='object_link'><a href="../../ThreadFactory.html#spawn-class_method" title="Rex::ThreadFactory.spawn (method)">spawn</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>HTTPServerRequestHandler</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_handler'>handler</span><span class='period'>.</span><span class='id identifier rubyid_on_request'>on_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_handler'>handler</span><span class='period'>.</span><span class='id identifier rubyid_on_request'>on_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Failed to find handler for resource: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_resource'>resource</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='const'>LogSource</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_e404'>send_e404</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># If keep-alive isn&#39;t enabled for this client, close the connection
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_keepalive'>keepalive</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</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="inspect-instance_method">
#<strong>inspect</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>More readable inspect that only shows the url and resources</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">
67
68
69
70
71</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 67</span>
<span class='kw'>def</span> <span class='id identifier rubyid_inspect'>inspect</span>
<span class='id identifier rubyid_resources_str'>resources_str</span> <span class='op'>=</span> <span class='id identifier rubyid_resources'>resources</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_r'>r</span><span class='op'>|</span> <span class='id identifier rubyid_r'>r</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_join'><span class='object_link'><a href="../../../top-level-namespace.html#join-instance_method" title="#join (method)">join</a></span></span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>, </span><span class='tstring_end'>&quot;</span></span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>#&lt;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'> http</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ssl'>ssl</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>s</span><span class='tstring_end'>&quot;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span><span class='embexpr_end'>}</span><span class='tstring_content'>://</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_listen_host'>listen_host</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_listen_port'>listen_port</span><span class='embexpr_end'>}</span><span class='tstring_content'> [ </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_resources_str'>resources_str</span><span class='embexpr_end'>}</span><span class='tstring_content'> ]&gt;</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mime_type-instance_method">
#<strong>mime_type</strong>(file) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the mime type associated with the supplied file. Right now the set of mime types is fairly limited.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
193
194
195
196
197
198
199
200
201</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 193</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mime_type'>mime_type</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span>
<span class='id identifier rubyid_type'>type</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\.(.+?)$</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_type'>type</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#ExtensionMimeTypes-constant" title="Rex::Proto::Http::Server::ExtensionMimeTypes (constant)">ExtensionMimeTypes</a></span></span><span class='lbracket'>[</span><span class='backref'>$1</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text/plain</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mount-instance_method">
#<strong>mount</strong>(root, handler, long_call = false, *args) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Mounts a directory or resource as being serviced by the supplied handler.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
141
142
143</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 141</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mount'>mount</span><span class='lparen'>(</span><span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_long_call'>long_call</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
<span class='id identifier rubyid_resources'>resources</span><span class='lbracket'>[</span><span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_long_call'>long_call</span><span class='comma'>,</span> <span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="on_client_connect-instance_method">
#<strong>on_client_connect</strong>(cli) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Extends new clients with the ServerClient module and initializes them.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
232
233
234
235
236</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 232</span>
<span class='kw'>def</span> <span class='id identifier rubyid_on_client_connect'>on_client_connect</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_extend'>extend</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="ServerClient.html" title="Rex::Proto::Http::ServerClient (module)">ServerClient</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_init_cli'>init_cli</span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="on_client_data-instance_method">
#<strong>on_client_data</strong>(cli) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Processes data coming in from a client.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 241</span>
<span class='kw'>def</span> <span class='id identifier rubyid_on_client_data'>on_client_data</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='int'>65535</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='op'>::</span><span class='const'>EOFError</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_data'>data</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='op'>::</span><span class='const'>EOFError</span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='kw'>case</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</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/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_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_reset_cli'>reset_cli</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/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#Partial-constant" title="Rex::Proto::Http::Packet::ParseCode::Partial (constant)">Partial</a></span></span>
<span class='comment'># Return and wait for the on_client_data handler to be called again
</span> <span class='comment'># The Request object tracks the state of the request for us
</span> <span class='kw'>return</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/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='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='const'>EOFError</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_completed?'>completed?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_reset_cli'>reset_cli</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</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="remove_resource-instance_method">
#<strong>remove_resource</strong>(name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Removes the supplied resource handler.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
178
179
180</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 178</span>
<span class='kw'>def</span> <span class='id identifier rubyid_remove_resource'>remove_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_resources'>resources</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_e404-instance_method">
#<strong>send_e404</strong>(cli, request) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Sends a 404 error to the client for a given request.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 206</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_e404'>send_e404</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</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='op'>::</span><span class='const'><span class='object_link'><a href="Response/E404.html" title="Rex::Proto::Http::Response::E404 (class)">E404</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Response/E404.html#initialize-instance_method" title="Rex::Proto::Http::Response::E404#initialize (method)">new</a></span></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'>Content-Type</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'>text/html</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='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;html&gt;&lt;head&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;title&gt;404 Not Found&lt;/title&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;/head&gt;&lt;body&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;h1&gt;Not found&lt;/h1&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The requested URL </span><span class='embexpr_beg'>#{</span><span class='const'>ERB</span><span class='op'>::</span><span class='const'>Util</span><span class='period'>.</span><span class='id identifier rubyid_html_escape'>html_escape</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_resource'>resource</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'> was not found on this server.&lt;p&gt;&lt;hr&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;/body&gt;&lt;/html&gt;</span><span class='tstring_end'>&quot;</span></span>
<span class='comment'># Send the response to the client like what
</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_send_response'>send_response</span><span class='lparen'>(</span><span class='id identifier rubyid_resp'>resp</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="start-instance_method">
#<strong>start</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Listens on the defined port and host and starts monitoring for clients.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 90</span>
<span class='kw'>def</span> <span class='id identifier rubyid_start'>start</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</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'>TcpServer</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'>LocalHost</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listen_host'>listen_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='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listen_port'>listen_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='kw'>self</span><span class='period'>.</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='kw'>self</span><span class='period'>.</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'>SSLCert</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_cert'>ssl_cert</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SSLCompression</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_compression'>ssl_compression</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SSLCipher</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ssl_cipher'>ssl_cipher</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='kw'>self</span><span class='period'>.</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'>Comm</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_comm'>comm</span>
<span class='rparen'>)</span>
<span class='comment'># Register callbacks
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_on_client_connect_proc'>on_client_connect_proc</span> <span class='op'>=</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cli'>cli</span><span class='op'>|</span>
<span class='id identifier rubyid_on_client_connect'>on_client_connect</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_on_client_data_proc'>on_client_data_proc</span> <span class='op'>=</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cli'>cli</span><span class='op'>|</span>
<span class='id identifier rubyid_on_client_data'>on_client_data</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_start'>start</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>Terminates the monitor thread and turns off the listener.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
118
119
120
121</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 118</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stop'>stop</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_stop'>stop</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="unmount-instance_method">
#<strong>unmount</strong>(root) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Remove the mount point.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
148
149
150</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 148</span>
<span class='kw'>def</span> <span class='id identifier rubyid_unmount'>unmount</span><span class='lparen'>(</span><span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_resources'>resources</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="wait-instance_method">
#<strong>wait</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Waits for the HTTP service to terminate</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
127
128
129</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/http/server.rb', line 127</span>
<span class='kw'>def</span> <span class='id identifier rubyid_wait'>wait</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span><span class='period'>.</span><span class='id identifier rubyid_wait'>wait</span> <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener'>listener</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:04:12 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>