aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-03-10 15:09:21 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-03-10 15:09:21 +0000
commit4281ebb1604cded91b6e6ab57a25cd4751ee81cd (patch)
treecb5b5add50c565fa52c21a4e97244966c1871991 /src
parent532493cd0d5c9aaf4a169e6f609d1c91dbc5b677 (diff)
downloadgnunet-4281ebb1604cded91b6e6ab57a25cd4751ee81cd.tar.gz
gnunet-4281ebb1604cded91b6e6ab57a25cd4751ee81cd.zip
using GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH
Diffstat (limited to 'src')
-rw-r--r--src/stream/stream_api.c43
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
711ackbitmap_is_bit_set (const GNUNET_STREAM_AckBitmap *bitmap, 711ackbitmap_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