| 396 | } |
| 397 | |
| 398 | static int |
| 399 | ts_lua_fetch_handler(TSCont contp, TSEvent ev, void *edata ATS_UNUSED) |
| 400 | { |
| 401 | int event; |
| 402 | char *from; |
| 403 | int64_t n, wavail; |
| 404 | TSIOBufferBlock blk; |
| 405 | |
| 406 | ts_lua_fetch_info *fi; |
| 407 | ts_lua_fetch_multi_info *fmi; |
| 408 | |
| 409 | event = (int)ev; |
| 410 | fi = static_cast<decltype(fi)>(TSContDataGet(contp)); |
| 411 | fmi = fi->fmi; |
| 412 | |
| 413 | switch (event) { |
| 414 | case TS_FETCH_EVENT_EXT_HEAD_READY: |
| 415 | case TS_FETCH_EVENT_EXT_HEAD_DONE: |
| 416 | break; |
| 417 | |
| 418 | case TS_FETCH_EVENT_EXT_BODY_READY: |
| 419 | case TS_FETCH_EVENT_EXT_BODY_DONE: |
| 420 | |
| 421 | do { |
| 422 | blk = TSIOBufferStart(fi->buffer); |
| 423 | from = TSIOBufferBlockWriteStart(blk, &wavail); |
| 424 | n = TSFetchReadData(fi->fch, from, wavail); |
| 425 | TSIOBufferProduce(fi->buffer, n); |
| 426 | } while (n == wavail); |
| 427 | |
| 428 | if (event == TS_FETCH_EVENT_EXT_BODY_DONE) { // fetch over |
| 429 | fi->over = 1; |
| 430 | } |
| 431 | |
| 432 | break; |
| 433 | |
| 434 | default: |
| 435 | fi->failed = 1; |
| 436 | break; |
| 437 | } |
| 438 | |
| 439 | if (fmi && (fi->over || fi->failed)) { |
| 440 | TSContCall(fmi->contp, TSEvent(TS_LUA_EVENT_FETCH_OVER), fi); // error exist |
| 441 | ts_lua_destroy_fetch_multi_info(fmi); |
| 442 | } |
| 443 | |
| 444 | return 0; |
| 445 | } |
| 446 | |
| 447 | static int |
| 448 | ts_lua_fill_one_result(lua_State *L, ts_lua_fetch_info *fi) |
nothing calls this directly
no test coverage detected