Ejemplo n.º 1
0
void fileTransferThread::estabilishFileTransfering( const QByteArray &s ) {
	qDebug()<<"Estabilishing file transfering";
	char packet[28];
	quint32 tmp;
	char str[300];
	tmp = ConnectionRequest;
	memcpy(&packet, &tmp, 4);
	memcpy(&packet[4], &rndid, 4);
	char *hash;
	char username[128];
	sprintf(username, settings->profileValue("user/login").toByteArray().data() );
	snprintf(str, sizeof(str), "%08X%s%d", rndid, username, rndid );
	hash=TlenSha1( str, strlen(str) );
	memcpy(&packet[8], hash, 20);
	if( packet == s ) {
		qDebug()<<"Hash control";
		server->close();
		char head[8];
		char ack[4];
		quint32 tmp;
		memcpy(&ack, &rndid, 4);
		tmp = ConnectionRequestAck;
		memcpy(&head, &tmp, 4);
		tmp=4;
		memcpy(&head[4], &tmp, 4);
		socket->write(head, 8);
		socket->write(ack, 4);
		sendFileList();
	} else {
		socket->close();
	}
}
Ejemplo n.º 2
0
int sync_(int *socket,char **buffer)
{
    printf("Sync with server has started.\n");
    if(sendFileList(socket))
    {
        memset(*buffer,0,BUFFER_SIZE);
        int buffer_size = BUFFER_SIZE;
        if(recvRequests(socket,buffer,&buffer_size))
            if(sendFiles(socket,*buffer))
                return 1;
    }
    return 0;
}
Ejemplo n.º 3
0
void NetworkManager::tick()
{
	int dataTotal = 0;

	while (true)
	{
		if(!openProject_.empty()){
			application_->openProject(openProject_.c_str());
			openProject_.clear();
		}
		int dataSent0 = serverDataSent();
		int dataReceived0 = serverDataReceived();

		NetworkEvent event;
		serverTick(&event);

		int dataSent1 = serverDataSent();
		int dataReceived1 = serverDataReceived();

		if (event.eventCode == eDataReceived)
		{
			const std::vector<char>& data = event.data;
            LuaDebugging::studioCommand(data);

			switch (data[0])
			{
				case gptMakeDir:
					createFolder(data);
					break;
				case gptWriteFile:
					createFile(data);
					break;
				case gptPlay:{
					const char* absfilename = g_pathForFile("../luafiles.txt");
					FILE* fos = fopen(absfilename, "wb");
					fwrite(&data[0], data.size(), 1, fos);
					fclose(fos);
					play(data);
				}
					break;
				case gptStop:
					stop();
					break;
				case gptGetFileList:
					sendFileList();
					break;
				case gptSetProjectName:
					setProjectName(data);
					break;
				case gptDeleteFile:
					deleteFile(data);
					break;
				case gptSetProperties:{
					const char* absfilename = g_pathForFile("../properties.bin");
					FILE* fos = fopen(absfilename, "wb");
					fwrite(&data[0], data.size(), 1, fos);
					fclose(fos);
					setProperties(data);
				}
					break;
			}
		}

		int dataDelta = (dataSent1 - dataSent0) + (dataReceived1 - dataReceived0);
		dataTotal += dataDelta;

		if (dataDelta == 0 || dataTotal > 1024)
			break;
	}
}
Ejemplo n.º 4
0
int do_command(char* line, int msgLen, int num) {
	char send_buf[BUFFER_SIZE] = "";
	char recv_buf[BUFFER_SIZE] = "";
	if (lock_id == num) {
		if (clients[num].send == 1) {
			if (clients[num].totalSize > 0) {
				clients[num].totalSize -= msgLen;
				fWriteStrSize(clients[num].myFD, line, msgLen);
				do_send("OK", clients[num].fd);
			} else {
//				do_send("give me Password", clients[num].fd);
//				do_recieve(recv_buf, clients[num].fd);
				println("Password: %s", line);
				do_send("Complete", clients[num].fd);
				char fileName[BUFFER_SIZE];
				strcpy(fileName, clients[num].currentFileName);
				if (addThisFile(fileName, line, num) != 0) {
					println("There is no space for '%s'", fileName);
					do_send("Prob: no space", clients[num].fd);
					return 2;
				}
				println("Receiving file \"%s\" was completed", fileName);
				lock_id = -1;
				close(clients[num].myFD);
			}
		} else {
			if (fEndOfFile(clients[num].myFD) == 0) {
				int len = fReadSome(clients[num].myFD, send_buf,
				BUFFER_SIZE - 5);
				do_send_size(send_buf, len, clients[num].fd);
			} else {
				println("I sent all the file");
				do_send("Complete", clients[num].fd);
				lock_id = -1;
				int dif = (time(NULL ) - clients[num].startTime);
				if (dif == 0)
					dif = 1;
				println("Average transmit speed: %d (KB/Sec)",
						(clients[num].info.st_size / dif) / 1000);
				close(clients[num].myFD);
			}
		}
		return 1;
	}
	int index = 0;
	char next[BUFFER_SIZE];
	memset(next, 0, BUFFER_SIZE);
	index = nextToken(line, next, index);
	int k = -1;
	println("next token is '%s'", next);
	if (strcmp(next, "quit") == 0)
		k = -1; // quit
	else if (strcmp(next, "get-clients-list") == 0) {
		sendClientsList(num);
		k = 0; // send "get-clients-list"
	} else if (strcmp(next, "share") == 0) {
		getFile(index, num, line);
	} else if (strcmp(next, "get-files-list") == 0) {
		sendFileList(num);
		k = 3; // share
	} else if (strcmp(next, "get") == 0) {
		k = sendFile(index, num, line);
//		k =  4; // share
	} else if (strcmp(next, "remove") == 0) {
		removeFile(index, next, num, clients, line);
		k = 5; // remove
	} else if (strcmp(next, "rename") == 0) {
		renameFile(index, next, num, recv_buf, clients, line);
		k = 6; // rename
	} else if (strcmp(next, "msg") == 0) {
		strcpy(line, line + 8);
		char tmpInt[BUFFER_SIZE] = "";
		index = nextToken(line, tmpInt, 0);
		strcpy(line, line + index);
		int targetNum = atoi(tmpInt);
		if (lock_id != targetNum && targetNum < clientCount
				&& clients[targetNum].fd != -1) {
			sendMessage(num, clients, targetNum, recv_buf, line);
		} else
			do_send("Your target may be busy. Try again later!",clients[num].fd);
		k = 7; // msg
	} else if (strcmp(next, "dc") == 0) {
		int q = 0;
		k = 8; // share
	}
	return k;
}