Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nterm/conn.c

    r0aa70f4 r3e6a98c5  
    3333 */
    3434
    35 #include <byteorder.h>
    3635#include <stdbool.h>
    3736#include <errno.h>
    3837#include <fibril.h>
    39 #include <inet/dnsr.h>
    4038#include <net/socket.h>
    4139#include <stdio.h>
     
    7573int conn_open(const char *addr_s, const char *port_s)
    7674{
    77         int conn_fd = -1;
    78        
    79         /* Interpret as address */
    80         inet_addr_t addr_addr;
    81         int rc = inet_addr_parse(addr_s, &addr_addr);
    82        
     75        struct sockaddr_in addr;
     76        int rc;
     77        char *endptr;
     78
     79        addr.sin_family = AF_INET;
     80
     81        rc = inet_pton(addr.sin_family, addr_s, (uint8_t *)&addr.sin_addr);
    8382        if (rc != EOK) {
    84                 /* Interpret as a host name */
    85                 dnsr_hostinfo_t *hinfo = NULL;
    86                 rc = dnsr_name2host(addr_s, &hinfo, 0);
    87                
    88                 if (rc != EOK) {
    89                         printf("Error resolving host '%s'.\n", addr_s);
    90                         goto error;
    91                 }
    92                
    93                 addr_addr = hinfo->addr;
     83                printf("Invalid addres %s\n", addr_s);
     84                return EINVAL;
    9485        }
    95        
    96         struct sockaddr_in addr;
    97         struct sockaddr_in6 addr6;
    98         uint16_t af = inet_addr_sockaddr_in(&addr_addr, &addr, &addr6);
    99        
    100         char *endptr;
    101         uint16_t port = strtol(port_s, &endptr, 10);
     86
     87        addr.sin_port = htons(strtol(port_s, &endptr, 10));
    10288        if (*endptr != '\0') {
    10389                printf("Invalid port number %s\n", port_s);
    104                 goto error;
     90                return EINVAL;
    10591        }
    106        
    107         printf("Connecting to host %s port %u\n", addr_s, port);
    108        
     92
    10993        conn_fd = socket(PF_INET, SOCK_STREAM, 0);
    11094        if (conn_fd < 0)
    11195                goto error;
    112        
    113         switch (af) {
    114         case AF_INET:
    115                 addr.sin_port = htons(port);
    116                 rc = connect(conn_fd, (struct sockaddr *) &addr, sizeof(addr));
    117                 break;
    118         case AF_INET6:
    119                 addr6.sin6_port = htons(port);
    120                 rc = connect(conn_fd, (struct sockaddr *) &addr6, sizeof(addr6));
    121                 break;
    122         default:
    123                 printf("Unknown address family.\n");
    124                 goto error;
    125         }
    126        
     96
     97        printf("Connecting to address %s port %u\n", addr_s, ntohs(addr.sin_port));
     98
     99        rc = connect(conn_fd, (struct sockaddr *)&addr, sizeof(addr));
    127100        if (rc != EOK)
    128101                goto error;
    129        
     102
    130103        rcv_fid = fibril_create(rcv_fibril, NULL);
    131104        if (rcv_fid == 0)
    132105                goto error;
    133        
     106
    134107        fibril_add_ready(rcv_fid);
    135        
     108
    136109        return EOK;
    137        
     110
    138111error:
    139112        if (conn_fd >= 0) {
     
    141114                conn_fd = -1;
    142115        }
    143        
     116
    144117        return EIO;
    145118}
     
    147120int conn_send(void *data, size_t size)
    148121{
    149         int rc = send(conn_fd, data, size, 0);
     122        int rc;
     123
     124        rc = send(conn_fd, data, size, 0);
    150125        if (rc != EOK)
    151126                return EIO;
    152        
     127
    153128        return EOK;
    154129}
Note: See TracChangeset for help on using the changeset viewer.