9 #include<jsoncpp/json/json.h>
25 #include<openssl/sha.h>
29 #include<sys/socket.h>
31 #include<openssl/bio.h>
32 #include<openssl/evp.h>
33 #include<openssl/buffer.h>
38 #include<condition_variable>
40 #include<unordered_map>
41 #include <openssl/ssl.h>
42 #include <openssl/err.h>
43 #include<openssl/crypto.h>
52 #include <sys/eventfd.h>
53 #include <sys/timerfd.h>
85 static bool createDir(
const std::string & ddir,
const mode_t &mode=0775);
94 static bool copy(
const std::string &sourceFile,
const std::string &objectFile);
103 static bool createFile(
const std::string &filePath,
const mode_t &mode=0666);
148 static std::mutex
l1;
149 static std::unordered_map<std::string,FileThreadLock>
fl2;
158 std::vector<std::string> data;
159 std::vector<std::string> backUp;
160 char *data_binary=
nullptr;
161 char *backUp_binary=
nullptr;
165 size_t multiple_backup=0;
170 std::string fileName;
172 std::string fileNameTemp;
177 uint64_t totalLines=0;
222 bool openFile(
const std::string &fileName,
const bool &create=
true,
const int &multiple=0,
const size_t &size=0,
const mode_t &mode=0666);
305 int findC(
const std::string &targetString,
const int linePos=1);
315 bool appendLineC(
const std::string &data,
const int &linePos=0);
341 bool chgLineC(
const std::string &data,
const int &linePos=0);
351 bool readLineC(std::string &data,
const int linePos);
361 std::string&
readC(std::string &data,
const int &linePos,
const int &num);
368 std::string&
readAllC(std::string &data);
384 bool readC(
char *data,
const size_t &pos,
const size_t &size);
395 bool writeC(
const char *data,
const size_t &pos,
const size_t &size);
416 int find(
const std::string &targetString,
const int linePos=1);
426 bool appendLine(
const std::string &data,
const int &linePos=0);
452 bool chgLine(
const std::string &data,
const int &linePos=0);
462 bool readLine(std::string &data,
const int linePos);
472 std::string&
read(std::string &data,
const int &linePos,
const int &num);
479 std::string&
readAll(std::string &data);
495 bool read(
char *data,
const size_t &pos,
const size_t &size);
506 bool write(
const char *data,
const size_t &pos,
const size_t &size);
677 return Duration(dayy,hourr,minn,secc,msecc);
692 msecc=dayy*24*60*60*1000+hourr*60*60*1000+minn*60*1000+secc*1000+msecc-b.
day*24*60*60*1000-b.
hour*60*60*1000-b.
min*60*1000-b.
sec*1000-b.
msec;
721 return Duration(dayy,hourr,minn,secc,msecc);
731 double k=
day+total/86400000.0000;
741 double k=
day*24+
hour+total/36000000.0000;
751 double k=
day*24*60+
hour*60+
min+total/60000.0000;
823 std::ostream&
operator<<(std::ostream &os,
const Duration &a);
826 using Seconds=std::chrono::duration<uint64_t>;
830 #define ISO8086A "yyyy-mm-ddThh:mi:ss"
834 #define ISO8086B "yyyy-mm-ddThh:mi:ss.sss"
848 static std::string &toPGtimeFormat();
849 static std::chrono::system_clock::time_point strToTimePoint(
const std::string &timeStr,
const std::string &format=
ISO8086A);
850 static std::string& timePointToStr(
const std::chrono::system_clock::time_point &tp,std::string &timeStr,
const std::string &format=
ISO8086A);
859 static std::string&
getTime(std::string &timeStr,
const std::string &format=
ISO8086A);
868 static bool convertFormat(std::string &timeStr,
const std::string &oldFormat,
const std::string &newFormat=
ISO8086A);
889 static std::string&
calculateTime(
const std::string &time1,
const Duration &time2,std::string &result,
const std::string &am,
const std::string &format1=
ISO8086A,
const std::string &format2=
ISO8086A);
899 static bool compareTime(
const std::string &time1,
const std::string &time2,
const std::string &format1=
ISO8086A,
const std::string &format2=
ISO8086A);
903 std::chrono::steady_clock::time_point start;
904 std::chrono::steady_clock::time_point end;
944 std::string timeFormat;
945 std::string contentFormat;
946 std::atomic<bool> consumerGuard{
true};
947 std::mutex queueMutex;
948 std::condition_variable queueCV;
949 std::queue<std::string> logQueue;
950 std::thread consumerThread;
964 bool openFile(
const std::string &fileName,
const std::string &timeFormat=
ISO8086A,
const std::string &contentFormat=
" ");
985 void writeLog(
const std::string &data);
998 bool deleteLogByTime(
const std::string &date1=
"1",
const std::string &date2=
"2");
1028 static bool encryptSymmetric(
const unsigned char *before,
const size_t &length,
const unsigned char *passwd,
const unsigned char *iv,
unsigned char *after);
1039 static bool decryptSymmetric(
const unsigned char *before,
const size_t &length,
const unsigned char *passwd,
const unsigned char *iv,
unsigned char *after);
1052 static std::string&
sha1(
const std::string &ori_str,std::string &result);
1065 static std::string&
sha11(
const std::string &ori_str,std::string &result);
1080 static std::string&
bitOutput(
char input,std::string &result);
1088 static std::string&
bitOutput(
const std::string &input,std::string &result);
1097 static char&
bitOutput_bit(
char input,
const int pos,
char &result);
1105 static unsigned long&
bitStrToNumber(
const std::string &input,
unsigned long &result);
1115 static unsigned long&
bitToNumber(
const std::string &input,
unsigned long &result);
1123 static char&
toBit(
const std::string &input,
char &result);
1131 static std::string&
toBit(
const std::string &input,std::string &result);
1204 static std::string&
getPreciesFloat(
const float &number,
const int &bit,std::string &str);
1221 static std::string&
getPreciesDouble(
const double &number,
const int &bit,std::string &str);
1266 static size_t get_split_str(
const std::string_view& ori_str,std::string_view &str,
const std::string_view &a,
const std::string_view &b,
const size_t &pos=0);
1277 static std::string_view&
get_value_str(
const std::string_view& ori_str,std::string_view &str,
const std::string& name);
1286 static std::string_view&
get_value_header(
const std::string_view& ori_str,std::string_view &str,
const std::string& name);
1296 static std::string_view&
get_location_str(
const std::string_view& ori_str,std::string_view &str);
1306 static std::string_view&
getLocPara(
const std::string_view &url,std::string_view &locPara);
1315 static std::string_view&
getPara(
const std::string_view &url,std::string_view ¶);
1334 static size_t get_split_str(
const std::string_view& ori_str,std::string &str,
const std::string_view &a,
const std::string_view &b,
const size_t &pos=0);
1345 static std::string&
get_value_str(
const std::string& ori_str,std::string &str,
const std::string& name);
1354 static std::string&
get_value_header(
const std::string& ori_str,std::string &str,
const std::string& name);
1364 static std::string&
get_location_str(
const std::string& ori_str,std::string &str);
1374 static std::string&
getLocPara(
const std::string &url,std::string &locPara);
1383 static std::string&
getPara(
const std::string &url,std::string ¶);
1394 static std::string&
getIP(
const std::string &url,std::string &IP);
1405 static int&
getPort(
const std::string &url,
int &port);
1415 static std::string
createHeader(
const std::string& first,
const std::string& second);
1436 template<
class... Args>
1437 static std::string
createHeader(
const std::string& first,
const std::string& second,Args... args)
1439 std::string cf=first+
": "+second+
"\r\n"+
createHeader(args...);
1476 static int&
toInt(
const std::string_view&ori_str,
int &result,
const int &i=-1);
1483 static int&
str16toInt(
const std::string_view&ori_str,
int &result,
const int &i=-1);
1492 static long&
toLong(
const std::string_view&ori_str,
long &result,
const long &i=-1);
1501 static float&
toFloat(
const std::string&ori_str,
float &result,
const float &i=-1);
1510 static double&
toDouble(
const std::string&ori_str,
double &result,
const double &i=-1);
1518 static bool&
toBool(
const std::string_view&ori_str,
bool &result);
1529 static std::string&
strto16(
const std::string &ori_str,std::string &result);
1591 static std::string&
maskCalculate(std::string &data,
const std::string &mask);
1611 static int getValue(
const std::string &oriStr,std::string& result,
const std::string &type=
"value",
const std::string &name=
"a",
const int &num=0);
1618 static std::string
toString(
const Json::Value &val);
1624 static Json::Value
toJsonArray(
const std::string & str);
1634 template<
class T1,
class T2>
1639 if constexpr (std::is_integral_v<T2>) {
1640 root[first] = Json::Value(static_cast<Json::Int64>(second));
1642 root[first] = second;
1644 Json::StreamWriterBuilder builder;
1645 std::string jsonString=Json::writeString(builder,root);
1659 template<
class T1,
class T2,
class... Args>
1664 if constexpr (std::is_integral_v<T2>) {
1665 root[first] = Json::Value(static_cast<Json::Int64>(second));
1667 root[first] = second;
1670 Json::StreamWriterBuilder builder;
1671 std::string jsonString=Json::writeString(builder,root);
1672 jsonString=jsonString.erase(jsonString.length()-2);
1674 return jsonString+
","+kk;
1687 Json::Value root(Json::arrayValue);
1689 Json::StreamWriterBuilder builder;
1690 std::string jsonString=Json::writeString(builder,root);
1702 template<
class T,
class... Args>
1705 Json::Value root(Json::arrayValue);
1708 Json::StreamWriterBuilder builder;
1709 std::string jsonString=Json::writeString(builder,root);
1710 jsonString=jsonString.erase(jsonString.length()-2);
1712 return jsonString+
","+kk;
1721 static std::string
jsonAdd(
const std::string &a,
const std::string &b);
1728 static std::string&
jsonFormatify(
const std::string &a,std::string &b);
1735 static std::string&
jsonToUTF8(
const std::string &input,std::string &output);
1822 std::deque<std::chrono::steady_clock::time_point>
history;
1879 std::unordered_map<int, ConnectionState>
conns;
2005 ConnectionLimiter(
const int& maxConn = 20,
const int& idleTimeout = 60) : maxConnections(maxConn),connectionTimeout(idleTimeout){}
2043 void setPathLimit(
const std::string &path,
const int ×,
const int &secs);
2090 void clearIP(
const std::string &ip,
const int &fd);
2107 bool allow(
RateState &st,
const RateLimitType &type,
const int ×,
const int &secs,
const std::chrono::steady_clock::time_point &now);
2111 int connectionTimeout;
2117 std::unordered_map<std::string, IPInformation> table;
2118 std::unordered_map<std::string, std::pair<int,int>> pathConfig;
2120 std::unordered_map<std::string,std::chrono::steady_clock::time_point> blacklist;
2121 inline void logSecurity(
const std::string &msgCN,
const std::string &msgEN);
2176 void close(
const bool &cle=
true);
2214 int sendData(
const std::string &data,
const bool &block=
true);
2234 int sendData(
const char *data,
const uint64_t &length,
const bool &block=
true);
2279 int recvData(std::string &data,
const uint64_t &length);
2292 int recvData(
char *data,
const uint64_t &length);
2302 std::string serverIP=
"";
2306 SSL_CTX *ctx=
nullptr;
2313 void closeAndUnCreate();
2314 bool initCTX(
const char *ca,
const char *cert=
"",
const char *key=
"",
const char *passwd=
"");
2328 TcpClient(
const bool &TLS=
false,
const char *ca=
"",
const char *cert=
"",
const char *key=
"",
const char *passwd=
"");
2335 bool connect(
const std::string &ip,
const int &port);
2349 void resetCTX(
const bool &TLS=
false,
const char *ca=
"",
const char *cert=
"",
const char *key=
"",
const char *passwd=
"");
2401 HttpClient(
const bool &TLS=
false,
const char *ca=
"",
const char *cert=
"",
const char *key=
"",
const char *passwd=
""):
TcpClient(TLS,ca,cert,key,passwd){}
2415 bool getRequest(
const std::string &url,
const std::string &
header=
"",
const std::string &header1=
"Connection: keep-alive",
const int &
sec=-1);
2429 bool postRequest(
const std::string &url,
const std::string &
body=
"",
const std::string &
header=
"",
const std::string &header1=
"Connection: keep-alive",
const int &
sec=-1);
2444 bool getRequestFromFD(
const int &
fd,SSL *
ssl,
const std::string &url,
const std::string &
header=
"",
const std::string &header1=
"Connection: keep-alive",
const int &
sec=2);
2460 bool postRequestFromFD(
const int &
fd,SSL *
ssl,
const std::string &url,
const std::string &
body=
"",
const std::string &
header=
"",
const std::string &header1=
"Connection: keep-alive",
const int &
sec=2);
2485 std::function<bool(const int &fd)> fc=[](
const int &fd)->
bool
2487 std::function<void(const int &fd)> fcEnd=[](
const int &fd)->
void
2489 std::function<bool(const int &fd)> fcTimeOut=[](
const int &fd)->
bool
2573 std::function<bool(const std::string &message,WebSocketClient &k)> fc=[](
const std::string &message,
WebSocketClient &k)->
bool
2574 {std::cout<<
"收到: "<<message<<std::endl;
return true;};
2593 WebSocketClient(
const bool &TLS=
false,
const char *ca=
"",
const char *cert=
"",
const char *key=
"",
const char *passwd=
""):
TcpClient(TLS,ca,cert,key,passwd){}
2611 bool connect(
const std::string &url,
const int &min=20);
2634 bool sendMessage(
const std::string &message,
const std::string &type=
"0001");
2644 void close(
const std::string &closeCodeAndMessage,
const bool &wait=
true);
2662 void close(
const short &code=1000,
const std::string &message=
"bye",
const bool &wait=
true);
2730 std::unordered_map<std::string,std::any>
ctx;
2773 bool sendBack(
const std::string &data,
const std::string &header=
"",
const std::string &code=
"200 OK",
const std::string &header1=
"");
2786 bool sendBack(
const char *data,
const size_t &length,
const char *header=
"\0",
const char *code=
"200 OK\0",
const char *header1=
"\0",
const size_t &header_length=50);
2844 std::unordered_map<std::string,std::any>
ctx;
2863 std::unordered_map<std::string,std::any>
ctx;
2978 std::function<void(const int &fd)> closeFun=[](
const int &fd)->
void
2984 std::function<bool(TcpFDHandler &k,TcpInformation &inf)> globalSolveFun=[](TcpFDHandler &k,TcpInformation &inf)->
bool
2986 std::unordered_map<std::string,std::vector<std::function<int(TcpFDHandler &k,TcpInformation &inf)>>> solveFun;
2987 std::function<int(TcpFDHandler &k,TcpInformation &inf)> parseKey=[](TcpFDHandler &k,TcpInformation &inf)->
int
2988 {inf.ctx[
"key"]=inf.data;
return 1;};
2994 void epolll(
const int &evsNum);
2996 virtual void handler_netevent(
const int &fd);
2997 virtual void handler_workerevent(
const int &fd,
const int &ret);
2998 virtual void handleHeartbeat()=0;
3011 void putTask(
const std::function<
int(TcpFDHandler &k,TcpInformation &inf)> &fun,TcpFDHandler &k,TcpInformation &inf);
3036 bool startListen(
const int &port,
const int &threads=8);
3063 bool setTLS(
const char *cert,
const char *key,
const char *passwd,
const char *ca);
3100 auto [it, inserted] = solveFun.try_emplace(key);
3101 it->second.push_back(std::move(fc));
3131 virtual bool close(
const int &fd);
3171 void setCloseFun(std::function<
void(
const int &fd)> closeFun){this->closeFun=closeFun;}
3182 SSL*
getSSL(
const int &fd);
3201 std::vector<std::function<int(HttpServerFDHandler &k,HttpRequestInformation &inf)>> globalSolveFun;
3203 std::unordered_map<std::string,std::vector<std::function<int(HttpServerFDHandler &k,HttpRequestInformation &inf)>>> solveFun;
3205 {inf.
ctx[
"key"]=inf.loc;
return 1;};
3211 void handler_netevent(
const int &fd);
3212 void handler_workerevent(
const int &fd,
const int &ret);
3213 void handleHeartbeat(){}
3303 auto [it, inserted] = solveFun.try_emplace(key);
3304 it->second.push_back(std::move(fc));
3393 bool sendMessage(
const std::string &msg,
const std::string &type=
"0001");
3403 std::unordered_map<int,WebSocketFDInformation> wbclientfd;
3416 std::unordered_map<std::string,std::vector<std::function<int(WebSocketServerFDHandler &k,WebSocketFDInformation &inf)>>> solveFun;
3418 {inf.
ctx[
"key"]=inf.message;
return 1;};
3423 void handler_netevent(
const int &fd);
3424 void handler_workerevent(
const int &fd,
const int &ret);
3427 void closeAck(
const int &fd,
const std::string &closeCodeAndMessage);
3428 void closeAck(
const int &fd,
const short &code=1000,
const std::string &message=
"bye");
3430 void handleHeartbeat();
3431 bool closeWithoutLock(
const int &fd,
const std::string &closeCodeAndMessage);
3432 bool closeWithoutLock(
const int &fd,
const short &code=1000,
const std::string &message=
"bye");
3531 auto [it, inserted] = solveFun.try_emplace(key);
3532 it->second.push_back(std::move(fc));
3573 bool closeFD(
const int &fd,
const std::string &closeCodeAndMessage);
3593 bool closeFD(
const int &fd,
const short &code=1000,
const std::string &message=
"bye");
3627 bool close(
const int &fd);
3661 void sendMessage(
const std::string &msg,
const std::string &type=
"0001");
3688 void setFD(
const int &fd,
const bool &
flag1=
false,
const int &
sec=-1,
const bool &
flag2=
false);
3711 void close(
const bool &cle=
true);
3730 int sendData(
const std::string &data,
const std::string &ip,
const int &port,
const bool &block=
true);
3750 int sendData(
const char *data,
const uint64_t &length,
const std::string &ip,
const int &port,
const bool &block=
true);
3765 int recvData(std::string &data,
const uint64_t &length,std::string &ip,
int &port);
3780 int recvData(
char *data,
const uint64_t &length,std::string &ip,
int &port);
3906 struct semid_ds *buf;
3907 unsigned short *arry;
3932 bool init(key_t key,
unsigned short value = 1,
short sem_flg = SEM_UNDO);
3942 bool wait(
short value = -1);
3952 bool post(
short value = 1);
3979 #define MAX_PROCESS_NAME 100
3983 #define MAX_PROCESS_INF 1000
3987 #define SHARED_MEMORY_KEY 0x5095
3991 #define SHARED_MEMORY_LOCK_KEY 0x5095
4047 bool join(
const char *name,
const char *argv0=
"",
const char *argv1=
"",
const char *argv2=
"");
4063 static bool HBCheck(
const int &sec);
4104 template<
class... Args>
4105 static bool startProcess(
const std::string &name,
const int &sec=-1,Args ...args)
4107 std::vector<const char *> paramList={args...,
nullptr};
4117 execv(name.c_str(),
const_cast<char* const*
>(paramList.data()));
4121 for(
int ii=1;ii<=64;ii++)
4132 signal(SIGCHLD,SIG_DFL);
4139 execv(name.c_str(),
const_cast<char* const*
>(paramList.data()));
4174 template<
class Fn,
class... Args>
4175 static typename std::enable_if<!std::is_convertible<Fn, std::string>::value,
bool>::type
4187 auto f=std::bind(std::forward<Fn>(fn),std::forward<Args>(args)...);
4192 for(
int ii=1;ii<=64;ii++)
4203 signal(SIGCHLD,SIG_DFL);
4210 auto f=std::bind(std::forward<Fn>(fn),std::forward<Args>(args)...);
4227 using Task = std::function<void()>;
4265 for (
size_t i = 0; i < n; ++i) {
4266 threads_.emplace_back([
this] {
4291 std::lock_guard<std::mutex> lk(mtx_);
4292 tasks_.push(std::move(task));
4309 std::lock_guard<std::mutex> lk(mtx_);
4313 for (
auto &t : threads_)
4315 if (t.joinable()) t.join();
4336 std::unique_lock<std::mutex> lk(mtx_);
4337 cv_.wait(lk, [
this] {
4338 return stop_ || !tasks_.empty();
4340 if (stop_ && tasks_.empty())
4344 task = std::move(tasks_.front());
4352 std::vector<std::thread> threads_;
4353 std::queue<Task> tasks_;
4355 std::condition_variable cv_;
void setSecuritySendBackFun(std::function< void(HttpServerFDHandler &k, HttpRequestInformation &inf)> fc)
设置违反信息安全策略时候的返回函数
Definition: sttnet.h:3265
void setStartFunction(std::function< bool(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> fccc)
设置websocket连接成功后就执行的回调函数 注册一个回调函数
Definition: sttnet.h:3502
static std::string & transfer_websocket_key(std::string &str)
生成 WebSocket 握手响应中的 Sec-WebSocket-Accept 字段值。
统一的连接与请求安全裁决器(IP 级 + fd 级,多策略限流 + 黑名单)。
Definition: sttnet.h:1996
int sendData(const std::string &data, const std::string &ip, const int &port, const bool &block=true)
向目标发送字符串数据。
std::chrono::duration< uint64_t > Seconds
Definition: sttnet.h:826
bool operator>(const Duration &b)
判断当前时间间隔是否大于另一个时间间隔。
Definition: sttnet.h:560
int getServerPort()
返回已连接的客户端的端口 return 已连接的服务端的端口
Definition: sttnet.h:2369
int fd
底层套接字
Definition: sttnet.h:2932
SSL * getSSL()
获取该对象的加密SSL句柄
Definition: sttnet.h:2171
int solveRequest(TcpFDInf &TcpInf, HttpRequestInformation &HttpInf, const unsigned long &buffer_size, const int ×=1)
解析Http/Https请求
Definition: sttnet.h:1904
int checkFrequency
Definition: sttnet.h:2976
bool isStart()
返回本对象计时状态
Definition: sttnet.h:932
int fd
Definition: sttnet.h:2141
bool connect(const std::string &ip, const int &port)
向服务端发起tcp连接
TcpFDInf * clientfd
Definition: sttnet.h:2954
~WebSocketClient()
WebSocketClient类的析构函数,销毁对象时候会优雅退出断开连接
std::string getServerIp()
如果连接到了服务器 返回服务器ip
Definition: sttnet.h:2678
bool unblock
Definition: sttnet.h:2962
int ret
返回值 -2:失败并且要求关闭连接 -1:失败但不需要关闭连接 1:成功
Definition: sttnet.h:2936
void setFD(const int &fd, SSL *ssl=nullptr, const bool &flag1=false, const bool &flag2=true)
初始化对象,传入套接字等参数
Definition: sttnet.h:2748
tcp协议的套接字操作类
Definition: sttnet.h:2138
void setConnectStrategy(const stt::security::RateLimitType &type)
设置“连接速率限流”所使用的策略。
Definition: sttnet.h:3138
bool readLine(std::string &data, const int linePos)
读取单行
static std::string createJson(T1 first, T2 second, Args...args)
创建多个键值对组成的 JSON 字符串(递归变参模板)。
Definition: sttnet.h:1660
std::string & readAll(std::string &data)
读取全部
double tokens
Definition: sttnet.h:1825
表示时间间隔的结构体,支持天、小时、分钟、秒和毫秒粒度。
Definition: sttnet.h:528
std::string & readAllC(std::string &data)
读取全部
void setGlobalSolveFunction(std::function< int(HttpServerFDHandler &k, HttpRequestInformation &inf)> fc)
设置全局备用函数
Definition: sttnet.h:3274
WebSocket协议的操作类 仅传入套接字,然后使用这个类进行WebSocket的操作
Definition: sttnet.h:3345
static void setLogFile(file::LogFile *logfile=nullptr, const std::string &language="")
设置日志系统的日志文件对象 传入的日志文件对象如果是没初始化的空的对象,系统自动在程序目录下生成server_log文件夹并且根据当前时间生成一个日志文件记录服务程序的网络通信 如果传入的日志文件对象是...
static void init(file::LogFile *logfile=nullptr, const std::string &language="")
执行setExceptionHandling和setLogFile两个函数,完成初始化信号和日志系统
DefenseDecision allowRequest(const std::string &ip, const int &fd, const std::string_view &path, const int ×, const int &secs)
对已建立连接的一次请求进行安全裁决。
bool isConnect()
判断对象是否有套接字绑定
Definition: sttnet.h:2194
void setPathLimit(const std::string &path, const int ×, const int &secs)
设置某个路径的额外限流规则(path 级)。
时间操作、运算、计时的类
Definition: sttnet.h:843
bool createFD(const int &port, const bool &flag1=false, const int &sec=-1, const bool &flag2=true)
销毁原来的套接字,重新创建一个服务端
int getFD()
获取该对象的套接字
Definition: sttnet.h:2166
static long getRandomNumber(const long &a, const long &b)
生成一个随机整数
static int & str16toInt(const std::string_view &ori_str, int &result, const int &i=-1)
16进制数字的字符串表示转化为10进制int类型数字
bool deleteLine(const int &linePos=0)
删除行
void waitAndQuit(const time::Duration &t=time::Duration{0, 0, 0, 10, 10})
开始退出epoll倒计时,直到套接字有新的消息 如果套接字倒计时结束还没有新的消息,那么退出epoll
Definition: sttnet.h:2556
bool connect(const std::string &url, const int &min=20)
连接到websocket服务器
bool operator<=(const Duration &b)
判断当前时间间隔是否小于等于另一个时间间隔。
Definition: sttnet.h:624
static std::string & sha11(const std::string &ori_str, std::string &result)
计算输入字符串的 SHA-1 哈希值,并以十六进制字符串形式返回。
Http/HttpServer 服务端操作类
Definition: sttnet.h:3196
int recvData(std::string &data, const uint64_t &length, std::string &ip, int &port)
接收一次数据到string字符串容器
int sendData(const std::string &data, const bool &block=true)
向已连接的套接字发送字符串数据。
bool sendMessage(const int &fd, const std::string &msg, const std::string &type="0001")
发送 WebSocket 消息给某一个客户端
Definition: sttnet.h:3617
void setCloseFun(std::function< void(const int &fd)> closeFun)
设置关闭tcp连接之后调用的函数
Definition: sttnet.h:3171
工作现场完成任务后压入完成队列的数据结构
Definition: sttnet.h:2927
pid_t pid
进程id
Definition: sttnet.h:4001
WebSocketClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
WebSocketClient类的构造函数
Definition: sttnet.h:2593
Duration operator+(const Duration &b)
将两个时间间隔相加。
Definition: sttnet.h:640
Duration(long long a, int b, int c, int d, int e)
构造函数,传入天,时,分,秒,毫秒
Definition: sttnet.h:553
int violations
Definition: sttnet.h:1818
bool post(short value=1)
V 操作(释放),尝试将信号量值加上 value。
int getFD()
返回fd
Definition: sttnet.h:3706
static unsigned long & htonl_ntohl_64(unsigned long &data)
将 64 位无符号整数的字节序反转(大端 <-> 小端)。
char argv1[20]
进程第二个参数
Definition: sttnet.h:4017
bool writeC(const char *data, const size_t &pos, const size_t &size)
写数据块
bool postRequestFromFD(const int &fd, SSL *ssl, const std::string &url, const std::string &body="", const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=2)
发送一个POST请求到服务器
std::string loc
文件路径
Definition: sttnet.h:122
unsigned long p_buffer_now
接收空间位置指针
Definition: sttnet.h:2921
bool isConnect()
返回对象的连接状态
Definition: sttnet.h:2374
std::ostream & operator<<(std::ostream &os, const Duration &a)
将 Duration 对象以可读格式输出到流中。
int sec
秒
Definition: sttnet.h:545
~TcpServer()
TcpServer 类的析构函数
Definition: sttnet.h:3187
double convertToMin()
将当前时间间隔转换为以“分钟”为单位的浮点数表示。
Definition: sttnet.h:747
void putTask(const std::function< int(HttpServerFDHandler &k, HttpRequestInformation &inf)> &fun, HttpServerFDHandler &k, HttpRequestInformation &inf)
把一个任务放入工作线程池由工作线程完成
int recvDataByLength(std::string &data, const uint64_t &length, const int &sec=2)
从已连接的套接字中阻塞接收指定长度的数据到字符串
static bool decryptSymmetric(const unsigned char *before, const size_t &length, const unsigned char *passwd, const unsigned char *iv, unsigned char *after)
AES-256-CBC模式对称解密函数
static std::string & generateMask_4(std::string &mask)
生成一个 32 位(4 字节)的随机掩码。
void clearIP(const std::string &ip, const int &fd)
在连接断开时回收对应 fd 的状态。
static long & toLong(const std::string_view &ori_str, long &result, const long &i=-1)
string转化为long类型
static std::string & getRandomStr_base64(std::string &str, const int &length)
生成一个规定长度的“Base64 字符集内的伪随机字符串”,并在末尾用 '=' 补齐至符合 Base64 字符串格式
static float & toFloat(const std::string &ori_str, float &result, const float &i=-1)
string转化为float类型
unsigned long buffer_size
Definition: sttnet.h:2949
std::string getServerPort()
如果连接到了服务器 返回服务器端口
Definition: sttnet.h:2683
int counter
Definition: sttnet.h:1817
unsigned long long maxFD
Definition: sttnet.h:2950
bool closeFile(const bool &del=false)
关闭对象打开的日志文件
TcpClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
TcpClient类的构造函数
std::chrono::steady_clock::time_point lastActivity
Definition: sttnet.h:1849
int serverType
Definition: sttnet.h:2971
void setPathLimit(const std::string &path, const int ×, const int &secs)
设置某个路径的额外限流规则(path 级)。
Definition: sttnet.h:3167
void setTimeOutFunction(std::function< bool(const int &fd)> fcTimeOut)
设置epoll超时后出发的回调函数 注册一个回调函数
Definition: sttnet.h:2539
bool flag2
Definition: sttnet.h:2143
Duration recoverForm(const long long &t)
从给定的毫秒数恢复为标准的天-时-分-秒-毫秒格式。
Definition: sttnet.h:778
static std::string createArray(T first)
创建只包含一个元素的 JSON 数组字符串。
Definition: sttnet.h:1685
void close(const bool &cle=true)
置空对象,关闭套接字
UdpClient(const bool &flag1=false, const int &sec=-1)
构造函数
void putTask(const std::function< int(TcpFDHandler &k, TcpInformation &inf)> &fun, TcpFDHandler &k, TcpInformation &inf)
把一个任务放入工作线程池由工作线程完成
std::queue< std::any > pendindQueue
等待处理的队列
Definition: sttnet.h:2897
负责字符串和数字的转化
Definition: sttnet.h:1465
~EpollSingle()
EpollSingle的析构函数 调用eldListen阻塞退出epoll.
Definition: sttnet.h:2561
int threads
记录文件正在被多少个线程使用
Definition: sttnet.h:126
static double & toDouble(const std::string &ori_str, double &result, const double &i=-1)
string转化为double类型
void setFunction(const std::string &key, std::function< int(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> fc)
设置key对应的收到客户端消息后的回调函数
Definition: sttnet.h:3529
static std::string language
系统的日志系统的语言选择,默认为English
Definition: sttnet.h:3856
static std::string & getPreciesFloat(const float &number, const int &bit, std::string &str)
将浮点数格式化为指定小数位数的字符串表示。
负责进程心跳监控,调度的类 用于监控服务进程,保证服务进程持续有效运行 进程结束后,0x5095这一块共享内存和信号量都没有删掉 目前只支持最多三个参数的进程加入监控 应该自己手动在程序编写加入心跳监控...
Definition: sttnet.h:4031
bool flag1
Definition: sttnet.h:2142
std::deque< std::chrono::steady_clock::time_point > history
Definition: sttnet.h:1822
void startListen(const int &fd, const bool &flag=true, const time::Duration &dt=time::Duration{0, 0, 20, 0, 0})
开始监听
Duration checkTime()
计时过程中检查时间
size_t getFileSize()
获取二进制打开的文件的大小
Definition: sttnet.h:266
Definition: sttnet.h:1906
Tcp服务端类
Definition: sttnet.h:2944
stt::system::WorkerPool * workpool
Definition: sttnet.h:2948
static std::string createArray(T first, Args...args)
创建多个元素组成的 JSON 数组字符串(递归变参模板)。
Definition: sttnet.h:1703
static std::mutex l1
Definition: sttnet.h:148
bool startListen(const int &port, const int &threads=8)
打开Tcp服务器监听程序
std::string port
客户端端口
Definition: sttnet.h:2889
UDP操作的类 传入套接字进行UDP协议的操作
Definition: sttnet.h:3673
void blockSet(const int &sec=-1)
设置对象中的套接字为阻塞模式
int requestTimes
Definition: sttnet.h:2975
int recvData(std::string &data, const uint64_t &length)
从已连接的套接字中接收一次数据到string字符串容器
bool flag1
Definition: sttnet.h:3677
size_t getSize1()
获取二进制打开的文件在内存中的大小
Definition: sttnet.h:275
static std::enable_if<!std::is_convertible< Fn, std::string >::value, bool >::type startProcess(Fn &&fn, const int &sec=-1, Args &&...args)
通过函数创建子进程(可选择是否定时重启)
Definition: sttnet.h:4176
~File()
析构函数
Definition: sttnet.h:233
static std::string_view & get_location_str(const std::string_view &ori_str, std::string_view &str)
提取 URL 中 path 和 query 部分。
HttpClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
HttpClient类的构造函数
Definition: sttnet.h:2401
static std::string_view & getLocPara(const std::string_view &url, std::string_view &locPara)
提取 URL 的 path 部分(不含 query)。
WebSocketServer服务端操作类
Definition: sttnet.h:3400
解析,响应Http/https请求的操作类 仅传入套接字,然后使用这个类进行Http的操作
Definition: sttnet.h:2738
void setGlobalSolveFunction(std::function< bool(TcpFDHandler &k, TcpInformation &inf)> fc)
设置全局备用函数
Definition: sttnet.h:3087
bool closeFD(const int &fd, const std::string &closeCodeAndMessage)
发送关闭帧关闭对应套接字的 WebSocket 连接(简化方式)
bool chgLineC(const std::string &data, const int &linePos=0)
修改行
bool operator<(const Duration &b)
判断当前时间间隔是否小于另一个时间间隔。
Definition: sttnet.h:576
bool isConnect()
返回连接状态
Definition: sttnet.h:2668
static bool HBCheck(const int &sec)
检查心跳监控系统 如果上一次心跳更新的时间和现在的时候相差大于等于sec秒,则杀死进程 先发送信号15杀死进程 如果8秒后进程还存在 则发送信号9强制杀死
负责加密,解密和哈希
Definition: sttnet.h:1015
负责浮点数精度处理
Definition: sttnet.h:1192
static std::string & sha1(const std::string &ori_str, std::string &result)
计算输入字符串的 SHA-1 哈希值(原始二进制形式)。
void stop()
停止线程池并等待所有线程退出
Definition: sttnet.h:4306
SSL_CTX * ctx
Definition: sttnet.h:2963
bool deleteLogByTime(const std::string &date1="1", const std::string &date2="2")
删除指定时间区间内的日志
std::string & read(std::string &data, const int &linePos, const int &num)
读取行
static void list()
输出心跳监控系统的所有进程的信息
static std::string & jsonToUTF8(const std::string &input, std::string &output)
将 JSON 字符串中的 转换为 UTF-8 字符。
负责二进制数据,字符串之间的转化
Definition: sttnet.h:1070
static unsigned long & bitToNumber(const std::string &input, unsigned long &result)
将字符串转换为二进制,再转换为对应数值。
json数据操作类
Definition: sttnet.h:1596
static std::string & generateMask_4(std::string &mask)
生成一个 32 位(4 字节)的随机掩码。
static Duration & calculateTime(const std::string &time1, const std::string &time2, Duration &result, const std::string &format1=ISO8086A, const std::string &format2=ISO8086A)
计算两个用字符串表示的时间相减的差值
static Json::Value toJsonArray(const std::string &str)
解析 JSON 字符串为 Json::Value。
~HttpServer()
析构函数
Definition: sttnet.h:3336
std::chrono::steady_clock::time_point lastTime
Definition: sttnet.h:1819
int connectionTimes
Definition: sttnet.h:2973
std::unordered_map< std::string, RateState > pathRate
Definition: sttnet.h:1848
进程信息的结构体
Definition: sttnet.h:3996
std::string & readC(std::string &data, const int &linePos, const int &num)
读取行
static std::unordered_map< std::string, FileThreadLock > fl2
Definition: sttnet.h:149
void resetCTX(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
重新或第一次设置TLS加密参数
bool getRequest(const std::string &url, const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=-1)
发送一个GET请求到服务器
static std::string base64_encode(const std::string &input)
对字符串进行 Base64 编码。
bool deleteLineC(const int &linePos=0)
删除行
bool multiUseSet()
设置SO_REUSEADDR模式
#define MAX_PROCESS_NAME
定义MAX_PROCESS_NAME这个宏为100,意思是进程信息中的进程名字长度不超过100个字节
Definition: sttnet.h:3979
static std::string createHeader(const std::string &first, const std::string &second)
创建一个 HTTP 请求头字段字符串。
tcp协议客户端操作类
Definition: sttnet.h:2299
负责Http字符串和URL解析 包括从 URL 或请求报文中提取参数、IP、端口、请求头字段等功能。
Definition: sttnet.h:1247
double convertToHour()
将当前时间间隔转换为以“小时”为单位的浮点数表示。
Definition: sttnet.h:737
void setGetKeyFunction(std::function< int(HttpServerFDHandler &k, HttpRequestInformation &inf)> parseKeyFun)
设置解析出key的回调函数
Definition: sttnet.h:3321
csemp()
构造函数,初始化内部状态。
Definition: sttnet.h:3920
time_t lastTime
进程最后一次心跳时间,是时间戳
Definition: sttnet.h:4005
long long day
天
Definition: sttnet.h:533
static int & getPort(const std::string &url, int &port)
从 URL 中提取端口号。
int sec
Definition: sttnet.h:3679
static void setExceptionHandling()
设置系统的信号
bool chgLine(const std::string &data, const int &linePos=0)
修改行
void setGetKeyFunction(std::function< int(TcpFDHandler &k, TcpInformation &inf)> parseKeyFun)
设置解析出key的回调函数
Definition: sttnet.h:3112
static std::string & strto16(const std::string &ori_str, std::string &result)
将普通字符串转化为对应的十六进制表示字符串(hex string)。
void redrawTLS()
撤销TLS加密,ca证书等
bool close()
如果对象有套接字连接,关闭和释放这个连接和套接字,并且重新新建一个套接字。
void setSecuritySendBackFun(std::function< void(TcpFDHandler &k, TcpInformation &inf)> fc)
设置违反信息安全策略时候的返回函数
Definition: sttnet.h:3077
void setFunction(const std::string &key, std::function< int(TcpFDHandler &k, TcpInformation &inf)> fc)
设置key对应的收到客户端消息后的回调函数
Definition: sttnet.h:3098
std::mutex lock
此文件的锁
Definition: sttnet.h:130
int min
分
Definition: sttnet.h:541
void endListenWithSignal()
发送结束epoll的信号
Definition: sttnet.h:2550
static float & getValidFloat(float &number, const int &bit)
根据数值动态调整小数精度,保留指定数量的有效数字。
bool unlockMemory(const bool &rec=false)
把数据从内存写入磁盘
WorkerPool(size_t n)
构造函数,创建指定数量的工作线程
Definition: sttnet.h:4263
SSL * ssl
Definition: sttnet.h:2144
Duration operator-(const Duration &b)
计算两个时间间隔的差值(当前对象减去参数 b)。
Definition: sttnet.h:684
bool readLineC(std::string &data, const int linePos)
读取单行
static bool & toBool(const std::string_view &ori_str, bool &result)
string转化为bool类型
static char & toBit(const std::string &input, char &result)
将最多 8 位的 "01" 字符串压缩成 1 个字节(char)。
void setConnectStrategy(const RateLimitType &type)
设置“连接速率限流”所使用的策略。
bool createFD(const bool &flag1=false, const int &sec=-1)
销毁原来的套接字,重新创建一个客户端
char argv2[20]
进程第三个参数
Definition: sttnet.h:4021
UdpServer(const int &port, const bool &flag1=false, const int &sec=-1, const bool &flag2=true)
构造函数
static std::string toString(const Json::Value &val)
将 Json::Value 转换为字符串。
bool write(const char *data, const size_t &pos, const size_t &size)
写数据块
bool TLS
Definition: sttnet.h:2964
HttpServer(const unsigned long long &maxFD=1000000, const int &buffer_size=256, const bool &security_open=true, const int &connectionNumLimit=10, const int &connectionSecs=1, const int &connectionTimes=3, const int &requestSecs=1, const int &requestTimes=20, const int &checkFrequency=30, const int &connectionTimeout=30)
构造函数,默认是允许最大1000000个连接,每个连接接收缓冲区最大为256kb,启用安全模块。
Definition: sttnet.h:3242
double convertToSec()
将当前时间间隔转换为以“秒”为单位的浮点数表示。
Definition: sttnet.h:757
static std::string base64_decode(const std::string &input)
对 Base64 编码的字符串进行解码。
std::string getUrl()
如果连接到了服务器 返回url
Definition: sttnet.h:2673
static file::LogFile * logfile
系统的日志系统的读写日志对象的指针
Definition: sttnet.h:3852
TLSState
Definition: sttnet.h:2866
bool connectionDetect(const std::string &ip, const int &fd)
检测并清理僵尸连接(fd 级)。
static std::string createHeader(const std::string &first, const std::string &second, Args...args)
递归构造多个 HTTP 请求头字段。
Definition: sttnet.h:1437
用epoll监听单个句柄
Definition: sttnet.h:2480
TcpServer(const unsigned long long &maxFD=1000000, const int &buffer_size=256, const bool &security_open=true, const int &connectionNumLimit=20, const int &connectionSecs=1, const int &connectionTimes=6, const int &requestSecs=1, const int &requestTimes=40, const int &checkFrequency=60, const int &connectionTimeout=60)
构造函数,默认是允许最大1000000个连接,每个连接接收缓冲区最大为256kb,启用安全模块。
Definition: sttnet.h:3026
static std::string & transfer_websocket_key(std::string &str)
生成 WebSocket 握手响应中的 Sec-WebSocket-Accept 字段值。
int workerEventFD
Definition: sttnet.h:2970
int FDStatus
记录当前处理状态机到第几步了
Definition: sttnet.h:2893
bool getRequestFromFD(const int &fd, SSL *ssl, const std::string &url, const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=2)
从tcp套接字发送一个GET请求到服务器
void setPathStrategy(const RateLimitType &type)
设置“path 级请求限流”所使用的策略。
bool sendMessage(const std::string &message, const std::string &type="0001")
发送 WebSocket 消息
~WorkerPool()
析构函数
Definition: sttnet.h:4277
bool flag3
如果sendData的block=true,如果发送过程中连接断开,这个标志位会置为true
Definition: sttnet.h:2150
void setPathStrategy(const stt::security::RateLimitType &type)
设置“path 级请求限流”所使用的策略。
Definition: sttnet.h:3153
void setSecuritySendBackFun(std::function< void(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> fc)
设置违反信息安全策略时候的返回函数
Definition: sttnet.h:3483
WebSocketServer(const unsigned long long &maxFD=1000000, const int &buffer_size=256, const bool &security_open=true, const int &connectionNumLimit=5, const int &connectionSecs=10, const int &connectionTimes=3, const int &requestSecs=1, const int &requestTimes=10, const int &checkFrequency=60, const int &connectionTimeout=120)
构造函数,默认是允许最大1000000个连接,每个连接接收缓冲区最大为256kb,启用安全模块。
Definition: sttnet.h:3460
bool lockMemory()
把数据从磁盘读入内存
bool sendMessage(const std::string &msg, const std::string &type="0001")
发送一条websocket信息
static std::string & bitOutput(char input, std::string &result)
将单个字符转换为其对应的 8 位二进制字符串。
void setFD(const int &fd, SSL *ssl=nullptr, const bool &flag1=false, const bool &flag2=true)
初始化对象,传入套接字等参数
Definition: sttnet.h:3355
int connectionSecs
Definition: sttnet.h:2972
FileThreadLock(const std::string &loc, const int &threads)
这个结构体的构造函数
Definition: sttnet.h:136
bool operator>=(const Duration &b)
判断当前时间间隔是否大于等于另一个时间间隔。
Definition: sttnet.h:608
bool wait(short value=-1)
P 操作(等待),尝试将信号量值减去 value。
int fd
Definition: sttnet.h:3676
std::string getFileName()
获取打开的文件名字
Definition: sttnet.h:248
~TcpClient()
TcpClient的析构函数,会关闭释放套接字和其连接
Definition: sttnet.h:2358
static std::string_view & getPara(const std::string_view &url, std::string_view ¶)
获取 URL 中的查询参数字符串(包括 ?)。
void setEndFunction(std::function< void(const int &fd)> fcEnd)
设置epoll退出前的回调函数 注册一个回调函数
Definition: sttnet.h:2529
std::string body
服务器返回响应体
Definition: sttnet.h:2474
static std::string & getIP(const std::string &url, std::string &IP)
从 URL 中提取主机 IP 或域名。
负责websocket协议有关字符串的操作
Definition: sttnet.h:1446
Duration getDt()
获取上一次计时的时间
Definition: sttnet.h:927
数据编码解码,掩码处理等
Definition: sttnet.h:1534
int findC(const std::string &targetString, const int linePos=1)
查找行
std::function< void()> Task
Definition: sttnet.h:4227
~UdpServer()
析构函数,对象生命结束会会关闭套接字
Definition: sttnet.h:3829
bool startListen(const int &port, const int &threads=8)
打开Http服务器监听程序
Definition: sttnet.h:3328
bool operator==(const Duration &b)
判断当前时间间隔是否等于另一个时间间隔。
Definition: sttnet.h:592
bool appendLineC(const std::string &data, const int &linePos=0)
插入行
单一限流器的运行状态(可复用于多种限流策略)。
Definition: sttnet.h:1814
bool deleteFromHBS()
把当前进程从心跳系统中删除
bool join(const char *name, const char *argv0="", const char *argv1="", const char *argv2="")
把进程加入到心跳系统
void close(const bool &cle=true)
关闭对象
char * buffer
接收空间指针
Definition: sttnet.h:2917
static unsigned long & bitStrToNumber(const std::string &input, unsigned long &result)
将 "01" 字符串(二进制字符串)转换为无符号整数。
记录文件和线程关系的结构体
Definition: sttnet.h:117
static size_t get_split_str(const std::string_view &ori_str, std::string_view &str, const std::string_view &a, const std::string_view &b, const size_t &pos=0)
从原始字符串中提取两个标记之间的子串。
int status
当前fd的接收状态,用于保存接收处理机逻辑
Definition: sttnet.h:2901
void writeLog(const std::string &data)
写一行日志
bool init(key_t key, unsigned short value=1, short sem_flg=SEM_UNDO)
初始化信号量。
int sec
Definition: sttnet.h:2145
static bool convertFormat(std::string &timeStr, const std::string &oldFormat, const std::string &newFormat=ISO8086A)
转化时间字符串的格式
初始化服务系统的类
Definition: sttnet.h:3846
~UdpClient()
析构函数,对象生命结束会会关闭套接字
Definition: sttnet.h:3804
bool close()
关闭监听和所有已连接的套接字
uint64_t getFileLine()
获取打开的文件的行数
Definition: sttnet.h:257
void setFD(const int &fd, const bool &flag1=false, const int &sec=-1, const bool &flag2=false)
设置fd
~LogFile()
析构函数 写完日志 关闭消费者线程
bool isOpen()
判断对象是否打开了文件
Definition: sttnet.h:238
DefenseDecision allowConnect(const std::string &ip, const int &fd, const int ×, const int &secs)
对新建立的连接进行安全裁决(IP 级)。
int flag1
Definition: sttnet.h:2955
bool isReturn()
获取服务器返回响应状态
Definition: sttnet.h:2466
int requestSecs
Definition: sttnet.h:2974
std::string_view data
保存收到的客户端传来的数据
Definition: sttnet.h:2905
int getMessage(TcpFDInf &Tcpinf, WebSocketFDInformation &Websocketinf, const unsigned long &buffer_size, const int &ii=1)
获取一条websocket消息
std::chrono::duration< uint64_t, std::milli > Milliseconds
Definition: sttnet.h:825
bool flag2
Definition: sttnet.h:3678
单个连接(fd)的安全与限流状态。
Definition: sttnet.h:1844
int fd
Definition: sttnet.h:1846
RateState requestRate
Definition: sttnet.h:1847
void setGetKeyFunction(std::function< int(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> parseKeyFun)
设置解析出key的回调函数
Definition: sttnet.h:3549
static std::string & jsonFormatify(const std::string &a, std::string &b)
将格式化后的 JSON 字符串去除缩进、空格等变成紧凑格式。
std::string header
服务器返回响应头
Definition: sttnet.h:2470
void setRequestStrategy(const stt::security::RateLimitType &type)
设置“IP 级请求限流”所使用的策略。
Definition: sttnet.h:3145
bool openFile(const std::string &fileName, const bool &create=true, const int &multiple=0, const size_t &size=0, const mode_t &mode=0666)
打开文件
static std::string & maskCalculate(std::string &data, const std::string &mask)
使用给定的 4 字节掩码对字符串进行异或操作(XOR Masking)。
TLSState tls_state
tls状态
Definition: sttnet.h:2913
Websocket客户端操作的类 -如果需要重新设置TLS/Https加密的证书,目前需要销毁对象后重新构造 底层TCP默认是阻塞的
Definition: sttnet.h:2569
bool isBinary()
判断对象是否以二进制模式打开文件
Definition: sttnet.h:243
void blockSet(const int &sec=-1)
设置为阻塞模式
void setFD(const int &fd, SSL *ssl, const bool &flag1=false, const bool &flag2=false, const int &sec=-1)
传入套接字初始化对象
std::string getServerIP()
返回已连接的服务端的ip return 已连接的服务端的ip
Definition: sttnet.h:2364
static std::string & getPreciesDouble(const double &number, const int &bit, std::string &str)
将双精度浮点数格式化为指定小数位数的字符串表示。
void submit(Task task)
向线程池提交一个任务
Definition: sttnet.h:4288
封装 System V 信号量的同步工具类。
Definition: sttnet.h:3895
bool openFile(const std::string &fileName, const std::string &timeFormat=ISO8086A, const std::string &contentFormat=" ")
打开一个日志文件
RateLimitType
限流算法类型(策略)。
Definition: sttnet.h:1788
负责大小端字节序转换
Definition: sttnet.h:1172
static bool encryptSymmetric(const unsigned char *before, const size_t &length, const unsigned char *passwd, const unsigned char *iv, unsigned char *after)
AES-256-CBC模式对称加密函数
~WebSocketServer()
WebSocketServer的析构函数
Definition: sttnet.h:3666
void setRequestStrategy(const RateLimitType &type)
设置“IP 级请求限流”所使用的策略。
std::mutex che
Definition: sttnet.h:151
bool startListen(const int &port, const int &threads=8)
打开Websocket服务器监听程序
Definition: sttnet.h:3634
std::string getFileName()
获取对象打开的文件名
Definition: sttnet.h:974
udp服务端的操作类
Definition: sttnet.h:3809
double convertToDay()
将当前时间间隔转换为以“天”为单位的浮点数表示。
Definition: sttnet.h:727
bool isListen()
返回epoll监听状态
Definition: sttnet.h:2511
Http/Https客户端操作类
Definition: sttnet.h:2384
char argv0[20]
进程第一个参数
Definition: sttnet.h:4013
int fd
套接字fd
Definition: sttnet.h:2881
bool postRequest(const std::string &url, const std::string &body="", const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=-1)
发送一个POST请求到服务器
bool security_open
Definition: sttnet.h:2967
bool setTLS(const char *cert, const char *key, const char *passwd, const char *ca)
启用 TLS 加密并配置服务器端证书与密钥
进程管理的静态工具类
Definition: sttnet.h:4079
static std::string_view & get_value_str(const std::string_view &ori_str, std::string_view &str, const std::string &name)
从 URL 查询参数中提取指定 key 的值。
bool sendBack(const std::string &data, const std::string &header="", const std::string &code="200 OK", const std::string &header1="")
发送Http/Https响应
static std::string_view & get_value_header(const std::string_view &ori_str, std::string_view &str, const std::string &name)
从 HTTP 请求头中提取指定字段的值。
static int getValue(const std::string &oriStr, std::string &result, const std::string &type="value", const std::string &name="a", const int &num=0)
提取 JSON 字符串中指定字段的值或嵌套结构。
int hour
时
Definition: sttnet.h:537
long long convertToMsec()
将当前时间间隔转换为总毫秒数。
Definition: sttnet.h:767
void setFunction(std::function< bool(const int &fd)> fc)
设置epoll触发后的处理函数 注册一个回调函数
Definition: sttnet.h:2521
udp客户端的操作类
Definition: sttnet.h:3786
static int & toInt(const std::string_view &ori_str, int &result, const int &i=-1)
string转化为int类型
static std::string createJson(T1 first, T2 second)
创建仅包含一个键值对的 JSON 字符串。
Definition: sttnet.h:1635
void setGlobalSolveFunction(std::function< bool(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> fc)
设置全局备用函数
Definition: sttnet.h:3493
保存底层基础Tcp通道信息的结构体
Definition: sttnet.h:2876
static std::string jsonAdd(const std::string &a, const std::string &b)
将两个 JSON 字符串拼接为一个有效的 JSON(适用于对象或数组拼接)。
static bool compareTime(const std::string &time1, const std::string &time2, const std::string &format1=ISO8086A, const std::string &format2=ISO8086A)
比较两个时间字符串表示的时间的大小
void setFunction(const std::string &key, std::function< int(HttpServerFDHandler &k, HttpRequestInformation &inf)> fc)
设置key对应的收到客户端消息后的回调函数
Definition: sttnet.h:3301
security::ConnectionLimiter connectionLimiter
Definition: sttnet.h:2951
bool closeFile(const bool &del=false)
关闭已打开了的文件
bool appendLine(const std::string &data, const int &linePos=0)
插入行
std::string ip
客户端ip
Definition: sttnet.h:2885
bool isOpen()
获取对象是否打开日志文件的状态
Definition: sttnet.h:969
DefenseDecision
安全裁决结果(由 ConnectionLimiter 返回)。
Definition: sttnet.h:1902
void setHBTimeOutTime(const int &secb)
设置发送心跳后的等待时间
Definition: sttnet.h:3561
void putTask(const std::function< int(WebSocketServerFDHandler &k, WebSocketFDInformation &inf)> &fun, WebSocketServerFDHandler &k, WebSocketFDInformation &inf)
把一个任务放入工作线程池由工作线程完成
ConnectionLimiter(const int &maxConn=20, const int &idleTimeout=60)
构造函数。
Definition: sttnet.h:2005
日志文件操作类
Definition: sttnet.h:941
读写磁盘文件的类
Definition: sttnet.h:145
void setJudgeFunction(std::function< bool(WebSocketFDInformation &k)> fcc)
设置websocket握手阶段的检查函数,只有检查通过才执行后续握手 注册一个回调函数
Definition: sttnet.h:3512
int msec
毫秒
Definition: sttnet.h:549
std::queue< WorkerMessage > finishQueue
Definition: sttnet.h:2947
随机数,字符串生成相关
Definition: sttnet.h:1136
int find(const std::string &targetString, const int linePos=1)
查找行
static char & bitOutput_bit(char input, const int pos, char &result)
获取字符 input 的从左向右第 pos 位(二进制)并返回 '1' 或 '0'。
bool endListen()
结束epoll监听 会阻塞直到epoll退出完成
void unblockSet()
设置对象中的套接字为非阻塞模式
SSL * ssl
如果加密了,存放加密句柄
Definition: sttnet.h:2909
bool isListen()
返回对象的监听状态
Definition: sttnet.h:3177
bool multiUseSet()
设置对象中的套接字为SO_REUSEADDR模式
char name[MAX_PROCESS_NAME]
进程名字
Definition: sttnet.h:4009
Definition: sttnet.h:1905
static bool startProcess(const std::string &name, const int &sec=-1, Args...args)
启动一个新进程(可选择是否定时重启)
Definition: sttnet.h:4105
SSL * getSSL(const int &fd)
查询和服务端的连接,传入套接字,返回加密的SSL句柄
void unblockSet()
设置为非阻塞模式
static std::string & getTime(std::string &timeStr, const std::string &format=ISO8086A)
获取当前时间
#define ISO8086A
定义ISO8086A这个宏为"yyyy-mm-ddThh:mi:ss"
Definition: sttnet.h:830
void setTimeOutTime(const int &seca)
设置心跳时间
Definition: sttnet.h:3555
void setFunction(std::function< bool(const std::string &message, WebSocketClient &k)> fc)
设置收到服务端消息后的回调函数 注册一个回调函数
Definition: sttnet.h:2604
std::chrono::steady_clock::time_point lastRefill
Definition: sttnet.h:1826
固定大小的工作线程池
Definition: sttnet.h:4253