diff options
author | LRN <lrn1986@gmail.com> | 2013-12-19 18:39:00 +0000 |
---|---|---|
committer | LRN <lrn1986@gmail.com> | 2013-12-19 18:39:00 +0000 |
commit | 7807f8f97bd80aa48e5b699898c29d7eb4046812 (patch) | |
tree | ea03c59126aa246f797465692f8cc739c0e88902 /src/gns | |
parent | 5deae7eff01257e72becc977fffe5b898c0dbc6a (diff) | |
download | gnunet-7807f8f97bd80aa48e5b699898c29d7eb4046812.tar.gz gnunet-7807f8f97bd80aa48e5b699898c29d7eb4046812.zip |
Correctly send trailing empty header
Diffstat (limited to 'src/gns')
-rw-r--r-- | src/gns/gnunet-gns-helper-service-w32.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/gns/gnunet-gns-helper-service-w32.c b/src/gns/gnunet-gns-helper-service-w32.c index 9a17198af..afcce4578 100644 --- a/src/gns/gnunet-gns-helper-service-w32.c +++ b/src/gns/gnunet-gns-helper-service-w32.c | |||
@@ -141,6 +141,11 @@ struct TransmitCallbackContext | |||
141 | */ | 141 | */ |
142 | struct GNUNET_SERVER_TransmitHandle *th; | 142 | struct GNUNET_SERVER_TransmitHandle *th; |
143 | 143 | ||
144 | |||
145 | /** | ||
146 | * Handle for the client to which to send | ||
147 | */ | ||
148 | struct GNUNET_SERVER_Client *client; | ||
144 | }; | 149 | }; |
145 | 150 | ||
146 | 151 | ||
@@ -193,6 +198,17 @@ transmit_callback (void *cls, size_t size, void *buf) | |||
193 | memcpy (buf, tcc->msg, msize); | 198 | memcpy (buf, tcc->msg, msize); |
194 | GNUNET_free (tcc->msg); | 199 | GNUNET_free (tcc->msg); |
195 | GNUNET_free (tcc); | 200 | GNUNET_free (tcc); |
201 | for (tcc = tcc_head; tcc; tcc = tcc->next) | ||
202 | { | ||
203 | if (NULL == tcc->th) | ||
204 | { | ||
205 | tcc->th = GNUNET_SERVER_notify_transmit_ready (tcc->client, | ||
206 | ntohs (tcc->msg->size), | ||
207 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
208 | &transmit_callback, tcc); | ||
209 | break; | ||
210 | } | ||
211 | } | ||
196 | return msize; | 212 | return msize; |
197 | } | 213 | } |
198 | 214 | ||
@@ -218,18 +234,11 @@ transmit (struct GNUNET_SERVER_Client *client, | |||
218 | } | 234 | } |
219 | tcc = GNUNET_new (struct TransmitCallbackContext); | 235 | tcc = GNUNET_new (struct TransmitCallbackContext); |
220 | tcc->msg = msg; | 236 | tcc->msg = msg; |
221 | if (NULL == | 237 | tcc->client = client; |
222 | (tcc->th = | 238 | tcc->th = GNUNET_SERVER_notify_transmit_ready (client, |
223 | GNUNET_SERVER_notify_transmit_ready (client, | 239 | ntohs (msg->size), |
224 | ntohs (msg->size), | 240 | GNUNET_TIME_UNIT_FOREVER_REL, |
225 | GNUNET_TIME_UNIT_FOREVER_REL, | 241 | &transmit_callback, tcc); |
226 | &transmit_callback, tcc))) | ||
227 | { | ||
228 | GNUNET_break (0); | ||
229 | GNUNET_free (msg); | ||
230 | GNUNET_free (tcc); | ||
231 | return; | ||
232 | } | ||
233 | GNUNET_CONTAINER_DLL_insert (tcc_head, tcc_tail, tcc); | 242 | GNUNET_CONTAINER_DLL_insert (tcc_head, tcc_tail, tcc); |
234 | } | 243 | } |
235 | 244 | ||
@@ -355,7 +364,6 @@ process_lookup_result (void* cls, uint32_t rd_count, | |||
355 | } | 364 | } |
356 | size += blobsize; | 365 | size += blobsize; |
357 | } | 366 | } |
358 | size += sizeof (struct GNUNET_MessageHeader); | ||
359 | size_recalc = sizeof (struct GNUNET_W32RESOLVER_GetMessage) + sizeof (WSAQUERYSETW); | 367 | size_recalc = sizeof (struct GNUNET_W32RESOLVER_GetMessage) + sizeof (WSAQUERYSETW); |
360 | msg = GNUNET_malloc (size); | 368 | msg = GNUNET_malloc (size); |
361 | msg->header.size = htons (size - sizeof (struct GNUNET_MessageHeader)); | 369 | msg->header.size = htons (size - sizeof (struct GNUNET_MessageHeader)); |
@@ -518,9 +526,7 @@ process_lookup_result (void* cls, uint32_t rd_count, | |||
518 | } | 526 | } |
519 | he->h_addr_list[j] = NULL; | 527 | he->h_addr_list[j] = NULL; |
520 | } | 528 | } |
521 | msgend = (struct GNUNET_MessageHeader *) ptr; | 529 | msgend = GNUNET_new (struct GNUNET_MessageHeader); |
522 | ptr += sizeof (struct GNUNET_MessageHeader); | ||
523 | size_recalc += sizeof (struct GNUNET_MessageHeader); | ||
524 | 530 | ||
525 | msgend->type = htons (GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); | 531 | msgend->type = htons (GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); |
526 | msgend->size = htons (sizeof (struct GNUNET_MessageHeader)); | 532 | msgend->size = htons (sizeof (struct GNUNET_MessageHeader)); |
@@ -531,6 +537,7 @@ process_lookup_result (void* cls, uint32_t rd_count, | |||
531 | } | 537 | } |
532 | MarshallWSAQUERYSETW (qs, &rq->sc); | 538 | MarshallWSAQUERYSETW (qs, &rq->sc); |
533 | transmit (rq->client, &msg->header); | 539 | transmit (rq->client, &msg->header); |
540 | transmit (rq->client, msgend); | ||
534 | GNUNET_free_non_null (rq->name); | 541 | GNUNET_free_non_null (rq->name); |
535 | if (rq->u8name) | 542 | if (rq->u8name) |
536 | free (rq->u8name); | 543 | free (rq->u8name); |