http.js 960 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. const { http } = just.library('http.so', 'http')
  2. const { parseRequests, getRequests, getUrl } = http
  3. const free = []
  4. function createParser (buffer) {
  5. if (free.length) {
  6. const parser = free.shift()
  7. parser.buffer.offset = 0
  8. return parser
  9. }
  10. const answer = [0]
  11. const parser = { buffer }
  12. function parse (bytes, off = 0) {
  13. const count = parseRequests(buffer, buffer.offset + bytes, off, answer)
  14. if (count > 0) {
  15. parser.onRequests(count)
  16. }
  17. if (answer[0] > 0) {
  18. const start = buffer.offset + bytes - answer[0]
  19. const len = answer[0]
  20. if (start > buffer.offset) {
  21. buffer.copyFrom(buffer, 0, len, start)
  22. }
  23. buffer.offset = len
  24. return
  25. }
  26. buffer.offset = 0
  27. }
  28. buffer.offset = 0
  29. parser.parse = parse
  30. parser.get = count => getRequests(count)
  31. parser.url = index => getUrl(index)
  32. parser.free = () => free.push(parser)
  33. return parser
  34. }
  35. module.exports = { createParser }