📄 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_NAMESPACE00280 00281 <span class="preprocessor">#endif</span>00282 <span class="preprocessor"></span>00283 00284 </pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:58 2006 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 + -