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