Browse code

webkernel: wk_write

Dario Rodriguez authored on 17/06/2014 13:37:13
Showing 1 changed files
... ...
@@ -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