File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / hping2 / datafiller.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:11:37 2012 UTC (12 years, 3 months ago) by misho
Branches: hping2, MAIN
CVS tags: v2_0_0rc3p7, v2_0_0rc3p5, v2_0_0rc3p4, v2_0_0rc3p0, v2_0_0rc3, HEAD
hping2

    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>