aboutsummaryrefslogtreecommitdiff
path: root/src/gns
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2013-12-19 18:39:00 +0000
committerLRN <lrn1986@gmail.com>2013-12-19 18:39:00 +0000
commit7807f8f97bd80aa48e5b699898c29d7eb4046812 (patch)
treeea03c59126aa246f797465692f8cc739c0e88902 /src/gns
parent5deae7eff01257e72becc977fffe5b898c0dbc6a (diff)
downloadgnunet-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.c39
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);