Ignore:
File:
1 edited

Legend:

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

    rc0f3460 r3e6a98c5  
    8282        if (lsock != NULL)
    8383                assoc->ident.local = *lsock;
    84        
    8584        if (fsock != NULL)
    8685                assoc->ident.foreign = *fsock;
     
    201200/** Set local socket in association.
    202201 *
    203  * @param assoc Association
    204  * @param lsock Local socket (deeply copied)
    205  *
     202 * @param assoc         Association
     203 * @param fsock         Foreign socket (deeply copied)
    206204 */
    207205void udp_assoc_set_local(udp_assoc_t *assoc, udp_sock_t *lsock)
     
    213211}
    214212
    215 /** Set local port in association.
    216  *
    217  * @param assoc Association
    218  * @param lport Local port
    219  *
    220  */
    221 void udp_assoc_set_local_port(udp_assoc_t *assoc, uint16_t lport)
    222 {
    223         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_set_local(%p, %" PRIu16 ")", assoc, lport);
    224         fibril_mutex_lock(&assoc->lock);
    225         assoc->ident.local.port = lport;
    226         fibril_mutex_unlock(&assoc->lock);
    227 }
    228 
    229213/** Send message to association.
    230214 *
     
    252236                sp.foreign = *fsock;
    253237
    254         if ((inet_addr_is_any(&sp.foreign.addr)) ||
    255             (sp.foreign.port == UDP_PORT_ANY))
     238        if (sp.foreign.addr.ipv4 == 0 || sp.foreign.port == 0)
    256239                return EINVAL;
    257240
     
    281264
    282265        fibril_mutex_lock(&assoc->lock);
    283         while (list_empty(&assoc->rcv_queue) && !assoc->reset) {
     266        while (list_empty(&assoc->rcv_queue)) {
    284267                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting");
    285268                fibril_condvar_wait(&assoc->rcv_queue_cv, &assoc->lock);
    286         }
    287 
    288         if (assoc->reset) {
    289                 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - association was reset");
    290                 fibril_mutex_unlock(&assoc->lock);
    291                 return ECONNABORTED;
    292269        }
    293270
     
    331308}
    332309
    333 /** Reset association.
    334  *
    335  * This causes any pendingreceive operations to return immediately with
    336  * UDP_ERESET.
    337  */
    338 void udp_assoc_reset(udp_assoc_t *assoc)
    339 {
    340         fibril_mutex_lock(&assoc->lock);
    341         assoc->reset = true;
    342         fibril_condvar_broadcast(&assoc->rcv_queue_cv);
    343         fibril_mutex_unlock(&assoc->lock);
    344 }
    345 
    346310static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp,
    347311    udp_msg_t *msg)
     
    372336static bool udp_socket_match(udp_sock_t *sock, udp_sock_t *patt)
    373337{
    374         log_msg(LOG_DEFAULT, LVL_DEBUG,
    375             "udp_socket_match(sock=(%u), pat=(%u))", sock->port, patt->port);
    376        
    377         if ((!inet_addr_is_any(&patt->addr)) &&
    378             (!inet_addr_compare(&patt->addr, &sock->addr)))
     338        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_socket_match(sock=(%x,%u), pat=(%x,%u))",
     339            sock->addr.ipv4, sock->port, patt->addr.ipv4, patt->port);
     340
     341        if (patt->addr.ipv4 != UDP_IPV4_ANY &&
     342            patt->addr.ipv4 != sock->addr.ipv4)
    379343                return false;
    380        
    381         if ((patt->port != UDP_PORT_ANY) &&
    382             (patt->port != sock->port))
     344
     345        if (patt->port != UDP_PORT_ANY &&
     346            patt->port != sock->port)
    383347                return false;
    384        
     348
    385349        log_msg(LOG_DEFAULT, LVL_DEBUG, " -> match");
    386        
     350
    387351        return true;
    388352}
     
    416380{
    417381        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_find_ref(%p)", sp);
    418        
     382
    419383        fibril_mutex_lock(&assoc_list_lock);
    420        
     384
    421385        list_foreach(assoc_list, link) {
    422386                udp_assoc_t *assoc = list_get_instance(link, udp_assoc_t, link);
    423387                udp_sockpair_t *asp = &assoc->ident;
    424                
     388                log_msg(LOG_DEFAULT, LVL_DEBUG, "compare with assoc (f:(%x,%u), l:(%x,%u))",
     389                    asp->foreign.addr.ipv4, asp->foreign.port,
     390                    asp->local.addr.ipv4, asp->local.port);
     391
    425392                /* Skip unbound associations */
    426393                if (asp->local.port == UDP_PORT_ANY)
    427394                        continue;
    428                
     395
    429396                if (udp_sockpair_match(sp, asp)) {
    430397                        log_msg(LOG_DEFAULT, LVL_DEBUG, "Returning assoc %p", assoc);
     
    434401                }
    435402        }
    436        
     403
    437404        fibril_mutex_unlock(&assoc_list_lock);
    438405        return NULL;
    439406}
    440407
     408
    441409/**
    442410 * @}
Note: See TracChangeset for help on using the changeset viewer.