int main(int argc, char *argv[]) /* Process command line. */ { char *command; bzpTime(NULL); dnaUtilOpen(); setMaxAlloc(2LL*1024LL*1024LL*1024LL); optionInit(&argc, argv, options); port = optionInt("port", port); host = optionVal("host", host); netParseSubnet(optionVal("subnet", NULL), subnet); cpuCount = optionInt("cpu", cpuCount); if (argc < 2) usage(); command = argv[1]; if (sameWord(command, "start")) { if (argc < 3) usage(); serverStart(argv+2, argc-2); } else if (sameWord(command, "stop")) { serverStop(); } else if (sameWord(command, "status")) { serverStatus(); } else usage(); return 0; }
bool ServerImpl::listen() { bool retVal = false; if (mServer && mTimer) { if (mServer->listen(mPort)) { mTimer->start(60000); retVal = true; } } emit serverStatus(retVal); return retVal; }
PackageModel::PackageModel( QObject* parent ) : QAbstractItemModel( parent ) , storage( 0 ) { networked = AbstractPackageController::factory( AbstractPackageController::network, this ); installed = AbstractPackageController::factory( AbstractPackageController::installed, this ); // can only have a max of 15 top level items rootItems << installed << networked; //this must stay in sync with installedIndex //and networkedIndex for ( int i = 0; i < rootItems.count(); i++ ) connect( rootItems[i], SIGNAL(updated()), this, SLOT(controllerUpdate()) ); connect( networked, SIGNAL(packageInstalled(InstallControl::PackageInfo)), installed, SLOT(addPackage(InstallControl::PackageInfo)) ); connect( networked, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); connect( networked, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(rowsRemoved(QModelIndex,int,int))); connect( networked, SIGNAL(packageInstalled(InstallControl::PackageInfo)), this, SLOT(packageInstalled(InstallControl::PackageInfo)) ); connect( networked, SIGNAL(serverStatus(QString)), this, SLOT(serverStatusUpdated(QString)) ); // can only have a max of 4 columns, if more are needed, change the // macros used for PackageModel::index(...) below // columnHeads << "Name" << "Size"; QStorageMetaInfo *s = QStorageMetaInfo::instance(); connect( s, SIGNAL(disksChanged()), this, SLOT(publishTargets()) ); connect( this, SIGNAL(targetsUpdated(QStringList)), installed, SLOT(reloadInstalledLocations(QStringList)) ); if ( !QDir( Qtopia::packagePath() ).exists() ) QDir::root().mkpath( Qtopia::packagePath() ); }
int CEclAgentExecutionServer::run() { Owned<IFile> sentinelFile = createSentinelTarget(); removeSentinelFile(sentinelFile); try { Owned<IGroup> serverGroup = createIGroup(daliServers, DALI_SERVER_PORT); initClientProcess(serverGroup, DCR_AgentExec); getAgentQueueNames(queueNames, agentName); queue.setown(createJobQueue(queueNames.str())); queue->connect(); } catch (IException *e) { EXCLOG(e, "Server queue create/connect: "); e->Release(); return -1; } catch(...) { ERRLOG("Terminating unexpectedly"); } CSDSServerStatus serverStatus("HThorServer"); serverStatus.queryProperties()->setProp("@queue",queueNames.str()); serverStatus.queryProperties()->setProp("@cluster", agentName); serverStatus.commitProperties(); writeSentinelFile(sentinelFile); try { while (started) { PROGLOG("AgentExec: Waiting on queue(s) '%s'", queueNames.str()); Owned<IJobQueueItem> item = queue->dequeue(WAIT_FOREVER); if (item.get()) { StringAttr wuid; wuid.set(item->queryWUID()); PROGLOG("AgentExec: Dequeued workunit request '%s'", wuid.get()); try { executeWorkunit(wuid); } catch(IException *e) { EXCLOG(e, "CEclAgentExecutionServer::run: "); } catch(...) { ERRLOG("Unexpected exception in CEclAgentExecutionServer::run caught"); } } else { ERRLOG("Unexpected dequeue of bogus job queue item, exiting agentexec"); removeSentinelFile(sentinelFile);//no reason to restart assert(!started); break; } } } catch (IException *e) { EXCLOG(e, "Server Exception: "); e->Release(); PROGLOG("Exiting"); } try { queue->disconnect(); } catch (IException *e) { EXCLOG(e, "Server queue disconnect: "); e->Release(); } PROGLOG("Exiting agentexec\n"); return 1; }
void QED2KSession::readAlerts() { std::auto_ptr<libed2k::alert> a = m_session->pop_alert(); while (a.get()) { if (libed2k::server_name_resolved_alert* p = dynamic_cast<libed2k::server_name_resolved_alert*>(a.get())) { emit serverNameResolved(QString::fromUtf8(p->endpoint.c_str(), p->endpoint.size())); } if (libed2k::server_connection_initialized_alert* p = dynamic_cast<libed2k::server_connection_initialized_alert*>(a.get())) { emit serverConnectionInitialized(p->client_id, p->tcp_flags, p->aux_port); qDebug() << "server initialized: " << QString::fromStdString(p->name) << " " << QString::fromStdString(p->host) << " " << p->port; } else if (libed2k::server_status_alert* p = dynamic_cast<libed2k::server_status_alert*>(a.get())) { emit serverStatus(p->files_count, p->users_count); } else if (libed2k::server_identity_alert* p = dynamic_cast<libed2k::server_identity_alert*>(a.get())) { emit serverIdentity(QString::fromUtf8(p->server_name.c_str(), p->server_name.size()), QString::fromUtf8(p->server_descr.c_str(), p->server_descr.size())); } else if (libed2k::server_message_alert* p = dynamic_cast<libed2k::server_message_alert*>(a.get())) { emit serverMessage(QString::fromUtf8(p->server_message.c_str(), p->server_message.size())); } else if (libed2k::server_connection_closed* p = dynamic_cast<libed2k::server_connection_closed*>(a.get())) { emit serverConnectionClosed(QString::fromLocal8Bit(p->m_error.message().c_str())); } else if (libed2k::shared_files_alert* p = dynamic_cast<libed2k::shared_files_alert*>(a.get())) { QList<QED2KSearchResultEntry> vRes; vRes.reserve(p->m_files.m_collection.size()); bool bMoreResult = p->m_more; for (size_t n = 0; n < p->m_files.m_collection.size(); ++n) { QED2KSearchResultEntry sre = QED2KSearchResultEntry::fromSharedFileEntry(p->m_files.m_collection[n]); if (sre.isCorrect()) vRes.push_back(sre); } // emit special signal for derived class if (libed2k::shared_directory_files_alert* p2 = dynamic_cast<libed2k::shared_directory_files_alert*>(p)) { emit peerSharedDirectoryFiles( p2->m_np, md4toQString(p2->m_hash), QString::fromUtf8(p2->m_strDirectory.c_str(), p2->m_strDirectory.size()), vRes); } else if (libed2k::ismod_shared_directory_files_alert* p2 = dynamic_cast<libed2k::ismod_shared_directory_files_alert*>(p)) { emit peerIsModSharedFiles(p2->m_np, md4toQString(p2->m_hash), md4toQString(p2->m_dir_hash), vRes); } else { emit searchResult(p->m_np, md4toQString(p->m_hash), vRes, bMoreResult); } } else if (libed2k::listen_failed_alert* p = dynamic_cast<libed2k::listen_failed_alert*>(a.get())) { Q_UNUSED(p) // TODO - process signal - it means we have different client on same port } else if (libed2k::peer_connected_alert* p = dynamic_cast<libed2k::peer_connected_alert*>(a.get())) { emit peerConnected(p->m_np, md4toQString(p->m_hash), p->m_active); } else if (libed2k::peer_disconnected_alert* p = dynamic_cast<libed2k::peer_disconnected_alert*>(a.get())) { emit peerDisconnected(p->m_np, md4toQString(p->m_hash), p->m_ec); } else if (libed2k::peer_message_alert* p = dynamic_cast<libed2k::peer_message_alert*>(a.get())) { emit peerMessage(p->m_np, md4toQString(p->m_hash), QString::fromUtf8(p->m_strMessage.c_str(), p->m_strMessage.size())); } else if (libed2k::peer_captcha_request_alert* p = dynamic_cast<libed2k::peer_captcha_request_alert*>(a.get())) { QPixmap pm; if (!p->m_captcha.empty()) pm.loadFromData((const uchar*)&p->m_captcha[0], p->m_captcha.size()); // avoid windows rtl error emit peerCaptchaRequest(p->m_np, md4toQString(p->m_hash), pm); } else if (libed2k::peer_captcha_result_alert* p = dynamic_cast<libed2k::peer_captcha_result_alert*>(a.get())) { emit peerCaptchaResult(p->m_np, md4toQString(p->m_hash), p->m_nResult); } else if (libed2k::shared_files_access_denied* p = dynamic_cast<libed2k::shared_files_access_denied*>(a.get())) { emit peerSharedFilesAccessDenied(p->m_np, md4toQString(p->m_hash)); } else if (libed2k::shared_directories_alert* p = dynamic_cast<libed2k::shared_directories_alert*>(a.get())) { QStringList qstrl; for (size_t n = 0; n < p->m_dirs.size(); ++n) { qstrl.append(QString::fromUtf8(p->m_dirs[n].c_str(), p->m_dirs[n].size())); } emit peerSharedDirectories(p->m_np, md4toQString(p->m_hash), qstrl); } else if (libed2k::added_transfer_alert* p = dynamic_cast<libed2k::added_transfer_alert*>(a.get())) { QED2KHandle h(p->m_handle); if (!h.is_seed()) m_currentSessionTransfers.insert(h.hash()); if (!m_addTimes.contains(h.hash())) { m_addTimes.insert(h.hash(), QDateTime::currentDateTime()); } if (m_sharedFiles.contains(h.hash())) { emit transferShared(h); } else { emit transferAdded(QED2KHandle(h)); } } else if (libed2k::paused_transfer_alert* p = dynamic_cast<libed2k::paused_transfer_alert*>(a.get())) { emit transferPaused(QED2KHandle(p->m_handle)); } else if (libed2k::resumed_transfer_alert* p = dynamic_cast<libed2k::resumed_transfer_alert*>(a.get())) { emit transferResumed(QED2KHandle(p->m_handle)); } else if (libed2k::deleted_transfer_alert* p = dynamic_cast<libed2k::deleted_transfer_alert*>(a.get())) { emit transferDeleted(QString::fromStdString(p->m_hash.toString())); } else if (libed2k::finished_transfer_alert* p = dynamic_cast<libed2k::finished_transfer_alert*>(a.get())) { QED2KHandle h(p->m_handle); if (m_sharedFiles.contains(h.hash())) { emit transferRestored(h); } else { emit transferFinished(h); } } else if (libed2k::save_resume_data_alert* p = dynamic_cast<libed2k::save_resume_data_alert*>(a.get())) { Preferences pref; QED2KHandle h(p->m_handle); QDateTime t; writeResumeData(p, misc::metadataDirectory(pref.inputDir()), QFile::exists(h.filepath()), m_addTimes.value(h.hash(), t)); } else if (libed2k::transfer_params_alert* p = dynamic_cast<libed2k::transfer_params_alert*>(a.get())) { QFileInfo info(misc::toQStringU(p->m_atp.file_path)); if (info.absoluteDir() == QDir(m_currentPath)) { emit transferParametersReady(p->m_atp, p->m_ec); if (!p->m_ec) m_sharedFiles << addTransfer(p->m_atp).hash(); else qDebug() << "transfer params error: " << misc::toQStringU(p->m_ec.message()); } else { qDebug() << "ignore add transfer parameters for old directory: " << misc::toQStringU(p->m_atp.file_path); } } else if (libed2k::file_renamed_alert* p = dynamic_cast<libed2k::file_renamed_alert*>(a.get())) { emit transferSavePathChanged(QED2KHandle(p->m_handle)); } else if (libed2k::storage_moved_alert* p = dynamic_cast<libed2k::storage_moved_alert*>(a.get())) { emit transferStorageMoved(QED2KHandle(p->m_handle)); } else if (libed2k::file_error_alert* p = dynamic_cast<libed2k::file_error_alert*>(a.get())) { QED2KHandle h(p->m_handle); if (h.is_valid()) { emit fileError(h, QString::fromLocal8Bit(p->error.message().c_str(), p->error.message().size())); h.pause(); } } else if (libed2k::portmap_error_alert* p = dynamic_cast<libed2k::portmap_error_alert*>(a.get())) { qDebug("UPnP Failure, msg: %s", p->message().c_str()); //addConsoleMessage(tr("UPnP/NAT-PMP: Port mapping failure, message: %1") // .arg(misc::toQString(p->message())), "red"); } else if (libed2k::portmap_alert* p = dynamic_cast<libed2k::portmap_alert*>(a.get())) { qDebug("UPnP Success, msg: %s", p->message().c_str()); //addConsoleMessage(tr("UPnP/NAT-PMP: Port mapping successful, message: %1") // .arg(misc::toQString(p->message())), "blue"); } a = m_session->pop_alert(); } // deferred transfers loading and files sharing if (!m_fastTransfers.empty()) { QList<QString> keys = m_fastTransfers.keys(); int counter = 10; while(!keys.empty() && counter != 0 ) { QString key = keys.takeFirst(); libed2k::transfer_resume_data trd = m_fastTransfers.take(key); libed2k::add_transfer_params atp; QString filepath = QDir(m_currentPath).filePath(misc::toQStringU(trd.m_filename.m_collection)); boost::shared_ptr<libed2k::base_tag> onDisk = trd.m_fast_resume_data.getTagByNameId(libed2k::CT_EMULE_RESERVED1); Q_ASSERT(onDisk); if (QFile::exists(filepath) || !onDisk->asBool()) { atp.seed_mode = false; // make full path for transfer startup atp.file_path = filepath.toUtf8().constData(); atp.file_size = trd.m_filesize; atp.file_hash = trd.m_hash; if (trd.m_fast_resume_data.count() > 0) { atp.resume_data = const_cast<std::vector<char>* >( &trd.m_fast_resume_data.getTagByNameId(libed2k::FT_FAST_RESUME_DATA)->asBlob()); } QED2KHandle h = addTransfer(atp); m_sharedFiles << h.hash(); boost::shared_ptr<libed2k::base_tag> addDt = trd.m_fast_resume_data.getTagByNameId(libed2k::CT_EMULE_RESERVED2); if (addDt) { m_addTimes.insert(h.hash(), QDateTime::fromString(misc::toQStringU(addDt->asString()), Qt::ISODate)); } } else { qDebug() << "fast resume data file" << key << " lost target file, remove resume data"; if (QFile::remove(QDir(misc::metadataDirectory(m_currentPath)).filePath(key))) { qDebug() << "fast resume data file erased"; } } --counter; } } else { int counter = 4; while(!m_pendingFiles.empty() && counter != 0) { makeTransferParametersAsync(m_pendingFiles.takeFirst()); --counter; } } }
PackageView::PackageView( QWidget *parent, Qt::WFlags flags ) : QMainWindow( parent, flags ) { setWindowTitle( tr( "Package Manager" )); model = new PackageModel( this ); connect(model, SIGNAL(targetsUpdated(QStringList)), this, SLOT(targetsChanged(QStringList))); connect(model, SIGNAL(serversUpdated(QStringList)), this, SLOT(serversChanged(QStringList))); connect(this, SIGNAL(targetChoiceChanged(QString)), model, SLOT(userTargetChoice(QString))); connect(model, SIGNAL(serverStatus(QString)), this, SLOT(postServerStatus(QString))); connect(model, SIGNAL(newlyInstalled(QModelIndex)), this, SLOT(selectNewlyInstalled(QModelIndex))); //setup view for installed packages installedView = new QTreeView( this ); installedView->setModel( model ); installedView->setRootIndex( model->index(InstalledIndex,0,QModelIndex()) ); installedView->setRootIsDecorated( false ); installedView->setFrameStyle(QFrame::NoFrame); connect( installedView, SIGNAL(activated(QModelIndex)), this, SLOT(activateItem(QModelIndex)) ); connect( model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), installedView, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); connect( model, SIGNAL(rowsRemoved(QModelIndex,int,int)), installedView, SLOT(rowsRemoved(QModelIndex,int,int))); //setup page for installed packages QWidget *installedPage = new QWidget; QVBoxLayout *vbInstalledPage = new QVBoxLayout( installedPage ); vbInstalledPage->setMargin( 0 ); vbInstalledPage->addWidget( installedView ); //setup view for downloadable packages downloadView = new QTreeView( this ); downloadView->setModel( model ); downloadView->setRootIndex( model->index(DownloadIndex,0,QModelIndex()) ); downloadView->setRootIsDecorated( false ); downloadView->setFrameStyle(QFrame::NoFrame); connect( downloadView, SIGNAL(activated(QModelIndex)), this, SLOT(activateItem(QModelIndex)) ); connect( model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), downloadView, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); connect( model, SIGNAL(rowsRemoved(QModelIndex,int,int)), downloadView, SLOT(rowsRemoved(QModelIndex,int,int))); downloadView->setItemDelegate(new DownloadViewDelegate(this)); installedView->setItemDelegate(new ViewDelegate(this)); //setup page for downloadable packages QWidget *downloadPage = new QWidget(this); QVBoxLayout *vbDownloadPage = new QVBoxLayout( downloadPage ); vbDownloadPage->setSpacing( 2 ); vbDownloadPage->setMargin( 2 ); vbDownloadPage->addWidget( downloadView ); statusLabel = new QLabel( "No Server Chosen", this ); statusLabel->setWordWrap( true ); vbDownloadPage->addWidget( statusLabel ); installedView->hideColumn( 1 ); installedView->header()->hide(); downloadView->hideColumn( 1 ); downloadView->header()->hide(); //TODO: install to media card menuTarget = new QMenu( tr( "Install to" ), this ); new PackageManagerService( this ); tabWidget = new QTabWidget( this ); tabWidget->addTab( installedPage, tr( "Installed" ) ); tabWidget->addTab( downloadPage, tr( "Downloads" ) ); setCentralWidget( tabWidget ); KeyFilter *keyFilter = new KeyFilter(tabWidget, this); installedView->installEventFilter(keyFilter); downloadView->installEventFilter(keyFilter); QTimer::singleShot( 0, this, SLOT(init()) ); }
void PackageModel::serverStatusUpdated(const QString &status) { emit serverStatus( activeServer + ": " + status ); }