Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > eeacaa4eb55fa544d622989e42fc27b1 > files > 773

libyate-devel-2.0.0-2mdv2009.1.i586.rpm

<!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: yatemgcp.h Source File</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&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    </ul>
  </div>
<h1>yatemgcp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __YATEMGCP_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __YATEMGCP_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;yateclass.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;yatemime.h&gt;</span>
<a name="l00029"></a>00029 
<a name="l00030"></a>00030 <span class="preprocessor">#ifdef _WINDOWS</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor">#ifdef LIBYMGCP_EXPORTS</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define YMGCP_API __declspec(dllexport)</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#ifndef LIBYMGCP_STATIC</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define YMGCP_API __declspec(dllimport)</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span>
<a name="l00040"></a>00040 <span class="preprocessor">#endif </span><span class="comment">/* _WINDOWS */</span>
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="preprocessor">#ifndef YMGCP_API</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define YMGCP_API</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00049"></a>00049 <span class="keyword">namespace </span>TelEngine {
<a name="l00050"></a>00050 
<a name="l00051"></a>00051 <span class="keyword">class </span>MGCPMessage;
<a name="l00052"></a>00052 <span class="keyword">class </span>MGCPTransaction;
<a name="l00053"></a>00053 <span class="keyword">class </span>MGCPEpInfo;
<a name="l00054"></a>00054 <span class="keyword">class </span>MGCPEndpoint;
<a name="l00055"></a>00055 <span class="keyword">class </span>MGCPEvent;
<a name="l00056"></a>00056 <span class="keyword">class </span>MGCPEngine;
<a name="l00057"></a>00057 
<a name="l00063"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html">00063</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a> : <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1RefObject.html">RefObject</a>
<a name="l00064"></a>00064 {
<a name="l00065"></a>00065     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>;
<a name="l00066"></a>00066 <span class="keyword">public</span>:
<a name="l00077"></a>00077     <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>(<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* ep, <span class="keyword">const</span> <span class="keywordtype">char</span>* ver = <span class="stringliteral">"MGCP 1.0"</span>);
<a name="l00078"></a>00078 
<a name="l00087"></a>00087     <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>(<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* trans, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> code, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment = 0);
<a name="l00088"></a>00088 
<a name="l00092"></a>00092     <span class="keyword">virtual</span> ~<a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>();
<a name="l00093"></a>00093 
<a name="l00098"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#8d985300b138b6c5556ab17ed4df3b38">00098</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> valid()<span class="keyword"> const</span>
<a name="l00099"></a>00099 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_valid; }
<a name="l00100"></a>00100 
<a name="l00105"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#b31e7357671cfe484e3c3ed3cd6258e4">00105</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; name()<span class="keyword"> const</span>
<a name="l00106"></a>00106 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_name; }
<a name="l00107"></a>00107 
<a name="l00112"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#9fbb542ce0dae274d40866ba432b411a">00112</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> code()<span class="keyword"> const</span>
<a name="l00113"></a>00113 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_code; }
<a name="l00114"></a>00114 
<a name="l00119"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#be02834a1bc748fc318188e9e54c3c40">00119</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; version()<span class="keyword"> const</span>
<a name="l00120"></a>00120 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_version; }
<a name="l00121"></a>00121 
<a name="l00126"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#299a3fd110c3eabb8adfc9f8235a2ec9">00126</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; comment()<span class="keyword"> const</span>
<a name="l00127"></a>00127 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_comment; }
<a name="l00128"></a>00128 
<a name="l00133"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#cc6c7f58a3a1d7a0e4c7e5a6b43a8f49">00133</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isCommand()<span class="keyword"> const</span>
<a name="l00134"></a>00134 <span class="keyword">        </span>{ <span class="keywordflow">return</span> code() &lt; 0; }
<a name="l00135"></a>00135 
<a name="l00140"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#5f89a108755a6cb3e8185d85c850a816">00140</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isResponse()<span class="keyword"> const</span>
<a name="l00141"></a>00141 <span class="keyword">        </span>{ <span class="keywordflow">return</span> 100 &lt;= code(); }
<a name="l00142"></a>00142 
<a name="l00147"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#c443fdf72682a999d095f5bf11211f0a">00147</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isAck()<span class="keyword"> const</span>
<a name="l00148"></a>00148 <span class="keyword">        </span>{ <span class="keywordflow">return</span> 0 &lt;= code() &amp;&amp; code() &lt;= 99; }
<a name="l00149"></a>00149 
<a name="l00154"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#0c8e59e64cbab0c8af978c4f51bed6f9">00154</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transactionId()<span class="keyword"> const</span>
<a name="l00155"></a>00155 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_transaction; }
<a name="l00156"></a>00156 
<a name="l00161"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#3b22b772544eaaf874b63ca5807a0f78">00161</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; endpointId()<span class="keyword"> const</span>
<a name="l00162"></a>00162 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_endpoint; }
<a name="l00163"></a>00163 
<a name="l00169"></a>00169     <span class="keywordtype">void</span> toString(<a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; dest) <span class="keyword">const</span>;
<a name="l00170"></a>00170 
<a name="l00183"></a>00183     <span class="keyword">static</span> <span class="keywordtype">bool</span> parse(<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine, <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a>&amp; dest,
<a name="l00184"></a>00184         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len,
<a name="l00185"></a>00185         <span class="keyword">const</span> <span class="keywordtype">char</span>* sdpType = <span class="stringliteral">"application/sdp"</span>);
<a name="l00186"></a>00186 
<a name="l00190"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#843f74eb2ae35223b090dc55e73aab9c">00190</a>     <a class="code" href="classTelEngine_1_1NamedList.html" title="A named string container class.">NamedList</a> params;
<a name="l00191"></a>00191 
<a name="l00195"></a><a class="code" href="classTelEngine_1_1MGCPMessage.html#7e8595a03399b14f9bddf86c8e12207e">00195</a>     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> sdp;
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 <span class="keyword">protected</span>:
<a name="l00208"></a>00208     <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>(<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">int</span> code,
<a name="l00209"></a>00209         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transId, <span class="keyword">const</span> <span class="keywordtype">char</span>* epId, <span class="keyword">const</span> <span class="keywordtype">char</span>* ver);
<a name="l00210"></a>00210 
<a name="l00211"></a>00211 <span class="keyword">private</span>:
<a name="l00212"></a>00212     <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>() : params(<span class="stringliteral">""</span>) {}        <span class="comment">// Avoid using default constructor</span>
<a name="l00213"></a>00213     <span class="comment">// Decode the message line</span>
<a name="l00214"></a>00214     <span class="keyword">static</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* decodeMessage(<span class="keyword">const</span> <span class="keywordtype">char</span>* line, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&amp; trans,
<a name="l00215"></a>00215         <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; error, <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine);
<a name="l00216"></a>00216     <span class="comment">// Decode message parameters. Return true if found a line containing a dot</span>
<a name="l00217"></a>00217     <span class="keyword">static</span> <span class="keywordtype">bool</span> decodeParams(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len,
<a name="l00218"></a>00218         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&amp; crt, <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg, <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; error, <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine);
<a name="l00219"></a>00219 
<a name="l00220"></a>00220     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_name;                       <span class="comment">// Command or string representation of response code</span>
<a name="l00221"></a>00221     <span class="keywordtype">bool</span> m_valid;                        <span class="comment">// False if this message is invalid</span>
<a name="l00222"></a>00222     <span class="keywordtype">int</span> m_code;                          <span class="comment">// Response code or -1 if this is a command</span>
<a name="l00223"></a>00223     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_transaction;          <span class="comment">// The id of the transaction this message belongs to</span>
<a name="l00224"></a>00224     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_endpoint;                   <span class="comment">// The id of the endpoint issuing this message</span>
<a name="l00225"></a>00225     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_version;                    <span class="comment">// The protocol version</span>
<a name="l00226"></a>00226     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_comment;                    <span class="comment">// The comment attached to a response message</span>
<a name="l00227"></a>00227 };
<a name="l00228"></a>00228 
<a name="l00233"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html">00233</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a> : <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1RefObject.html">RefObject</a>, <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1Mutex.html" title="Mutex support.">Mutex</a>
<a name="l00234"></a>00234 {
<a name="l00235"></a>00235     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>;             <span class="comment">// Process a received message</span>
<a name="l00236"></a>00236     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>;              <span class="comment">// Access to event termination notification</span>
<a name="l00237"></a>00237 <span class="keyword">public</span>:
<a name="l00241"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#5d74787dedbc4e11c1ab15bf487e61f8">00241</a>     <span class="keyword">enum</span> <a class="code" href="classTelEngine_1_1MGCPTransaction.html#5d74787dedbc4e11c1ab15bf487e61f8">State</a> {
<a name="l00242"></a>00242         Invalid      = 0,                <span class="comment">// This is an invalid transaction (constructor failed)</span>
<a name="l00243"></a>00243         Initiated    = 1,                <span class="comment">// An initial command message was sent/received</span>
<a name="l00244"></a>00244         Trying       = 2,                <span class="comment">// Sent or received a provisional response to the initial message</span>
<a name="l00245"></a>00245         Responded    = 3,                <span class="comment">// Sent or received a final response to the initial message</span>
<a name="l00246"></a>00246         Ack          = 4,                <span class="comment">// Response was ack'd</span>
<a name="l00247"></a>00247         Destroying   = 5,                <span class="comment">// Waiting to be removed from the engine</span>
<a name="l00248"></a>00248     };
<a name="l00249"></a>00249 
<a name="l00257"></a>00257     <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>(<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine, <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg, <span class="keywordtype">bool</span> outgoing,
<a name="l00258"></a>00258         <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; address);
<a name="l00259"></a>00259 
<a name="l00263"></a>00263     <span class="keyword">virtual</span> ~<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>();
<a name="l00264"></a>00264 
<a name="l00269"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#3804c9648e6d1325751536cca350f2bf">00269</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPTransaction.html#5d74787dedbc4e11c1ab15bf487e61f8">State</a> state()<span class="keyword"> const</span>
<a name="l00270"></a>00270 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_state; }
<a name="l00271"></a>00271 
<a name="l00276"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#fbee9fd63cc167498cd18e503c253e7c">00276</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> id()<span class="keyword"> const</span>
<a name="l00277"></a>00277 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_id; }
<a name="l00278"></a>00278 
<a name="l00283"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#bf0a85f6a7ff9ab42c7f7d86b1bc0da8">00283</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> outgoing()<span class="keyword"> const</span>
<a name="l00284"></a>00284 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_outgoing; }
<a name="l00285"></a>00285 
<a name="l00290"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#54b00cf5b655b1697be41ff469865b3b">00290</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; ep()<span class="keyword"> const</span>
<a name="l00291"></a>00291 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_endpoint; }
<a name="l00292"></a>00292 
<a name="l00297"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#37daa045dcf7a1b182cda22f09ae61a4">00297</a>     <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; addr()<span class="keyword"> const</span>
<a name="l00298"></a>00298 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_address; }
<a name="l00299"></a>00299 
<a name="l00304"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#bebc8e9f0ca79286f4b1e6b98b8d706d">00304</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine()
<a name="l00305"></a>00305         { <span class="keywordflow">return</span> m_engine; }
<a name="l00306"></a>00306 
<a name="l00311"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#c70841b2d1baead65794c3377f0ec323">00311</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* initial()<span class="keyword"> const</span>
<a name="l00312"></a>00312 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_cmd; }
<a name="l00313"></a>00313 
<a name="l00318"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#181fc688c52f38ca185fa4dc1cda18ba">00318</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msgProvisional()<span class="keyword"> const</span>
<a name="l00319"></a>00319 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_provisional; }
<a name="l00320"></a>00320 
<a name="l00325"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#de81c066760cda17ec84b5a1769cc736">00325</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msgResponse()<span class="keyword"> const</span>
<a name="l00326"></a>00326 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_response; }
<a name="l00327"></a>00327 
<a name="l00332"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#12a7d1f8c3f0c68edeb870316fc56e38">00332</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msgAck()<span class="keyword"> const</span>
<a name="l00333"></a>00333 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_ack; }
<a name="l00334"></a>00334 
<a name="l00339"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#9c437d53bf2d1e353a45486af2fd3343">00339</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> timeout()<span class="keyword"> const</span>
<a name="l00340"></a>00340 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_timeout; }
<a name="l00341"></a>00341 
<a name="l00346"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#8d042c8d2cd995d6eb10fce205231d65">00346</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span>* userData()<span class="keyword"> const</span>
<a name="l00347"></a>00347 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_private; }
<a name="l00348"></a>00348 
<a name="l00353"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#720e116390cc3be7d7ea60599bceb686">00353</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> userData(<span class="keywordtype">void</span>* data)
<a name="l00354"></a>00354         { m_private = data; }
<a name="l00355"></a>00355 
<a name="l00361"></a>00361     <a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* getEvent(u_int64_t time = <a class="code" href="classTelEngine_1_1Time.html" title="A time holding class.">Time</a>());
<a name="l00362"></a>00362 
<a name="l00369"></a>00369     <span class="keywordtype">bool</span> sendProvisional(<span class="keywordtype">int</span> code = 100, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment = 0);
<a name="l00370"></a>00370 
<a name="l00378"></a><a class="code" href="classTelEngine_1_1MGCPTransaction.html#1d86cea62d00d6f86c99bf9386283823">00378</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> setResponse(<span class="keywordtype">int</span> code, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment = 0)
<a name="l00379"></a>00379         { <span class="keywordflow">return</span> <a class="code" href="classTelEngine_1_1MGCPTransaction.html#1d86cea62d00d6f86c99bf9386283823">setResponse</a>(<span class="keyword">new</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>(<span class="keyword">this</span>,code,comment)); }
<a name="l00380"></a>00380 
<a name="l00391"></a>00391     <span class="keywordtype">bool</span> setResponse(<span class="keywordtype">int</span> code, <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1NamedList.html" title="A named string container class.">NamedList</a>* params, <a class="code" href="classTelEngine_1_1MimeSdpBody.html" title="MIME for application/sdp.">MimeSdpBody</a>* sdp1 = 0,
<a name="l00392"></a>00392         <a class="code" href="classTelEngine_1_1MimeSdpBody.html" title="MIME for application/sdp.">MimeSdpBody</a>* sdp2 = 0);
<a name="l00393"></a>00393 
<a name="l00400"></a>00400     <span class="keywordtype">bool</span> setResponse(<a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg);
<a name="l00401"></a>00401 
<a name="l00402"></a>00402 <span class="keyword">protected</span>:
<a name="l00406"></a>00406     <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyed();
<a name="l00407"></a>00407 
<a name="l00412"></a>00412     <span class="keywordtype">void</span> processMessage(<a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg);
<a name="l00413"></a>00413 
<a name="l00419"></a>00419     <a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* checkTimeout(u_int64_t time);
<a name="l00420"></a>00420 
<a name="l00425"></a>00425     <span class="keywordtype">void</span> eventTerminated(<a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* event);
<a name="l00426"></a>00426 
<a name="l00431"></a>00431     <span class="keywordtype">void</span> changeState(State newState);
<a name="l00432"></a>00432 
<a name="l00437"></a>00437     <span class="keywordtype">void</span> setProvisional(<span class="keywordtype">int</span> code = 100);
<a name="l00438"></a>00438 
<a name="l00443"></a>00443     <span class="keywordtype">void</span> send(<a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg);
<a name="l00444"></a>00444 
<a name="l00445"></a>00445 <span class="keyword">private</span>:
<a name="l00446"></a>00446     <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>() {}                 <span class="comment">// Avoid using default constructor</span>
<a name="l00447"></a>00447     <span class="comment">// Check if received any final response. Create an event. Init timeout.</span>
<a name="l00448"></a>00448     <span class="comment">// Send a response ACK if requested by the response</span>
<a name="l00449"></a>00449     MGCPEvent* checkResponse(u_int64_t time);
<a name="l00450"></a>00450     <span class="comment">// Init timeout for retransmission or transaction termination</span>
<a name="l00451"></a>00451     <span class="keywordtype">void</span> initTimeout(u_int64_t time, <span class="keywordtype">bool</span> extra);
<a name="l00452"></a>00452     <span class="comment">// Remove from engine. Create event. Deref the transaction</span>
<a name="l00453"></a>00453     MGCPEvent* terminate();
<a name="l00454"></a>00454 
<a name="l00455"></a>00455     State m_state;                       <span class="comment">// Current state</span>
<a name="l00456"></a>00456     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_id;                   <span class="comment">// Transaction id</span>
<a name="l00457"></a>00457     <span class="keywordtype">bool</span> m_outgoing;                     <span class="comment">// Transaction direction</span>
<a name="l00458"></a>00458     SocketAddr m_address;                <span class="comment">// Remote andpoint's address</span>
<a name="l00459"></a>00459     MGCPEngine* m_engine;                <span class="comment">// The engine owning this transaction</span>
<a name="l00460"></a>00460     MGCPMessage* m_cmd;                  <span class="comment">// The command that created this transaction</span>
<a name="l00461"></a>00461     MGCPMessage* m_provisional;          <span class="comment">// The provisional response to the command that created this transaction</span>
<a name="l00462"></a>00462     MGCPMessage* m_response;             <span class="comment">// The response to the command that created this transaction</span>
<a name="l00463"></a>00463     MGCPMessage* m_ack;                  <span class="comment">// The response aknowledgement message sent or received</span>
<a name="l00464"></a>00464     MGCPEvent* m_lastEvent;              <span class="comment">// The last generated event</span>
<a name="l00465"></a>00465     String m_endpoint;                   <span class="comment">// The endpoint owning this transaction</span>
<a name="l00466"></a>00466     u_int64_t m_nextRetrans;             <span class="comment">// Retransission or destroy time</span>
<a name="l00467"></a>00467     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_crtRetransInterval;   <span class="comment">// Current retransmission interval</span>
<a name="l00468"></a>00468     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_retransCount;         <span class="comment">// Remainig number of retransmissions</span>
<a name="l00469"></a>00469     <span class="keywordtype">bool</span> m_timeout;                      <span class="comment">// Transaction timeout flag</span>
<a name="l00470"></a>00470     <span class="keywordtype">void</span>* m_private;                     <span class="comment">// Data used by this transaction's user</span>
<a name="l00471"></a>00471     String m_debug;                      <span class="comment">// String used to identify the transaction in debug messages</span>
<a name="l00472"></a>00472 };
<a name="l00473"></a>00473 
<a name="l00478"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html">00478</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>
<a name="l00479"></a>00479 {
<a name="l00480"></a>00480 <span class="keyword">public</span>:
<a name="l00484"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#296382cb92e11d68f1fe3268d01d0c23">00484</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>()
<a name="l00485"></a>00485         : m_port(0)
<a name="l00486"></a>00486         {}
<a name="l00487"></a>00487 
<a name="l00492"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#52085a058ea6e71e52a7e38186594a64">00492</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>(<a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; src)
<a name="l00493"></a>00493         : m_port(0)
<a name="l00494"></a>00494         { <span class="keyword">set</span>(src); }
<a name="l00495"></a>00495 
<a name="l00502"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#627f9bf5aeb47c68d15115fa5d59c0cc">00502</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* endpoint, <span class="keyword">const</span> <span class="keywordtype">char</span>* host, <span class="keywordtype">int</span> port)
<a name="l00503"></a>00503         : m_port(0)
<a name="l00504"></a>00504         { <span class="keyword">set</span>(endpoint,host,port); }
<a name="l00505"></a>00505 
<a name="l00510"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#e537a056a2d8316444575696aa701bbd">00510</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; id()<span class="keyword"> const</span>
<a name="l00511"></a>00511 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_id; }
<a name="l00512"></a>00512 
<a name="l00517"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#f58aed57b3bb7d77a8b91336dfaa4c27">00517</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; user()<span class="keyword"> const</span>
<a name="l00518"></a>00518 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_endpoint; }
<a name="l00519"></a>00519 
<a name="l00524"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#ed2af6cf890f60ce6cc8b3c5b20e59c8">00524</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; host()<span class="keyword"> const</span>
<a name="l00525"></a>00525 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_host; }
<a name="l00526"></a>00526 
<a name="l00531"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#1981d54240e9fac867f4de9ba7516c39">00531</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> port()<span class="keyword"> const</span>
<a name="l00532"></a>00532 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_port; }
<a name="l00533"></a>00533 
<a name="l00538"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#225f9f30e3961216913b125873ba2779">00538</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> port(<span class="keywordtype">int</span> newPort)
<a name="l00539"></a>00539         { <span class="keyword">set</span>(m_endpoint,m_host,newPort); }
<a name="l00540"></a>00540 
<a name="l00547"></a>00547     <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keyword">const</span> <span class="keywordtype">char</span>* endpoint, <span class="keyword">const</span> <span class="keywordtype">char</span>* host, <span class="keywordtype">int</span> port);
<a name="l00548"></a>00548 
<a name="l00553"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#8a8e7142fd66f3fc7cfe1a313f79a184">00553</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <span class="keyword">set</span>(<a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; src) {
<a name="l00554"></a>00554             <a class="code" href="classTelEngine_1_1URI.html" title="Encapsulation for an URI.">URI</a> uri(src);
<a name="l00555"></a>00555             <span class="keyword">set</span>(uri.<a class="code" href="classTelEngine_1_1URI.html#84cfa277d639206187d49845667f9293">getUser</a>(),uri.<a class="code" href="classTelEngine_1_1URI.html#dea175962d1ecd0895a6381da1871d7b">getHost</a>(),uri.<a class="code" href="classTelEngine_1_1URI.html#5e4fc3488ccbe0511b7e7a1b3ca873cf">getPort</a>());
<a name="l00556"></a>00556         }
<a name="l00557"></a>00557 
<a name="l00564"></a><a class="code" href="classTelEngine_1_1MGCPEndpointId.html#8d985300b138b6c5556ab17ed4df3b38">00564</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html#8d985300b138b6c5556ab17ed4df3b38">valid</a>()<span class="keyword"> const </span>{
<a name="l00565"></a>00565             <span class="keywordflow">return</span> m_endpoint &amp;&amp; m_endpoint.length() &lt; 256 &amp;&amp;
<a name="l00566"></a>00566                 m_host &amp;&amp; m_host.length() &lt; 256;
<a name="l00567"></a>00567         }
<a name="l00568"></a>00568 
<a name="l00569"></a>00569 <span class="keyword">private</span>:
<a name="l00570"></a>00570     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_id;                         <span class="comment">// The complete id</span>
<a name="l00571"></a>00571     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_endpoint;                   <span class="comment">// The endpoint's name inside the host</span>
<a name="l00572"></a>00572     <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a> m_host;                       <span class="comment">// Host of this endpoint</span>
<a name="l00573"></a>00573     <span class="keywordtype">int</span> m_port;                          <span class="comment">// Port used by this endpoint</span>
<a name="l00574"></a>00574 };
<a name="l00575"></a>00575 
<a name="l00580"></a><a class="code" href="classTelEngine_1_1MGCPEpInfo.html">00580</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPEpInfo.html" title="Remote endpoint info class.">MGCPEpInfo</a> : <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>, <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1GenObject.html">GenObject</a>
<a name="l00581"></a>00581 {
<a name="l00582"></a>00582 <span class="keyword">public</span>:
<a name="l00589"></a><a class="code" href="classTelEngine_1_1MGCPEpInfo.html#b7209dc104947ce4b1c55aa133437e3b">00589</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEpInfo.html" title="Remote endpoint info class.">MGCPEpInfo</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* endpoint, <span class="keyword">const</span> <span class="keywordtype">char</span>* host, <span class="keywordtype">int</span> port)
<a name="l00590"></a>00590         : <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>(endpoint,host,port), address(AF_INET) {
<a name="l00591"></a>00591             address.host(host);
<a name="l00592"></a>00592             address.port(port);
<a name="l00593"></a>00593         }
<a name="l00594"></a>00594 
<a name="l00599"></a><a class="code" href="classTelEngine_1_1MGCPEpInfo.html#4a7bd56fb99593ace9379ed699f2719c">00599</a>     <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; toString()<span class="keyword"> const</span>
<a name="l00600"></a>00600 <span class="keyword">        </span>{ <span class="keywordflow">return</span> id(); }
<a name="l00601"></a>00601 
<a name="l00605"></a><a class="code" href="classTelEngine_1_1MGCPEpInfo.html#4a91609b6b1710f7f8f884e5f13ebbf7">00605</a>     <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a> address;
<a name="l00606"></a>00606 };
<a name="l00607"></a>00607 
<a name="l00614"></a><a class="code" href="classTelEngine_1_1MGCPEndpoint.html">00614</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a> : <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1RefObject.html">RefObject</a>, <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html" title="An endpoint id.">MGCPEndpointId</a>
<a name="l00615"></a>00615 {
<a name="l00616"></a>00616 <span class="keyword">public</span>:
<a name="l00625"></a>00625     <a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>(<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine, <span class="keyword">const</span> <span class="keywordtype">char</span>* user, <span class="keyword">const</span> <span class="keywordtype">char</span>* host, <span class="keywordtype">int</span> port);
<a name="l00626"></a>00626 
<a name="l00630"></a>00630     <span class="keyword">virtual</span> ~<a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>();
<a name="l00631"></a>00631 
<a name="l00636"></a><a class="code" href="classTelEngine_1_1MGCPEndpoint.html#4a7bd56fb99593ace9379ed699f2719c">00636</a>     <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; toString()<span class="keyword"> const</span>
<a name="l00637"></a>00637 <span class="keyword">        </span>{ <span class="keywordflow">return</span> <a class="code" href="classTelEngine_1_1MGCPEndpointId.html#e537a056a2d8316444575696aa701bbd">MGCPEndpointId::id</a>(); }
<a name="l00638"></a>00638 
<a name="l00643"></a><a class="code" href="classTelEngine_1_1MGCPEndpoint.html#bebc8e9f0ca79286f4b1e6b98b8d706d">00643</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* engine()
<a name="l00644"></a>00644         { <span class="keywordflow">return</span> m_engine; }
<a name="l00645"></a>00645 
<a name="l00656"></a>00656     <a class="code" href="classTelEngine_1_1MGCPEpInfo.html" title="Remote endpoint info class.">MGCPEpInfo</a>* append(<span class="keyword">const</span> <span class="keywordtype">char</span>* endpoint, <span class="keyword">const</span> <span class="keywordtype">char</span>* host, <span class="keywordtype">int</span> port = 0);
<a name="l00657"></a>00657 
<a name="l00661"></a><a class="code" href="classTelEngine_1_1MGCPEndpoint.html#c8bb3912a3ce86b15842e79d0b421204">00661</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> clear()
<a name="l00662"></a>00662         { <a class="code" href="classTelEngine_1_1Lock.html" title="Ephemeral mutex locking object.">Lock</a> lock(m_mutex); m_remote.clear(); }
<a name="l00663"></a>00663 
<a name="l00669"></a>00669     <a class="code" href="classTelEngine_1_1MGCPEpInfo.html" title="Remote endpoint info class.">MGCPEpInfo</a>* find(<span class="keyword">const</span> <span class="keywordtype">char</span>* epId);
<a name="l00670"></a>00670 
<a name="l00675"></a>00675     <a class="code" href="classTelEngine_1_1MGCPEpInfo.html" title="Remote endpoint info class.">MGCPEpInfo</a>* peer();
<a name="l00676"></a>00676 
<a name="l00677"></a>00677 <span class="keyword">private</span>:
<a name="l00678"></a>00678     <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>* m_engine;                <span class="comment">// The engine owning this endpoint</span>
<a name="l00679"></a>00679     <a class="code" href="classTelEngine_1_1Mutex.html" title="Mutex support.">Mutex</a> m_mutex;                       <span class="comment">// Lock remote endpoint list</span>
<a name="l00680"></a>00680     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> m_remote;                    <span class="comment">// The remote endpoints</span>
<a name="l00681"></a>00681 };
<a name="l00682"></a>00682 
<a name="l00688"></a><a class="code" href="classTelEngine_1_1MGCPEvent.html">00688</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>
<a name="l00689"></a>00689 {
<a name="l00690"></a>00690     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>;
<a name="l00691"></a>00691 <span class="keyword">public</span>:
<a name="l00695"></a>00695     ~<a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>();
<a name="l00696"></a>00696 
<a name="l00701"></a><a class="code" href="classTelEngine_1_1MGCPEvent.html#df20c9bdd4d9770f07a73fc8ae4aeb0a">00701</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* transaction()
<a name="l00702"></a>00702         { <span class="keywordflow">return</span> m_transaction; }
<a name="l00703"></a>00703 
<a name="l00708"></a><a class="code" href="classTelEngine_1_1MGCPEvent.html#e6e8d06bb5eee00a9ef972a41d42e773">00708</a>     <span class="keyword">inline</span> <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* message()<span class="keyword"> const</span>
<a name="l00709"></a>00709 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_message; }
<a name="l00710"></a>00710 
<a name="l00711"></a>00711 <span class="keyword">protected</span>:
<a name="l00717"></a>00717     <a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>(<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* trans, <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg = 0);
<a name="l00718"></a>00718 
<a name="l00719"></a>00719 <span class="keyword">private</span>:
<a name="l00720"></a>00720     <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* m_transaction;      <span class="comment">// The transaction that generated this event</span>
<a name="l00721"></a>00721     <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* m_message;              <span class="comment">// The message carried by this event, if any</span>
<a name="l00722"></a>00722 };
<a name="l00723"></a>00723 
<a name="l00724"></a>00724 <span class="keyword">class </span>MGCPPrivateThread;
<a name="l00725"></a>00725 
<a name="l00735"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html">00735</a> <span class="keyword">class </span>YMGCP_API <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a> : <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1DebugEnabler.html" title="A holder for a debug level.">DebugEnabler</a>, <span class="keyword">public</span> <a class="code" href="classTelEngine_1_1Mutex.html" title="Mutex support.">Mutex</a>
<a name="l00736"></a>00736 {
<a name="l00737"></a>00737     <span class="keyword">friend</span> <span class="keyword">class </span>MGCPPrivateThread;
<a name="l00738"></a>00738     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>;
<a name="l00739"></a>00739 <span class="keyword">public</span>:
<a name="l00747"></a>00747     <a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>(<span class="keywordtype">bool</span> gateway, <span class="keyword">const</span> <span class="keywordtype">char</span>* name = 0, <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1NamedList.html" title="A named string container class.">NamedList</a>* params = 0);
<a name="l00748"></a>00748 
<a name="l00752"></a>00752     <span class="keyword">virtual</span> ~<a class="code" href="classTelEngine_1_1MGCPEngine.html" title="An MGCP engine.">MGCPEngine</a>();
<a name="l00753"></a>00753 
<a name="l00759"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#168174f35fe6d3d17c20839448376efb">00759</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> gateway()<span class="keyword"> const</span>
<a name="l00760"></a>00760 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_gateway; }
<a name="l00761"></a>00761 
<a name="l00766"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#1a00da71a0c9df62d14f8d1e7114c021">00766</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; address()<span class="keyword"> const</span>
<a name="l00767"></a>00767 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_address; }
<a name="l00768"></a>00768 
<a name="l00774"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#ac104bca0ab22dcd26b796eea471da91">00774</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxRecvPacket()<span class="keyword"> const</span>
<a name="l00775"></a>00775 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_maxRecvPacket; }
<a name="l00776"></a>00776 
<a name="l00781"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#5d51bafd1d4e1dff30c40d6d52e4d844">00781</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> allowUnkCmd()<span class="keyword"> const</span>
<a name="l00782"></a>00782 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_allowUnkCmd; }
<a name="l00783"></a>00783 
<a name="l00788"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#88c56d2063408582e7552ce192c90405">00788</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> retransInterval()<span class="keyword"> const</span>
<a name="l00789"></a>00789 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_retransInterval; }
<a name="l00790"></a>00790 
<a name="l00795"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#2d304cf8c7eba13b49b81eab25d86bde">00795</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> retransCount()<span class="keyword"> const</span>
<a name="l00796"></a>00796 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_retransCount; }
<a name="l00797"></a>00797 
<a name="l00802"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#f9c23c36f24050cebfcfc083cb1b36f9">00802</a>     <span class="keyword">inline</span> u_int64_t extraTime()<span class="keyword"> const</span>
<a name="l00803"></a>00803 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_extraTime; }
<a name="l00804"></a>00804 
<a name="l00809"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#6674c17b17efa7dcd0d131597958e24d">00809</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> parseParamToLower()<span class="keyword"> const</span>
<a name="l00810"></a>00810 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_parseParamToLower; }
<a name="l00811"></a>00811 
<a name="l00816"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#4efabab8aab5d7b07d963fcfee88164b">00816</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> provisional()<span class="keyword"> const</span>
<a name="l00817"></a>00817 <span class="keyword">        </span>{ <span class="keywordflow">return</span> m_provisional; }
<a name="l00818"></a>00818 
<a name="l00823"></a>00823     <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keyword">const</span> <a class="code" href="classTelEngine_1_1NamedList.html" title="A named string container class.">NamedList</a>&amp; params);
<a name="l00824"></a>00824 
<a name="l00830"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#976d53872adfb40020aed036ba20c1a3">00830</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> knownCommand(<span class="keyword">const</span> <span class="keywordtype">char</span>* cmd)
<a name="l00831"></a>00831         { <a class="code" href="classTelEngine_1_1Lock.html" title="Ephemeral mutex locking object.">Lock</a> lock(<span class="keyword">this</span>); <span class="keywordflow">return</span> (m_knownCommands.find(cmd) != 0); }
<a name="l00832"></a>00832 
<a name="l00837"></a>00837     <span class="keywordtype">void</span> addCommand(<span class="keyword">const</span> <span class="keywordtype">char</span>* cmd);
<a name="l00838"></a>00838 
<a name="l00843"></a>00843     <span class="keywordtype">void</span> attach(<a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>* ep);
<a name="l00844"></a>00844 
<a name="l00852"></a>00852     <span class="keywordtype">void</span> detach(<a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>* ep, <span class="keywordtype">bool</span> del = <span class="keyword">false</span>, <span class="keywordtype">bool</span> delTrans = <span class="keyword">false</span>);
<a name="l00853"></a>00853 
<a name="l00859"></a>00859     <a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>* findEp(<a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>* ep);
<a name="l00860"></a>00860 
<a name="l00866"></a>00866     <a class="code" href="classTelEngine_1_1MGCPEndpoint.html" title="An MGCP endpoint.">MGCPEndpoint</a>* findEp(<span class="keyword">const</span> <span class="keywordtype">char</span>* epId);
<a name="l00867"></a>00867 
<a name="l00874"></a>00874     <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* findTrans(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">bool</span> outgoing);
<a name="l00875"></a>00875 
<a name="l00880"></a>00880     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getNextId();
<a name="l00881"></a>00881 
<a name="l00889"></a>00889     <a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* sendCommand(<a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* cmd, <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; address);
<a name="l00890"></a>00890 
<a name="l00898"></a>00898     <span class="keywordtype">bool</span> receive(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer, <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; addr);
<a name="l00899"></a>00899 
<a name="l00908"></a>00908     <span class="keywordtype">bool</span> process(u_int64_t time = <a class="code" href="classTelEngine_1_1Time.html" title="A time holding class.">Time</a>());
<a name="l00909"></a>00909 
<a name="l00913"></a>00913     <span class="keywordtype">void</span> runReceive();
<a name="l00914"></a>00914 
<a name="l00918"></a>00918     <span class="keywordtype">void</span> runProcess();
<a name="l00919"></a>00919 
<a name="l00925"></a>00925     <a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* getEvent(u_int64_t time = <a class="code" href="classTelEngine_1_1Time.html" title="A time holding class.">Time</a>());
<a name="l00926"></a>00926 
<a name="l00935"></a>00935     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processEvent(<a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* event);
<a name="l00936"></a>00936 
<a name="l00946"></a>00946     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processEvent(<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* trans, <a class="code" href="classTelEngine_1_1MGCPMessage.html" title="An MGCP command or response.">MGCPMessage</a>* msg, <span class="keywordtype">void</span>* data);
<a name="l00947"></a>00947 
<a name="l00954"></a>00954     <span class="keywordtype">void</span> returnEvent(<a class="code" href="classTelEngine_1_1MGCPEvent.html" title="An MGCP event.">MGCPEvent</a>* event);
<a name="l00955"></a>00955 
<a name="l00965"></a>00965     <span class="keywordtype">void</span> cleanup(<span class="keywordtype">bool</span> gracefully = <span class="keyword">true</span>, <span class="keyword">const</span> <span class="keywordtype">char</span>* text = <span class="stringliteral">"Shutdown"</span>);
<a name="l00966"></a>00966 
<a name="l00973"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#bfd7758491f107aaedb7597005527947">00973</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> defaultPort(<span class="keywordtype">bool</span> gateway)
<a name="l00974"></a>00974         { <span class="keywordflow">return</span> gateway ? 2427 : 2727; }
<a name="l00975"></a>00975 
<a name="l00979"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#2c711c367f67df7d917dda157c3fe7de">00979</a>     <span class="keyword">static</span> <a class="code" href="structTelEngine_1_1TokenDict.html">TokenDict</a> mgcp_commands[];
<a name="l00980"></a>00980 
<a name="l00984"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#6cac4026a904ddfd6fa3dd3d4ff820b4">00984</a>     <span class="keyword">static</span> <a class="code" href="structTelEngine_1_1TokenDict.html">TokenDict</a> mgcp_responses[];
<a name="l00985"></a>00985 
<a name="l00993"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#2f214ff6343dbc810542a7d08d4d20a8">00993</a>     <span class="keyword">static</span> <a class="code" href="structTelEngine_1_1TokenDict.html">TokenDict</a> mgcp_reasons[];
<a name="l00994"></a>00994 
<a name="l00995"></a>00995 <span class="keyword">protected</span>:
<a name="l01002"></a>01002     <span class="keywordtype">bool</span> sendData(<span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; msg, <span class="keyword">const</span> <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a>&amp; address);
<a name="l01003"></a>01003 
<a name="l01008"></a>01008     <span class="keywordtype">void</span> appendTrans(<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* trans);
<a name="l01009"></a>01009 
<a name="l01015"></a>01015     <span class="keywordtype">void</span> removeTrans(<a class="code" href="classTelEngine_1_1MGCPTransaction.html" title="An MGCP transaction.">MGCPTransaction</a>* trans, <span class="keywordtype">bool</span> del);
<a name="l01016"></a>01016 
<a name="l01020"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#3ba285e2c3097fca9bc29494e68e8b6d">01020</a>     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> m_endpoints;
<a name="l01021"></a>01021 
<a name="l01025"></a><a class="code" href="classTelEngine_1_1MGCPEngine.html#308f1907148deb68d7418dca6d7b662c">01025</a>     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> m_transactions;
<a name="l01026"></a>01026 
<a name="l01027"></a>01027 <span class="keyword">private</span>:
<a name="l01028"></a>01028     <span class="comment">// Append a private thread to the list</span>
<a name="l01029"></a>01029     <span class="keywordtype">void</span> appendThread(MGCPPrivateThread* thread);
<a name="l01030"></a>01030     <span class="comment">// Remove private thread from the list without deleting it</span>
<a name="l01031"></a>01031     <span class="keywordtype">void</span> removeThread(MGCPPrivateThread* thread);
<a name="l01032"></a>01032     <span class="comment">// Process ACK received with a message or response</span>
<a name="l01033"></a>01033     <span class="comment">// Return a list of ack'd transactions or 0 if the parameter is incorrect</span>
<a name="l01034"></a>01034     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* decodeAck(<span class="keyword">const</span> <a class="code" href="classTelEngine_1_1String.html" title="A C-style string handling class.">String</a>&amp; param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp; count);
<a name="l01035"></a>01035 
<a name="l01036"></a>01036     <span class="keywordtype">bool</span> m_gateway;                      <span class="comment">// True if this engine is an MGCP gateway, false if call agent</span>
<a name="l01037"></a>01037     <span class="keywordtype">bool</span> m_initialized;                  <span class="comment">// True if the engine was already initialized</span>
<a name="l01038"></a>01038     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_nextId;               <span class="comment">// Next outgoing transaction id</span>
<a name="l01039"></a>01039     <a class="code" href="classTelEngine_1_1Socket.html" title="A generic socket class.">Socket</a> m_socket;                     <span class="comment">// The socket used to send/receive data</span>
<a name="l01040"></a>01040     <a class="code" href="classTelEngine_1_1SocketAddr.html" title="A socket address holder.">SocketAddr</a> m_address;                <span class="comment">// The IP address used by this engine</span>
<a name="l01041"></a>01041     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_maxRecvPacket;        <span class="comment">// The maximum length or received packets</span>
<a name="l01042"></a>01042     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* m_recvBuf;            <span class="comment">// Receiving buffer</span>
<a name="l01043"></a>01043     <span class="keywordtype">bool</span> m_allowUnkCmd;                  <span class="comment">// Allow this engine to send/accept unknown commands</span>
<a name="l01044"></a>01044     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_retransInterval;      <span class="comment">// Message retransmission interval</span>
<a name="l01045"></a>01045     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_retransCount;         <span class="comment">// Maximum number of retransmissions for a message</span>
<a name="l01046"></a>01046     u_int64_t m_extraTime;               <span class="comment">// Time to live after the transaction terminated gracefully</span>
<a name="l01047"></a>01047     <span class="keywordtype">bool</span> m_parseParamToLower;            <span class="comment">// Convert received messages' params to lower case</span>
<a name="l01048"></a>01048     <span class="keywordtype">bool</span> m_provisional;                  <span class="comment">// Send provisional responses flag</span>
<a name="l01049"></a>01049     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> m_knownCommands;             <span class="comment">// The list of known commands</span>
<a name="l01050"></a>01050     <a class="code" href="classTelEngine_1_1ObjList.html" title="An object list class.">ObjList</a> m_threads;
<a name="l01051"></a>01051 };
<a name="l01052"></a>01052 
<a name="l01053"></a>01053 }
<a name="l01054"></a>01054 
<a name="l01055"></a>01055 <span class="preprocessor">#endif </span><span class="comment">/* __YATEMGCP_H */</span>
<a name="l01056"></a>01056 
<a name="l01057"></a>01057 <span class="comment">/* vi: set ts=8 sw=4 sts=4 noet: */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 21:36:10 2008 for Yate by&nbsp;
<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>