blob: d3aa338361ea752f5a21d6b05e6459f63245826a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>oscl_socket_serv_imp_pv.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
<hr><h1>oscl_socket_serv_imp_pv.h</h1><a href="oscl__socket__serv__imp__pv_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
00002 <span class="preprocessor">#ifndef OSCL_SOCKET_SERV_IMP_PV_H_INCLUDED</span>
00003 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCKET_SERV_IMP_PV_H_INCLUDED</span>
00004 <span class="preprocessor"></span>
00005 <span class="preprocessor">#include "<a class="code" href="oscl__socket__serv__imp__base_8h.html">oscl_socket_serv_imp_base.h</a>"</span>
00006 <span class="preprocessor">#include "<a class="code" href="oscl__socket__serv__imp__reqlist_8h.html">oscl_socket_serv_imp_reqlist.h</a>"</span>
00007 <span class="preprocessor">#include "<a class="code" href="oscl__socket__tuneables_8h.html">oscl_socket_tuneables.h</a>"</span>
00008
00009
00013 <span class="preprocessor">#if PV_SOCKET_SERVER_IS_THREAD</span>
00014 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__semaphore_8h.html">oscl_semaphore.h</a>"</span>
00015 <span class="preprocessor">#include "<a class="code" href="oscl__mutex_8h.html">oscl_mutex.h</a>"</span>
00016 <span class="preprocessor">#else</span>
00017 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__scheduler__ao_8h.html">oscl_scheduler_ao.h</a>"</span>
00018 <span class="preprocessor">#endif</span>
00019 <span class="preprocessor"></span>
00020 <span class="keyword">class </span>PVServiStats;
00021
00024 <span class="preprocessor">#if (PV_SOCKET_SERVER_IS_THREAD)</span>
00025 <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>: <span class="keyword">public</span> <a class="code" href="classHeapBase.html">HeapBase</a>, <span class="keyword">public</span> <a class="code" href="classOsclSocketServIBase.html">OsclSocketServIBase</a>
00026 #else
<a name="l00027"></a><a class="code" href="classOsclSocketServI.html">00027</a> class <a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>: <span class="keyword">public</span> <a class="code" href="classOsclTimerObject.html">OsclTimerObject</a>, <span class="keyword">public</span> <a class="code" href="classOsclSocketServIBase.html">OsclSocketServIBase</a>
00028 #endif
00029 {
00030 <span class="keyword">public</span>:
00031 <span class="keyword">static</span> <a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>* <a class="code" href="classOsclSocketServI.html#d0">NewL</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a);
00032 int32 <a class="code" href="classOsclSocketServI.html#a0">Connect</a>(uint32 aMessageSlots);
00033 <span class="keywordtype">void</span> <a class="code" href="classOsclSocketServI.html#a1">Close</a>(<span class="keywordtype">bool</span>);
00034
00035 <span class="comment">//check if calling context is server thread.</span>
00036 <span class="comment">//in non-threaded implementation, will always return "true".</span>
00037 <span class="keywordtype">bool</span> <a class="code" href="classOsclSocketServI.html#a2">IsServerThread</a>();
00038
00039 <span class="keyword">private</span>:
00040 <a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a);
00041 ~<a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>();
00042 <span class="keywordtype">void</span> ConstructL();
00043
00044 <span class="comment">//socket request list.</span>
00045 <a class="code" href="classOsclSocketServRequestList.html">OsclSocketServRequestList</a> iSockServRequestList;
00046
00047 <span class="preprocessor">#if PV_SOCKET_SERVER_SELECT_LOOPBACK_SOCKET</span>
00048 <span class="preprocessor"></span> <span class="comment">//blocking select wakeup feature</span>
00049 <span class="keyword">class </span><a class="code" href="classOsclSocketServI.html#l1">LoopbackSocket</a>
00050 {
00051 <span class="keyword">public</span>:
00052 <a class="code" href="classOsclSocketServI.html#l1">LoopbackSocket</a>()
00053 {
00054 iEnable = <span class="keyword">false</span>;
00055 iContainer = <a class="code" href="group__osclbase.html#a81">NULL</a>;
00056 }
00057 <span class="keywordtype">bool</span> iEnable;
00058 <span class="keywordtype">void</span> Read();
00059 <span class="keywordtype">void</span> ProcessSelect(<a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a>&amp;);
00060 <span class="keywordtype">void</span> Init(<a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>* aContainer);
00061 <span class="keywordtype">void</span> Cleanup();
00062 <span class="keywordtype">void</span> Write();
00063 <span class="preprocessor">#if PV_OSCL_SOCKET_STATS_LOGGING</span>
00064 <span class="preprocessor"></span> OsclSocketStats iStats;
00065 <span class="preprocessor">#endif</span>
00066 <span class="preprocessor"></span> <span class="keyword">private</span>:
00067 <a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> iAddr;
00068 <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a> iSocket;
00069 <a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>* iContainer;
00070 };
00071 <a class="code" href="classOsclSocketServI.html#l1">LoopbackSocket</a> iLoopbackSocket;
00072 <span class="preprocessor">#endif</span>
00073 <span class="preprocessor"></span> uint32 iSelectPollIntervalMsec;
00074
00075 <span class="keywordtype">void</span> WakeupBlockingSelect()
00076 {
00077 <span class="preprocessor">#if PV_SOCKET_SERVER_SELECT_LOOPBACK_SOCKET</span>
00078 <span class="preprocessor"></span> <span class="keywordflow">if</span> (iLoopbackSocket.iEnable)
00079 iLoopbackSocket.Write();
00080 <span class="preprocessor">#endif</span>
00081 <span class="preprocessor"></span> }
00082
00083 int32 StartServImp();
00084 <span class="keywordtype">void</span> ConstructServImp();
00085 <span class="keywordtype">void</span> CleanupServImp();
00086 <span class="keywordtype">void</span> StopServImp();
00087 <span class="keywordtype">void</span> ServerEntry();
00088 <span class="keywordtype">void</span> ServerExit();
00089
00090 <span class="preprocessor">#if PV_SOCKET_SERVER_IS_THREAD</span>
00091 <span class="preprocessor"></span> TOsclThreadId iThreadId;
00092 <span class="comment">//start &amp; exit semaphores.</span>
00093 <a class="code" href="classOsclSemaphore.html">OsclSemaphore</a> iStart, iExit;
00094 <span class="comment">//thread exit flag</span>
00095 <span class="keywordtype">bool</span> iClose;
00096 <span class="keyword">public</span>:
00097 <span class="comment">//this needs to be public for use by the thread routine.</span>
00098 <span class="keywordtype">void</span> InThread();
00099 <span class="keyword">private</span>:
00100 <span class="preprocessor">#else</span>
00101 <span class="preprocessor"></span> <span class="comment">//for AO implemenation.</span>
00102 <span class="keywordtype">void</span> <a class="code" href="classPVActiveBase.html#a4">Run</a>();
00103 <span class="keywordtype">void</span> WakeupAO();
00104 <span class="preprocessor">#if PV_SOCKET_SERVER_SELECT</span>
00105 <span class="preprocessor"></span> <span class="keywordtype">int</span> iNhandles;
00106 <span class="keywordtype">int</span> iNfds;
00107 <span class="preprocessor">#endif</span>
00108 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00109 <span class="preprocessor"></span>
00110 <span class="preprocessor">#if PV_SOCKET_SERVER_SELECT</span>
00111 <span class="preprocessor"></span> <span class="comment">//select flags.</span>
00112 fd_set iReadset, iWriteset, iExceptset;
00113 <span class="keywordtype">void</span> ProcessSocketRequests(<span class="keywordtype">int</span> &amp;, <span class="keywordtype">int</span> &amp;n);
00114 <span class="preprocessor">#else</span>
00115 <span class="preprocessor"></span> <span class="keywordtype">void</span> ProcessSocketRequests();
00116 <span class="preprocessor">#endif</span>
00117 <span class="preprocessor"></span>
<a name="l00118"></a><a class="code" href="classOsclSocketServI.html#l0">00118</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclSocketServRequestList.html">OsclSocketServRequestList</a>;
<a name="l00119"></a><a class="code" href="classOsclSocketServI.html#l1">00119</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclSocketServI.html#l1">LoopbackSocket</a>;
00120
<a name="l00121"></a><a class="code" href="classOsclSocketServI.html#l2">00121</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclTCPSocketI.html">OsclTCPSocketI</a>;
<a name="l00122"></a><a class="code" href="classOsclSocketServI.html#l3">00122</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclUDPSocketI.html">OsclUDPSocketI</a>;
<a name="l00123"></a><a class="code" href="classOsclSocketServI.html#l4">00123</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclSocketI.html">OsclSocketI</a>;
<a name="l00124"></a><a class="code" href="classOsclSocketServI.html#l5">00124</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclDNSI.html">OsclDNSI</a>;
<a name="l00125"></a><a class="code" href="classOsclSocketServI.html#l6">00125</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclSocketRequest.html">OsclSocketRequest</a>;
<a name="l00126"></a><a class="code" href="classOsclSocketServI.html#l7">00126</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclSocketServ.html">OsclSocketServ</a>;
00127
00128 PVServiStats* iServiStats;
00129
00130 };
00131
<a name="l00134"></a><a class="code" href="oscl__socket__serv__imp__pv_8h.html#a0">00134</a> <span class="preprocessor">#define OSCL_READSET_FLAG 0x04</span>
<a name="l00135"></a><a class="code" href="oscl__socket__serv__imp__pv_8h.html#a1">00135</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_WRITESET_FLAG 0x02</span>
<a name="l00136"></a><a class="code" href="oscl__socket__serv__imp__pv_8h.html#a2">00136</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_EXCEPTSET_FLAG 0x01</span>
00137 <span class="preprocessor"></span>
00138
00139 <span class="preprocessor">#endif</span>
00140 <span class="preprocessor"></span>
00141
00142
</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
</small></address>
</body>
</html>