diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-09-11 09:37:27 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-09-11 09:37:27 +0000 |
commit | 1ae24ace5ac040dac0b1e9261a7db506b1530ca1 (patch) | |
tree | 0203c175b4f17f716ff0e239abdd4320fd5bece2 /src/stream | |
parent | 7dc9c567366b73f192eaf4eab4570e6119e07000 (diff) | |
download | gnunet-1ae24ace5ac040dac0b1e9261a7db506b1530ca1.tar.gz gnunet-1ae24ace5ac040dac0b1e9261a7db506b1530ca1.zip |
stream option to set packet size
Diffstat (limited to 'src/stream')
-rw-r--r-- | src/stream/stream_api.c | 68 | ||||
-rw-r--r-- | src/stream/test_stream_big.c | 6 | ||||
-rw-r--r-- | src/stream/test_stream_sequence_wraparound.c | 2 |
3 files changed, 49 insertions, 27 deletions
diff --git a/src/stream/stream_api.c b/src/stream/stream_api.c index fe7038dd0..fe494a5a9 100644 --- a/src/stream/stream_api.c +++ b/src/stream/stream_api.c | |||
@@ -63,7 +63,7 @@ | |||
63 | /** | 63 | /** |
64 | * The maximum packet size of a stream packet | 64 | * The maximum packet size of a stream packet |
65 | */ | 65 | */ |
66 | #define MAX_PACKET_SIZE 512//64000 | 66 | #define MAX_PACKET_SIZE 64000 |
67 | 67 | ||
68 | /** | 68 | /** |
69 | * Receive buffer | 69 | * Receive buffer |
@@ -71,12 +71,6 @@ | |||
71 | #define RECEIVE_BUFFER_SIZE 4096000 | 71 | #define RECEIVE_BUFFER_SIZE 4096000 |
72 | 72 | ||
73 | /** | 73 | /** |
74 | * The maximum payload a data message packet can carry | ||
75 | */ | ||
76 | static const size_t max_payload_size = | ||
77 | MAX_PACKET_SIZE - sizeof (struct GNUNET_STREAM_DataMessage); | ||
78 | |||
79 | /** | ||
80 | * states in the Protocol | 74 | * states in the Protocol |
81 | */ | 75 | */ |
82 | enum State | 76 | enum State |
@@ -367,6 +361,16 @@ struct GNUNET_STREAM_Socket | |||
367 | * The offset upto which user has read from the received buffer | 361 | * The offset upto which user has read from the received buffer |
368 | */ | 362 | */ |
369 | uint32_t copy_offset; | 363 | uint32_t copy_offset; |
364 | |||
365 | /** | ||
366 | * The maximum packet size this stream handle will give to mesh | ||
367 | */ | ||
368 | uint16_t max_packet_size; | ||
369 | |||
370 | /** | ||
371 | * The maximum size of the data message payload this stream handle can send | ||
372 | */ | ||
373 | uint16_t max_payload_size; | ||
370 | }; | 374 | }; |
371 | 375 | ||
372 | 376 | ||
@@ -439,6 +443,12 @@ struct GNUNET_STREAM_ListenSocket | |||
439 | * The write sequence number to be set incase of testing | 443 | * The write sequence number to be set incase of testing |
440 | */ | 444 | */ |
441 | uint32_t testing_set_write_sequence_number_value; | 445 | uint32_t testing_set_write_sequence_number_value; |
446 | |||
447 | /** | ||
448 | * The maximum packet size this stream handle will give to mesh | ||
449 | */ | ||
450 | uint16_t max_packet_size; | ||
451 | |||
442 | }; | 452 | }; |
443 | 453 | ||
444 | 454 | ||
@@ -2765,12 +2775,6 @@ new_tunnel_notify (void *cls, | |||
2765 | 2775 | ||
2766 | if (GNUNET_NO == lsocket->listening) | 2776 | if (GNUNET_NO == lsocket->listening) |
2767 | { | 2777 | { |
2768 | // FIXME: socket uninitalized | ||
2769 | // FIXME: cannot use GNUNET_i2s twice in same call (static buffer) | ||
2770 | // LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
2771 | // "%s: Destroying tunnel from peer %s as we don't have the lock\n", | ||
2772 | // GNUNET_i2s (&socket->other_peer), | ||
2773 | // GNUNET_i2s (&socket->other_peer)); | ||
2774 | GNUNET_MESH_tunnel_destroy (tunnel); | 2778 | GNUNET_MESH_tunnel_destroy (tunnel); |
2775 | return NULL; | 2779 | return NULL; |
2776 | } | 2780 | } |
@@ -2783,7 +2787,10 @@ new_tunnel_notify (void *cls, | |||
2783 | socket->retransmit_timeout = lsocket->retransmit_timeout; | 2787 | socket->retransmit_timeout = lsocket->retransmit_timeout; |
2784 | socket->testing_active = lsocket->testing_active; | 2788 | socket->testing_active = lsocket->testing_active; |
2785 | socket->testing_set_write_sequence_number_value = | 2789 | socket->testing_set_write_sequence_number_value = |
2786 | lsocket->testing_set_write_sequence_number_value; | 2790 | lsocket->testing_set_write_sequence_number_value; |
2791 | socket->max_packet_size = lsocket->max_packet_size; | ||
2792 | socket->max_payload_size = | ||
2793 | socket->max_packet_size - sizeof (struct GNUNET_STREAM_DataMessage); | ||
2787 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 2794 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
2788 | "%s: Peer %s initiated tunnel to us\n", | 2795 | "%s: Peer %s initiated tunnel to us\n", |
2789 | GNUNET_i2s (&socket->other_peer), | 2796 | GNUNET_i2s (&socket->other_peer), |
@@ -2955,6 +2962,7 @@ GNUNET_STREAM_open (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
2955 | /* Set defaults */ | 2962 | /* Set defaults */ |
2956 | socket->retransmit_timeout = TIME_REL_SECS (default_timeout); | 2963 | socket->retransmit_timeout = TIME_REL_SECS (default_timeout); |
2957 | socket->testing_active = GNUNET_NO; | 2964 | socket->testing_active = GNUNET_NO; |
2965 | socket->max_packet_size = MAX_PACKET_SIZE; | ||
2958 | va_start (vargs, open_cb_cls); /* Parse variable args */ | 2966 | va_start (vargs, open_cb_cls); /* Parse variable args */ |
2959 | do { | 2967 | do { |
2960 | option = va_arg (vargs, enum GNUNET_STREAM_Option); | 2968 | option = va_arg (vargs, enum GNUNET_STREAM_Option); |
@@ -2976,11 +2984,18 @@ GNUNET_STREAM_open (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
2976 | case GNUNET_STREAM_OPTION_SIGNAL_LISTEN_SUCCESS: | 2984 | case GNUNET_STREAM_OPTION_SIGNAL_LISTEN_SUCCESS: |
2977 | GNUNET_break (0); /* Option irrelevant in STREAM_open */ | 2985 | GNUNET_break (0); /* Option irrelevant in STREAM_open */ |
2978 | break; | 2986 | break; |
2987 | case GNUNET_STREAM_OPTION_MAX_PACKET_SIZE: | ||
2988 | socket->max_packet_size = (uint16_t) va_arg (vargs, unsigned int); | ||
2989 | if (socket->max_packet_size > MAX_PACKET_SIZE) | ||
2990 | socket->max_packet_size = MAX_PACKET_SIZE; | ||
2991 | break; | ||
2979 | case GNUNET_STREAM_OPTION_END: | 2992 | case GNUNET_STREAM_OPTION_END: |
2980 | break; | 2993 | break; |
2981 | } | 2994 | } |
2982 | } while (GNUNET_STREAM_OPTION_END != option); | 2995 | } while (GNUNET_STREAM_OPTION_END != option); |
2983 | va_end (vargs); /* End of variable args parsing */ | 2996 | va_end (vargs); /* End of variable args parsing */ |
2997 | socket->max_payload_size = | ||
2998 | socket->max_packet_size - sizeof (struct GNUNET_STREAM_DataMessage); | ||
2984 | socket->mesh = GNUNET_MESH_connect (cfg, /* the configuration handle */ | 2999 | socket->mesh = GNUNET_MESH_connect (cfg, /* the configuration handle */ |
2985 | socket, /* cls */ | 3000 | socket, /* cls */ |
2986 | NULL, /* No inbound tunnel handler */ | 3001 | NULL, /* No inbound tunnel handler */ |
@@ -3220,6 +3235,7 @@ GNUNET_STREAM_listen (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
3220 | lsocket->retransmit_timeout = TIME_REL_SECS (default_timeout); | 3235 | lsocket->retransmit_timeout = TIME_REL_SECS (default_timeout); |
3221 | lsocket->testing_active = GNUNET_NO; | 3236 | lsocket->testing_active = GNUNET_NO; |
3222 | lsocket->listen_ok_cb = NULL; | 3237 | lsocket->listen_ok_cb = NULL; |
3238 | lsocket->max_packet_size = MAX_PACKET_SIZE; | ||
3223 | listen_timeout = TIME_REL_SECS (60); /* A minute for listen timeout */ | 3239 | listen_timeout = TIME_REL_SECS (60); /* A minute for listen timeout */ |
3224 | va_start (vargs, listen_cb_cls); | 3240 | va_start (vargs, listen_cb_cls); |
3225 | do { | 3241 | do { |
@@ -3243,6 +3259,11 @@ GNUNET_STREAM_listen (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
3243 | lsocket->listen_ok_cb = va_arg (vargs, | 3259 | lsocket->listen_ok_cb = va_arg (vargs, |
3244 | GNUNET_STREAM_ListenSuccessCallback); | 3260 | GNUNET_STREAM_ListenSuccessCallback); |
3245 | break; | 3261 | break; |
3262 | case GNUNET_STREAM_OPTION_MAX_PACKET_SIZE: | ||
3263 | lsocket->max_packet_size = (uint16_t) va_arg (vargs, unsigned int); | ||
3264 | if (lsocket->max_packet_size > MAX_PACKET_SIZE) | ||
3265 | lsocket->max_packet_size = MAX_PACKET_SIZE; | ||
3266 | break; | ||
3246 | case GNUNET_STREAM_OPTION_END: | 3267 | case GNUNET_STREAM_OPTION_END: |
3247 | break; | 3268 | break; |
3248 | } | 3269 | } |
@@ -3355,9 +3376,10 @@ GNUNET_STREAM_write (struct GNUNET_STREAM_Socket *socket, | |||
3355 | break; | 3376 | break; |
3356 | } | 3377 | } |
3357 | 3378 | ||
3358 | if (GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH * max_payload_size < size) | 3379 | if (GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH * socket->max_payload_size < size) |
3359 | size = GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH * max_payload_size; | 3380 | size = GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH * socket->max_payload_size; |
3360 | num_needed_packets = (size + (max_payload_size - 1)) / max_payload_size; | 3381 | num_needed_packets = |
3382 | (size + (socket->max_payload_size - 1)) / socket->max_payload_size; | ||
3361 | io_handle = GNUNET_malloc (sizeof (struct GNUNET_STREAM_IOWriteHandle)); | 3383 | io_handle = GNUNET_malloc (sizeof (struct GNUNET_STREAM_IOWriteHandle)); |
3362 | io_handle->socket = socket; | 3384 | io_handle->socket = socket; |
3363 | io_handle->write_cont = write_cont; | 3385 | io_handle->write_cont = write_cont; |
@@ -3370,16 +3392,16 @@ GNUNET_STREAM_write (struct GNUNET_STREAM_Socket *socket, | |||
3370 | /* Divide the given buffer into packets for sending */ | 3392 | /* Divide the given buffer into packets for sending */ |
3371 | for (packet=0; packet < num_needed_packets; packet++) | 3393 | for (packet=0; packet < num_needed_packets; packet++) |
3372 | { | 3394 | { |
3373 | if ((packet + 1) * max_payload_size < size) | 3395 | if ((packet + 1) * socket->max_payload_size < size) |
3374 | { | 3396 | { |
3375 | payload_size = max_payload_size; | 3397 | payload_size = socket->max_payload_size; |
3376 | packet_size = MAX_PACKET_SIZE; | 3398 | packet_size = socket->max_packet_size; |
3377 | } | 3399 | } |
3378 | else | 3400 | else |
3379 | { | 3401 | { |
3380 | payload_size = size - packet * max_payload_size; | 3402 | payload_size = size - packet * socket->max_payload_size; |
3381 | packet_size = payload_size + sizeof (struct | 3403 | packet_size = |
3382 | GNUNET_STREAM_DataMessage); | 3404 | payload_size + sizeof (struct GNUNET_STREAM_DataMessage); |
3383 | } | 3405 | } |
3384 | io_handle->messages[packet] = GNUNET_malloc (packet_size); | 3406 | io_handle->messages[packet] = GNUNET_malloc (packet_size); |
3385 | io_handle->messages[packet]->header.header.size = htons (packet_size); | 3407 | io_handle->messages[packet]->header.header.size = htons (packet_size); |
diff --git a/src/stream/test_stream_big.c b/src/stream/test_stream_big.c index 119028807..b14429571 100644 --- a/src/stream/test_stream_big.c +++ b/src/stream/test_stream_big.c | |||
@@ -144,7 +144,7 @@ write_completion (void *cls, | |||
144 | 144 | ||
145 | peer = (struct PeerData *) cls; | 145 | peer = (struct PeerData *) cls; |
146 | GNUNET_assert (GNUNET_STREAM_OK == status); | 146 | GNUNET_assert (GNUNET_STREAM_OK == status); |
147 | GNUNET_assert (size < DATA_SIZE); | 147 | GNUNET_assert (size <= DATA_SIZE); |
148 | peer->bytes_wrote += size; | 148 | peer->bytes_wrote += size; |
149 | 149 | ||
150 | if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */ | 150 | if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */ |
@@ -152,7 +152,7 @@ write_completion (void *cls, | |||
152 | peer->io_write_handle = | 152 | peer->io_write_handle = |
153 | GNUNET_STREAM_write (peer->socket, | 153 | GNUNET_STREAM_write (peer->socket, |
154 | ((void *) data) + peer->bytes_wrote, | 154 | ((void *) data) + peer->bytes_wrote, |
155 | DATA_SIZE - peer->bytes_wrote, | 155 | sizeof (data) - peer->bytes_wrote, |
156 | GNUNET_TIME_relative_multiply | 156 | GNUNET_TIME_relative_multiply |
157 | (GNUNET_TIME_UNIT_SECONDS, 5), | 157 | (GNUNET_TIME_UNIT_SECONDS, 5), |
158 | &write_completion, | 158 | &write_completion, |
@@ -190,7 +190,7 @@ stream_write_task (void *cls, | |||
190 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Generation of random data complete\n"); | 190 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Generation of random data complete\n"); |
191 | peer->io_write_handle = GNUNET_STREAM_write (peer->socket, | 191 | peer->io_write_handle = GNUNET_STREAM_write (peer->socket, |
192 | data, | 192 | data, |
193 | DATA_SIZE, | 193 | sizeof (data), |
194 | GNUNET_TIME_relative_multiply | 194 | GNUNET_TIME_relative_multiply |
195 | (GNUNET_TIME_UNIT_SECONDS, 10), | 195 | (GNUNET_TIME_UNIT_SECONDS, 10), |
196 | &write_completion, | 196 | &write_completion, |
diff --git a/src/stream/test_stream_sequence_wraparound.c b/src/stream/test_stream_sequence_wraparound.c index 3ea6596bd..0d908b53b 100644 --- a/src/stream/test_stream_sequence_wraparound.c +++ b/src/stream/test_stream_sequence_wraparound.c | |||
@@ -142,7 +142,7 @@ write_completion (void *cls, | |||
142 | 142 | ||
143 | peer = (struct PeerData *) cls; | 143 | peer = (struct PeerData *) cls; |
144 | GNUNET_assert (GNUNET_STREAM_OK == status); | 144 | GNUNET_assert (GNUNET_STREAM_OK == status); |
145 | GNUNET_assert (size < DATA_SIZE); | 145 | GNUNET_assert (size <= DATA_SIZE); |
146 | peer->bytes_wrote += size; | 146 | peer->bytes_wrote += size; |
147 | 147 | ||
148 | if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */ | 148 | if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */ |