Lines Matching refs:data

87     } data;
96 grub_int8_t data[TFTP_DEFAULTSIZE_PACKET+2];
128 struct tftphdr *a = (struct tftphdr *) a_->data;
129 struct tftphdr *b = (struct tftphdr *) b_->data;
132 ablock = grub_be_to_cpu16 (a->u.data.block) | (cmpa->wrapgen << 16);
133 bblock = grub_be_to_cpu16 (b->u.data.block) | (cmpb->wrapgen << 16);
159 tftph_ack = (struct tftphdr *) nb_ack.data;
184 struct tftphdr *tftph = (void *) nb->data;
185 tftp_data_t data = file->data;
190 if (nb->tail - nb->data < (grub_ssize_t) sizeof (tftph->opcode))
193 tftph = (struct tftphdr *) nb->data;
197 data->block_size = TFTP_DEFAULTSIZE_PACKET;
198 data->have_oack = 1;
199 for (ptr = nb->data + sizeof (tftph->opcode); ptr < nb->tail;)
202 data->file_size = grub_strtoul ((char *) ptr + sizeof ("tsize\0")
205 data->block_size = grub_strtoul ((char *) ptr + sizeof ("blksize\0")
211 data->block = 0;
213 err = ack (data->sock, 0);
218 if (nb->tail - nb->data < (grub_ssize_t) (sizeof (tftph->opcode)
219 + sizeof (tftph->u.data.block)))
224 err = ack (data->sock, tftph->u.data.block);
232 data block to be outstanding at once. */
233 if (grub_be_to_cpu16(tftph->u.data.block) < data->block)
236 grub_be_to_cpu16(tftph->u.data.block));
237 tftpcmp = alloc_tftp_cmp(nb, data->wrapgen + 1);
240 tftpcmp = alloc_tftp_cmp(nb, data->wrapgen);
247 err = grub_priority_queue_push (data->pq, &tftpcmp);
260 tftpcmp_pp = grub_priority_queue_top (data->pq);
264 tftph = (struct tftphdr *) nb_top->data;
266 (unsigned)grub_be_to_cpu16 (tftph->u.data.block));
267 if (grub_be_to_cpu16 (tftph->u.data.block) >= (data->block + 1) ||
268 (*tftpcmp_pp)->wrapgen > data->wrapgen)
270 grub_priority_queue_pop (data->pq);
275 if ((grub_be_to_cpu16 (tftph->u.data.block) == data->block + 1) ||
276 (data->block == GRUB_USHRT_MAX &&
277 (*tftpcmp_pp)->wrapgen > data->wrapgen &&
278 tftph->u.data.block == 0))
282 data->wrapgen = (*tftpcmp_pp)->wrapgen;
284 grub_priority_queue_pop (data->pq);
289 sizeof (tftph->u.data.block));
292 size = nb_top->tail - nb_top->data;
295 if (data->block == GRUB_USHRT_MAX)
296 data->block = 0;
298 data->block++;
299 if (size < data->block_size)
302 grub_net_udp_close (data->sock);
303 data->sock = NULL;
308 if (size > data->block_size)
310 err = grub_netbuff_unput (nb_top, size - data->block_size);
314 /* If there is data, puts packet in socket list. */
315 if ((nb_top->tail - nb_top->data) > 0)
324 data->error = 1;
325 data->errcode = grub_be_to_cpu16(tftph->u.err.errcode);
336 destroy_pq (tftp_data_t data)
339 while ((cmp_pp = grub_priority_queue_top (data->pq)))
345 grub_priority_queue_destroy (data->pq);
390 tftp_data_t data;
395 data = grub_zalloc (sizeof (*data));
396 if (!data)
408 tftph = (struct tftphdr *) nb.data;
439 err = grub_netbuff_unput (&nb, nb.tail - (nb.data + hdrlen));
444 file->data = data;
446 data->pq = grub_priority_queue_new (sizeof (struct tftp_cmp *), cmp);
447 if (!data->pq)
453 destroy_pq (data);
457 data->sock = grub_net_udp_open (addr,
460 if (!data->sock)
462 destroy_pq (data);
467 nbd = nb.data;
470 nb.data = nbd;
471 err = grub_net_send_udp_packet (data->sock, &nb);
474 grub_net_udp_close (data->sock);
475 destroy_pq (data);
479 if (data->have_oack || data->error)
483 if (!data->have_oack)
485 grub_net_udp_close (data->sock);
486 destroy_pq (data);
487 if (data->error)
488 return tftp_error(data->errcode);
492 file->size = data->file_size;
500 tftp_data_t data = file->data;
502 if (data->sock)
519 tftph = (struct tftphdr *) nb_err.data;
524 err = grub_net_send_udp_packet (data->sock, &nb_err);
528 grub_net_udp_close (data->sock);
530 destroy_pq (data);
531 grub_free (data);