📄 wwwapi_8h-source.html
字号:
00141 name_value_pair* free_pairs;00142 00143 <span class="keywordtype">char</span>* extendBuffer(size_t inc);00144 00145 00146 <span class="comment">//</span>00147 <span class="comment">// Deallocate all resources hold by connection. It is not possible to </span>00148 <span class="comment">// call get_value() or reply() method after this. Method reset()</span>00149 <span class="comment">// is implicitly called by WWWapi::get() method.</span>00150 <span class="comment">//</span>00151 <span class="keywordtype">void</span> reset();00152 00153 <span class="comment">//</span>00154 <span class="comment">// Unpack requests paramters</span>00155 <span class="comment">//</span>00156 <span class="keywordtype">char</span>* unpack(<span class="keywordtype">char</span>* body, size_t body_length);00157 };00158 00159 00160 <span class="keyword">class </span>FASTDB_DLL_ENTRY WWWapi { 00161 <span class="keyword">public</span>:00162 <span class="keyword">struct </span>dispatcher { 00163 <span class="keywordtype">char</span> <span class="keyword">const</span>* page;00164 WWWconnection::handler func;00165 <span class="comment">// filled by contracutor of WWWapi</span>00166 <span class="keywordtype">unsigned</span> hash_code;00167 dispatcher* collision_chain;00168 };00169 00170 <span class="keyword">protected</span>:00171 socket_t* sock;00172 <span class="keywordtype">bool</span> canceled;00173 <span class="keywordtype">char</span>* address;00174 <a class="code" href="classdbDatabase.html">dbDatabase</a>& db;00175 <span class="keyword">enum</span> { hash_table_size = 113 };00176 dispatcher* hash_table[hash_table_size];00177 00178 <span class="keywordtype">bool</span> dispatch(WWWconnection& con, <span class="keywordtype">char</span>* page);00179 00180 <span class="keyword">public</span>:00181 WWWapi(<a class="code" href="classdbDatabase.html">dbDatabase</a>& db, <span class="keywordtype">int</span> n_handlers, dispatcher* dispatch_table);00182 00183 <span class="comment">//</span>00184 <span class="comment">// Bind and listen socket</span>00185 <span class="comment">//</span>00186 <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* socket_address = <span class="stringliteral">"localhost:80"</span>, 00187 socket_t::socket_domain domain = socket_t::sock_global_domain, 00188 <span class="keywordtype">int</span> listen_queue = DEFAULT_LISTEN_QUEUE_SIZE);00189 00190 00191 <span class="comment">//</span>00192 <span class="comment">// Read and execute requests</span>00193 <span class="comment">//</span>00194 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> serve(WWWconnection& con) = 0;00195 00196 <span class="comment">//</span>00197 <span class="comment">// Accept new connection by the socket</span>00198 <span class="comment">//</span>00199 <span class="keywordtype">bool</span> connect(WWWconnection& con);00200 00201 <span class="comment">//</span>00202 <span class="comment">// Cancel acception of connections</span>00203 <span class="comment">// </span>00204 <span class="keywordtype">void</span> cancel();00205 00206 <span class="comment">//</span>00207 <span class="comment">// Close socket</span>00208 <span class="comment">// </span>00209 <span class="keywordtype">void</span> close();00210 };00211 00212 00213 <span class="comment">//</span>00214 <span class="comment">// Interaction with WWW server by means of CGI protocol and CGIatub program</span>00215 <span class="comment">//</span>00216 <span class="keyword">class </span>FASTDB_DLL_ENTRY CGIapi : <span class="keyword">public</span> WWWapi { 00217 <span class="keyword">public</span>:00218 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> serve(WWWconnection& con);00219 00220 CGIapi(<a class="code" href="classdbDatabase.html">dbDatabase</a>& db, <span class="keywordtype">int</span> n_handlers, dispatcher* dispatch_table) 00221 : WWWapi(db, n_handlers, dispatch_table) {}00222 };00223 00224 00225 <span class="comment">// </span>00226 <span class="comment">// Built-in implementation of sunset of subset of HTTP protocol</span>00227 <span class="comment">//</span>00228 <span class="keyword">class </span>FASTDB_DLL_ENTRY HTTPapi : <span class="keyword">public</span> WWWapi { 00229 <span class="keyword">protected</span>:00230 time_t connectionHoldTimeout;00231 <span class="keywordtype">bool</span> keepConnectionAlive;00232 00233 <span class="keywordtype">bool</span> handleRequest(WWWconnection& con, <span class="keywordtype">char</span>* begin, <span class="keywordtype">char</span>* end, 00234 <span class="keywordtype">char</span>* host, <span class="keywordtype">bool</span>& result);00235 00236 <span class="keyword">public</span>:00237 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> serve(WWWconnection& con);00238 00239 HTTPapi(<a class="code" href="classdbDatabase.html">dbDatabase</a>& db, <span class="keywordtype">int</span> n_handlers, dispatcher* dispatch_table, 00240 <span class="keywordtype">bool</span> persistentConnections = <span class="keyword">false</span>,00241 time_t connectionHoldTimeoutSec = WAIT_FOREVER) 00242 : WWWapi(db, n_handlers, dispatch_table) 00243 {00244 keepConnectionAlive = persistentConnections;00245 connectionHoldTimeout = connectionHoldTimeoutSec;00246 }00247 };00248 00249 <span class="keyword">class </span>FASTDB_DLL_ENTRY QueueManager { 00250 WWWconnection* connectionPool;00251 WWWconnection* freeList;00252 WWWconnection* waitList;00253 dbMutex mutex;00254 dbLocalSemaphore go;00255 dbLocalEvent done;00256 dbThread* threads;00257 <span class="keywordtype">int</span> nThreads;00258 WWWapi* server;00259 <a class="code" href="classdbDatabase.html">dbDatabase</a>& db;00260 00261 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc handleThread(<span class="keywordtype">void</span>* arg);00262 <span class="keywordtype">void</span> handle();00263 00264 <span class="keyword">public</span>:00265 <span class="keywordtype">void</span> stop();00266 <span class="keywordtype">void</span> start();00267 00268 QueueManager(WWWapi& api, <span class="comment">// WWWapi should be opened</span>00269 <a class="code" href="classdbDatabase.html">dbDatabase</a>& db,00270 <span class="keywordtype">int</span> nThreads = 8, 00271 <span class="keywordtype">int</span> connectionQueueLen = 64);00272 ~QueueManager();00273 };00274 00275 00276 <span class="preprocessor">#endif</span>00277 <span class="preprocessor"></span>00278 00279 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -