unsigned int Call::getPeer(unsigned int id) { if (id == getTranslator()) return getClient(); else if (id == getClient()) return getTranslator(); else return 0; }
// SessionManager must be read-locked void Call::sendTimeouts() { Session *cs = sManager->findSessionByUser(getClient()); if (cs) cs->sendPacket_PhoneCallTimeout(false, getTranslator()); Session *ts = sManager->findSessionByUser(getTranslator()); if (ts) ts->sendPacket_PhoneCallTimeout(true, getClient()); }
RDFT getBFTranslator (char* url) { if (startsWith("mailbox://folder/", url)) { char* temp = getMem(strlen(url)); RDFT ans = NULL; sprintf(temp, "mailbox://%s", &url[17]); ans = getTranslator(temp); freeMem(temp); return ans; } else return getTranslator(url); }
// SessionManager must be read-locked int Call::tarificate(Connection *sqlCon) { if (price == PRICE_ERROR) return -1; if (state != ACTIVE && state != END && state != ERROR) { // log(LOG_ERROR, "Call::tarificate Error: wrong state %s (call=%d).", State2String(state), getID()); return 0; } cost = countCost(); log(LOG_ERROR, "doing Call::tarificate cost=%d state=%s (call=%d).", cost, StateToString(state), getID()); Translator *ServerAccount = sManager->getServerAccount(); // long fee = cost * t->getFeePercent(); if (cost > 0) { User::changeBalanceDyn(sqlCon, sManager, getClient(), -cost); User::changeBalanceDyn(sqlCon, sManager, getTranslator(), cost); /* if (!ServerAccount) { // done during billing purchase log(LOG_FATAL, "Call->tarificate: ServerAccount not initialized."); } else { ServerAccount->lock(); ServerAccount->changeBalance(sManager->getCallManager(), cost); ServerAccount->DBWrite(); ServerAccount->unlock(); } */ } // accounted = 0; return 0; }
// CallManager must be locked, SessionManager must be read-locked int Call::sendCallRequestError(int error) { Session *cs = sManager->findSessionByUser(getClient()); if (cs) cs->sendPacket_CallRequestError(error, getID(), false); Session *ts = sManager->findSessionByUser(getTranslator()); if (ts) ts->sendPacket_CallRequestError(error, getID(), true); return 0; }
// CallManager must be locked, SessionManager must be read-locked int Call::sendCallStatuses() { Session *cs = sManager->findSessionByUser(getClient()); if (cs) cs->sendPacket_CallStatus(getID()); Session *ts = sManager->findSessionByUser(getTranslator()); if (ts) ts->sendPacket_CallStatus(getID()); return 0; }
TranslatorTab::TranslatorTab(QWidget *parent) : QWidget(parent) { QTextBrowser *translators = new QTextBrowser; translators->setOpenExternalLinks(true); translators->setFrameShape(QFrame::NoFrame); translators->setFrameShadow(QFrame::Plain); translators->setText(getTranslator()); QPalette p = translators->palette(); p.setColor(QPalette::Base, palette().color(QPalette::Window)); translators->setPalette(p); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(translators); setLayout(mainLayout); }
void Call::setTranslatorBusy(bool busy) { Session *ts = sManager->findSessionByUser(getTranslator()); if (ts) { ts->lock(); Translator *t = dynamic_cast<Translator *>(ts->getUser()); if (t) /* if (t->setBusy(busy)) { vector<Translator> tlist; t->lock(); tlist.push_back(*t); t->unlock(); sManager->Lists_processUpdate(tlist, false); } */ ts->SetTranslatorBusy(busy); ts->unlock(); } }
bool generateKmer( unsigned kmerLength, T &kmer, InputIteratorT current, const InputIteratorT end) { static const Translator defaultTranslator = getTranslator(); for (unsigned todo = kmerLength; todo; --todo, ++current) { if (current == end) { return false; } kmer <<= 2; kmer |= defaultTranslator[*current]; } kmer &= (~((~T(0)) << (2 * kmerLength))); return true; }
/// initialize the internal kmer_, skipping the Ns void initialize() { static const Translator defaultTranslator = getTranslator(); unsigned currentLength = 0; while((current_ < end_) && currentLength + 1 < kmerLength_) { const unsigned baseValue = defaultTranslator[*current_]; if(4 > baseValue) { kmer_ <<= 2; kmer_ |= baseValue; ++currentLength; } else { currentLength = 0; kmer_ = 0; } ++current_; } }
/** ** \brief Retrieve the next k-mer hat does not contain any N. ** ** \param kmer the next kmer if any ** ** \param start the position of the next kmer, if any ** ** \return true if a kmer was produced. False otherwise (the end of the ** sequence has been reached) **/ bool next(T &kmer, InputIteratorT &position) { static const Translator defaultTranslator = getTranslator(); while ((current_ < end_) && (4 <= defaultTranslator[*current_])) { initialize(); } if (current_ < end_) { kmer_ <<= 2; kmer_ |= defaultTranslator[*current_]; kmer_ &= mask_; kmer = kmer_; ++current_; position = current_ - kmerLength_; return true; } else { return false; } }
// save phones to use in case of loosing connection by one of peers // SessionManager must be read-locked int PhoneCall::savePhones() { Session *cs = sManager->findSessionByUser(getClient()); if (!cs || !cs->getUser()) return -1; Client *c = dynamic_cast<Client *>(cs->getUser()); if (c && !(!TRANSLATORS_CALL && dynamic_cast<Translator *>(cs->getUser()))) { c->lock(); strncpy(client_phone, c->getPhone(), MAX_PHONE+1); c->unlock(); } Session *ts = sManager->findSessionByUser(getTranslator()); if (!ts || !ts->getUser()) return -1; Translator *t = dynamic_cast<Translator *>(ts->getUser()); if (t) { t->lock(); strncpy(translator_phone, t->getPhone(), MAX_PHONE+1); t->unlock(); } return 0; }
virtual std::string_view translateOr(std::string_view key, std::string_view vor) const { const Translator* trans = getTranslator(); if (trans) return trans->translateOr(key, vor); return vor; }
void Call::setState(call_state st) { log(LOG_ALL, "call %d[%d->%d] state: %s->%s", getID(), getClient(), getTranslator(), StateToString(state), StateToString(st)); state = st; }