[wip] port to C17/C++20

This commit is contained in:
hyzboy 2024-07-25 02:57:29 +08:00
parent a56d0f3407
commit 18d4c312e5
14 changed files with 59 additions and 58 deletions

View File

@ -2,7 +2,7 @@
#define HGL_NETWORK_HTTP_INPUT_STREAM_INCLUDE #define HGL_NETWORK_HTTP_INPUT_STREAM_INCLUDE
#include<hgl/io/InputStream.h> #include<hgl/io/InputStream.h>
#include<hgl/util/plist/PList.h> #include<hgl/util/plist/PAttrib.h>
#include<hgl/network/IP.h> #include<hgl/network/IP.h>
namespace hgl namespace hgl
{ {
@ -39,7 +39,7 @@ namespace hgl
uint response_code; //HTTP响应代码 uint response_code; //HTTP响应代码
UTF8String response_info; //HTTP响应信息 UTF8String response_info; //HTTP响应信息
UTF8PList response_list; //响应信息 UTF8PAttribSet response_list; //响应信息
public: public:
@ -49,9 +49,9 @@ namespace hgl
bool Open(IPAddress *,const UTF8String &,const UTF8String &); ///<打开一个网址 bool Open(IPAddress *,const UTF8String &,const UTF8String &); ///<打开一个网址
void Close() override; ///< void Close() override; ///<
uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码 uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码
const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息 const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息
const UTF8PList & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表 const UTF8PAttribSet & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表
int64 Read(void *,int64) override; ///<读取数据 int64 Read(void *,int64) override; ///<读取数据
int64 Peek(void *,int64) override{return 0;} ///<预览数据 int64 Peek(void *,int64) override{return 0;} ///<预览数据

View File

@ -234,15 +234,15 @@ namespace hgl
/** /**
* ,使GetIPStringMaxSize() * ,使GetIPStringMaxSize()
*/ */
virtual void ToString(char *,int)const=0; virtual void ToString(u8char *,int)const=0;
/** /**
* delete[] * delete[]
*/ */
virtual char *CreateString()const virtual u8char *CreateString()const
{ {
const int max_size=GetIPStringMaxSize(); const int max_size=GetIPStringMaxSize();
char *ipstr=new char[max_size+1]; u8char *ipstr=new u8char[max_size+1];
ToString(ipstr,max_size); ToString(ipstr,max_size);
@ -324,9 +324,9 @@ namespace hgl
const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;} const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;}
const ushort GetPort()const override; const ushort GetPort()const override;
static void ToString(char *str,const int,const in_addr *); static void ToString(u8char *str,const int,const in_addr *);
static void ToString(char *str,const int,const sockaddr_in *); static void ToString(u8char *str,const int,const sockaddr_in *);
void ToString(char *str,const int)const override; void ToString(u8char *str,const int)const override;
static int GetDomainIPList(List<in_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得当指定域名的IPv4地址列表 static int GetDomainIPList(List<in_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得当指定域名的IPv4地址列表
static int GetLocalIPList(List<in_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表 static int GetLocalIPList(List<in_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表
@ -392,9 +392,9 @@ namespace hgl
const ushort GetPort()const override; const ushort GetPort()const override;
static void ToString(char *str,const int,const in6_addr *); static void ToString(u8char *str,const int,const in6_addr *);
static void ToString(char *str,const int,const sockaddr_in6 *); static void ToString(u8char *str,const int,const sockaddr_in6 *);
void ToString(char *str,const int)const override; void ToString(u8char *str,const int)const override;
static int GetDomainIPList(List<in6_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得指定域名的IPv6地址列表 static int GetDomainIPList(List<in6_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得指定域名的IPv6地址列表
static int GetLocalIPList(List<in6_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表 static int GetLocalIPList(List<in6_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表

View File

@ -2,6 +2,7 @@
#define HGL_NETWORK_SOCKET_MANAGE_INCLUDE #define HGL_NETWORK_SOCKET_MANAGE_INCLUDE
#include<hgl/type/Map.h> #include<hgl/type/Map.h>
#include<hgl/type/SortedSets.h>
#include<hgl/network/SocketEvent.h> #include<hgl/network/SocketEvent.h>
#include<hgl/network/TCPAccept.h> #include<hgl/network/TCPAccept.h>
namespace hgl namespace hgl

View File

@ -6,7 +6,7 @@ namespace hgl
{ {
namespace network 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); void MakeWebSocketAccept(UTF8String &result,const UTF8String &sec_websocket_key,const UTF8String &sec_websocket_protocol);
}//namespace network }//namespace network
}//namespace hgl }//namespace hgl

View File

@ -13,7 +13,7 @@ namespace hgl
class WebSocketAccept:public TCPAccept class WebSocketAccept:public TCPAccept
{ {
#ifdef _DEBUG #ifdef _DEBUG
DataArray<char> data_out_str; DataArray<u8char> data_out_str;
#endif//_DEBUG #endif//_DEBUG
protected: protected:

View File

@ -67,7 +67,7 @@ namespace hgl
addr->ToString(ipstr,IP_STR_MAX_SIZE); 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); return(new_sock);
} }

View File

@ -94,7 +94,7 @@ namespace hgl
if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV)) if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV))
return(false); return(false);
name=hostname; name=(u8char *)hostname;
return(true); return(true);
} }

View File

@ -12,7 +12,7 @@ namespace hgl
{ {
int count=ip_stack.GetCount(); int count=ip_stack.GetCount();
ip_stack.SetMaxCount(count+1024); ip_stack.PreAlloc(count+1024);
server->CreateIPAddress(ip_stack.GetData()+count,1024); server->CreateIPAddress(ip_stack.GetData()+count,1024);

View File

@ -66,7 +66,7 @@ namespace hgl
RETURN_ERROR(-3); 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; return s;
} }

View File

@ -190,7 +190,7 @@ namespace hgl
int SocketManage::Update(const double &time_out) int SocketManage::Update(const double &time_out)
{ {
//将error_set放在这里是为了保留它给外面的调用者使用 //将error_set放在这里是为了保留它给外面的调用者使用
error_sets.ClearData(); error_sets.Clear();
const int count=manage->Update(time_out,sock_recv_list,sock_send_list,sock_error_list); const int count=manage->Update(time_out,sock_recv_list,sock_send_list,sock_error_list);

View File

@ -81,7 +81,7 @@ namespace hgl
SAFE_CLEAR(ipstr); SAFE_CLEAR(ipstr);
ipstr=ThisAddress->CreateString(); 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(); this->CloseSocket();
return(false); return(false);
} }

View File

@ -13,23 +13,23 @@ namespace hgl
* @param size * @param size
* @return * @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 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 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; constexpr uint SEC_WEBSOCKET_VERSION_SIZE=sizeof(SEC_WEBSOCKET_VERSION)-1;
if(!data||size<40)return(false); 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); 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) //也有可能是不存在的 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) if(version)
{ {

View File

@ -20,16 +20,16 @@ namespace hgl
void WebSocketAccept::WebSocketHandshake() 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); constexpr int HTTP_HEADER_END_SIZE=sizeof(HTTP_HEADER_END_STR);
DataArray<char> ws_header(1024); DataArray<u8char> ws_header(1024);
int pos=0; int pos=0;
int total=0; int total=0;
int size=0; int size=0;
const char *end; const u8char *end;
while(true) while(true)
{ {
@ -45,7 +45,7 @@ namespace hgl
recv_total+=size; recv_total+=size;
pos+=size; pos+=size;
end=hgl::strrstr<const char>(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE); end=hgl::strrstr<const u8char>(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE);
if(!end) if(!end)
continue; continue;
@ -233,7 +233,7 @@ namespace hgl
#ifdef _DEBUG #ifdef _DEBUG
data_out_str.SetCount(msg_length*3); 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())); 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 #endif//_DEBUG
@ -336,7 +336,7 @@ namespace hgl
#ifdef _DEBUG #ifdef _DEBUG
data_out_str.SetCount(size*3); 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())); LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Send binary [")+UTF8String::numberOf(size)+U8_TEXT("]: ")+UTF8String(data_out_str.data()));
#endif//_DEBUG #endif//_DEBUG

View File

@ -6,7 +6,7 @@ namespace hgl
{ {
UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg) UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg)
{ {
UTF8String agent="Mozilla/5.0 "; UTF8String agent=U8_TEXT("Mozilla/5.0 ");
if(cfg.os>=OS_WindowsX86 if(cfg.os>=OS_WindowsX86
&&cfg.os<=OS_LinuxX86_64) &&cfg.os<=OS_LinuxX86_64)
@ -14,52 +14,52 @@ namespace hgl
if(cfg.os>=OS_WindowsX86 if(cfg.os>=OS_WindowsX86
&&cfg.os<=OS_WindowsWOW64) &&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_WindowsAMD64)agent+=U8_TEXT("Win64; x64; ");else
if(cfg.os==OS_WindowsWOW64)agent+="WOW64; "; if(cfg.os==OS_WindowsWOW64)agent+=U8_TEXT("WOW64; ");
} }
else else
if(cfg.os==OS_macOS) 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 else
if(cfg.os==OS_Linuxi686) if(cfg.os==OS_Linuxi686)
agent+="(X11; Linux i686; "; agent+=U8_TEXT("(X11; Linux i686; ");
else else
if(cfg.os==OS_LinuxX86_64) 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/" 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)+"."+UTF8String::numberOf(cfg.ff_ver.minor); +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
} }
else else
if(cfg.os>=OS_iPod if(cfg.os>=OS_iPod
&&cfg.os<=OS_iPad) &&cfg.os<=OS_iPad)
{ {
if(cfg.os==OS_iPod) agent+="(iPod touch; ";else if(cfg.os==OS_iPod) agent+=U8_TEXT("(iPod touch; ");else
if(cfg.os==OS_iPad) agent+="(iPad; ";else if(cfg.os==OS_iPad) agent+=U8_TEXT("(iPad; ");else
agent+="(iPhone; "; agent+=U8_TEXT("(iPhone; ");
agent+= "CPU iPhone OS "+UTF8String::numberOf(cfg.os_ver.major)+"_"+UTF8String::numberOf(cfg.os_ver.minor)+" like Mac OS X) "+ 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) ")+
"AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4"; U8_TEXT("AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4");
} }
else else
if(cfg.os>=OS_AndroidPhone if(cfg.os>=OS_AndroidPhone
&&cfg.os<=OS_AndroidTV) &&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_AndroidPhone )agent+=U8_TEXT("Mobile; ");
if(cfg.os==OS_AndroidTablet )agent+="Tablet; "; if(cfg.os==OS_AndroidTablet )agent+=U8_TEXT("Tablet; ");
if(cfg.os==OS_AndroidTV )agent+="TV; "; if(cfg.os==OS_AndroidTV )agent+=U8_TEXT("TV; ");
agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/" 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)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+" Firefox/" +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(" Firefox/")
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor); +UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
} }
else 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; return agent;