bool SocketManager::processRecordData() { RecordHeader header(m_recordHeader); if(m_socket->bytesAvailable() < header.payloadLength()) { return false; } int expected = header.payloadLength(); QByteArray data; while( data.size() < expected ) { data.append( m_socket->read( expected - data.length() ) ); if (m_socket->bytesAvailable() == 0 ) m_socket->waitForReadyRead(5000); } qint64 bytesRead = data.length(); if(bytesRead != header.payloadLength()) { qFatal("Couldn't read payload - tried to read %d bytes, got %lld", header.payloadLength(), bytesRead); } switch(header.type()) { case RecordHeader::BeginRequestRecord: beginRequest(data); break; case RecordHeader::ParametersRecord: if(!loadParameters(data)) { respond(); } break; case RecordHeader::StandardInputRecord: readStandardInput(data); break; default: qFatal("Don't know how to deal with payload for type %s", ENUM_DEBUG_STRING(RecordHeader,RecordType,header.type())); } m_recordHeader = RecordHeader(); return true; }
void QueryThread::run() { emit message(tr("Query Thread Running...")); connect(&conn_, SIGNAL(message(const QString&)), this, SLOT(onConnectionMessage(const QString&))); connect(&conn_, SIGNAL(error(const DatabaseError&)), this, SIGNAL(error(const DatabaseError&))); connect(&conn_, SIGNAL(connected(const QString&)), this, SLOT(onConnected(const QString&))); connect(&conn_, SIGNAL(disconnected()), this, SLOT(onDisconnected())); connect(&conn_, SIGNAL(queryCompleted(const DeclareSelectCursorQuery&)), this, SIGNAL(queryCompleted(const DeclareSelectCursorQuery&))); connect(&conn_, SIGNAL(queryCompleted(const FetchAllInCursorQuery&)), this, SIGNAL(queryCompleted(const FetchAllInCursorQuery&))); connect(&conn_, SIGNAL(queryCompleted(const CloseCursorQuery&)), this, SIGNAL(queryCompleted(const CloseCursorQuery&))); connect(this, SIGNAL(beginRequest()), &conn_, SLOT(onBeginRequest())); connect(this, SIGNAL(commitRequest()), &conn_, SLOT(onCommitRequest())); connect(this, SIGNAL(rollbackRequest()), &conn_, SLOT(onRollbackRequest())); connect(this, SIGNAL(savepointRequest(const QString&)), &conn_, SLOT(onSavepointRequest(const QString&))); connect(this, SIGNAL(rollbackToSavepointRequest(const QString&)), &conn_, SLOT(onRollbackToSavepointRequest(const QString&))); connect(this, SIGNAL(queryRequest(const DeclareSelectCursorQuery&)), &conn_, SLOT(onQueryRequest(const DeclareSelectCursorQuery&))); connect(this, SIGNAL(queryRequest(const FetchAllInCursorQuery&)), &conn_, SLOT(onQueryRequest(const FetchAllInCursorQuery&))); connect(this, SIGNAL(queryRequest(const CloseCursorQuery&)), &conn_, SLOT(onQueryRequest(const CloseCursorQuery&))); exec(); }
int WebSocketClient::begin(const char* aPath) { // start the GET request beginRequest(); connectionKeepAlive(); int status = get(aPath); if (status == 0) { uint8_t randomKey[16]; char base64RandomKey[25]; // create a random key for the connection upgrade for (int i = 0; i < (int)sizeof(randomKey); i++) { randomKey[i] = random(0x01, 0xff); } memset(base64RandomKey, 0x00, sizeof(base64RandomKey)); b64_encode(randomKey, sizeof(randomKey), (unsigned char*)base64RandomKey, sizeof(base64RandomKey)); // start the connection upgrade sequence sendHeader("Upgrade", "websocket"); sendHeader("Connection", "Upgrade"); sendHeader("Sec-WebSocket-Key", base64RandomKey); sendHeader("Sec-WebSocket-Version", "13"); endRequest(); status = responseStatusCode(); if (status > 0) { skipResponseHeaders(); } } iRxSize = 0; // status code of 101 means success return (status == 101) ? 0 : status; }
int FcgiRequest::begin() { return beginRequest( FCGI_RESPONDER, FCGI_KEEP_CONN ); }
void QueryThread::onBeginRequest() { emit beginRequest(); }