Пример #1
0
void filter_packet_ServerFinished(gnutls_transport_ptr_t fd,
		const unsigned char* buffer, size_t len)
{
	if (match_ServerFinished(buffer, len) && state_packet_ServerFinished.count++ < 3) {
		drop("Server Finished");
	} else {
		filter_run_next(fd, buffer, len);
	}
}
Пример #2
0
void filter_packet_ServerChangeCipherSpec(gnutls_transport_ptr_t fd,
		const unsigned char* buffer, size_t len)
{
	if (match_ServerChangeCipherSpec(buffer, len) && state_packet_ServerChangeCipherSpec.count++ < 3) {
		drop("Server Change Cipher Spec");
	} else {
		filter_run_next(fd, buffer, len);
	}
}
Пример #3
0
void filter_packet_ClientKeyExchange(gnutls_transport_ptr_t fd,
		const unsigned char* buffer, size_t len)
{
	if (match_ClientKeyExchange(buffer, len) && state_packet_ClientKeyExchange.count++ < 3) {
		drop("Client Key Exchange");
	} else {
		filter_run_next(fd, buffer, len);
	}
}
Пример #4
0
void filter_permute_ServerFinished(gnutls_transport_ptr_t fd,
		const unsigned char* buffer, size_t len)
{
	if (match_ServerChangeCipherSpec(buffer, len)
			|| match_ServerFinished(buffer, len)) {
		filter_permute_state_run(&state_permute_ServerFinished, 2, fd, buffer, len);
	} else {
		filter_run_next(fd, buffer, len);
	}
}
Пример #5
0
void filter_permute_ServerHello(gnutls_transport_ptr_t fd,
		const unsigned char* buffer, size_t len)
{
	if (match_ServerHello(buffer, len)
			|| match_ServerKeyExchange(buffer, len)
			|| match_ServerHelloDone(buffer, len)) {
		filter_permute_state_run(&state_permute_ServerHello, 3, fd, buffer, len);
	} else {
		filter_run_next(fd, buffer, len);
	}
}
Пример #6
0
static void filter_permute_state_run(filter_permute_state_t* state, int packetCount,
		gnutls_transport_ptr_t fd, const unsigned char* buffer, size_t len)
{
	unsigned char* data = malloc(len);
	int packet = state->order[state->count];

	memcpy(data, buffer, len);
	state->packets[packet].data = data;
	state->packets[packet].size = len;
	state->count++;

	if (state->count == packetCount) {
		for (packet = 0; packet < packetCount; packet++) {
			filter_run_next(fd, state->packets[packet].data,
					state->packets[packet].size);
		}
		filter_permute_state_free_buffer(state);
		state->count = 0;
	}
}
Пример #7
0
static ssize_t writefn(gnutls_transport_ptr_t fd, const void* buffer, size_t len)
{
	filter_run_next(fd, (const unsigned char*) buffer, len);
	return len;
}