Annotation of embedaddon/hping2/datafiller.c, revision 1.1.1.1
1.1 misho 1: /*
2: * $smu-mark$
3: * $name: datafiller.c$
4: * $author: Salvatore Sanfilippo <antirez@invece.org>$
5: * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
6: * $license: This software is under GPL version 2 of license$
7: * $date: Fri Nov 5 11:55:47 MET 1999$
8: * $rev: 8$
9: */
10:
11: #include <stdio.h>
12: #include <stdlib.h>
13: #include <unistd.h>
14: #include <sys/types.h>
15: #include <sys/stat.h>
16: #include <fcntl.h>
17: #include <string.h> /* memset */
18:
19: #include "hping2.h"
20: #include "globals.h"
21:
22: void datafiller(char *p, int size)
23: {
24: static int fd = 0;
25: int readed, diff;
26:
27: if (!fd) {
28: fd = open(datafilename, O_RDONLY);
29: if (fd == -1) {
30: perror("[datafiller] open()");
31: fd = 0; /* will retry to open the file for
32: * the next packet */
33: memset(p, 'X', size);
34: return;
35: }
36: }
37:
38: if (p == NULL && fd != -1) { /* seek operation */
39: /* size-1 because packet with id 1 start from 0 */
40: lseek(fd, (data_size-signlen)*(size-1), SEEK_SET);
41: return;
42: }
43:
44: restart: /* if EOF occurs, after rewind, restart */
45:
46: readed = read(fd, p, size);
47: if (readed == size)
48: return;
49: else if (readed == -1) {
50: perror("[datafiller] read()");
51: close(fd);
52: fd = 0; /* will retry to open the file for the next packet */
53: memset(p, 'X', size);
54: return;
55: }
56: else if (readed < size && opt_end == FALSE) {
57: lseek(fd, 0, SEEK_SET);
58: if (readed == 0)
59: goto restart;
60: }
61: else if (readed < size && opt_end == TRUE) {
62: fprintf(stderr, "EOF reached, wait some second than press "
63: "ctrl+c\n");
64: eof_reached = TRUE;
65: } else {
66: printf("[datafiller.c INTERNAL ERROR] readed = %d - "
67: "opt_end == %d\n", readed, opt_end);
68: exit(1);
69: }
70: diff = size - readed;
71: memset(p+readed, '\0', diff); /* padding */
72: lseek(fd, 0, SEEK_SET);
73: return;
74: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>