Ignore:
File:
1 edited

Legend:

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

    rccb5165 r257feec  
    199199        }
    200200
    201         socket = (udp_sockdata_t *)sock_core->specific_data;
    202 
    203         fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
     201        socket = (udp_sockdata_t *) sock_core->specific_data;
     202       
     203        inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
     204            &fsock.addr);
    204205        fsock.port = sock_core->port;
    205206        urc = udp_uc_set_local(socket->assoc, &fsock);
     
    221222                assert(false);
    222223        }
    223 
     224       
    224225        log_msg(LOG_DEFAULT, LVL_DEBUG, " - success");
    225226        async_answer_0(callid, rc);
     
    269270                }
    270271               
    271                 fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
     272                inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
     273                    &fsock.addr);
    272274                fsock.port = uint16_t_be2host(addr->sin_port);
    273275                fsock_ptr = &fsock;
     
    314316        fibril_mutex_lock(&socket->lock);
    315317       
    316         if (socket->assoc->ident.local.addr.ipv4 == UDP_IPV4_ANY) {
     318        if (inet_addr_is_any(&socket->assoc->ident.local.addr)) {
    317319                /* Determine local IP address */
    318                 inet_addr_t loc_addr, rem_addr;
    319                
    320                 rem_addr.ipv4 = fsock_ptr ? fsock.addr.ipv4 :
    321                     socket->assoc->ident.foreign.addr.ipv4;
     320                inet_addr_t loc_addr;
     321                inet_addr_t rem_addr;
     322               
     323                rem_addr = fsock_ptr ? fsock.addr :
     324                    socket->assoc->ident.foreign.addr;
    322325               
    323326                int rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr);
     
    330333                }
    331334               
    332                 socket->assoc->ident.local.addr.ipv4 = loc_addr.ipv4;
    333                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Local IP address is %x",
    334                     socket->assoc->ident.local.addr.ipv4);
     335                socket->assoc->ident.local.addr = loc_addr;
    335336        }
    336337       
     
    410411        size_t data_len;
    411412        udp_error_t urc;
    412         udp_sock_t rsock;
     413        udp_sock_t *rsock;
    413414        struct sockaddr_in addr;
    414415        int rc;
     
    427428        socket = (udp_sockdata_t *)sock_core->specific_data;
    428429        fibril_mutex_lock(&socket->lock);
    429 
     430       
    430431        if (socket->assoc == NULL) {
    431432                fibril_mutex_unlock(&socket->lock);
     
    443444                    &socket->recv_buffer_lock);
    444445        }
    445 
     446       
    446447        log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer");
    447448
    448         rsock = socket->recv_fsock;
     449        rsock = &socket->recv_fsock;
    449450        data_len = socket->recv_buffer_used;
    450451        urc = socket->recv_error;
     
    466467                assert(false);
    467468        }
    468 
     469       
    469470        log_msg(LOG_DEFAULT, LVL_DEBUG, "**** udp_uc_receive -> %d", rc);
     471       
    470472        if (rc != EOK) {
    471473                fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    476478
    477479        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    478                 /* Fill addr */
     480                /* Fill address */
     481                uint32_t rsock_addr;
     482                int rc = inet_addr_pack(&rsock->addr, &rsock_addr);
     483                if (rc != EOK) {
     484                        fibril_mutex_unlock(&socket->recv_buffer_lock);
     485                        fibril_mutex_unlock(&socket->lock);
     486                        async_answer_0(callid, rc);
     487                        return;
     488                }
     489               
    479490                addr.sin_family = AF_INET;
    480                 addr.sin_addr.s_addr = host2uint32_t_be(rsock.addr.ipv4);
    481                 addr.sin_port = host2uint16_t_be(rsock.port);
     491                addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr);
     492                addr.sin_port = host2uint16_t_be(rsock->port);
    482493
    483494                log_msg(LOG_DEFAULT, LVL_DEBUG, "addr read receive");
     
    509520                return;
    510521        }
    511 
     522       
    512523        if (length > data_len)
    513524                length = data_len;
    514 
     525       
    515526        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize");
    516527        rc = async_data_read_finalize(rcallid, socket->recv_buffer, length);
     
    518529        if (length < data_len && rc == EOK)
    519530                rc = EOVERFLOW;
    520 
     531       
    521532        log_msg(LOG_DEFAULT, LVL_DEBUG, "read_data_length <- %zu", length);
    522533        IPC_SET_ARG2(answer, 0);
     
    525536        async_answer_3(callid, EOK, IPC_GET_ARG1(answer),
    526537            IPC_GET_ARG2(answer), IPC_GET_ARG3(answer));
    527 
     538       
    528539        socket->recv_buffer_used = 0;
    529 
     540       
    530541        fibril_condvar_broadcast(&socket->recv_buffer_cv);
    531542        fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    602613        while (true) {
    603614                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    604                 while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
     615                while ((sock->recv_buffer_used != 0) && (sock->sock_core != NULL)) {
    605616                        fibril_condvar_wait(&sock->recv_buffer_cv,
    606617                            &sock->recv_buffer_lock);
Note: See TracChangeset for help on using the changeset viewer.