25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.9 KiB

  1. -include("eWSrv.hrl").
  2. -define(wsErr(Str), error_logger:error_msg(Str)).
  3. -define(wsErr(Format, Args), error_logger:error_msg(Format, Args)).
  4. -define(wsWarn(Format, Args), error_logger:warning_msg(Format, Args)).
  5. -define(wsInfo(Format, Args), error_logger:info_msg(Format, Args)).
  6. -define(wsGLV(Key, List, Default), wsUtil:gLV(Key, List, Default)).
  7. -define(DefWsOpts, [
  8. binary
  9. , {packet, raw}
  10. , {active, false}
  11. , {reuseaddr, true}
  12. , {nodelay, false}
  13. , {delay_send, true}
  14. , {send_timeout, 15000}
  15. , {keepalive, true}
  16. , {exit_on_close, true}
  17. , {backlog, 4096}
  18. ]).
  19. -define(IIF(Cond, Then, That), case Cond of true -> Then; _ -> That end).
  20. -export_type([
  21. sendfile_opts/0
  22. ]).
  23. -type sendfile_opts() :: [{chunk_size, non_neg_integer()}].
  24. -type stage() :: reqLine | header | body | done. %% 接受http请求可能会有多个包 分四个阶接收
  25. -record(wsState, {
  26. stage = reqLine :: stage() %% 接收数据阶段
  27. , buffer = <<>> :: binary() %% 缓存接收到的数据
  28. , wsReq :: undefined | #wsReq{} %% 解析后的http
  29. , headerCnt = 0 :: pos_integer() %% header计数
  30. , temHeader = [] :: [headers()] %% 解析header临时数据
  31. , contentLength :: undefined | non_neg_integer() | chunked %% 长度
  32. , temChunked = <<>> :: binary()
  33. , method :: method()
  34. , path :: binary()
  35. , rn :: undefined | binary:cp()
  36. , socket :: undefined | wsNet:socket()
  37. , isSsl = false :: boolean()
  38. , wsMod :: module()
  39. , maxSize = infinity :: pos_integer() %% 允许接收的最大长度
  40. , maxChunkCnt = 0 :: pos_integer() %% 允许接收的最大chunk 数量
  41. , maxRecvCnt = 0 :: pos_integer() %% 允许允许recv最大的次数
  42. }).