void ChooserDlg::slotReadPipe() { int id; QString nam, sts; int cmd = GRecvInt(); switch (cmd) { case G_Ch_AddHost: case G_Ch_ChangeHost: id = GRecvInt(); nam = recvStr(); sts = recvStr(); GRecvInt(); /* swallow willing for now */ if (cmd == G_Ch_AddHost) host_view->insertItem( new ChooserListViewItem( host_view, id, nam, sts ) ); else { QListViewItem *itm = findItem( id ); itm->setText( 0, nam ); itm->setText( 1, sts ); } break; case G_Ch_RemoveHost: delete findItem( GRecvInt() ); break; case G_Ch_BadHost: KFMsgBox::box( this, QMessageBox::Warning, i18n("Unknown host %1").arg( recvStr() ) ); break; case G_Ch_Exit: done( ex_exit ); break; default: /* XXX huuh ...? */ break; } }
int Client::reciever(void *){ std::vector<char> buffer; int recieved; while( connected ){ recieved = recvStr( data->serverSocket, buffer ); if (recieved == 0){ onError("Server closed"); break; }else if (recieved == -1){ onError("Recieve error"); break; } onRecv(buffer); buffer.clear(); } #ifdef _WIN32 closesocket(data->serverSocket); #else close(data->serverSocket); #endif //removeConsoleListener(sender); connected = false; startClient(); return 0; }
bool Connection::receiveArgs() { // Get argc recvMsg(&m_argc); const uint32_t ARG_MAX = 1024; if (m_argc > 0 && m_argc < ARG_MAX) { // Reserve memory for argv m_argv = new const char * [m_argc]; if (!m_argv) { Logger::logError("Connection: reserving memory for argv"); return false; } // Get argv for (uint i = 0; i < m_argc; i++) { m_argv[i] = recvStr(); if (!m_argv[i]) { Logger::logError("Connection: receiving argv[%i]", i); return false; } } } else { Logger::logError("Connection: invalid number of parameters %d", m_argc); return false; } return true; }
bool Connection::receiveLandscapeSplash() { const char* filename = recvStr(); if (!filename) return false; m_landscapeSplashFileName = filename; delete [] filename; return true; }
bool Connection::receiveExec() { const char* filename = recvStr(); if (!filename) return false; m_fileName = filename; delete [] filename; return true; }
bool Connection::receiveEnv() { // Have some "reasonable" limit for environment variables to protect from // malicious data const uint32_t MAX_VARS = 1024; // Get number of environment variables. uint32_t n_vars = 0; recvMsg(&n_vars); if (n_vars > 0 && n_vars < MAX_VARS) { // Get environment variables for (uint32_t i = 0; i < n_vars; i++) { const char * var = recvStr(); if (var == NULL) { Logger::logError("Connection: receiving environ[%i]", i); return false; } // In case of error, just warn and try to continue, as the other side is // going to keep sending the reset of the message. // String pointed to by var shall become part of the environment, so altering // the string shall change the environment, don't free it if (putenv_sanitize(var)) { if (putenv_wrapper(const_cast<char *>(var)) != 0) { Logger::logWarning("Connection: putenv failed"); } } else { delete [] var; var = NULL; Logger::logWarning("Connection: invalid environment data"); } } } else { Logger::logError("Connection: invalid environment variable count %d", n_vars); return false; } return true; }
string Connection::receiveAppName() { uint32_t msg = 0; // Get the action. recvMsg(&msg); if (msg != INVOKER_MSG_NAME) { Logger::logError("Connection: receiving invalid action (%08x)", msg); return string(); } const char* name = recvStr(); if (!name) { Logger::logError("Connection: receiving application name"); return string(); } string appName(name); delete [] name; return appName; }