Changes in uspace/srv/net/udp/sock.c [257feec:ccb5165] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/udp/sock.c
r257feec rccb5165 199 199 } 200 200 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); 205 204 fsock.port = sock_core->port; 206 205 urc = udp_uc_set_local(socket->assoc, &fsock); … … 222 221 assert(false); 223 222 } 224 223 225 224 log_msg(LOG_DEFAULT, LVL_DEBUG, " - success"); 226 225 async_answer_0(callid, rc); … … 270 269 } 271 270 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); 274 272 fsock.port = uint16_t_be2host(addr->sin_port); 275 273 fsock_ptr = &fsock; … … 316 314 fibril_mutex_lock(&socket->lock); 317 315 318 if ( inet_addr_is_any(&socket->assoc->ident.local.addr)) {316 if (socket->assoc->ident.local.addr.ipv4 == UDP_IPV4_ANY) { 319 317 /* 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; 325 322 326 323 int rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr); … … 333 330 } 334 331 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); 336 335 } 337 336 … … 411 410 size_t data_len; 412 411 udp_error_t urc; 413 udp_sock_t *rsock;412 udp_sock_t rsock; 414 413 struct sockaddr_in addr; 415 414 int rc; … … 428 427 socket = (udp_sockdata_t *)sock_core->specific_data; 429 428 fibril_mutex_lock(&socket->lock); 430 429 431 430 if (socket->assoc == NULL) { 432 431 fibril_mutex_unlock(&socket->lock); … … 444 443 &socket->recv_buffer_lock); 445 444 } 446 445 447 446 log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer"); 448 447 449 rsock = &socket->recv_fsock;448 rsock = socket->recv_fsock; 450 449 data_len = socket->recv_buffer_used; 451 450 urc = socket->recv_error; … … 467 466 assert(false); 468 467 } 469 468 470 469 log_msg(LOG_DEFAULT, LVL_DEBUG, "**** udp_uc_receive -> %d", rc); 471 472 470 if (rc != EOK) { 473 471 fibril_mutex_unlock(&socket->recv_buffer_lock); … … 478 476 479 477 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 */ 490 479 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); 493 482 494 483 log_msg(LOG_DEFAULT, LVL_DEBUG, "addr read receive"); … … 520 509 return; 521 510 } 522 511 523 512 if (length > data_len) 524 513 length = data_len; 525 514 526 515 log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize"); 527 516 rc = async_data_read_finalize(rcallid, socket->recv_buffer, length); … … 529 518 if (length < data_len && rc == EOK) 530 519 rc = EOVERFLOW; 531 520 532 521 log_msg(LOG_DEFAULT, LVL_DEBUG, "read_data_length <- %zu", length); 533 522 IPC_SET_ARG2(answer, 0); … … 536 525 async_answer_3(callid, EOK, IPC_GET_ARG1(answer), 537 526 IPC_GET_ARG2(answer), IPC_GET_ARG3(answer)); 538 527 539 528 socket->recv_buffer_used = 0; 540 529 541 530 fibril_condvar_broadcast(&socket->recv_buffer_cv); 542 531 fibril_mutex_unlock(&socket->recv_buffer_lock); … … 613 602 while (true) { 614 603 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) { 616 605 fibril_condvar_wait(&sock->recv_buffer_cv, 617 606 &sock->recv_buffer_lock);
Note:
See TracChangeset
for help on using the changeset viewer.