Ignore:
File:
1 edited

Legend:

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

    ra2e3ee6 r6b0b508  
    199199        }
    200200
    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);
     201        socket = (udp_sockdata_t *)sock_core->specific_data;
     202
     203        fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
    205204        fsock.port = sock_core->port;
    206205        urc = udp_uc_set_local(socket->assoc, &fsock);
     
    270269                }
    271270               
    272                 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
    273                     &fsock.addr);
     271                fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
    274272                fsock.port = uint16_t_be2host(addr->sin_port);
    275273                fsock_ptr = &fsock;
     
    316314        fibril_mutex_lock(&socket->lock);
    317315       
    318         if (inet_addr_is_any(&socket->assoc->ident.local.addr)) {
     316        if (socket->assoc->ident.local.addr.ipv4 == UDP_IPV4_ANY) {
    319317                /* Determine local IP address */
    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;
     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;
    325322               
    326323                int rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr);
     
    333330                }
    334331               
    335                 socket->assoc->ident.local.addr = loc_addr;
     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);
    336335        }
    337336       
     
    411410        size_t data_len;
    412411        udp_error_t urc;
    413         udp_sock_t *rsock;
     412        udp_sock_t rsock;
    414413        struct sockaddr_in addr;
    415414        int rc;
     
    447446        log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer");
    448447
    449         rsock = &socket->recv_fsock;
     448        rsock = socket->recv_fsock;
    450449        data_len = socket->recv_buffer_used;
    451450        urc = socket->recv_error;
     
    477476
    478477        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    479                 /* Fill address */
    480                 uint32_t rsock_addr;
    481                 int rc = inet_addr_pack(&rsock->addr, &rsock_addr);
    482                 if (rc != EOK) {
    483                         fibril_mutex_unlock(&socket->recv_buffer_lock);
    484                         fibril_mutex_unlock(&socket->lock);
    485                         async_answer_0(callid, rc);
    486                         return;
    487                 }
    488                
     478                /* Fill addr */
    489479                addr.sin_family = AF_INET;
    490                 addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr);
    491                 addr.sin_port = host2uint16_t_be(rsock->port);
     480                addr.sin_addr.s_addr = host2uint32_t_be(rsock.addr.ipv4);
     481                addr.sin_port = host2uint16_t_be(rsock.port);
    492482
    493483                log_msg(LOG_DEFAULT, LVL_DEBUG, "addr read receive");
     
    547537        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close()");
    548538        int socket_id = SOCKET_GET_SOCKET_ID(call);
    549 
    550         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - find core");
     539       
    551540        socket_core_t *sock_core =
    552541            socket_cores_find(&client->sockets, socket_id);
    553542        if (sock_core == NULL) {
    554         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - core not found");
    555543                async_answer_0(callid, ENOTSOCK);
    556544                return;
    557545        }
    558 
    559         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - spec data");
     546       
    560547        udp_sockdata_t *socket =
    561548            (udp_sockdata_t *) sock_core->specific_data;
    562         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket");
    563549        fibril_mutex_lock(&socket->lock);
    564 
    565         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket buffer");
    566         fibril_mutex_lock(&socket->recv_buffer_lock);
    567         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL");
    568         socket->sock_core = NULL;
    569         fibril_mutex_unlock(&socket->recv_buffer_lock);
    570 
    571         udp_uc_reset(socket->assoc);
    572 
     550       
    573551        int rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
    574552            udp_free_sock_data);
    575553        if (rc != EOK) {
    576                 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - socket_destroy failed");
    577554                fibril_mutex_unlock(&socket->lock);
    578555                async_answer_0(callid, rc);
    579556                return;
    580557        }
    581 
    582         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv");
    583         fibril_condvar_broadcast(&socket->recv_buffer_cv);
    584 
     558       
    585559        fibril_mutex_unlock(&socket->lock);
    586560        async_answer_0(callid, EOK);
     
    608582        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril()");
    609583
    610         fibril_mutex_lock(&sock->recv_buffer_lock);
    611 
    612584        while (true) {
    613585                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    614                 while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
     586                fibril_mutex_lock(&sock->recv_buffer_lock);
     587                while (sock->recv_buffer_used != 0) {
    615588                        fibril_condvar_wait(&sock->recv_buffer_cv,
    616589                            &sock->recv_buffer_lock);
    617590                }
    618 
    619                 fibril_mutex_unlock(&sock->recv_buffer_lock);
    620 
     591               
    621592                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] call udp_uc_receive()");
    622593                urc = udp_uc_receive(sock->assoc, sock->recv_buffer,
    623594                    UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock);
    624                 fibril_mutex_lock(&sock->recv_buffer_lock);
    625595                sock->recv_error = urc;
    626 
    627                 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] udp_uc_receive -> %d", urc);
    628 
    629                 if (sock->sock_core != NULL)
    630                         udp_sock_notify_data(sock->sock_core);
    631 
     596               
     597                udp_sock_notify_data(sock->sock_core);
     598               
    632599                if (urc != UDP_EOK) {
    633                         log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");
    634600                        fibril_condvar_broadcast(&sock->recv_buffer_cv);
    635                         break;
    636                 }
    637 
     601                        fibril_mutex_unlock(&sock->recv_buffer_lock);
     602                        break;
     603                }
     604               
    638605                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] got data - broadcast recv_buffer_cv");
    639 
     606               
    640607                sock->recv_buffer_used = rcvd;
     608                fibril_mutex_unlock(&sock->recv_buffer_lock);
    641609                fibril_condvar_broadcast(&sock->recv_buffer_cv);
    642610        }
    643611
    644         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() exited loop");
    645         fibril_mutex_unlock(&sock->recv_buffer_lock);
    646612        udp_uc_destroy(sock->assoc);
    647 
    648         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() terminated");
    649613
    650614        return 0;
Note: See TracChangeset for help on using the changeset viewer.