<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Yate: Stream Class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.7.1 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="namespaceTelEngine.html">TelEngine</a>::<a class="el" href="classTelEngine_1_1Stream.html">Stream</a> </div> </div> <div class="contents"> <h1>Stream Class Reference</h1><!-- doxytag: class="TelEngine::Stream" -->An abstract stream class capable of reading and writing. <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="yateclass_8h-source.html">yateclass.h</a>></code> <p> <div class="dynheader"> Inheritance diagram for Stream:</div> <div class="dynsection"> <p><center><img src="classTelEngine_1_1Stream.png" usemap="#Stream_map" border="0" alt=""></center> <map name="Stream_map"> <area href="classTelEngine_1_1File.html" alt="File" shape="rect" coords="0,56,51,80"> <area href="classTelEngine_1_1Socket.html" alt="Socket" shape="rect" coords="61,56,112,80"> </map> </div> <p> <a href="classTelEngine_1_1Stream-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#15237b41305f4268e1576c81766cd6d9">~Stream</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#96340680cb1fac065cf67720ac8fe443">error</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#75ac47e7166b2005e2f8c306b5bb05ea">terminate</a> ()=0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#2614cbc71a9f1bae1f70930d007ec6c1">canRetry</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#d9248394f673632ebda5b9c455e464f2">valid</a> () const =0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#cf353bce1608e9d3734b4c12d1ae7b87">setBlocking</a> (bool block=true)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#88415446fd03ca1954f4561f29c82ff1">writeData</a> (const void *buffer, int length)=0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#a9d860f29cc32d8cd92da1d16da72e7e">writeData</a> (const char *str)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#93a96a9e0e9872057dd0f1b259300459">writeData</a> (const <a class="el" href="classTelEngine_1_1String.html">String</a> &str)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#052ac850f0f5e4251dc507203fa22485">writeData</a> (const <a class="el" href="classTelEngine_1_1DataBlock.html">DataBlock</a> &buf)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#0c1156011c87f6b700d076b1baad8dc6">readData</a> (void *buffer, int length)=0</td></tr> <tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#098166bf0c37a6a9338b2c95a7d22587">allocPipe</a> (<a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *&reader, <a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *&writer)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#cbf1b5e8bf3d653925aa0c33b4675688">allocPair</a> (<a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *&str1, <a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *&str2)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#75983d6ebb205de5a2ca9b6890aef5e6">supportsPipes</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#a0d4d36acf32c492153b27621ef320e5">supportsPairs</a> ()</td></tr> <tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#7411b49ed5fda5181dd182d64984906e">Stream</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classTelEngine_1_1Stream.html#926ead67a784f455ddd56590f2928e76">clearError</a> ()</td></tr> <tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f3a79bbd969b9bd0e8acef1e9dad613"></a><!-- doxytag: member="TelEngine::Stream::m_error" ref="6f3a79bbd969b9bd0e8acef1e9dad613" args="" --> int </td><td class="memItemRight" valign="bottom"><b>m_error</b></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> An abstract stream class capable of reading and writing. <p> Base class for encapsulating system dependent stream capable objects <hr><h2>Constructor & Destructor Documentation</h2> <a class="anchor" name="15237b41305f4268e1576c81766cd6d9"></a><!-- doxytag: member="TelEngine::Stream::~Stream" ref="15237b41305f4268e1576c81766cd6d9" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual ~<a class="el" href="classTelEngine_1_1Stream.html">Stream</a> </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Destructor, terminates the stream </div> </div><p> <a class="anchor" name="7411b49ed5fda5181dd182d64984906e"></a><!-- doxytag: member="TelEngine::Stream::Stream" ref="7411b49ed5fda5181dd182d64984906e" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classTelEngine_1_1Stream.html">Stream</a> </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [inline, protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Default constructor </div> </div><p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="cbf1b5e8bf3d653925aa0c33b4675688"></a><!-- doxytag: member="TelEngine::Stream::allocPair" ref="cbf1b5e8bf3d653925aa0c33b4675688" args="(Stream *&str1, Stream *&str2)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static bool allocPair </td> <td>(</td> <td class="paramtype"><a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *& </td> <td class="paramname"> <em>str1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *& </td> <td class="paramname"> <em>str2</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Allocate a new pair of bidirectionally connected streams <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>str1</em> </td><td>Reference of a pointer receiving the newly allocated 1st end of the pair </td></tr> <tr><td valign="top"></td><td valign="top"><em>str2</em> </td><td>Reference of a pointer receiving the newly allocated 2nd end of the pair </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>True is the stream pair was created successfully </dd></dl> </div> </div><p> <a class="anchor" name="098166bf0c37a6a9338b2c95a7d22587"></a><!-- doxytag: member="TelEngine::Stream::allocPipe" ref="098166bf0c37a6a9338b2c95a7d22587" args="(Stream *&reader, Stream *&writer)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static bool allocPipe </td> <td>(</td> <td class="paramtype"><a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *& </td> <td class="paramname"> <em>reader</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classTelEngine_1_1Stream.html">Stream</a> *& </td> <td class="paramname"> <em>writer</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Allocate a new pair of unidirectionally pipe connected streams <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>reader</em> </td><td>Reference of a pointer receiving the newly allocated reading side of the pipe </td></tr> <tr><td valign="top"></td><td valign="top"><em>writer</em> </td><td>Reference of a pointer receiving the newly allocated writing side of the pipe </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>True is the stream pipe was created successfully </dd></dl> </div> </div><p> <a class="anchor" name="2614cbc71a9f1bae1f70930d007ec6c1"></a><!-- doxytag: member="TelEngine::Stream::canRetry" ref="2614cbc71a9f1bae1f70930d007ec6c1" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual bool canRetry </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td> const<code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Check if the last error code indicates a retryable condition <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if error was temporary and operation should be retried </dd></dl> <p>Reimplemented in <a class="el" href="classTelEngine_1_1File.html#2614cbc71a9f1bae1f70930d007ec6c1">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#2614cbc71a9f1bae1f70930d007ec6c1">Socket</a>.</p> </div> </div><p> <a class="anchor" name="926ead67a784f455ddd56590f2928e76"></a><!-- doxytag: member="TelEngine::Stream::clearError" ref="926ead67a784f455ddd56590f2928e76" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void clearError </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [inline, protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Clear the last error code </div> </div><p> <a class="anchor" name="96340680cb1fac065cf67720ac8fe443"></a><!-- doxytag: member="TelEngine::Stream::error" ref="96340680cb1fac065cf67720ac8fe443" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int error </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Get the error code of the last operation on this stream <dl class="return" compact><dt><b>Returns:</b></dt><dd>Error code generated by the last operation on this stream </dd></dl> </div> </div><p> <a class="anchor" name="0c1156011c87f6b700d076b1baad8dc6"></a><!-- doxytag: member="TelEngine::Stream::readData" ref="0c1156011c87f6b700d076b1baad8dc6" args="(void *buffer, int length)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual int readData </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>buffer</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>length</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Receive data from a connected stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>buffer</em> </td><td>Buffer for data transfer </td></tr> <tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>Length of the buffer </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>Number of bytes transferred, negative if an error occurred </dd></dl> <p>Implemented in <a class="el" href="classTelEngine_1_1File.html#4b0012f52b3982d99359a9178e4862b8">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#4b0012f52b3982d99359a9178e4862b8">Socket</a>.</p> </div> </div><p> <a class="anchor" name="cf353bce1608e9d3734b4c12d1ae7b87"></a><!-- doxytag: member="TelEngine::Stream::setBlocking" ref="cf353bce1608e9d3734b4c12d1ae7b87" args="(bool block=true)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual bool setBlocking </td> <td>(</td> <td class="paramtype">bool </td> <td class="paramname"> <em>block</em> = <code>true</code> </td> <td> ) </td> <td><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Set the blocking or non-blocking operation mode of the stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>block</em> </td><td>True if I/O operations should block, false for non-blocking </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if operation was successfull, false if an error occured </dd></dl> <p>Reimplemented in <a class="el" href="classTelEngine_1_1File.html#cf353bce1608e9d3734b4c12d1ae7b87">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#cf353bce1608e9d3734b4c12d1ae7b87">Socket</a>.</p> </div> </div><p> <a class="anchor" name="a0d4d36acf32c492153b27621ef320e5"></a><!-- doxytag: member="TelEngine::Stream::supportsPairs" ref="a0d4d36acf32c492153b27621ef320e5" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static bool supportsPairs </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Check if operating system supports bidirectional stream pairs <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if bidirectional pairs can be created </dd></dl> </div> </div><p> <a class="anchor" name="75983d6ebb205de5a2ca9b6890aef5e6"></a><!-- doxytag: member="TelEngine::Stream::supportsPipes" ref="75983d6ebb205de5a2ca9b6890aef5e6" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static bool supportsPipes </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Check if operating system supports unidirectional stream pairs <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if unidirectional pipes can be created </dd></dl> </div> </div><p> <a class="anchor" name="75ac47e7166b2005e2f8c306b5bb05ea"></a><!-- doxytag: member="TelEngine::Stream::terminate" ref="75ac47e7166b2005e2f8c306b5bb05ea" args="()=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual bool terminate </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Closes the stream <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if the stream was (already) closed, false if an error occured </dd></dl> <p>Implemented in <a class="el" href="classTelEngine_1_1File.html#191ac6b231961b9586ed2eadae024d6a">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#191ac6b231961b9586ed2eadae024d6a">Socket</a>.</p> </div> </div><p> <a class="anchor" name="d9248394f673632ebda5b9c455e464f2"></a><!-- doxytag: member="TelEngine::Stream::valid" ref="d9248394f673632ebda5b9c455e464f2" args="() const =0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual bool valid </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td> const<code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Check if this stream is valid <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if the stream is valid, false if it's invalid or closed </dd></dl> <p>Implemented in <a class="el" href="classTelEngine_1_1File.html#9fa9d50f99098045df2c2ef3b1af8047">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#9fa9d50f99098045df2c2ef3b1af8047">Socket</a>.</p> </div> </div><p> <a class="anchor" name="052ac850f0f5e4251dc507203fa22485"></a><!-- doxytag: member="TelEngine::Stream::writeData" ref="052ac850f0f5e4251dc507203fa22485" args="(const DataBlock &buf)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int writeData </td> <td>(</td> <td class="paramtype">const <a class="el" href="classTelEngine_1_1DataBlock.html">DataBlock</a> & </td> <td class="paramname"> <em>buf</em> </td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Write a Data block to a connected stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td><a class="el" href="classTelEngine_1_1DataBlock.html" title="A class that holds just a block of raw data.">DataBlock</a> to send over the stream </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>Number of bytes transferred, negative if an error occurred </dd></dl> <p>References <a class="el" href="yateclass_8h-source.html#l02544">DataBlock::data()</a>, <a class="el" href="yateclass_8h-source.html#l02558">DataBlock::length()</a>, and <a class="el" href="yateclass_8h-source.html#l04029">Stream::writeData()</a>.</p> <p>Referenced by <a class="el" href="yateclass_8h-source.html#l04029">Stream::writeData()</a>.</p> </div> </div><p> <a class="anchor" name="93a96a9e0e9872057dd0f1b259300459"></a><!-- doxytag: member="TelEngine::Stream::writeData" ref="93a96a9e0e9872057dd0f1b259300459" args="(const String &str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int writeData </td> <td>(</td> <td class="paramtype">const <a class="el" href="classTelEngine_1_1String.html">String</a> & </td> <td class="paramname"> <em>str</em> </td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Write a <a class="el" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> to a connected stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td><a class="el" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> to send over the stream </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>Number of bytes transferred, negative if an error occurred </dd></dl> <p>References <a class="el" href="yateclass_8h-source.html#l01296">String::c_str()</a>, <a class="el" href="yateclass_8h-source.html#l01310">String::length()</a>, and <a class="el" href="yateclass_8h-source.html#l04021">Stream::writeData()</a>.</p> <p>Referenced by <a class="el" href="yateclass_8h-source.html#l04021">Stream::writeData()</a>.</p> </div> </div><p> <a class="anchor" name="a9d860f29cc32d8cd92da1d16da72e7e"></a><!-- doxytag: member="TelEngine::Stream::writeData" ref="a9d860f29cc32d8cd92da1d16da72e7e" args="(const char *str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int writeData </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>str</em> </td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p> Write a C string to a connected stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td><a class="el" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> to send over the stream </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>Number of bytes transferred, negative if an error occurred </dd></dl> </div> </div><p> <a class="anchor" name="88415446fd03ca1954f4561f29c82ff1"></a><!-- doxytag: member="TelEngine::Stream::writeData" ref="88415446fd03ca1954f4561f29c82ff1" args="(const void *buffer, int length)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual int writeData </td> <td>(</td> <td class="paramtype">const void * </td> <td class="paramname"> <em>buffer</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>length</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Write data to a connected stream <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>buffer</em> </td><td>Buffer for data transfer </td></tr> <tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>Length of the buffer </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>Number of bytes transferred, negative if an error occurred </dd></dl> <p>Implemented in <a class="el" href="classTelEngine_1_1File.html#ab8efa96798936c2ed4a76470877ec98">File</a>, and <a class="el" href="classTelEngine_1_1Socket.html#ab8efa96798936c2ed4a76470877ec98">Socket</a>.</p> </div> </div><p> <hr>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="yateclass_8h-source.html">yateclass.h</a></ul> </div> <hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 21:36:11 2008 for Yate by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address> </body> </html>