void MainWindow::on_openIncoming_clicked() { if (ClientReceiveSetup() == 0) { QFile *file = new QFile(QFileDialog::getSaveFileName(this, tr("Save song as"), 0, tr("Music (*.wav)"))); if (file->fileName() != NULL) { ui->openIncoming->setEnabled(false); ui->disconnectIncoming->setEnabled(true); file->open(QIODevice::WriteOnly); ClientListen((HANDLE) _get_osfhandle(file->handle())); } else { ClientCleanup(); } } }
DWORD WINAPI ClientControlThreadSend(LPVOID lpParameter) { char *sendbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); char *recvbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); char *message = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); int flag = (int)lpParameter; int sentb = 0, recvb = 1, totalb = 0, i = 0; wchar_t path[260]; switch (flag) { case GET_UPDATE_SONG_LIST: memset(recvbuff, 0, sizeof(recvbuff)); memset(message, 0, sizeof(message)); sendbuff[0] = flag; sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); numSongs = 0; songRequestDone = 0; while(recvb != SOCKET_ERROR) { recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0); strcat(message, recvbuff); totalb += recvb; if (totalb >= CONTROL_PACKET_SIZE) { if (message[0] == 0) { break; } songList[i] = new char[100]; strcpy(songList[i], message); i++; numSongs++; totalb -= CONTROL_PACKET_SIZE; memset(message, 0, sizeof(message)); } } songRequestDone = 1; break; case SEND_SONG_TO_SERVER: sendbuff[0] = flag; strcat(sendbuff, sendFileName); sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); while(totalb < CONTROL_PACKET_SIZE && recvb != SOCKET_ERROR) { recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0); totalb += recvb; } if (recvbuff[0] == 0) { sendSockClosed = ClientSendSetup(address, sendSock, SERVER_DEFAULT_PORT); ClientSend(hSendFile); } break; case GET_SONG_FROM_SERVER: sendbuff[0] = flag; strcat(sendbuff, recvFileName); mbstowcs(&path[0], recvFileName, strlen(recvFileName)); qDebug() << recvFileName; qDebug() << QString::fromWCharArray(path); DeleteFile(path); hReceiveFile = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); ShowLastErr(false); hReceiveClosed = 1; ClientReceiveSetup(listenSock, CLIENT_DEFAULT_PORT, acceptEvent); ClientListen(); sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); break; default: qDebug() << "Invalid request"; break; } free(sendbuff); free(recvbuff); free(message); return TRUE; }