// we got (http) metadata. void eMP3Decoder::metaDataUpdated(eString meta) { { singleLock s(lock); // must protect access on metadata array eString streamTitle, streamUrl; if (meta.left(6) == "Stream") while (!meta.empty()) { unsigned int eq=meta.find('='); if (eq == eString::npos) break; eString left=meta.left(eq); meta=meta.mid(eq+1); // skip until = eq=meta.find(';'); if (eq == eString::npos) break; eString right=meta.left(eq); meta=meta.mid(eq+1); if (left=="StreamTitle") streamTitle=right; else if (left == "StreamUrl") streamUrl=right; else eDebug("unknown tag: %s = %s", left.c_str(), right.c_str()); } else streamTitle=meta; metadata[0]=streamTitle; metadata[1]=streamUrl; } handler->messages.send(eServiceHandlerMP3::eMP3DecoderMessage(eServiceHandlerMP3::eMP3DecoderMessage::infoUpdated)); }
std::map<eString, eString> getRequestOptions(eString opt, char delimiter) { std::map<eString, eString> result; if (opt[0] == '?') opt = opt.mid(1); while (opt.length()) { unsigned int e = opt.find("="); if (e == eString::npos) e = opt.length(); unsigned int a = opt.find(delimiter, e); if (a == eString::npos) a = opt.length(); eString n = opt.left(e); unsigned int b = opt.find(delimiter, e + 1); if (b == eString::npos) b = (unsigned)-1; eString r = httpUnescape(opt.mid(e + 1, b - e - 1)); result.insert(std::pair<eString, eString>(n, r)); opt = opt.mid(a + 1); } return result; }
static eString getWapZapContent(eString path) { eString tpath, result; unsigned int pos = 0, lastpos = 0, temp = 0; if ((path.find(";", 0)) == eString::npos) path = ";" + path; while ((pos = path.find(";", lastpos)) != eString::npos) { lastpos = pos + 1; if ((temp = path.find(";", lastpos)) != eString::npos) tpath = path.mid(lastpos, temp - lastpos); else tpath = path.mid(lastpos, strlen(path.c_str()) - lastpos); eServiceReference current_service = string2ref(tpath); eServiceInterface *iface = eServiceInterface::getInstance(); // first pass thru is to get all user bouquets eWapNavigatorListDirectory navlist(result, path, tpath, *iface); Signal1<void, const eServiceReference&> signal; signal.connect(slot(navlist, &eWapNavigatorListDirectory::addEntry)); iface->enterDirectory(current_service, signal); eDebug("entered"); iface->leaveDirectory(current_service); eDebug("exited"); } return result; }
eString buildShortServiceName( const eString &str ) { eString tmp; static char stropen[3] = { 0xc2, 0x86, 0x00 }; static char strclose[3] = { 0xc2, 0x87, 0x00 }; unsigned int open=eString::npos-1; while ( (open = str.find(stropen, open+2)) != eString::npos ) { unsigned int close = str.find(strclose, open); if ( close != eString::npos ) tmp += str.mid( open+2, close-(open+2) ); } if ( tmp == "" ) tmp = str; return tmp; }
eLanguageEntry(eListBox<eLanguageEntry>* lb, eString id, eString name) : eListBoxEntry( (eListBox<eListBoxEntry>*)lb), id(id), name(name) { eString language=id; if (id.find('_') != eString::npos) id=id.left(id.find('_')); eString str("country_"); str+=getCountry(id.c_str()); pixmap=eSkin::getActive()->queryImage(str); if (!pixmap) { eDebug("dont find %s use country_missing", str.c_str() ); pixmap=eSkin::getActive()->queryImage(eString("country_missing")); } if (!font.pointSize) font = eSkin::getActive()->queryFont("eListBox.EntryText.normal"); para=0; }
static void updatePPPConfig( const eString &secrets, int flags ) { char sourceA[8192]; // source buffer char destA[8192]; // dest buffer char *source = sourceA; char *dest = destA; FILE *f = fopen("/etc/ppp/pppoe.conf", "r" ); if ( !f ) { eDebug("couldn't open '/etc/ppp/pppoe.conf' for read"); return; } size_t readed = fread(source, 1, sizeof(sourceA), f ); if ( !readed ) { eDebug("couldn't read '/etc/ppp/pppoe.conf'"); return; } uint spos = 0; uint dpos = 0; uint ppos = secrets.find('*'); if ( ppos != eString::npos ) { eString strUser = '******'' + secrets.left(ppos) + "\'\n"; helper( source, dest, spos, dpos, "USER="******"/elitedvb/network/webifport", webifport); eString s; s.sprintf("%d\n", webifport); helper( source, dest, spos, dpos, "ENIGMA_WEB_IF_PORT=", s.c_str() ); helper( source, dest, spos, dpos, "REJECT_WWW=", flags&1?"yes\n":"no\n" ); helper( source, dest, spos, dpos, "REJECT_TELNET=", flags&2?"yes\n":"no\n" ); helper( source, dest, spos, dpos, "REJECT_SAMBA=", flags&4?"yes\n":"no\n" ); helper( source, dest, spos, dpos, "REJECT_FTP=", flags&8?"yes\n":"no\n" ); memcpy( dest+dpos, source+spos, readed - spos ); dpos += readed-spos; fclose(f); f = fopen("/etc/ppp/pppoe.conf", "w"); if ( !f ) { eDebug("couldn't open '/etc/ppp/pppoe.conf' for write"); return; } unsigned int written; if ( (written = fwrite( dest, 1, dpos, f )) != dpos ) eDebug("couldn't write correct count of bytes...\n%d bytes written %d should be written", written, dpos ); fclose(f); }
eString button(int width, eString buttonText, eString buttonColor, eString buttonRef, eString color, bool xml) { eString ref1, ref2; std::stringstream result; if (pdaScreen == 0) { int height = 22; if (buttonRef.find("javascript") == eString::npos) { ref1 = "\"" "self.location.href='"; ref2 = "'\""; } result << "<input name=\"" << buttonText << "\"" " type=\"button\" style=\"width: " << width << "px;" "height: " << height << "px;"; if (buttonColor) { if (buttonColor.find("#") == eString::npos) result << "background-image: url(/" << buttonColor << "); background-repeat: repeat-x; "; else result << "background-color: " << buttonColor << "; "; } if (color) result << "color: " << color << "; "; eString ending = (xml) ? " />" : ">"; result << "\" value=\"" << buttonText << "\" onclick=\"" << ref1 << buttonRef << ref2 << "\"" << ending; } else result << "<a href=\"" << buttonRef << "\"><span class=\"button\">" << buttonText << "</span></a> "; return result.str(); }
static void writeSecretString( const eString &str ) { FILE *f = fopen("/etc/ppp/pap-secrets", "w"); if (!f) eFatal("couldn't create /etc/ppp/pap-secrets"); eString tmp; unsigned int pos = str.find('*'); if ( pos != eString::npos ) { tmp = '\"' + str.left(pos) + "\"\t*\t\"" + str.mid(pos+1, str.length()-pos ) + "\"\n"; } fwrite( tmp.c_str(), 1, tmp.length(), f ); fclose(f); }
static eString wap_web_root(eString request, eString dirpath, eString opts, eHTTPConnection *content) { eString result; std::map<eString,eString> opt = getRequestOptions(opts, ','); eString mode = opt["mode"]; eString spath = opt["path"]; content->local_header["Content-Type"]="text/vnd.wap.wml"; if (mode == "admin") { eString command = opt["command"]; result = admin2(command); } else if (mode == "zap") { if (opts.find("path") == eString::npos) spath = zap[ZAPMODETV][ZAPSUBMODEBOUQUETS]; result = readFile(TEMPLATE_DIR + "wapzap.tmp"); result.strReplace("#BODY#", getWapZapContent(spath)); } else if (mode == "zapto") { eServiceReference current_service = string2ref(spath); if (!(current_service.flags&eServiceReference::isDirectory)) // is playable eZapMain::getInstance()->playService(current_service, eZapMain::psSetMode|eZapMain::psDontAdd); result = "<?xml version=\"1.0\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"><wml><card title=\"Info\"><p>Zap complete.</p></card></wml>"; } else if (mode == "epg") { eString page = opt["page"]; result = wapEPG(atoi(page.c_str())); } else if (mode == "epgDetails") { eString eventID = opt["ID"]; result = wapEPGDetails(spath, eventID); } else if (mode == "addTimerEvent") { result = wapAddTimerEvent(opts); result = "<?xml version=\"1.0\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"><wml><card title=\"Info\"><p>" + result + "</p></card></wml>"; } else if (mode == "timer") { result = wapTimerList(); } else if (mode == "cleanupTimerList") { eTimerManager::getInstance()->cleanupEvents(); eTimerManager::getInstance()->saveTimerList(); //not needed, but in case enigma crashes ;-) result = "<?xml version=\"1.0\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"><wml><card title=\"Info\"><p>Timers cleaned up.</p></card></wml>"; } else if (mode == "clearTimerList") { eTimerManager::getInstance()->clearEvents(); eTimerManager::getInstance()->saveTimerList(); //not needed, but in case enigma crashes ;-) result = "<?xml version=\"1.0\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"><wml><card title=\"Info\"><p>Timer list cleared.</p></card></wml>"; } else { result = readFile(TEMPLATE_DIR + "wap.tmp"); result = getEITC(result, "HTML"); result.strReplace("#SERVICE#", getCurService()); } return result; }
void eTOnlineDialog::init_eTOnlineDialog(eString Login) { setText("T - Online"); cmove(ePoint(140,140)); cresize(eSize(450,270)); eLabel *l = new eLabel(this); l->move(ePoint(10,10)); l->resize(eSize(220,30)); l->setText("Anschlusskennung:"); Kennung = new eTextInputField(this,l); Kennung->move(ePoint(230,10)); Kennung->resize(eSize(200,35)); Kennung->setMaxChars(12); Kennung->setUseableChars("1234567890"); Kennung->loadDeco(); Kennung->setHelpText("Anschlusskennung eingeben mit OK (12 Stellen)"); Kennung->setEditHelpText("Anschlusskennung eingeben (0..9, ok)"); l = new eLabel(this); l->move(ePoint(10,60)); l->resize(eSize(220,30)); l->setText("T-Online Nummer:"); tOnlineNummer = new eTextInputField(this,l); tOnlineNummer->move(ePoint(230,60)); tOnlineNummer->resize(eSize(200,35)); tOnlineNummer->setMaxChars(12); tOnlineNummer->setUseableChars("1234567890"); tOnlineNummer->loadDeco(); tOnlineNummer->setHelpText("T-Online Nummer eingeben mit OK (12 Stellen)"); tOnlineNummer->setEditHelpText("T-Online Nummer eingeben (0..9, ok)"); l = new eLabel(this); l->move(ePoint(10,110)); l->resize(eSize(220,30)); l->setText("Mitbenutzernummer:"); Mitbenutzer = new eTextInputField(this,l); Mitbenutzer->move(ePoint(230,110)); Mitbenutzer->resize(eSize(70,35)); Mitbenutzer->setMaxChars(4); Mitbenutzer->setUseableChars("1234567890"); Mitbenutzer->loadDeco(); Mitbenutzer->setHelpText("Mitbenutzernummer eingeben mit OK (4 Stellen)"); Mitbenutzer->setEditHelpText("Mitbenutzernummer eingeben (0..9, ok)"); ok = new eButton(this); ok->move(ePoint(10,160)); ok->resize(eSize(170,40)); ok->setShortcut("green"); ok->setShortcutPixmap("green"); ok->setText("speichern"); ok->setHelpText("Daten übernehmen und Fenster schliessen"); ok->loadDeco(); CONNECT(ok->selected, eWidget::accept); sbar = new eStatusBar(this); sbar->move( ePoint(0, clientrect.height()-50) ); sbar->resize( eSize( clientrect.width(), 50) ); sbar->loadDeco(); if (Login) { unsigned int pos1 = Login.find("#"), pos2 = Login.find("@"); if ( pos1 != eString::npos && pos2 != eString::npos ) { Kennung->setText(Login.left(12)); tOnlineNummer->setText(Login.mid(12,12)); Mitbenutzer->setText(Login.mid(pos1+1,4)); } } }
eString eMoviePlayer::sout(eString mrl) { eString soutURL = "#"; unsigned int pos = mrl.find_last_of('.'); eString extension = mrl.right(mrl.length() - pos - 1); eString name = "File"; if (mrl.find("dvdsimple:") != eString::npos) { name = "DVD"; extension = "NONE"; } else if (mrl.find("vcd:") != eString::npos) { name = "VCD"; extension = "NONE"; } struct serverConfig server = mpconfig.getServerConfig(); struct videoTypeParms video = mpconfig.getVideoParms(name, extension); eDebug("[MOVIEPLAYER] determine ?sout for mrl: %s", mrl.c_str()); eDebug("[MOVIEPLAYER] transcoding audio: %d, video: %d, subtitles: %d" , video.transcodeAudio, video.transcodeVideo, status.PLG ? status.SUBT : video.soutadd); // add sout (URL encoded) // example (with transcode to mpeg1): // ?sout=#transcode{vcodec=mpgv,vb=2000,acodec=mpga,ab=192,channels=2}:duplicate{dst=std{access=http,mux=ts,url=:8080/dboxstream}} // example (without transcode to mpeg1): // ?sout=#duplicate{dst=std{access=http,mux=ts,url=:8080/dboxstream}} pos = video.videoRatio.find("x"); eString res_horiz = video.videoRatio.left(pos); eString res_vert = video.videoRatio.right(video.videoRatio.length() - pos - 1); eDebug("[MOVIEPLAYER] res_horiz = %s, res_vert = %s", res_horiz.c_str(), res_vert.c_str()); if (video.transcodeVideo || video.transcodeAudio) { soutURL += "transcode{"; if (video.transcodeVideo) { soutURL += "vcodec=" + video.videoCodec; soutURL += ",vb=" + video.videoRate; soutURL += ",width=" + res_horiz; soutURL += ",height=" + res_vert; soutURL += ",fps=" + video.fps; if(status.PLG) { if(status.SUBT) soutURL += ",soverlay"; } else { if (video.soutadd) soutURL += ",soverlay"; } } if (video.transcodeAudio) { if (video.transcodeVideo) soutURL += ","; soutURL += "acodec=mpga,ab=" + video.audioRate + ",channels=2"; } if(status.PLG) { if(status.A_SYNC) soutURL += ",audio-sync"; } else soutURL += ",audio-sync"; soutURL += "}:"; } //soutURL += "duplicate{dst=std{access=http,mux=ts,dst=:" + server.streamingPort + "/dboxstream}}"; soutURL += "standard{access=http,mux=ts,dst=:" + server.streamingPort + "/dboxstream}"; status.A_SYNC=true; status.SUBT = true; eDebug("[MOVIEPLAYER] sout = %s", soutURL.c_str()); return soutURL; }