knIPV4Endpoint_fromStr
This commit is contained in:
parent
b430846a0e
commit
6ba06dcc0c
@ -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);
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
i32 main(){
|
||||
if(setlocale(LC_CTYPE, "C.UTF-8")!=0)
|
||||
kprintf("\e[93msetlocale failed\n");
|
||||
kt_beginInit();
|
||||
kt_beginInit(true);
|
||||
kt_initKerepTypes();
|
||||
kt_endInit();
|
||||
test_all();
|
||||
|
||||
@ -3,11 +3,10 @@
|
||||
#include <pthread.h>
|
||||
|
||||
static void __test_knIPV4Address_fromStr(char* addrStr, u8 a, u8 b, u8 c, u8 d){
|
||||
tryLast(knIPV4Address_fromStr(addrStr), maybeAddr, ;)
|
||||
knIPV4Address addr;
|
||||
addr.UintBigEndian=(u32)maybeAddr.value.UInt64;
|
||||
tryLast(knIPV4Address_fromStr(addrStr, &addr), maybeAddr, ;)
|
||||
kprintf("\e[92mknIPV4Address_fromStr(\e[96m%s\e[92m) -> ", addrStr);
|
||||
if(maybeAddr.value.UInt64!=knIPV4Address_fromBytes(a,b,c,d).UintBigEndian){
|
||||
if(addr.UintBigEndian != knIPV4Address_fromBytes(a,b,c,d).UintBigEndian){
|
||||
kprintf("\e[91m%u.%u.%u.%u\n",
|
||||
(u8)addr.bytes[0], (u8)addr.bytes[1], (u8)addr.bytes[2], (u8)addr.bytes[3]);
|
||||
throw("knIPV4Address_fromStr returned wrong value");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user