diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-03-10 15:09:21 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-03-10 15:09:21 +0000 |
commit | 4281ebb1604cded91b6e6ab57a25cd4751ee81cd (patch) | |
tree | cb5b5add50c565fa52c21a4e97244966c1871991 /src | |
parent | 532493cd0d5c9aaf4a169e6f609d1c91dbc5b677 (diff) | |
download | gnunet-4281ebb1604cded91b6e6ab57a25cd4751ee81cd.tar.gz gnunet-4281ebb1604cded91b6e6ab57a25cd4751ee81cd.zip |
using GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH
Diffstat (limited to 'src')
-rw-r--r-- | src/stream/stream_api.c | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/src/stream/stream_api.c b/src/stream/stream_api.c index d488b4c80..55b0ab958 100644 --- a/src/stream/stream_api.c +++ b/src/stream/stream_api.c | |||
@@ -375,7 +375,7 @@ struct GNUNET_STREAM_IOWriteHandle | |||
375 | /** | 375 | /** |
376 | * The packet_buffers associated with this Handle | 376 | * The packet_buffers associated with this Handle |
377 | */ | 377 | */ |
378 | struct GNUNET_STREAM_DataMessage *messages[64]; | 378 | struct GNUNET_STREAM_DataMessage *messages[GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH]; |
379 | 379 | ||
380 | /** | 380 | /** |
381 | * The write continuation callback | 381 | * The write continuation callback |
@@ -692,7 +692,7 @@ ackbitmap_modify_bit (GNUNET_STREAM_AckBitmap *bitmap, | |||
692 | unsigned int bit, | 692 | unsigned int bit, |
693 | int value) | 693 | int value) |
694 | { | 694 | { |
695 | GNUNET_assert (bit < 64); | 695 | GNUNET_assert (bit < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH); |
696 | if (GNUNET_YES == value) | 696 | if (GNUNET_YES == value) |
697 | *bitmap |= (1LL << bit); | 697 | *bitmap |= (1LL << bit); |
698 | else | 698 | else |
@@ -711,7 +711,7 @@ static uint8_t | |||
711 | ackbitmap_is_bit_set (const GNUNET_STREAM_AckBitmap *bitmap, | 711 | ackbitmap_is_bit_set (const GNUNET_STREAM_AckBitmap *bitmap, |
712 | unsigned int bit) | 712 | unsigned int bit) |
713 | { | 713 | { |
714 | GNUNET_assert (bit < 64); | 714 | GNUNET_assert (bit < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH); |
715 | return 0 != (*bitmap & (1LL << bit)); | 715 | return 0 != (*bitmap & (1LL << bit)); |
716 | } | 716 | } |
717 | 717 | ||
@@ -748,7 +748,7 @@ write_data (struct GNUNET_STREAM_Socket *socket) | |||
748 | 748 | ||
749 | ack_packet = -1; | 749 | ack_packet = -1; |
750 | /* Find the last acknowledged packet */ | 750 | /* Find the last acknowledged packet */ |
751 | for (packet=0; packet < 64; packet++) | 751 | for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++) |
752 | { | 752 | { |
753 | if (GNUNET_YES == ackbitmap_is_bit_set (&io_handle->ack_bitmap, | 753 | if (GNUNET_YES == ackbitmap_is_bit_set (&io_handle->ack_bitmap, |
754 | packet)) | 754 | packet)) |
@@ -849,6 +849,10 @@ call_read_processor (void *cls, | |||
849 | socket->status, | 849 | socket->status, |
850 | socket->receive_buffer + socket->copy_offset, | 850 | socket->receive_buffer + socket->copy_offset, |
851 | valid_read_size); | 851 | valid_read_size); |
852 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
853 | "%x: Read processor completed successfully\n", | ||
854 | socket->our_id); | ||
855 | |||
852 | /* Free the read handle */ | 856 | /* Free the read handle */ |
853 | GNUNET_free (socket->read_handle); | 857 | GNUNET_free (socket->read_handle); |
854 | socket->read_handle = NULL; | 858 | socket->read_handle = NULL; |
@@ -975,7 +979,7 @@ handle_data (struct GNUNET_STREAM_Socket *socket, | |||
975 | expecting */ | 979 | expecting */ |
976 | relative_sequence_number = | 980 | relative_sequence_number = |
977 | ntohl (msg->sequence_number) - socket->read_sequence_number; | 981 | ntohl (msg->sequence_number) - socket->read_sequence_number; |
978 | if ( relative_sequence_number > 64) | 982 | if ( relative_sequence_number > GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH) |
979 | { | 983 | { |
980 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 984 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
981 | "%x: Ignoring received message with sequence number %u\n", | 985 | "%x: Ignoring received message with sequence number %u\n", |
@@ -984,8 +988,21 @@ handle_data (struct GNUNET_STREAM_Socket *socket, | |||
984 | return GNUNET_YES; | 988 | return GNUNET_YES; |
985 | } | 989 | } |
986 | 990 | ||
991 | /* Check if we have already seen this message */ | ||
992 | if (GNUNET_YES == ackbitmap_is_bit_set (&socket->ack_bitmap, | ||
993 | relative_sequence_number)) | ||
994 | { | ||
995 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
996 | "%x: Ignoring already received message with sequence " | ||
997 | "number %u\n", | ||
998 | socket->our_id, | ||
999 | ntohl (msg->sequence_number)); | ||
1000 | return GNUNET_YES; | ||
1001 | } | ||
1002 | |||
987 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1003 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
988 | "%x: Receiving DATA with sequence number: %u and size: %d from %x\n", | 1004 | "%x: Receiving DATA with sequence number: %u and size: %d " |
1005 | "from %x\n", | ||
989 | socket->our_id, | 1006 | socket->our_id, |
990 | ntohl (msg->sequence_number), | 1007 | ntohl (msg->sequence_number), |
991 | ntohs (msg->header.header.size), | 1008 | ntohs (msg->header.header.size), |
@@ -995,7 +1012,6 @@ handle_data (struct GNUNET_STREAM_Socket *socket, | |||
995 | size -= sizeof (struct GNUNET_STREAM_DataMessage); | 1012 | size -= sizeof (struct GNUNET_STREAM_DataMessage); |
996 | relative_offset = ntohl (msg->offset) - socket->read_offset; | 1013 | relative_offset = ntohl (msg->offset) - socket->read_offset; |
997 | bytes_needed = relative_offset + size; | 1014 | bytes_needed = relative_offset + size; |
998 | |||
999 | if (bytes_needed > socket->receive_buffer_size) | 1015 | if (bytes_needed > socket->receive_buffer_size) |
1000 | { | 1016 | { |
1001 | if (bytes_needed <= RECEIVE_BUFFER_SIZE) | 1017 | if (bytes_needed <= RECEIVE_BUFFER_SIZE) |
@@ -1030,7 +1046,7 @@ handle_data (struct GNUNET_STREAM_Socket *socket, | |||
1030 | GNUNET_YES); | 1046 | GNUNET_YES); |
1031 | 1047 | ||
1032 | /* Start ACK sending task if one is not already present */ | 1048 | /* Start ACK sending task if one is not already present */ |
1033 | if (0 == socket->ack_task_id) | 1049 | if (GNUNET_SCHEDULER_NO_TASK == socket->ack_task_id) |
1034 | { | 1050 | { |
1035 | socket->ack_task_id = | 1051 | socket->ack_task_id = |
1036 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_ntoh | 1052 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_ntoh |
@@ -1829,7 +1845,7 @@ handle_ack (struct GNUNET_STREAM_Socket *socket, | |||
1829 | } | 1845 | } |
1830 | 1846 | ||
1831 | if (!((socket->write_sequence_number | 1847 | if (!((socket->write_sequence_number |
1832 | - htonl (ack->base_sequence_number)) < 64)) | 1848 | - htonl (ack->base_sequence_number)) < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH)) |
1833 | { | 1849 | { |
1834 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1850 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1835 | "%x: Received DATA_ACK with unexpected base sequence", | 1851 | "%x: Received DATA_ACK with unexpected base sequence", |
@@ -1859,7 +1875,7 @@ handle_ack (struct GNUNET_STREAM_Socket *socket, | |||
1859 | 1875 | ||
1860 | /* Check if we have received all acknowledgements */ | 1876 | /* Check if we have received all acknowledgements */ |
1861 | need_retransmission = GNUNET_NO; | 1877 | need_retransmission = GNUNET_NO; |
1862 | for (packet=0; packet < 64; packet++) | 1878 | for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++) |
1863 | { | 1879 | { |
1864 | if (NULL == socket->write_handle->messages[packet]) break; | 1880 | if (NULL == socket->write_handle->messages[packet]) break; |
1865 | if (GNUNET_YES != ackbitmap_is_bit_set | 1881 | if (GNUNET_YES != ackbitmap_is_bit_set |
@@ -1876,7 +1892,7 @@ handle_ack (struct GNUNET_STREAM_Socket *socket, | |||
1876 | else /* We have to call the write continuation callback now */ | 1892 | else /* We have to call the write continuation callback now */ |
1877 | { | 1893 | { |
1878 | /* Free the packets */ | 1894 | /* Free the packets */ |
1879 | for (packet=0; packet < 64; packet++) | 1895 | for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++) |
1880 | { | 1896 | { |
1881 | GNUNET_free_non_null (socket->write_handle->messages[packet]); | 1897 | GNUNET_free_non_null (socket->write_handle->messages[packet]); |
1882 | } | 1898 | } |
@@ -2501,6 +2517,9 @@ GNUNET_STREAM_read (struct GNUNET_STREAM_Socket *socket, | |||
2501 | { | 2517 | { |
2502 | struct GNUNET_STREAM_IOReadHandle *read_handle; | 2518 | struct GNUNET_STREAM_IOReadHandle *read_handle; |
2503 | 2519 | ||
2520 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2521 | "%s()\n", __func__); | ||
2522 | |||
2504 | /* Return NULL if there is already a read handle; the user has to cancel that | 2523 | /* Return NULL if there is already a read handle; the user has to cancel that |
2505 | first before continuing or has to wait until it is completed */ | 2524 | first before continuing or has to wait until it is completed */ |
2506 | if (NULL != socket->read_handle) return NULL; | 2525 | if (NULL != socket->read_handle) return NULL; |
@@ -2522,6 +2541,8 @@ GNUNET_STREAM_read (struct GNUNET_STREAM_Socket *socket, | |||
2522 | socket->read_io_timeout_task = GNUNET_SCHEDULER_add_delayed (timeout, | 2541 | socket->read_io_timeout_task = GNUNET_SCHEDULER_add_delayed (timeout, |
2523 | &read_io_timeout, | 2542 | &read_io_timeout, |
2524 | socket); | 2543 | socket); |
2544 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2545 | "%s() END\n", __func__); | ||
2525 | return read_handle; | 2546 | return read_handle; |
2526 | } | 2547 | } |
2527 | 2548 | ||