From 18d4c312e5f5d155f29f0cb3e0891443c6de9537 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Thu, 25 Jul 2024 02:57:29 +0800 Subject: [PATCH] [wip] port to C17/C++20 --- inc/hgl/network/HTTPInputStream.h | 10 +++---- inc/hgl/network/IP.h | 18 ++++++------- inc/hgl/network/SocketManage.h | 1 + inc/hgl/network/WebSocket.h | 2 +- inc/hgl/network/WebSocketAccept.h | 2 +- src/AcceptServer.cpp | 2 +- src/IPAddress.cpp | 2 +- src/MultiThreadAccept.cpp | 2 +- src/Socket.cpp | 2 +- src/SocketManage.cpp | 2 +- src/TCPClient.cpp | 2 +- src/WebSocket.cpp | 16 +++++------ src/WebSocketAccept.cpp | 12 ++++----- src/WebapiUserAgent.cpp | 44 +++++++++++++++---------------- 14 files changed, 59 insertions(+), 58 deletions(-) diff --git a/inc/hgl/network/HTTPInputStream.h b/inc/hgl/network/HTTPInputStream.h index b3497bb..f6db2be 100644 --- a/inc/hgl/network/HTTPInputStream.h +++ b/inc/hgl/network/HTTPInputStream.h @@ -2,7 +2,7 @@ #define HGL_NETWORK_HTTP_INPUT_STREAM_INCLUDE #include -#include +#include #include namespace hgl { @@ -39,7 +39,7 @@ namespace hgl uint response_code; //HTTP响应代码 UTF8String response_info; //HTTP响应信息 - UTF8PList response_list; //响应信息 + UTF8PAttribSet response_list; //响应信息 public: @@ -49,9 +49,9 @@ namespace hgl bool Open(IPAddress *,const UTF8String &,const UTF8String &); ///<打开一个网址 void Close() override; ///< - uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码 - const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息 - const UTF8PList & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表 + uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码 + const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息 + const UTF8PAttribSet & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表 int64 Read(void *,int64) override; ///<读取数据 int64 Peek(void *,int64) override{return 0;} ///<预览数据 diff --git a/inc/hgl/network/IP.h b/inc/hgl/network/IP.h index 6d803f6..431e3c5 100644 --- a/inc/hgl/network/IP.h +++ b/inc/hgl/network/IP.h @@ -234,15 +234,15 @@ namespace hgl /** * 转换当前地址到一个可视字符串,字符串所需长度请使用GetIPStringMaxSize()获取 */ - virtual void ToString(char *,int)const=0; + virtual void ToString(u8char *,int)const=0; /** * 创建一个可视字符串地址,需自行delete[] */ - virtual char *CreateString()const + virtual u8char *CreateString()const { const int max_size=GetIPStringMaxSize(); - char *ipstr=new char[max_size+1]; + u8char *ipstr=new u8char[max_size+1]; ToString(ipstr,max_size); @@ -324,9 +324,9 @@ namespace hgl const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;} const ushort GetPort()const override; - static void ToString(char *str,const int,const in_addr *); - static void ToString(char *str,const int,const sockaddr_in *); - void ToString(char *str,const int)const override; + static void ToString(u8char *str,const int,const in_addr *); + static void ToString(u8char *str,const int,const sockaddr_in *); + void ToString(u8char *str,const int)const override; static int GetDomainIPList(List &addr_list,const char *domain,int _socktype,int _protocol); ///<取得当指定域名的IPv4地址列表 static int GetLocalIPList(List &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表 @@ -392,9 +392,9 @@ namespace hgl const ushort GetPort()const override; - static void ToString(char *str,const int,const in6_addr *); - static void ToString(char *str,const int,const sockaddr_in6 *); - void ToString(char *str,const int)const override; + static void ToString(u8char *str,const int,const in6_addr *); + static void ToString(u8char *str,const int,const sockaddr_in6 *); + void ToString(u8char *str,const int)const override; static int GetDomainIPList(List &addr_list,const char *domain,int _socktype,int _protocol); ///<取得指定域名的IPv6地址列表 static int GetLocalIPList(List &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表 diff --git a/inc/hgl/network/SocketManage.h b/inc/hgl/network/SocketManage.h index 5d4ff0c..7586105 100644 --- a/inc/hgl/network/SocketManage.h +++ b/inc/hgl/network/SocketManage.h @@ -2,6 +2,7 @@ #define HGL_NETWORK_SOCKET_MANAGE_INCLUDE #include +#include #include #include namespace hgl diff --git a/inc/hgl/network/WebSocket.h b/inc/hgl/network/WebSocket.h index e32d29d..586f878 100644 --- a/inc/hgl/network/WebSocket.h +++ b/inc/hgl/network/WebSocket.h @@ -6,7 +6,7 @@ namespace hgl { namespace network { - bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const char *data,const uint size); + bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const u8char *data,const uint size); void MakeWebSocketAccept(UTF8String &result,const UTF8String &sec_websocket_key,const UTF8String &sec_websocket_protocol); }//namespace network }//namespace hgl diff --git a/inc/hgl/network/WebSocketAccept.h b/inc/hgl/network/WebSocketAccept.h index 74f3336..04e4ef7 100644 --- a/inc/hgl/network/WebSocketAccept.h +++ b/inc/hgl/network/WebSocketAccept.h @@ -13,7 +13,7 @@ namespace hgl class WebSocketAccept:public TCPAccept { #ifdef _DEBUG - DataArray data_out_str; + DataArray data_out_str; #endif//_DEBUG protected: diff --git a/src/AcceptServer.cpp b/src/AcceptServer.cpp index 479fad8..911a27f 100644 --- a/src/AcceptServer.cpp +++ b/src/AcceptServer.cpp @@ -67,7 +67,7 @@ namespace hgl addr->ToString(ipstr,IP_STR_MAX_SIZE); - LOG_INFO(U8_TEXT("AcceptServer Accept IP:")+UTF8String(ipstr)+U8_TEXT(" ,sock:")+UTF8String::numberOf(new_sock)); + LOG_INFO(U8_TEXT("AcceptServer Accept IP:")+UTF8String((u8char *)ipstr)+U8_TEXT(" ,sock:")+UTF8String::numberOf(new_sock)); return(new_sock); } diff --git a/src/IPAddress.cpp b/src/IPAddress.cpp index 9387de6..86baae0 100644 --- a/src/IPAddress.cpp +++ b/src/IPAddress.cpp @@ -94,7 +94,7 @@ namespace hgl if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV)) return(false); - name=hostname; + name=(u8char *)hostname; return(true); } diff --git a/src/MultiThreadAccept.cpp b/src/MultiThreadAccept.cpp index 7b371b9..a2ec463 100644 --- a/src/MultiThreadAccept.cpp +++ b/src/MultiThreadAccept.cpp @@ -12,7 +12,7 @@ namespace hgl { int count=ip_stack.GetCount(); - ip_stack.SetMaxCount(count+1024); + ip_stack.PreAlloc(count+1024); server->CreateIPAddress(ip_stack.GetData()+count,1024); diff --git a/src/Socket.cpp b/src/Socket.cpp index 1070966..cdb729e 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -66,7 +66,7 @@ namespace hgl RETURN_ERROR(-3); } - LOG_INFO(U8_TEXT("Create ")+UTF8String(addr->GetProtocolName())+U8_TEXT(" Socket OK: ")+UTF8String::numberOf(s)); + LOG_INFO(U8_TEXT("Create ")+UTF8String((u8char *)(addr->GetProtocolName()))+U8_TEXT(" Socket OK: ")+UTF8String::numberOf(s)); return s; } diff --git a/src/SocketManage.cpp b/src/SocketManage.cpp index a790286..a90fdeb 100644 --- a/src/SocketManage.cpp +++ b/src/SocketManage.cpp @@ -190,7 +190,7 @@ namespace hgl int SocketManage::Update(const double &time_out) { //将error_set放在这里,是为了保留它给外面的调用者使用 - error_sets.ClearData(); + error_sets.Clear(); const int count=manage->Update(time_out,sock_recv_list,sock_send_list,sock_error_list); diff --git a/src/TCPClient.cpp b/src/TCPClient.cpp index fb619d6..6a5bfbd 100644 --- a/src/TCPClient.cpp +++ b/src/TCPClient.cpp @@ -81,7 +81,7 @@ namespace hgl SAFE_CLEAR(ipstr); ipstr=ThisAddress->CreateString(); - LOG_HINT(U8_TEXT("Don't Connect to TCPServer ")+UTF8String(ipstr)); + LOG_HINT(U8_TEXT("Don't Connect to TCPServer ")+UTF8String((u8char *)ipstr)); this->CloseSocket(); return(false); } diff --git a/src/WebSocket.cpp b/src/WebSocket.cpp index 2e325f1..acca833 100644 --- a/src/WebSocket.cpp +++ b/src/WebSocket.cpp @@ -13,23 +13,23 @@ namespace hgl * @param size 信息头长度 * @return 是否解晰成功 */ - bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const char *data,const uint size) + bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const u8char *data,const uint size) { - constexpr char SEC_WEBSOCKET_KEY[]="Sec-WebSocket-Key: "; + constexpr u8char SEC_WEBSOCKET_KEY[]=U8_TEXT("Sec-WebSocket-Key: "); constexpr uint SEC_WEBSOCKET_KEY_SIZE=sizeof(SEC_WEBSOCKET_KEY)-1; //sizeof的带\0所以要-1 - constexpr char SEC_WEBSOCKET_PROTOCOL[]="Sec-WebSocket-Protocol: "; + constexpr u8char SEC_WEBSOCKET_PROTOCOL[]=U8_TEXT("Sec-WebSocket-Protocol: "); constexpr uint SEC_WEBSOCKET_PROTOCOL_SIZE=sizeof(SEC_WEBSOCKET_PROTOCOL)-1; - constexpr char SEC_WEBSOCKET_VERSION[]="Sec-WebSocket-Version: "; + constexpr u8char SEC_WEBSOCKET_VERSION[]=U8_TEXT("Sec-WebSocket-Version: "); constexpr uint SEC_WEBSOCKET_VERSION_SIZE=sizeof(SEC_WEBSOCKET_VERSION)-1; if(!data||size<40)return(false); - const char *end; + const u8char *end; { - const char *key=hgl::strstr(data,size,SEC_WEBSOCKET_KEY,SEC_WEBSOCKET_KEY_SIZE); + const u8char *key=hgl::strstr(data,size,SEC_WEBSOCKET_KEY,SEC_WEBSOCKET_KEY_SIZE); if(!key)return(false); @@ -42,7 +42,7 @@ namespace hgl } { - const char *protocol=hgl::strstr(data,size,SEC_WEBSOCKET_PROTOCOL,SEC_WEBSOCKET_PROTOCOL_SIZE); + const u8char *protocol=hgl::strstr(data,size,SEC_WEBSOCKET_PROTOCOL,SEC_WEBSOCKET_PROTOCOL_SIZE); if(protocol) //也有可能是不存在的 { @@ -55,7 +55,7 @@ namespace hgl } { - const char *version=hgl::strstr(data,size,SEC_WEBSOCKET_VERSION,SEC_WEBSOCKET_VERSION_SIZE); + const u8char *version=hgl::strstr(data,size,SEC_WEBSOCKET_VERSION,SEC_WEBSOCKET_VERSION_SIZE); if(version) { diff --git a/src/WebSocketAccept.cpp b/src/WebSocketAccept.cpp index 5c60e3e..8cd4309 100644 --- a/src/WebSocketAccept.cpp +++ b/src/WebSocketAccept.cpp @@ -20,16 +20,16 @@ namespace hgl void WebSocketAccept::WebSocketHandshake() { - constexpr char HTTP_HEADER_END_STR[4]={'\r','\n','\r','\n'}; //别用"\r\n\r\n",不然sizeof会得出来5 + constexpr u8char HTTP_HEADER_END_STR[4]={'\r','\n','\r','\n'}; //别用"\r\n\r\n",不然sizeof会得出来5 constexpr int HTTP_HEADER_END_SIZE=sizeof(HTTP_HEADER_END_STR); - DataArray ws_header(1024); + DataArray ws_header(1024); int pos=0; int total=0; int size=0; - const char *end; + const u8char *end; while(true) { @@ -45,7 +45,7 @@ namespace hgl recv_total+=size; pos+=size; - end=hgl::strrstr(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE); + end=hgl::strrstr(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE); if(!end) continue; @@ -233,7 +233,7 @@ namespace hgl #ifdef _DEBUG data_out_str.SetCount(msg_length*3); - DataToLowerHexStr(data_out_str.data(),(uint8 *)pack,msg_length,','); + DataToLowerHexStr(data_out_str.data(),(uint8 *)pack,msg_length,u8char(',')); LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Recv binary [")+UTF8String::numberOf(msg_length)+U8_TEXT("]: ")+UTF8String(data_out_str.data())); #endif//_DEBUG @@ -336,7 +336,7 @@ namespace hgl #ifdef _DEBUG data_out_str.SetCount(size*3); - DataToLowerHexStr(data_out_str.data(),(uint8 *)data,size,','); + DataToLowerHexStr(data_out_str.data(),(uint8 *)data,size,u8char(',')); LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Send binary [")+UTF8String::numberOf(size)+U8_TEXT("]: ")+UTF8String(data_out_str.data())); #endif//_DEBUG diff --git a/src/WebapiUserAgent.cpp b/src/WebapiUserAgent.cpp index 27e7fc8..68e03aa 100644 --- a/src/WebapiUserAgent.cpp +++ b/src/WebapiUserAgent.cpp @@ -6,7 +6,7 @@ namespace hgl { UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg) { - UTF8String agent="Mozilla/5.0 "; + UTF8String agent=U8_TEXT("Mozilla/5.0 "); if(cfg.os>=OS_WindowsX86 &&cfg.os<=OS_LinuxX86_64) @@ -14,52 +14,52 @@ namespace hgl if(cfg.os>=OS_WindowsX86 &&cfg.os<=OS_WindowsWOW64) { - agent+="(Windows NT "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; "; + agent+=U8_TEXT("(Windows NT ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; "); - if(cfg.os==OS_WindowsAMD64)agent+="Win64; x64; ";else - if(cfg.os==OS_WindowsWOW64)agent+="WOW64; "; + if(cfg.os==OS_WindowsAMD64)agent+=U8_TEXT("Win64; x64; ");else + if(cfg.os==OS_WindowsWOW64)agent+=U8_TEXT("WOW64; "); } else if(cfg.os==OS_macOS) - agent+="(Macintosh; Intel Mac OS X "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; "; + agent+=U8_TEXT("(Macintosh; Intel Mac OS X ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; "); else if(cfg.os==OS_Linuxi686) - agent+="(X11; Linux i686; "; + agent+=U8_TEXT("(X11; Linux i686; "); else if(cfg.os==OS_LinuxX86_64) - agent+="(X11; Linux x86_64; "; + agent+=U8_TEXT("(X11; Linux x86_64; "); - agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/"+UTF8String::numberOf(cfg.gecko_version)+" Firefox/" - +UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor); + agent+=U8_TEXT("rv:")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(") Gecko/")+UTF8String::numberOf(cfg.gecko_version)+U8_TEXT(" Firefox/") + +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor); } else if(cfg.os>=OS_iPod &&cfg.os<=OS_iPad) { - if(cfg.os==OS_iPod) agent+="(iPod touch; ";else - if(cfg.os==OS_iPad) agent+="(iPad; ";else - agent+="(iPhone; "; + if(cfg.os==OS_iPod) agent+=U8_TEXT("(iPod touch; ");else + if(cfg.os==OS_iPad) agent+=U8_TEXT("(iPad; ");else + agent+=U8_TEXT("(iPhone; "); - agent+= "CPU iPhone OS "+UTF8String::numberOf(cfg.os_ver.major)+"_"+UTF8String::numberOf(cfg.os_ver.minor)+" like Mac OS X) "+ - "AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4"; + agent+= U8_TEXT("CPU iPhone OS ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT("_")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT(" like Mac OS X) ")+ + U8_TEXT("AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4"); } else if(cfg.os>=OS_AndroidPhone &&cfg.os<=OS_AndroidTV) { - agent+="(Android "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; "; + agent+=U8_TEXT("(Android ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; "); - if(cfg.os==OS_AndroidPhone )agent+="Mobile; "; - if(cfg.os==OS_AndroidTablet )agent+="Tablet; "; - if(cfg.os==OS_AndroidTV )agent+="TV; "; + if(cfg.os==OS_AndroidPhone )agent+=U8_TEXT("Mobile; "); + if(cfg.os==OS_AndroidTablet )agent+=U8_TEXT("Tablet; "); + if(cfg.os==OS_AndroidTV )agent+=U8_TEXT("TV; "); - agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/" - +UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+" Firefox/" - +UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor); + agent+=U8_TEXT("rv:")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(") Gecko/") + +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(" Firefox/") + +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor); } else { - agent+="Firefox/"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor); + agent+=U8_TEXT("Firefox/")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor); } return agent;