... | ... |
@@ -255,7 +255,6 @@ wk_service(wk *paramweb) |
255 | 255 |
client->serviced=0; /* we have finished servicing this one */ |
256 | 256 |
if(!client->keepalive) |
257 | 257 |
wk_close((wk *)web, fd); /* all sent */ |
258 |
- |
|
259 | 258 |
} |
260 | 259 |
} |
261 | 260 |
} |
... | ... |
@@ -285,13 +284,40 @@ wk_serve_error(wk *paramweb, int connid, wk_error wkerror) |
285 | 284 |
int |
286 | 285 |
wk_writestr(wk *paramweb, int connid, char *str) |
287 | 286 |
{ |
288 |
- |
|
287 |
+ return(wk_write(paramweb,connid,str,strlen(str))); |
|
289 | 288 |
} |
290 | 289 |
|
291 | 290 |
int |
292 | 291 |
wk_write(wk *paramweb, int connid, void *data, int datalen) |
293 | 292 |
{ |
294 |
- |
|
293 |
+ int k; |
|
294 |
+ _wk *web=(_wk *)paramweb; |
|
295 |
+ wk_client *client; |
|
296 |
+ sbuf *out; |
|
297 |
+ long added; |
|
298 |
+ long total; |
|
299 |
+ if(web==NULL) |
|
300 |
+ return(-1); |
|
301 |
+ if((client=wk_clientget(web,connid))==NULL) |
|
302 |
+ return(-1); |
|
303 |
+ total=0; |
|
304 |
+ for(k=(client->usedoutbufids>0)?client->usedoutbufids-1:0; |
|
305 |
+ datalen>0 && k<MAXOUTBUF;k++) { |
|
306 |
+ if(client->outbufids[k]==-1) { |
|
307 |
+ if((client->outbufids[k]=wk_sbufacquire((wk *)web))==-1) |
|
308 |
+ return(-1); /* insufficient memory */ |
|
309 |
+ client->usedoutbufids++; |
|
310 |
+ } |
|
311 |
+ if((out=wk_sbufget((wk *)web,client->outbufids[k]))==NULL) |
|
312 |
+ return(-1); /* internal error */ |
|
313 |
+ if(sbuf_unused(out)==0) |
|
314 |
+ continue; |
|
315 |
+ added=sbuf_add(out,data,datalen); |
|
316 |
+ data+=added; |
|
317 |
+ datalen-=added; |
|
318 |
+ total+=added; |
|
319 |
+ } |
|
320 |
+ return(total); |
|
295 | 321 |
} |
296 | 322 |
|
297 | 323 |
int |