aboutsummaryrefslogtreecommitdiff
path: root/src/stream
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-09-11 09:37:27 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-09-11 09:37:27 +0000
commit1ae24ace5ac040dac0b1e9261a7db506b1530ca1 (patch)
tree0203c175b4f17f716ff0e239abdd4320fd5bece2 /src/stream
parent7dc9c567366b73f192eaf4eab4570e6119e07000 (diff)
downloadgnunet-1ae24ace5ac040dac0b1e9261a7db506b1530ca1.tar.gz
gnunet-1ae24ace5ac040dac0b1e9261a7db506b1530ca1.zip
stream option to set packet size
Diffstat (limited to 'src/stream')
-rw-r--r--src/stream/stream_api.c68
-rw-r--r--src/stream/test_stream_big.c6
-rw-r--r--src/stream/test_stream_sequence_wraparound.c2
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 */
76static 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 */
82enum State 76enum 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 */