Beispiel #1
0
void* createClientNodeThread(void *pArg)
{
	int sent = 0;
	ClientNodeArgument *pNodeArg = (ClientNodeArgument *)pArg;
	char logFileName[LOG_FILE_NAME_LENGTH];
	char dirPath[LOG_FILE_NAME_LENGTH];

	memset(dirPath, 0, LOG_FILE_NAME_LENGTH);

	sprintf(dirPath, "%s/%s", (char *)LOCK_DIR, pNodeArg->clientName);

	memset(logFileName, 0, LOG_FILE_NAME_LENGTH);

	// Send IP string
	sent = NodeNetwork::sendToSocket(pNodeArg->sock, pNodeArg->clientName, NODE_NAME_LENGTH);

	if (sent <= 0)
	{
		delete pNodeArg;

		return NULL;
	}

	// Receive Private IP_Public IP
	int tempLength = NODE_NAME_LENGTH + 1 + strlen(NBUS_PACKET_START_CODE);
	char tempBuffer[tempLength];

	sent = NodeNetwork::receiveFromSocket(pNodeArg->sock, tempBuffer, tempLength-1);

	if (strncmp(NBUS_PACKET_START_CODE, tempBuffer, strlen(NBUS_PACKET_START_CODE)))
	{
		LOGE("Invalid Client Accepted");

		delete pNodeArg;
		return NULL;
	}
	//sent = NodeNetwork::receiveFromSocket(pNodeArg->sock, pNodeArg->clientName, NODE_NAME_LENGTH);

	if (sent <= 0)
	{
		delete pNodeArg;

		return NULL;
	}

	strncpy(pNodeArg->clientName, tempBuffer + strlen(NBUS_PACKET_START_CODE), NODE_NAME_LENGTH);

	snprintf(logFileName, NODE_NAME_LENGTH, "%s", pNodeArg->clientName);
	LOGI("New Client Node Accepted: %s", pNodeArg->clientName);

	ClientNode* pClientNode;

	pClientNode = new ClientNode(pNodeArg->sock, pNodeArg->clientName, pNodeArg->pOwner);

	if (pClientNode->getGID() == 0)
	{
		pClientNode->setGID(pNodeArg->gid);
	}

	pClientNode->prepare(logFileName);

	unlink(dirPath);

	delete pNodeArg;

	return NULL;
}