string RTSPStream::Setup(RTSPMessage *msg) { ostringstream response; // find the client port in the transport params string transport = msg->ValueForOption("transport"); vector<string> components = divideBy(transport, ";"); vector<string> ports; for (vector<string>::iterator it = components.begin(); it != components.end(); it++) { string label = it->substr(0, 12); if (caselesscompare(label, "client_port=")) { ports = divideBy(it->substr(12), "-"); break; } } if (ports.size() == 2) { int portRTP = stoi(ports[0]); int portRTCP = stoi(ports[1]); if (MakeSession(portRTP, portRTCP)) { response << msg->CreateResponse(200, "OK") << "Session: " << m_session << "\r\n"; response << "Transport: RTP/AVP;unicast;client_port=" << portRTP << "-" << portRTCP; response << ";server_port=" << m_portBase << "-" << m_portBase + 1 << "\r\n\r\n"; } } if (response.str().length() == 0) { response << msg->CreateResponse(451, "transport setup failed"); } return response.str(); }
void convertToBase(uint32_t* number, char* buf, int base) { int n = 0; do { int digit = divideBy(number,base); buf[n++] = digits[digit]; } while(!zero(number)); buf[n] = '\0'; reverse(buf); }
void ConvertXml::calcDivisions() { // cout << "ConvertXml::calcDivisions()" << endl; // init integers.clear(); primes.clear(); integers.append(120); // quarter note length primes.append(2); primes.append(3); primes.append(5); primes.append(7); // initialize with required prime numbers // need to use note and rest duration as exported to MusicXML // thus match ConvertXml::write's main loop // loop over all tracks for (auto row = 0; row < song->rowCount(); row++) { TabTrack* trk = song->index(row, 0).data(TabSong::TrackPtrRole).value<TabTrack*>(); trk->calcVoices(); // LVIFIX: is this necessary ? // cout << "part id=P" << it+1 << endl; // loop over all bars for (int ib = 0; ib < trk->bars().size(); ib++) { // cout << "measure number=" << ib + 1 << endl; // loop over all voices in this bar for (int i = 0; i < 2; i++) { // write only voice 1 in single voice tracks, // write all voices in multi voice tracks if ((i == 1) || trk->hasMultiVoices()) { // cout << "voice number=" << i + 1 << endl; // loop over all columns in this bar for (int x = trk->bars()[ib].start; x <= trk->lastColumn(ib); /* nothing */) { /* int tp; int dt; bool tr; bool res; res = trk->getNoteTypeAndDots(x, i, tp, dt, tr); // LVIFIX: error handling ? // false means no note in this column/voice // LVIFIX: add rest handling (see writecol) cout << "x=" << x << " res=" << res << " tp=" << tp << " dt=" << dt << " tr=" << tr << endl; */ QTextStream dummy; x += writeCol(dummy, trk, x, i, false); } // end for (uint x = 0; .... } // end if ((i == 1) || ... } // end for (int i = 0; ... } // end for (uint ib = 0; ... } // end for (unsigned int it = 0; ... // do it: divide by all primes as often as possible for (auto& u : primes) { while (canDivideBy(u)) { divideBy(u); } } // cout << "res=" << integers[0] << endl; divisions = integers[0]; }