No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 

47 líneas
2.2 KiB

-include("eWSrv.hrl").
-define(wsErr(Str), error_logger:error_msg(Str)).
-define(wsErr(Format, Args), error_logger:error_msg(Format, Args)).
-define(wsWarn(Format, Args), error_logger:warning_msg(Format, Args)).
-define(wsInfo(Format, Args), error_logger:info_msg(Format, Args)).
-define(wsGLV(Key, List, Default), wsUtil:gLV(Key, List, Default)).
-define(DefWsOpts, [
binary
, {packet, raw}
, {active, false}
, {reuseaddr, true}
, {nodelay, false}
, {delay_send, true}
, {send_timeout, 15000}
, {keepalive, true}
, {exit_on_close, true}
, {backlog, 4096}
]).
-define(CASE(Cond, Then, That), case Cond of true -> Then; _ -> That end).
-export_type([
sendfile_opts/0
]).
-type sendfile_opts() :: [{chunk_size, non_neg_integer()}].
-type stage() :: reqLine | wsHeader | wsBody | done. %% 接受http请求可能会有多个包 分四个阶接收
-record(wsState, {
stage = reqLine :: stage() %% 接收数据阶段
, buffer = <<>> :: binary() %% 缓存接收到的数据
, wsReq :: undefined | #wsReq{} %% 解析后的http
, headerCnt = 0 :: pos_integer() %% header计数
, temHeader = [] :: [wsHeaders()] %% 解析header临时数据
, contentLength :: undefined | non_neg_integer() | chunked %% 长度
, temChunked = <<>> :: binary() %% chunked 模式下保存数据
, method :: wsMethod() %% 请求的method
, path :: binary() %% 请求的URL
, rn :: undefined | binary:cp() %% binary:cp()
, socket :: undefined | inet:socket() | ssl:sslsocket() %% 连接的socket
, isSsl = false :: boolean() %% 是否是ssl
, wsMod :: module() %% 回调请求的模块
, maxSize = infinity :: pos_integer() %% 单次允许接收的最大长度
, chunkedSupp = false :: boolean() %% 是否运行 chunked
}).