Example #1
0
void RemoteControlInterface::connectRemote(QString address, QString port, QString name)
{
    bool ok = false;
    quint16 portInt = port.trimmed().toInt(&ok);

    if(ok)
        connectRemote(address.trimmed(), portInt, name);
    else
        emit(disconnected());
}
Example #2
0
bool Transmitter::recConnectSock(int sockID, void* arg) {
	switch (runMode) {
		case CLIENT: {
			receiverConnectSock *conInfo = (receiverConnectSock*) arg;
			return connectRemote(sockID, conInfo->ipAddr, conInfo->port, conInfo);
		}
		case SERVER:
			sockInfo *si = new sockInfo;
			si->flag = WAIT_FIRST_PACKAGE;
			sockMap[sockID] = si;
			break;
	}
	return true;
}
Example #3
0
void ConfigDialog::connectButtonClicked()
{
    if(ui->connectButton->text().remove('&')=="Connect"){
        ui->serverAddress->setEnabled(false);
        ui->serverPort->setEnabled(false);
        ui->remoteName->setEnabled(false);
        ui->connectButton->setEnabled(false);
        ui->connectButton->setText("Connecting");
        emit connectRemote(ui->serverAddress->text(), ui->serverPort->value(), ui->remoteName->text());
        autoConnect= true;
    }else if(ui->connectButton->text().remove('&') == "Disconnect"){
        emit disconnectRemote();
        autoConnect = false;
    }
}
Example #4
0
bool Transmitter::recReceivingPackage(int sockID, void* arg) {
	receiverPackage *recvInfo = (receiverPackage *) arg;

	auto item = sockMap.find(sockID);
	if (item != sockMap.end()) {
		sockInfo &si = *item->second;
		if (si.flag == WAIT_FIRST_PACKAGE) {
			//发送 收到第一包 消息
			wHook->pushAll("Transmitter Receiving First Package", sockID, recvInfo, true);

			/*
			 *    第一包
			 * 	----------------------------------------------------
			 * 	| Random Length | Random Content | IP | PORT | CRC |
			 * 	----------------------------------------------------
			 * 	|       1       |      1 ~ 4     | 4  |   2  |  1  |
			 *    ----------------------------------------------------
			 */
			if (recvInfo->size < 8 || recvInfo->size > 12 || recvInfo->buf[0] > 4) {
				DEBUG("First Package Error : size " << recvInfo->size);
				closeQueue.push(sockID);
				return true;
			}

			if (getDataCRC(recvInfo->buf, recvInfo->size - 1) != recvInfo->buf[recvInfo->size - 1]) {
				DEBUG("First Package CRC Error");
				closeQueue.push(sockID);
				return true;
			}

			uint8_t *offset = &recvInfo->buf[recvInfo->buf[0] + 1];
			in_addr ip = *(in_addr*) offset;
			uint16_t port = *(uint16_t*) (offset + 4);

			connectRemote(sockID, ip, port, nullptr);

			DEBUG("firstPackage ok!");
			return true;
		}

		//发送收到数据包消息
		wHook->pushAll("Transmitter Receiving Data Package", sockID, recvInfo, true);

		if (si.canWrite) {
			auto sock = si.individual->getSocket();
			int sendSize = sock.send(recvInfo->buf, recvInfo->size);
			if (sendSize < 0) {
				DEBUG("sendSize < 0");
			} else if (sendSize < recvInfo->size) {
				si.lastSendBuf = autobuf;
				memcpy(si.lastSendBuf, recvInfo->buf + sendSize, recvInfo->size - sendSize);
				si.lastSendExcess = recvInfo->size - sendSize;

				si.canWrite = false;
				epoll.changeAdd(sock, Sock::EpollSocket::CanWrite);

				//暂停另一边的工作
				DEBUG("===============暂停 " << sockID << " " << si.lastSendExcess);

				wHook->pushAll("Receiver Pause Sock", sockID, nullptr, true);
			}
		} else {
			if (si.lastSendExcess != -1) {
				DEBUG("sock " << sockID << " have some data");
				return false;
			}
			si.lastSendBuf = autobuf;
			memcpy(si.lastSendBuf, recvInfo->buf, recvInfo->size);
			si.lastSendExcess = recvInfo->size;

			//暂停另一边的工作
			DEBUG("暂停 " << sockID);
			wHook->pushAll("Receiver Pause Sock", sockID, nullptr, true);
		}
	} else {
		DEBUG("sock not find");
	}
	return true;
}