All pastes #450950 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-21 04:49 UTC
rendered paste body
// FILENAME = send2.c
// "headdef.h" contains all the headers needed

#include "../include/headdef.h" 

// initializes the socket and check for existance of tile and connect to server
static int init(char *argv[]);
// start sending file with given fd to server
static void send_file(int fd);

static int sd_me;
static struct sockaddr_in sa_other;

int main(int argc, char *argv[])
{
	if (argc != 3) {
		printf("Usage: %s <hostname> <filename>\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	int fd = init(argv);
	send_file(fd);
	return EXIT_SUCCESS;
}

static int init(char *argv[])
{
	// the other's socket address info
	struct hostent *hp;
	et_null(hp = gethostbyname(argv[1]));
	sa_other.sin_addr = *((struct in_addr*)hp->h_addr);
	sa_other.sin_family = hp->h_addrtype;
	sa_other.sin_port = htons(atoi(S_PORT));
	memset(sa_other.sin_zero, '\0', 8);
	
	et_neg1(sd_me = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP));
	et_nzero(connect(sd_me, (struct sockaddr *)&sa_other, sizeof sa_other));
	int fd;
	et_neg1(fd = open(argv[2], O_RDONLY));

	struct nego_pack nego;
	strcpy(nego.hello, HELLO);
	// TODO: add the key here
	// TODO: add the cipher here
	struct stat fst;
	et_neg1(fstat(fd, &fst));
	nego.nbytes = fst.st_size;

	et_neg1(write_all(sd_me, (const char *)&nego, sizeof nego));
	return fd;
}

static void send_file(int fd)
{
	char buf[BUFFER_SIZE];
	ssize_t nread;
	while ((nread = read_all(fd, buf, sizeof buf))) {
		write_all(sd_me, buf, nread);
	}
	ec_nzero(close(fd));
}