Changeset 02a09ed in mainline for uspace/srv/net/dnsrsrv/transport.c


Ignore:
Timestamp:
2013-06-28T20:20:03Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d24ad3
Parents:
edf0d27
Message:

add basic infrastructure for IPv6 (inactive)
make inet_addr_t a universal address type

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dnsrsrv/transport.c

    redf0d27 r02a09ed  
    183183int dns_request(dns_message_t *req, dns_message_t **rresp)
    184184{
    185         int rc;
     185        trans_req_t *treq = NULL;
     186       
    186187        void *req_data;
    187188        size_t req_size;
     189        int rc = dns_message_encode(req, &req_data, &req_size);
     190        if (rc != EOK)
     191                goto error;
     192       
    188193        struct sockaddr_in addr;
    189         trans_req_t *treq;
    190         int ntry;
    191 
    192         req_data = NULL;
    193         treq = NULL;
    194 
    195         addr.sin_family = AF_INET;
    196         addr.sin_port = htons(DNS_SERVER_PORT);
    197         inet_addr_sockaddr_in(&dns_server_addr, &addr);
    198 
    199         rc = dns_message_encode(req, &req_data, &req_size);
    200         if (rc != EOK)
    201                 goto error;
    202 
    203         ntry = 0;
    204 
     194        struct sockaddr_in6 addr6;
     195        uint16_t af =
     196            inet_addr_sockaddr_in(&dns_server_addr, &addr, &addr6);
     197       
     198        struct sockaddr *address;
     199        socklen_t addrlen;
     200       
     201        switch (af) {
     202        case AF_INET:
     203                addr.sin_port = htons(DNS_SERVER_PORT);
     204                address = (struct sockaddr *) &addr;
     205                addrlen = sizeof(addr);
     206                break;
     207        case AF_INET6:
     208                addr6.sin6_port = htons(DNS_SERVER_PORT);
     209                address = (struct sockaddr *) &addr6;
     210                addrlen = sizeof(addr6);
     211                break;
     212        default:
     213                rc = EAFNOSUPPORT;
     214                goto error;
     215        }
     216       
     217        size_t ntry = 0;
     218       
    205219        while (ntry < REQ_RETRY_MAX) {
    206220                rc = sendto(transport_fd, req_data, req_size, 0,
    207                     (struct sockaddr *) &addr, sizeof(addr));
     221                    (struct sockaddr *) address, addrlen);
    208222                if (rc != EOK)
    209223                        goto error;
Note: See TracChangeset for help on using the changeset viewer.