Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tcp/sock.c

    r05bfce7 r257feec  
    179179        }
    180180
    181         sock->laddr.ipv4 = TCP_IPV4_ANY;
     181        inet_addr_any(&sock->laddr);
    182182        sock->lconn = NULL;
    183183        sock->backlog = 0;
     
    314314        log_msg(LOG_DEFAULT, LVL_DEBUG, " - open connections");
    315315       
    316         lsocket.addr.ipv4 = TCP_IPV4_ANY;
     316        inet_addr_any(&lsocket.addr);
    317317        lsocket.port = sock_core->port;
    318         fsocket.addr.ipv4 = TCP_IPV4_ANY;
     318       
     319        inet_addr_any(&fsocket.addr);
    319320        fsocket.port = TCP_PORT_ANY;
    320321       
     
    396397        fibril_mutex_lock(&socket->lock);
    397398
    398         if (socket->laddr.ipv4 == TCP_IPV4_ANY) {
     399        if (inet_addr_is_any(&socket->laddr)) {
    399400                /* Determine local IP address */
    400                 inet_addr_t loc_addr, rem_addr;
    401 
    402                 rem_addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
     401                inet_addr_t loc_addr;
     402                inet_addr_t rem_addr;
     403               
     404                inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
     405                    &rem_addr);
    403406                rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr);
    404407                if (rc != EOK) {
     
    409412                        return;
    410413                }
    411 
    412                 socket->laddr.ipv4 = loc_addr.ipv4;
    413                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Local IP address is %x", socket->laddr.ipv4);
    414         }
    415 
    416         lsocket.addr.ipv4 = socket->laddr.ipv4;
     414               
     415                socket->laddr = loc_addr;
     416        }
     417       
     418        lsocket.addr = socket->laddr;
    417419        lsocket.port = sock_core->port;
    418         fsocket.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
     420       
     421        inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
     422            &fsocket.addr);
    419423        fsocket.port = uint16_t_be2host(addr->sin_port);
    420424
     
    425429
    426430        fibril_mutex_unlock(&socket->lock);
    427 
     431       
    428432        switch (trc) {
    429433        case TCP_EOK:
     
    436440                assert(false);
    437441        }
    438 
     442       
    439443        if (rc == EOK)
    440444                fibril_add_ready(socket->recv_fibril);
    441 
     445       
    442446        async_answer_0(callid, rc);
    443447}
     
    507511        /* Replenish listening connection */
    508512
    509         lsocket.addr.ipv4 = TCP_IPV4_ANY;
     513        inet_addr_any(&lsocket.addr);
    510514        lsocket.port = sock_core->port;
    511         fsocket.addr.ipv4 = TCP_IPV4_ANY;
     515       
     516        inet_addr_any(&fsocket.addr);
    512517        fsocket.port = TCP_PORT_ANY;
    513518
     
    682687        socket = (tcp_sockdata_t *)sock_core->specific_data;
    683688        fibril_mutex_lock(&socket->lock);
    684 
     689       
    685690        if (socket->conn == NULL) {
    686691                fibril_mutex_unlock(&socket->lock);
     
    698703                    &socket->recv_buffer_lock);
    699704        }
    700 
     705       
    701706        log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer");
    702707
     
    718723                assert(false);
    719724        }
    720 
     725       
    721726        log_msg(LOG_DEFAULT, LVL_DEBUG, "**** recv result -> %d", rc);
     727       
    722728        if (rc != EOK) {
    723729                fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    728734
    729735        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    730                 /* Fill addr */
     736                /* Fill address */
    731737                rsock = &socket->conn->ident.foreign;
     738               
     739                uint32_t rsock_addr;
     740                int rc = inet_addr_pack(&rsock->addr, &rsock_addr);
     741                if (rc != EOK) {
     742                        fibril_mutex_unlock(&socket->recv_buffer_lock);
     743                        fibril_mutex_unlock(&socket->lock);
     744                        async_answer_0(callid, rc);
     745                        return;
     746                }
     747               
    732748                addr.sin_family = AF_INET;
    733                 addr.sin_addr.s_addr = host2uint32_t_be(rsock->addr.ipv4);
     749                addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr);
    734750                addr.sin_port = host2uint16_t_be(rsock->port);
    735751
     
    754770                }
    755771        }
    756 
     772       
    757773        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read receive");
    758774        if (!async_data_read_receive(&rcallid, &length)) {
     
    762778                return;
    763779        }
    764 
     780       
    765781        if (length > data_len)
    766782                length = data_len;
    767 
     783       
    768784        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize");
    769785        rc = async_data_read_finalize(rcallid, socket->recv_buffer, length);
    770 
     786       
    771787        socket->recv_buffer_used -= length;
    772788        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_recvfrom: %zu left in buffer",
     
    777793                tcp_sock_notify_data(socket->sock_core);
    778794        }
    779 
     795       
    780796        fibril_condvar_broadcast(&socket->recv_buffer_cv);
    781797
     
    785801        SOCKET_SET_READ_DATA_LENGTH(answer, length);
    786802        async_answer_1(callid, EOK, IPC_GET_ARG1(answer));
    787 
     803       
    788804        fibril_mutex_unlock(&socket->recv_buffer_lock);
    789805        fibril_mutex_unlock(&socket->lock);
Note: See TracChangeset for help on using the changeset viewer.