X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibpsocket.so_src%2Fgetaddrinfo.c;h=aa8128d995f8d0b299ed382c9482cbffad542fd7;hb=855d69055d5c418b1129ce47b42c05f14c8e7119;hp=d4d6ce8d0b01f2efbb2f3171c75dbc5f83e3da65;hpb=8cf9dc88c488ba959a211f1ec653a366d16e1531;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libpsocket.so_src/getaddrinfo.c b/Usermode/Libraries/libpsocket.so_src/getaddrinfo.c index d4d6ce8d..aa8128d9 100644 --- a/Usermode/Libraries/libpsocket.so_src/getaddrinfo.c +++ b/Usermode/Libraries/libpsocket.so_src/getaddrinfo.c @@ -13,6 +13,17 @@ #include // strtol #include +static const struct { + const char *Name; + int SockType; + int Protocol; + int Port; +} caLocalServices[] = { + {"telnet", SOCK_STREAM, 0, 23}, + {"http", SOCK_STREAM, 0, 80}, +}; +static const int ciNumLocalServices = sizeof(caLocalServices)/sizeof(caLocalServices[0]); + // === CODE === int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) { @@ -40,7 +51,6 @@ int getaddrinfo(const char *node, const char *service, const struct addrinfo *hi else { // 1. Check if the node is an IP address - // TODO: Break this function out into inet_pton? { int type; char addrdata[16]; @@ -106,15 +116,29 @@ int getaddrinfo(const char *node, const char *service, const struct addrinfo *hi char *end; default_port = strtol(service, &end, 0); - if( *end != '\0' && !(hints->ai_flags & AI_NUMERICSERV) ) + if( *end != '\0' && (hints->ai_flags & AI_NUMERICSERV) ) + { + return EAI_NONAME; + } + + if( *end != '\0' ) { // TODO: Read something like /Acess/Conf/services - _SysDebug("getaddrinfo: TODO Service translation"); + for( int i = 0; i < ciNumLocalServices; i ++ ) + { + if( strcmp(service, caLocalServices[i].Name) == 0 ) { + end = service + strlen(service); + default_socktype = caLocalServices[i].SockType; + default_protocol = caLocalServices[i].Protocol; + default_port = caLocalServices[i].Port; + break; + } + } } if( *end != '\0' ) { - return EAI_NONAME; + _SysDebug("getaddrinfo: TODO Service translation"); } }