void SEGSAdminTool::check_for_config_file() // Does this on application start { // Load settings.cfg if exists ui->output->appendPlainText("Checking for existing configuration file..."); QFileInfo config_file("settings.cfg"); if (config_file.exists()) { QString config_file_path = config_file.absoluteFilePath(); ui->output->appendPlainText("SUCCESS: Configuration file found!"); ui->icon_status_config->setText("<html><head/><body><p><img src=':/icons/icon_good.png'/></p></body></html>"); ui->gen_config_file->setEnabled(false); ui->runDBTool->setEnabled(true); ui->set_up_data_button->setEnabled(true); ui->authserver_start->setEnabled(true); emit readyToRead(config_file_path); } else { ui->output->appendPlainText("WARNING: No settings.cfg file found! Please use the server setup to your left"); ui->icon_status_config->setText("<html><head/><body><p><img src=':/icons/icon_warning.png'/></p></body></html>"); ui->runDBTool->setEnabled(false); // Cannot create DB without settings.cfg ui->createUser->setEnabled(false); // Cannot create user without settings.cfg ui->set_up_data_button->setEnabled(false); // Shouldn't create data before config file exists ui->authserver_start->setEnabled(false); // Shouldn't run authserver if no config file exists } }
void HttpClientHandler::handleRequest() { header = QHttpRequestHeader(header_data); // Out(SYS_WEB|LOG_DEBUG) << "Parsing request : " << header.toString() << endl; if (header.method() == "POST") { if (header.hasContentLength()) { request_data.resize(header.contentLength()); state = WAITING_FOR_CONTENT; bytes_read = 0; if (client->bytesAvailable() > 0) readyToRead(); } } else if (header.method() == "GET") { srv->handleGet(this,header); header_data = ""; request_data.resize(0); } else { srv->handleUnsupportedMethod(this); } }
void SEGSAdminTool::check_for_config_file() // Does this on application start { QPixmap check_icon(":icons/Resources/check.svg"); QPixmap alert_triangle(":icons/Resources/alert-triangle.svg"); // Load settings.cfg if exists ui->output->appendPlainText("Checking for existing configuration file..."); QFileInfo config_file("settings.cfg"); if(config_file.exists()) { QString config_file_path = config_file.absoluteFilePath(); ui->output->appendPlainText("SUCCESS: Configuration file found!"); emit checkConfigVersion(config_file_path); ui->icon_status_config->setPixmap(check_icon); ui->gen_config_file->setEnabled(false); ui->runDBTool->setEnabled(true); ui->set_up_data_button->setEnabled(true); ui->authserver_start->setEnabled(true); ui->settings_button->setEnabled(true); emit readyToRead(config_file_path); } else { ui->output->appendPlainText("WARNING: No settings.cfg file found! Please use the server setup to your left"); ui->icon_status_config->setPixmap(alert_triangle); ui->runDBTool->setEnabled(false); // Cannot create DB without settings.cfg ui->createUser->setEnabled(false); // Cannot create user without settings.cfg ui->set_up_data_button->setEnabled(false); // Shouldn't create data before config file exists ui->authserver_start->setEnabled(false); // Shouldn't run authserver if no config file exists ui->settings_button->setEnabled(false); // Shouldn't be able to edit settings if no config file exists } }
void readyToRead() { if(-1 == inProgressSize) { // We need a size header of sizeof(qint32) if(sizeof(qint32) > (uint)dev->bytesAvailable()) return; // Read size header int read = dev->read((char *)&inProgressSize, sizeof(qint32)); Q_ASSERT(read == sizeof(qint32)); Q_UNUSED(read); // Check sizing constraints if(inProgressSize > maxPacketSize) { QObject::disconnect(dev, SIGNAL(readyRead()), this, SLOT(readyToRead())); QObject::disconnect(dev, SIGNAL(aboutToClose()), this, SLOT(aboutToClose())); QObject::disconnect(dev, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64))); dev = 0; emit invalidPacket(); return; } inProgressSize -= sizeof(qint32); // Need to get trailing data readyToRead(); } else { inProgress.append(dev->read(inProgressSize - inProgress.size())); if(inProgressSize == inProgress.size()) { // Packet has arrived! packets.append(inProgress); inProgressSize = -1; inProgress.clear(); emit readyRead(); // Need to get trailing data readyToRead(); } } }
void readyToRead() { bool gotPackets = false; while (true) { // Get size header (if not in progress) if (-1 == inProgressSize) { // We need a size header of sizeof(qint32) if (sizeof(qint32) > (uint)dev->bytesAvailable()) { if (gotPackets) emit readyRead(); return; // no more data available } // Read size header int read = dev->read((char *)&inProgressSize, sizeof(qint32)); Q_ASSERT(read == sizeof(qint32)); Q_UNUSED(read); // Check sizing constraints if (inProgressSize > maxPacketSize) { QObject::disconnect(dev, SIGNAL(readyRead()), this, SLOT(readyToRead())); QObject::disconnect(dev, SIGNAL(aboutToClose()), this, SLOT(aboutToClose())); QObject::disconnect(dev, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64))); dev = 0; emit invalidPacket(); return; } inProgressSize -= sizeof(qint32); } else { inProgress.append(dev->read(inProgressSize - inProgress.size())); if (inProgressSize == inProgress.size()) { // Packet has arrived! packets.append(inProgress); inProgressSize = -1; inProgress.clear(); waitingForPacket = false; gotPackets = true; } else { if (gotPackets) emit readyRead(); return; // packet in progress is not yet complete } } } }
void HttpClientHandler::readyToRead() { if (state == WAITING_FOR_REQUEST) { while (client->canReadLine()) { QString line = client->readLine(); header_data += line; if (header_data.endsWith("\r\n\r\n")) { // We have got the header, so lets parse it handleRequest(); break; } } } else if (state == WAITING_FOR_CONTENT) { Uint32 ba = client->bytesAvailable(); if (ba + bytes_read < header.contentLength()) { client->readBlock((char*)request_data.data() + bytes_read,ba); bytes_read += ba; } else { Uint32 left = header.contentLength() - bytes_read; client->readBlock((char*)request_data.data() + bytes_read,left); bytes_read += left; srv->handlePost(this,header,request_data); header_data = ""; request_data.resize(0); state = WAITING_FOR_REQUEST; if (client->bytesAvailable() > 0) readyToRead(); } } }
void GTcpSocket::transferAct() { if(shedule_now)return; //если уже идет обмен с внешними буферами, то выходим if(!t_flag) return; //если флаг паузы, то выходим - не переносим ничего и никуда shedule_now = true; //устанавливаем признак выполнения данного метода int interval = 1000; //начальный интервал для подсчета лимита байт на скачивания/передачи if(this->state() != QAbstractSocket::ConnectedState && QSslSocket::bytesAvailable() == 0) { shedule_now = false; if(inbuf->size() > 0)emit readyToRead(); return; } //если сокет был отсоединен и нету данных во внешнем буфеое, то выходим if(!watcher->isNull()) //если таймер запускается не впервые interval = qMin(watcher->elapsed(), interval);//то выбираем наименьшее между начальным значением и интервалом с момента прошлой передачи данных watcher->start(); qint64 inLimit = (inspeed * interval)/1000; //высчитываем лимит приема/передачи qint64 outLimit = (outspeed * interval)/1000; if(outLimit == 0) outLimit = outbuf->size(); // если не утсновлено ограничение на отдачу, то передается все cодержимое выходного буфера qint64 bytesToRead; if(state() != QAbstractSocket::ConnectedState) { bytesToRead = QSslSocket::bytesAvailable(); if(bytesToRead > 2097152 /*2MB*/)bytesToRead = 2097152; } else { bytesToRead = qMin<qint64>(inLimit, QSslSocket::bytesAvailable()); if(QSslSocket::bytesAvailable() > 0) timeout->start(); else if(timeout->elapsed() > timeout_interval*1000 && !timeout->isNull()) { emit error(QSslSocket::SocketTimeoutError); close(); shedule_now = false; return; } } qint64 bytesToWrite = qMin<qint64>(outLimit, outbuf->size()); if(inspeed*2 < readBufferSize()) { qint64 dif = QSslSocket::bytesAvailable() - inspeed*2; if(dif > 50) setReadBufferSize(readBufferSize()-50); else setReadBufferSize(readBufferSize()-dif); } if(inspeed != 0) { int old_size = inbuf->size(); inbuf->resize(old_size + bytesToRead); QSslSocket::readData(inbuf->data() + old_size, bytesToRead); } QSslSocket::writeData(outbuf->data(), bytesToWrite); outbuf->remove(0, bytesToWrite); flush(); shedule_now = false; if(bytesToRead > 0 && inspeed !=0 )emit readyToRead(); else if (inspeed == 0 && QSslSocket::bytesAvailable()!= 0) emit readyToRead(); }