Exemple #1
0
UByte PancakeNetworkActivate() {
	UInt16 i;

	if(!numListenSockets) {
		PancakeLoggerFormat(PANCAKE_LOGGER_ERROR, 0, "No network interfaces configured");
		return 0;
	}

	for(i = 0; i < numListenSockets; i++) {
		PancakeSocket *sock = listenSockets[i];

		// Start listening on socket
		if(listen(sock->fd, (Int32) (UNative) sock->data) == -1) {
			Byte *name = PancakeNetworkGetInterfaceName(sock->localAddress);

			PancakeLoggerFormat(PANCAKE_LOGGER_ERROR, 0, "Can't listen on %s: %s", name, strerror(errno));

			PancakeFree(name);
			return 0;
		}

		sock->data = NULL;
	}

	return 1;
}
Exemple #2
0
PANCAKE_API UByte PancakeNetworkInterfaceConfiguration(UByte step, config_setting_t *setting, PancakeConfigurationScope **scope) {
	switch(step) {
		case PANCAKE_CONFIGURATION_INIT: {
			PancakeSocket *socket = PancakeAllocate(sizeof(PancakeSocket));

			/* Used for backlog storage */
			socket->data = (void*) 0x1;
			socket->fd = -1;
			socket->localAddress = PancakeAllocate(sizeof(struct sockaddr));
			socket->onRead = NULL;
			socket->onWrite = NULL;
			socket->onRemoteHangup = NULL;
			socket->flags = 0;
			socket->layer = NULL;

			socket->localAddress->sa_family = 0;
			memset(socket->localAddress->sa_data, 0, sizeof(socket->localAddress->sa_data));

			setting->hook = (void*) socket;
		} break;
		case PANCAKE_CONFIGURATION_DTOR: {
			PancakeSocket *socket = (PancakeSocket*) setting->hook;

			if(socket->fd != -1) {
				close(socket->fd);
			}

			PancakeFree(socket->localAddress);
			PancakeFree(socket);

			// Make library happy
			setting->hook = NULL;
		} break;
	}

	return 1;
}
Exemple #3
0
STATIC UByte PancakeAuthenticationGroupConfiguration(UByte step, config_setting_t *setting, PancakeConfigurationScope **scope) {
	PancakeAuthenticationConfiguration *config;

	if(step == PANCAKE_CONFIGURATION_INIT) {
		config = PancakeAllocate(sizeof(PancakeAuthenticationConfiguration));

		setting->hook = (void*) config;
		config->backend = NULL;
		config->backendData = NULL;
	} else {
		config = (PancakeAuthenticationConfiguration*) setting->hook;
		PancakeFree(config);
	}

	return 1;
}
Exemple #4
0
void PancakeNetworkUnload() {
	PancakeFree(listenSockets);

	HASH_CLEAR(hh, architectures);
}