bool FileServerHandler::HandleFileQuery(SocketHandler *socket, QStringList &slist) { QStringList res; if (slist.size() != 4) { LOG(VB_GENERAL, LOG_ERR, QString("Invalid Request. %1") .arg(slist.join("[]:[]"))); res << "EMPTY LIST"; socket->SendStringList(res); return true; } QString wantHost = slist[1]; QString groupname = slist[2]; QString filename = slist[3]; LOG(VB_FILE, LOG_DEBUG, QString("HandleSGFileQuery: myth://%1@%2/%3") .arg(groupname).arg(wantHost).arg(filename)); if ((wantHost.toLower() == gCoreContext->GetHostName().toLower()) || gCoreContext->IsThisHost(wantHost)) { // handle request locally LOG(VB_FILE, LOG_DEBUG, QString("Getting local info")); StorageGroup sg(groupname, gCoreContext->GetHostName()); res = sg.GetFileInfo(filename); if (res.count() == 0) res << "EMPTY LIST"; } else { // handle request on remote server SocketHandler *remsock = NULL; { QReadLocker rlock(&m_fsLock); if (m_fsMap.contains(wantHost)) { remsock = m_fsMap[wantHost]; remsock->IncrRef(); } } if (remsock) { res << "QUERY_SG_FILEQUERY" << wantHost << groupname << filename; remsock->SendReceiveStringList(res); remsock->DecrRef(); } else { res << "SLAVE UNREACHABLE: " << wantHost; } } socket->SendStringList(res); return true; }
SocketHandler *MythSocketManager::GetConnectionBySocket(MythSocket *sock) { QReadLocker rlock(&m_socketLock); if (!m_socketMap.contains(sock)) return NULL; SocketHandler *handler = m_socketMap[sock]; handler->IncrRef(); return handler; }
bool FileServerHandler::HandleGetFileList(SocketHandler *socket, QStringList &slist) { QStringList res; bool fileNamesOnly = false; if (slist.size() == 5) fileNamesOnly = slist[4].toInt(); else if (slist.size() != 4) { LOG(VB_GENERAL, LOG_ERR, QString("Invalid Request. %1") .arg(slist.join("[]:[]"))); res << "EMPTY LIST"; socket->SendStringList(res); return true; } QString host = gCoreContext->GetHostName(); QString wantHost = slist[1]; QString groupname = slist[2]; QString path = slist[3]; LOG(VB_FILE, LOG_INFO, QString("HandleSGGetFileList: group = %1 host = %2 " "path = %3 wanthost = %4") .arg(groupname).arg(host).arg(path).arg(wantHost)); if ((host.toLower() == wantHost.toLower()) || gCoreContext->IsThisHost(wantHost)) { StorageGroup sg(groupname, host); LOG(VB_FILE, LOG_INFO, "Getting local info"); if (fileNamesOnly) res = sg.GetFileList(path); else res = sg.GetFileInfoList(path); if (res.count() == 0) res << "EMPTY LIST"; } else { // handle request on remote server SocketHandler *remsock = NULL; { QReadLocker rlock(&m_fsLock); if (m_fsMap.contains(wantHost)) { remsock = m_fsMap[wantHost]; remsock->IncrRef(); } } if (remsock) { LOG(VB_FILE, LOG_INFO, "Getting remote info"); res << "QUERY_SG_GETFILELIST" << wantHost << groupname << path << QString::number(fileNamesOnly); remsock->SendReceiveStringList(res); remsock->DecrRef(); } else { LOG(VB_FILE, LOG_ERR, QString("Failed to grab slave socket : %1 :") .arg(wantHost)); res << "SLAVE UNREACHABLE: " << wantHost; } } socket->SendStringList(res); return true; }