Esempio n. 1
0
int main(void) {
	struct UDPsopa sopa = {
		.sop = NULL,
		.pap = NULL,
		.port        = 0, // 0 = pick unused port
		.packet_size = 512,
		.packet_num  = 0,
		.host_port   = 4444
	};
	strcpy(sopa.host_name, "127.0.0.1");
	if (udp_setup(&sopa) != 0) {
		udp_cleanup(&sopa);
		exit(EXIT_FAILURE);
	}

	// additional client setup
	if (SDLNet_ResolveHost(&(sopa.pap->address), sopa.host_name, sopa.host_port) != 0) {
		printf("SDLNet_ResolveHost(&(sopa.pap->address), sopa.host_name, sopa.host_port) != 0\n");
		printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError());
		udp_cleanup(&sopa);
		exit(EXIT_FAILURE);
	}

	srand(123);
	for (;;) {
		sleep(1); // 1 second
		sprintf((char*)sopa.pap->data, "rand_num = %d", rand());
		sopa.pap->len = strlen((char*)sopa.pap->data) + 1;

		const int channel = -1; // -1 = use packet's address as destination
		if (SDLNet_UDP_Send(sopa.sop, channel, sopa.pap) == 0) {
			printf("SDLNet_UDP_Send(sopa.sop, channel, sopa.pap) == 0\n");
			printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError());
			udp_cleanup(&sopa);
			exit(EXIT_FAILURE);
		}

		switch (SDLNet_UDP_Recv(sopa.sop, sopa.pap)) {
		case -1:
			printf("SDLNet_UDP_Recv(sopa.sop, sopa.pap) == -1\n");
			printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError());
			udp_cleanup(&sopa);
			exit(EXIT_FAILURE);
		case 0:
			printf("SDLNet_UDP_Recv(sopa.sop, sopa.pap) == 0 // no packets received\n");
			break;
		case 1:
			sopa.packet_num++;
			udp_print(&sopa);
			break;
		}
	} // for(;;)

	udp_cleanup(&sopa);
	exit(EXIT_SUCCESS);
}
Esempio n. 2
0
static void etherframe_print(u_char *usr, const struct pcap_pkthdr *pkt,
			     const u_char *d, uint16_t ethtype)
{
	struct iphdr *ip;
	struct tcphdr *th;
	struct udphdr *uh;
	uint16_t ethtype_le;

	ethtype_le = ntohs(ethtype);

	switch (ethtype_le) {
	case ETH_P_IP:
		ip = ip_hdr(d);
		sb_append_str(&sb, "IP: ");
		iphdr_print(ip, &sb);

		switch (ip->protocol) {
		case IPPROTO_TCP:
			th = tcp_hdr(d + ip_hdrlen(ip));
			sb_append_str(&sb, "; TCP: ");
			tcp_print(th, &sb);
			break;

		case IPPROTO_UDP:
			uh = udp_hdr(d + ip_hdrlen(ip));
			sb_append_str(&sb, "; UDP: ");
			udp_print(uh, &sb);
			break;

		default:
			sb_append_char(&sb, ' ');
			sb_append_str(&sb, ipproto_str(ip->protocol));
		}

		break;
	default:
		/* FIXME: This code is open to buffer overrun errors */
		sb_append_str(&sb, "ether type: ");
		sb.len += sprintf(sb_curr(&sb), "0x%04x ", ethtype_le);
		sb_append_str(&sb, ethertype_to_str(ethtype_le));
	}
}