<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Rumai::IXP::Agent</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" />
    <link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" />
    <script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script>
</head>

<body>     
    <div class="banner">
        <h1>
            <span class="type">Class</span> 
            Rumai::IXP::Agent 
            
                <span class="parent">&lt; 
                    
                    <a href="../../Object.html">Object</a>
                    
                </span>
            
        </h1>
        <ul class="files">
            
            <li><a href="../../../files/lib/rumai/ixp/transport_rb.html">lib/rumai/ixp/transport.rb</a></li>
            
        </ul>
    </div>
    <div id="bodyContent">
        <div id="content">
    
    <div class="description">
        <p>
A thread-safe proxy that multiplexes many threads onto a single 9P2000
connection.
</p>

    </div>
    

    

    
    

    
    
    <div class="sectiontitle">Methods</div>
    <dl class="methods">
    
        <dt>A</dt>
        <dd>
            <ul>
                
                <li><a href="#M000111">attach</a></li>
                
            </ul>
        </dd>
    
        <dt>C</dt>
        <dd>
            <ul>
                
                <li><a href="#M000115">clunk</a>,</li>
                
                <li><a href="#M000091">create</a></li>
                
            </ul>
        </dd>
    
        <dt>E</dt>
        <dd>
            <ul>
                
                <li><a href="#M000088">entries</a></li>
                
            </ul>
        </dd>
    
        <dt>N</dt>
        <dd>
            <ul>
                
                <li><a href="#M000035">new</a></li>
                
            </ul>
        </dd>
    
        <dt>O</dt>
        <dd>
            <ul>
                
                <li><a href="#M000061">open</a></li>
                
            </ul>
        </dd>
    
        <dt>R</dt>
        <dd>
            <ul>
                
                <li><a href="#M000087">read</a>,</li>
                
                <li><a href="#M000097">remove</a>,</li>
                
                <li><a href="#M000098">remove_fid</a></li>
                
            </ul>
        </dd>
    
        <dt>S</dt>
        <dd>
            <ul>
                
                <li><a href="#M000101">stat</a>,</li>
                
                <li><a href="#M000105">stat_fid</a></li>
                
            </ul>
        </dd>
    
        <dt>T</dt>
        <dd>
            <ul>
                
                <li><a href="#M000053">talk</a></li>
                
            </ul>
        </dd>
    
        <dt>W</dt>
        <dd>
            <ul>
                
                <li><a href="#M000106">walk</a>,</li>
                
                <li><a href="#M000107">walk_fid</a>,</li>
                
                <li><a href="#M000090">write</a></li>
                
            </ul>
        </dd>
    
    </dl>
    

    

    

    
    <div class="sectiontitle">Classes and Modules</div>
    <ul>
        
        <li><span class="type">MODULE</span> <a href="Agent/MODES.html">Rumai::IXP::Agent::MODES</a></li>
        
        <li><span class="type">CLASS</span> <a href="Agent/FidStream.html">Rumai::IXP::Agent::FidStream</a></li>
        
        <li><span class="type">CLASS</span> <a href="Agent/RangedPool.html">Rumai::IXP::Agent::RangedPool</a></li>
        
    </ul>
    

    
    <div class="sectiontitle">Constants</div>
    <table border='0' cellpadding='5'>
        
        <tr valign='top'>
            <td class="attr-name">MODES</td>
            <td>=</td>
            <td class="attr-value">{         'r' =&gt; Topen::OREAD,         'w' =&gt; Topen::OWRITE,         't' =&gt; Topen::ORCLOSE,         '+' =&gt; Topen::ORDWR,       }</td>
        </tr>
        
        
    </table>
    

    
    <div class="sectiontitle">Attributes</div>
    <table border='0' cellpadding='5'>
        
        <tr valign='top'>
            <td class='attr-rw'>
                [R]
            </td>
            <td class='attr-name'>msize</td>
            <td class='attr-desc'></td>
        </tr>
        
    </table>
    

    
            <div class="sectiontitle">Class Public methods</div>
            
            <div class="method">
                <div class="title" id="M000035">
                    
                    <a name="M000035"></a><b>new</b>(stream)
                    
                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000035_source')" id="l_M000035_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L19" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000035_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 19</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">stream</span>
        <span class="ruby-ivar">@stream</span>   = <span class="ruby-identifier">stream</span>
        <span class="ruby-ivar">@send_lock</span> = <span class="ruby-constant">Mutex</span>.<span class="ruby-identifier">new</span>
        <span class="ruby-ivar">@recv_bays</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span> } <span class="ruby-comment cmt"># tag =&gt; Queue(message)</span>

        <span class="ruby-comment cmt"># background thread which continuously receives</span>
        <span class="ruby-comment cmt"># and dispatches messages from the 9P2000 server</span>
        <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
          <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
            <span class="ruby-identifier">msg</span> = <span class="ruby-constant">Fcall</span>.<span class="ruby-identifier">from_9p</span> <span class="ruby-ivar">@stream</span>
            <span class="ruby-ivar">@recv_bays</span>[<span class="ruby-identifier">msg</span>.<span class="ruby-identifier">tag</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">msg</span>
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">priority</span> = <span class="ruby-value">-1</span>

        <span class="ruby-ivar">@tag_pool</span> = <span class="ruby-constant">RangedPool</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-constant">BYTE2_MASK</span>)
        <span class="ruby-ivar">@fid_pool</span> = <span class="ruby-constant">RangedPool</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-constant">BYTE4_MASK</span>)

        <span class="ruby-comment cmt"># establish connection with 9P2000 server</span>
        <span class="ruby-identifier">req</span> = <span class="ruby-constant">Tversion</span>.<span class="ruby-identifier">new</span>(
          <span class="ruby-identifier">:tag</span>     =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOTAG</span>,
          <span class="ruby-identifier">:msize</span>   =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Tversion</span><span class="ruby-operator">::</span><span class="ruby-constant">MSIZE</span>,
          <span class="ruby-identifier">:version</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Tversion</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>
        )
        <span class="ruby-identifier">rsp</span> = <span class="ruby-identifier">talk</span>(<span class="ruby-identifier">req</span>)

        <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">version</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">version</span>
          <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;protocol mismatch: self=#{req.version.inspect} server=#{rsp.version.inspect}&quot;</span>
        <span class="ruby-keyword kw">end</span>

        <span class="ruby-ivar">@msize</span> = <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">msize</span>

        <span class="ruby-comment cmt"># authenticate the connection (not necessary for wmii)</span>
        <span class="ruby-ivar">@auth_fid</span> = <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOFID</span>

        <span class="ruby-comment cmt"># attach to filesystem root</span>
        <span class="ruby-ivar">@root_fid</span> = <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">obtain</span>
        <span class="ruby-identifier">attach</span> <span class="ruby-ivar">@root_fid</span>, <span class="ruby-ivar">@auth_fid</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="sectiontitle">Instance Public methods</div>
            
            <div class="method">
                <div class="title" id="M000111">
                    
                    <a name="M000111"></a><b>attach</b>(root_fid, auth_fid = Fcall::NOFID, auth_name = ENV['USER'])
                    
                </div>
                
                <div class="description">
                  <p>
Associates the given FID with the FS root.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000111_source')" id="l_M000111_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L413" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000111_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 413</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attach</span> <span class="ruby-identifier">root_fid</span>, <span class="ruby-identifier">auth_fid</span> = <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOFID</span>, <span class="ruby-identifier">auth_name</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'USER'</span>]
        <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tattach</span>.<span class="ruby-identifier">new</span>(
          <span class="ruby-identifier">:fid</span>    =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">root_fid</span>,
          <span class="ruby-identifier">:afid</span>   =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">auth_fid</span>,
          <span class="ruby-identifier">:uname</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'USER'</span>],
          <span class="ruby-identifier">:aname</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">auth_name</span>
        )
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000115">
                    
                    <a name="M000115"></a><b>clunk</b>(fid)
                    
                </div>
                
                <div class="description">
                  <p>
Retires the given FID from use.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000115_source')" id="l_M000115_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L425" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000115_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 425</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clunk</span> <span class="ruby-identifier">fid</span>
        <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tclunk</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">fid</span>)
        <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">release</span> <span class="ruby-identifier">fid</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000091">
                    
                    <a name="M000091"></a><b>create</b>(path, mode = 'rw', perm = 0644)
                    
                </div>
                
                <div class="description">
                  <p>
Creates a new file at the given path that is accessible using the given
modes for a user having the given permission bits.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000091_source')" id="l_M000091_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L336" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000091_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 336</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-value str">'rw'</span>, <span class="ruby-identifier">perm</span> = <span class="ruby-value">0644</span>
        <span class="ruby-identifier">prefix</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">path</span>)
        <span class="ruby-identifier">target</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">path</span>)

        <span class="ruby-identifier">mode</span> = <span class="ruby-constant">MODES</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mode</span>)

        <span class="ruby-identifier">with_fid</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prefix_fid</span><span class="ruby-operator">|</span>
          <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">prefix_fid</span>, <span class="ruby-identifier">prefix</span>

          <span class="ruby-comment cmt"># create the file</span>
          <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tcreate</span>.<span class="ruby-identifier">new</span>(
            <span class="ruby-identifier">:fid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">prefix_fid</span>,
            <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">target</span>,
            <span class="ruby-identifier">:perm</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">perm</span>,
            <span class="ruby-identifier">:mode</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">mode</span>
          )
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000088">
                    
                    <a name="M000088"></a><b>entries</b>(path)
                    
                </div>
                
                <div class="description">
                  <p>
Returns the names of all files inside the directory whose path is given.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000088_source')" id="l_M000088_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L315" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000088_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 315</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">entries</span> <span class="ruby-identifier">path</span>
        <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">stat</span>(<span class="ruby-identifier">path</span>).<span class="ruby-identifier">directory?</span>
          <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;#{path.inspect} is not a directory&quot;</span>
        <span class="ruby-keyword kw">end</span>

        <span class="ruby-identifier">read</span>(<span class="ruby-identifier">path</span>).<span class="ruby-identifier">map!</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span> <span class="ruby-identifier">t</span>.<span class="ruby-identifier">name</span>}
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000061">
                    
                    <a name="M000061"></a><b>open</b>(path, mode = 'r')
                    
                </div>
                
                <div class="description">
                  <p>
Opens the given path for I/O access through a <a
href="Agent/FidStream.html">FidStream</a> object. If a block is given, it
is invoked with a <a href="Agent/FidStream.html">FidStream</a> object and
the stream is closed afterwards.
</p>
<p>
See File::open in the Ruby documentation.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000061_source')" id="l_M000061_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L157" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000061_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 157</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-value str">'r'</span> <span class="ruby-comment cmt"># :yields: FidStream</span>
        <span class="ruby-identifier">mode</span> = <span class="ruby-constant">MODES</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mode</span>)

        <span class="ruby-comment cmt"># open the file</span>
        <span class="ruby-identifier">path_fid</span> = <span class="ruby-identifier">walk</span>(<span class="ruby-identifier">path</span>)

        <span class="ruby-identifier">talk</span> <span class="ruby-constant">Topen</span>.<span class="ruby-identifier">new</span>(
          <span class="ruby-identifier">:fid</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path_fid</span>,
          <span class="ruby-identifier">:mode</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">mode</span>
        )

        <span class="ruby-identifier">stream</span> = <span class="ruby-constant">FidStream</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">path_fid</span>, <span class="ruby-ivar">@msize</span>)

        <span class="ruby-comment cmt"># return the file stream</span>
        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
          <span class="ruby-keyword kw">begin</span>
            <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">stream</span>
          <span class="ruby-keyword kw">ensure</span>
            <span class="ruby-identifier">stream</span>.<span class="ruby-identifier">close</span>
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">else</span>
          <span class="ruby-identifier">stream</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000087">
                    
                    <a name="M000087"></a><b>read</b>(path, *args)
                    
                </div>
                
                <div class="description">
                  <p>
Returns the content of the file/directory at the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000087_source')" id="l_M000087_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L306" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000087_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 306</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span> <span class="ruby-identifier">path</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
        <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
          <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000097">
                    
                    <a name="M000097"></a><b>remove</b>(path)
                    
                </div>
                
                <div class="description">
                  <p>
Deletes the file at the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000097_source')" id="l_M000097_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L358" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000097_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 358</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove</span> <span class="ruby-identifier">path</span>
        <span class="ruby-identifier">path_fid</span> = <span class="ruby-identifier">walk</span>(<span class="ruby-identifier">path</span>)
        <span class="ruby-identifier">remove_fid</span> <span class="ruby-identifier">path_fid</span> <span class="ruby-comment cmt"># remove also does clunk</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000098">
                    
                    <a name="M000098"></a><b>remove_fid</b>(path_fid)
                    
                </div>
                
                <div class="description">
                  <p>
Deletes the file corresponding to the given FID and clunks the given FID.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000098_source')" id="l_M000098_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L367" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000098_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 367</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove_fid</span> <span class="ruby-identifier">path_fid</span>
        <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tremove</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path_fid</span>)
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000101">
                    
                    <a name="M000101"></a><b>stat</b>(path)
                    
                </div>
                
                <div class="description">
                  <p>
Returns information about the file at the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000101_source')" id="l_M000101_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L374" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000101_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 374</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stat</span> <span class="ruby-identifier">path</span>
        <span class="ruby-identifier">with_fid</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path_fid</span><span class="ruby-operator">|</span>
          <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">path</span>
          <span class="ruby-identifier">stat_fid</span> <span class="ruby-identifier">path_fid</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000105">
                    
                    <a name="M000105"></a><b>stat_fid</b>(path_fid)
                    
                </div>
                
                <div class="description">
                  <p>
Returns information about the file referenced by the given FID.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000105_source')" id="l_M000105_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L384" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000105_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 384</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stat_fid</span> <span class="ruby-identifier">path_fid</span>
        <span class="ruby-identifier">req</span> = <span class="ruby-constant">Tstat</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path_fid</span>)
        <span class="ruby-identifier">rsp</span> = <span class="ruby-identifier">talk</span>(<span class="ruby-identifier">req</span>)
        <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">stat</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000053">
                    
                    <a name="M000053"></a><b>talk</b>(request)
                    
                </div>
                
                <div class="description">
                  <p>
Sends the given message (<a href="Fcall.html">Rumai::IXP::Fcall</a>) and
returns its response.
</p>
<p>
This method allows you to perform a 9P2000 transaction without worrying
about the details of tag collisions and thread safety.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000053_source')" id="l_M000053_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L110" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000053_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 110</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">talk</span> <span class="ruby-identifier">request</span>
        <span class="ruby-comment cmt"># send the request</span>
        <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@tag_pool</span>.<span class="ruby-identifier">obtain</span>
        <span class="ruby-identifier">bay</span> = <span class="ruby-ivar">@recv_bays</span>[<span class="ruby-identifier">tag</span>]

        <span class="ruby-identifier">request</span>.<span class="ruby-identifier">tag</span> = <span class="ruby-identifier">tag</span>
        <span class="ruby-identifier">output</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">to_9p</span>
        <span class="ruby-ivar">@send_lock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
          <span class="ruby-ivar">@stream</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">output</span>
        <span class="ruby-keyword kw">end</span>

        <span class="ruby-comment cmt"># receive the response</span>
        <span class="ruby-identifier">response</span> = <span class="ruby-identifier">bay</span>.<span class="ruby-identifier">shift</span>
        <span class="ruby-ivar">@tag_pool</span>.<span class="ruby-identifier">release</span> <span class="ruby-identifier">tag</span>

        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Rerror</span>
          <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;#{response.ename.inspect} in response to #{request.inspect}&quot;</span>
        <span class="ruby-keyword kw">else</span>
          <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">response</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000106">
                    
                    <a name="M000106"></a><b>walk</b>(path)
                    
                </div>
                
                <div class="description">
                  <p>
Returns an FID corresponding to the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000106_source')" id="l_M000106_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L393" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000106_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 393</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">walk</span> <span class="ruby-identifier">path</span>
        <span class="ruby-identifier">fid</span> = <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">obtain</span>
        <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">fid</span>, <span class="ruby-identifier">path</span>
        <span class="ruby-identifier">fid</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000107">
                    
                    <a name="M000107"></a><b>walk_fid</b>(path_fid, path)
                    
                </div>
                
                <div class="description">
                  <p>
Associates the given FID to the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000107_source')" id="l_M000107_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L402" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000107_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 402</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">path</span>
        <span class="ruby-identifier">talk</span> <span class="ruby-constant">Twalk</span>.<span class="ruby-identifier">new</span>(
          <span class="ruby-identifier">:fid</span>    =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@root_fid</span>,
          <span class="ruby-identifier">:newfid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path_fid</span>,
          <span class="ruby-identifier">:wname</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">%r{/+}</span>).<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">empty?</span> }
        )
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
            <div class="method">
                <div class="title" id="M000090">
                    
                    <a name="M000090"></a><b>write</b>(path, content)
                    
                </div>
                
                <div class="description">
                  <p>
Returns the content of the file/directory at the given path.
</p>

                </div>
                
                
                
                
                <div class="sourcecode">
                    <p class="source-link">
                        Source: <a href="javascript:toggleSource('M000090_source')" id="l_M000090_source">show</a>
                        
                        | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L326" target="_blank" class="github_url">on GitHub</a>
                        
                    </p>
                    <div id="M000090_source" class="dyn-source">
                        <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 326</span>
      <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">content</span>
        <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span>, <span class="ruby-value str">'w'</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
          <span class="ruby-identifier">f</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span></pre>
                    </div>
                </div>
                
            </div>
            
</div>
    </div>
  </body>
</html>