Ignore:
File:
1 edited

Legend:

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

    r257feec rccb5165  
    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);
     
    222221                assert(false);
    223222        }
    224        
     223
    225224        log_msg(LOG_DEFAULT, LVL_DEBUG, " - success");
    226225        async_answer_0(callid, rc);
     
    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;
     
    428427        socket = (udp_sockdata_t *)sock_core->specific_data;
    429428        fibril_mutex_lock(&socket->lock);
    430        
     429
    431430        if (socket->assoc == NULL) {
    432431                fibril_mutex_unlock(&socket->lock);
     
    444443                    &socket->recv_buffer_lock);
    445444        }
    446        
     445
    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;
     
    467466                assert(false);
    468467        }
    469        
     468
    470469        log_msg(LOG_DEFAULT, LVL_DEBUG, "**** udp_uc_receive -> %d", rc);
    471        
    472470        if (rc != EOK) {
    473471                fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    478476
    479477        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    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                
     478                /* Fill addr */
    490479                addr.sin_family = AF_INET;
    491                 addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr);
    492                 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);
    493482
    494483                log_msg(LOG_DEFAULT, LVL_DEBUG, "addr read receive");
     
    520509                return;
    521510        }
    522        
     511
    523512        if (length > data_len)
    524513                length = data_len;
    525        
     514
    526515        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize");
    527516        rc = async_data_read_finalize(rcallid, socket->recv_buffer, length);
     
    529518        if (length < data_len && rc == EOK)
    530519                rc = EOVERFLOW;
    531        
     520
    532521        log_msg(LOG_DEFAULT, LVL_DEBUG, "read_data_length <- %zu", length);
    533522        IPC_SET_ARG2(answer, 0);
     
    536525        async_answer_3(callid, EOK, IPC_GET_ARG1(answer),
    537526            IPC_GET_ARG2(answer), IPC_GET_ARG3(answer));
    538        
     527
    539528        socket->recv_buffer_used = 0;
    540        
     529
    541530        fibril_condvar_broadcast(&socket->recv_buffer_cv);
    542531        fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    613602        while (true) {
    614603                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    615                 while ((sock->recv_buffer_used != 0) && (sock->sock_core != NULL)) {
     604                while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
    616605                        fibril_condvar_wait(&sock->recv_buffer_cv,
    617606                            &sock->recv_buffer_lock);
Note: See TracChangeset for help on using the changeset viewer.