[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 3/4] libc: POSIX: gethostbyname()



On Mon, Apr 13 18:21, Kevin Wolf wrote:
> + libc: POSIX: gethostbyname()
> ---
>  src/modules/include/netinet/in.h |    1 +
>  src/modules/include/network.h    |    2 +-
>  src/modules/lib/network.c        |    2 +-
>  src/modules/lib/posix/net.c      |   40 ++++++++++++++++++++++++++++++++++++++
>  4 files changed, 43 insertions(+), 2 deletions(-)
> 
> diff --git a/src/modules/include/netinet/in.h b/src/modules/include/netinet/in.h
> index 14963a4..5bf18d2 100644
> --- a/src/modules/include/netinet/in.h
> +++ b/src/modules/include/netinet/in.h
> @@ -31,6 +31,7 @@
>  
>  #include <sys/socket.h>
>  #include <stdint.h>
> +#include <sys/socket.h>
>  
>  /// Adresse fuer das INET-Protokol (IPv4)
>  struct sockaddr_in {

Aha, hier rein, und im nächsten Patch grad wieder raus, muss das so
sein? ;-)

> diff --git a/src/modules/include/network.h b/src/modules/include/network.h
> index 9be97db..ef0bb99 100644
> --- a/src/modules/include/network.h
> +++ b/src/modules/include/network.h
> @@ -48,7 +48,7 @@ struct net_device {
>      dword ip;
>  };
>  
> -dword string_to_ip(char* ip);
> +dword string_to_ip(const char* ip);
>  char* ip_to_string(dword ip);
>  char* mac_to_string(uint64_t mac);
>  void register_netcard(dword device_numer, uint64_t mac, dword ip);
> diff --git a/src/modules/lib/network.c b/src/modules/lib/network.c
> index 927ada8..d0343d3 100644
> --- a/src/modules/lib/network.c
> +++ b/src/modules/lib/network.c
> @@ -40,7 +40,7 @@
>   * Dezimalzahlen (a.b.c.d). Andere Darstellungen (z.B. eine Hexzahl) sind
>   * derzeit nicht unterst???tzt.
>   */
> -dword string_to_ip(char* ip)
> +dword string_to_ip(const char* ip)
>  {
>      byte ip_bytes[4] = { 0, 0, 0, 0 };
>  
> diff --git a/src/modules/lib/posix/net.c b/src/modules/lib/posix/net.c
> index 2a41daf..c6fbdb8 100644
> --- a/src/modules/lib/posix/net.c
> +++ b/src/modules/lib/posix/net.c
> @@ -28,6 +28,9 @@
>  
>  #include <netinet/in.h>
>  #include <network.h>
> +#include <netdb.h>

Dafür brauche ich dann /dev/kristallkugel, oder wo kriege ich die her?
;-) Oder ist es schon zu spät und ich übersehe sie nur?

> +
> +#include <stdio.h>
>  
>  #include <stdlib.h>
>  #include <string.h>
> @@ -51,3 +54,40 @@ unsigned short int ntohs(unsigned short int netshort)
>  {
>      return big_endian_dword(netshort);
>  }
> +
> +struct hostent* gethostbyname(const char* name)
> +{
> +    static struct hostent hostent;
> +    static char* aliases[] = { NULL };
> +    static uint32_t ip;
> +    static uint32_t* h_addr_list[] = { &ip, NULL };
> +
> +    // Erstmal schauen, ob es eine IP-Adresse ist
> +    ip = string_to_ip(name);
> +
> +    // Wenn nicht, muessen wir eine DNS-Anfrage machen
> +    if (ip == 0) {
> +        char* path;
> +        FILE* f;
> +        char ip_str[16];
> +
> +        asprintf(&path, "tcpip:/dns/%s", name);
> +        f = fopen(path, "r");
> +        if (!f) {
> +            return NULL;
> +        }
> +        fread(ip_str, 1, 16, f);
> +        fclose(f);
> +
> +        ip = string_to_ip(ip_str);
> +    }
> +
> +    // hostent aktualisieren
> +    hostent.h_name = (char*) name;
> +    hostent.h_aliases = aliases;
> +    hostent.h_addrtype = AF_INET;
> +    hostent.h_length = 4;
> +    hostent.h_addr_list = (char**) h_addr_list;
> +
> +    return &hostent;
> +}

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpRgZLDvzmKq.pgp
Description: PGP signature