Changes in uspace/srv/net/udp/assoc.c [c0f3460:3e6a98c5] in mainline
- File:
-
- 1 edited
-
uspace/srv/net/udp/assoc.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/udp/assoc.c
rc0f3460 r3e6a98c5 82 82 if (lsock != NULL) 83 83 assoc->ident.local = *lsock; 84 85 84 if (fsock != NULL) 86 85 assoc->ident.foreign = *fsock; … … 201 200 /** Set local socket in association. 202 201 * 203 * @param assoc Association 204 * @param lsock Local socket (deeply copied) 205 * 202 * @param assoc Association 203 * @param fsock Foreign socket (deeply copied) 206 204 */ 207 205 void udp_assoc_set_local(udp_assoc_t *assoc, udp_sock_t *lsock) … … 213 211 } 214 212 215 /** Set local port in association.216 *217 * @param assoc Association218 * @param lport Local port219 *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 229 213 /** Send message to association. 230 214 * … … 252 236 sp.foreign = *fsock; 253 237 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) 256 239 return EINVAL; 257 240 … … 281 264 282 265 fibril_mutex_lock(&assoc->lock); 283 while (list_empty(&assoc->rcv_queue) && !assoc->reset) {266 while (list_empty(&assoc->rcv_queue)) { 284 267 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting"); 285 268 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;292 269 } 293 270 … … 331 308 } 332 309 333 /** Reset association.334 *335 * This causes any pendingreceive operations to return immediately with336 * 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 346 310 static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp, 347 311 udp_msg_t *msg) … … 372 336 static bool udp_socket_match(udp_sock_t *sock, udp_sock_t *patt) 373 337 { 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) 379 343 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) 383 347 return false; 384 348 385 349 log_msg(LOG_DEFAULT, LVL_DEBUG, " -> match"); 386 350 387 351 return true; 388 352 } … … 416 380 { 417 381 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_find_ref(%p)", sp); 418 382 419 383 fibril_mutex_lock(&assoc_list_lock); 420 384 421 385 list_foreach(assoc_list, link) { 422 386 udp_assoc_t *assoc = list_get_instance(link, udp_assoc_t, link); 423 387 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 425 392 /* Skip unbound associations */ 426 393 if (asp->local.port == UDP_PORT_ANY) 427 394 continue; 428 395 429 396 if (udp_sockpair_match(sp, asp)) { 430 397 log_msg(LOG_DEFAULT, LVL_DEBUG, "Returning assoc %p", assoc); … … 434 401 } 435 402 } 436 403 437 404 fibril_mutex_unlock(&assoc_list_lock); 438 405 return NULL; 439 406 } 440 407 408 441 409 /** 442 410 * @}
Note:
See TracChangeset
for help on using the changeset viewer.
