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(); } }
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; }
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; } }
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; }