knIPV4Endpoint_fromStr
This commit is contained in:
@@ -7,7 +7,7 @@ kt_define(knIPV4Address, NULL, __knIPV4Address_toString);
|
||||
kt_define(knIPV4Endpoint, NULL, __knIPV4Endpoint_toString);
|
||||
|
||||
|
||||
Maybe knIPV4Address_fromStr(char* addrStr){
|
||||
Maybe knIPV4Address_fromStr(char* addrStr, knIPV4Address* addrVal){
|
||||
char* addrStr_src=addrStr;
|
||||
char* errmsg_extra="wrong char";
|
||||
u8 c;
|
||||
@@ -48,8 +48,9 @@ Maybe knIPV4Address_fromStr(char* addrStr){
|
||||
break;
|
||||
}
|
||||
}
|
||||
//TODO UniStack for generic structs
|
||||
return SUCCESS(UniUInt64(addr.UintBigEndian));
|
||||
|
||||
*addrVal=addr;
|
||||
return MaybeNull;
|
||||
}
|
||||
|
||||
char* knIPV4Address_toString(knIPV4Address* address) {
|
||||
@@ -65,6 +66,23 @@ char* knIPV4Address_toString(knIPV4Address* address) {
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Maybe knIPV4Endpoint_fromStr(char* endStr, knIPV4Endpoint* endVal){
|
||||
i32 sep_i = cptr_seekChar(endStr, ':', 0, 48);
|
||||
if(sep_i < 7)
|
||||
safethrow(cptr_concat("can't find ':' in '", endStr, "'"), ;);
|
||||
char* portBegin = endStr+sep_i+1;
|
||||
u64 port = knPort_INVALID;
|
||||
if(sscanf(portBegin, "%llu", &port)!=1)
|
||||
safethrow(cptr_concat("can't recognise port number in '", portBegin, "'"), ;)
|
||||
|
||||
knIPV4Address addr = knIPV4Address_INVALID;
|
||||
try(knIPV4Address_fromStr(endStr, &addr), _m865, ;);
|
||||
|
||||
*endVal = knIPV4Endpoint_create(addr, port);
|
||||
return MaybeNull;
|
||||
}
|
||||
|
||||
char* knIPV4Endpoint_toString(knIPV4Endpoint* end) {
|
||||
char* a = knIPV4Address_toString(&end->address);
|
||||
char* p = toString_u64(end->port, 0, 0);
|
||||
|
||||
@@ -19,14 +19,15 @@ kt_declare(knIPV4Address);
|
||||
#define knIPV4Address_fromBytes(A, B, C, D) ((knIPV4Address){.bytes={A,B,C,D}})
|
||||
#define knIPV4Address_fromU32(N) ((knIPV4Address){.UintBigEndian=N})
|
||||
|
||||
///@return Maybe<knIPV4Address> as Maybe<knIPV4Address>
|
||||
Maybe knIPV4Address_fromStr(char* addrStr);
|
||||
|
||||
#define knIPV4Address_ANY knIPV4Address_fromBytes(0,0,0,0)
|
||||
#define knIPV4Address_LOOPBACK knIPV4Address_fromBytes(127,0,0,1)
|
||||
#define knIPV4Address_INVALID knIPV4Address_fromBytes(255,255,255,255)
|
||||
#define knIPV4Address_isINVALID(ADDR) (ADDR.UintBigEndian == ~0)
|
||||
|
||||
///@return Maybe<null>
|
||||
Maybe knIPV4Address_fromStr(char* addrStr, knIPV4Address* addrPtr);
|
||||
|
||||
char* knIPV4Address_toString(knIPV4Address* address);
|
||||
|
||||
|
||||
@@ -38,7 +39,10 @@ STRUCT(knIPV4Endpoint,
|
||||
#define knIPV4Endpoint_create(ADDR, PORT) ((knIPV4Endpoint){ADDR, PORT})
|
||||
|
||||
#define knIPV4Endpoint_INVALID knIPV4Endpoint_create(knIPV4Address_INVALID, knPort_INVALID)
|
||||
#define knIPV4Address_isINVALID(ENDP) (knIPV4Address_isINVALID(ENDP.address) || knPort_isINVALID(ENDP.port))
|
||||
#define knIPV4Endpoint_isINVALID(ENDP) (knIPV4Address_isINVALID(ENDP.address) || knPort_isINVALID(ENDP.port))
|
||||
|
||||
///@return Maybe<null>
|
||||
Maybe knIPV4Endpoint_fromStr(char* endStr, knIPV4Endpoint* endVal);
|
||||
|
||||
char* knIPV4Endpoint_toString(knIPV4Endpoint* end);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user