eString eMountPoint::tryCifsMount(const eString& cmd, int linuxExt) { eString rc; if(linuxExt == 0) { // If we don't want linux extensions on cifs, disable it first eDebug("[MOUNT] disabling linux extensions"); eString procCommand = "echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled"; system(procCommand.c_str()); } // Execute the mount command eDebug("[MOUNT] mounting: %s", cmd.c_str()); if(system(cmd.c_str()) != 0) { rc = _("Mount failed"); } if(linuxExt == 0) { // Enable linux extensions afterwards eDebug("[MOUNT] enabling linux extensions"); eString procCommand = "echo 1 > /proc/fs/cifs/LinuxExtensionsEnabled"; system(procCommand.c_str()); } return rc; }
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; }
eString readFile(eString filename) { eString result; eString line; if (strstr(filename.c_str(), (TEMPLATE_DIR).c_str()) != 0) { const char *pch = strrchr(filename.c_str(), '/'); eString filename2 = TEMPLATE_DIR2 + eString(strdup(pch + 1)); if (access(filename2.c_str(), R_OK) == 0) filename = filename2; } if (strstr(filename.c_str(), (HTDOCS_DIR).c_str()) != 0) { const char *pch = strrchr(filename.c_str(), '/'); eString filename2 = HTDOCS_DIR2 + eString(strdup(pch + 1)); if (access(filename2.c_str(), R_OK) == 0) filename = filename2; } ifstream infile(filename.c_str()); if (infile) while (getline(infile, line, '\n')) result += line + "\n"; return result; }
eString httpUnescape(const eString &string) { eString result; for (unsigned int i = 0; i < string.length(); ++i) { int c = string[i]; switch (c) { case '%': { int value = '%'; if ((i + 1) < string.length()) value = getHex(string[++i]); if ((i + 1) < string.length()) { value <<= 4; value += getHex(string[++i]); } result += value; break; } case '+': result += ' '; break; default: result += c; break; } } return result; }
eString filter_string(eString string) { string.strReplace("\xc2\x86",""); string.strReplace("\xc2\x87",""); string.strReplace("\xc2\x8a"," "); string.strReplace("\"", "'"); return string; }
void FileMap::updateNameIdPair(const eString& chanId, const eString& name) { if (chanId.length() > 0 && name.length() > 0) { channelId2Names[chanId] = name; channelName2Id[name] = chanId; } }
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 icompare(const eString&) ///////////////////// int eString::icompare(const eString& s) { // makes a case insensitive string compare std::string::const_iterator p = begin(), p2 = s.begin(); while ( p != end() && p2 != s.end() ) if ( tolower(*p) != tolower(*p2) ) return tolower(*p) < tolower(*p2) ? -1 : 1; else p++, p2++; return length() == s.length() ? 0 : length() < s.length() ? -1 : 1; }
int remoteType( eString spec ) { if ( spec.length() == 0 ) return inputDefRemoteTypeNone; else { eString prot = spec.left(5); if ( prot == "http:" ) return inputDefRemoteTypeHTTP; else if ( prot == "otid:" ) return inputDefRemoteTypeOTV; else return inputDefRemoteTypeNone; } }
// 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)); }
static eString wapEPGDetails(eString serviceRef, eString eventID) { eString result; eService *current = NULL; eString ext_description; std::stringstream record; int eventid; eString description = "No description available"; sscanf(eventID.c_str(), "%x", &eventid); eDebug("[ENIGMA_DYN] getEPGDetails: serviceRef = %s, ID = %04x", serviceRef.c_str(), eventid); // search for the event... to get the description... eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI(); if (sapi) { eServiceReference ref(string2ref(serviceRef)); current = eDVB::getInstance()->settings->getTransponders()->searchService((eServiceReferenceDVB&)ref); if (current) { EITEvent *event = eEPGCache::getInstance()->lookupEvent((eServiceReferenceDVB&)ref, eventid); if (event) { LocalEventData led; led.getLocalData(event, &description, &ext_description); ext_description.strReplace("\n", "<br/>"); if (!ext_description) ext_description = "No detailed information available"; #ifndef DISABLE_FILE record << "<a href=\"/wap?mode=addTimerEvent" << ",path=" << ref2string(ref) << ",ID=" << std::hex << event->event_id << std::dec << ",start=" << event->start_time << ",duration=" << event->duration << ",descr=" << filter_string(description) << ",channel=" << filter_string(current->service_name) << "\">Record</a>"; #endif delete event; } } } result = readFile(TEMPLATE_DIR + "wapEPGDetails.tmp"); result.strReplace("#EVENT#", filter_string(description)); result.strReplace("#RECORD#", record.str()); result.strReplace("#BODY#", filter_string(ext_description)); return result; }
void eServiceHandlerExternal::addDirectory(void *node, const eString &filename) { for (unsigned int i = 0; i < extensionDirectoryList.size(); i++) { int matchsize = extensionDirectoryList[i].pattern.length(); if (filename.right(matchsize).upper() == extensionDirectoryList[i].pattern.upper()) { eServiceReference ref(id, 0, filename); ref.descr = _("Start player"); eServiceFileHandler::getInstance()->addReference(node, ref); eDebug("Add directory: %s", filename.c_str()); return; } } }
int eSocket::connectToHost(eString hostname, int port) { sockaddr_in serv_addr; struct hostent *server; int res; if (mystate == Invalid) { /* the socket has been closed, create a new socket descriptor */ int s=socket(AF_INET, SOCK_STREAM, 0); mystate=Idle; setSocket(s, 1, mainloop); } if(socketdesc < 0){ error_(errno); return(-1); } server=gethostbyname(hostname.c_str()); if(server==NULL) { eDebug("can't resolve %s", hostname.c_str()); error_(errno); return(-2); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family=AF_INET; memmove(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length); serv_addr.sin_port=htons(port); res=::connect(socketdesc, (const sockaddr*)&serv_addr, sizeof(serv_addr)); if ((res < 0) && (errno != EINPROGRESS) && (errno != EINTR)) { eDebug("can't connect to host: %s", hostname.c_str()); close(); error_(errno); return(-3); } if (res < 0) // EINPROGRESS or EINTR { rsn->setRequested(rsn->getRequested()|eSocketNotifier::Write); mystate=Connecting; } else { mystate=Connection; connected_(); } return(0); }
struct videoTypeParms eMPConfig::getVideoParms(eString name, eString extension) { struct videoTypeParms vparms; extension = extension.upper(); // eDebug("[MPCONFIG] name = %s, extension = %s", name.c_str(), extension.c_str()); vparms.name = "default"; vparms.extension = extension; vparms.videoRate = "1024"; vparms.audioRate = "192"; vparms.videoCodec = "mpeg2"; vparms.videoRatio = "704x576"; vparms.transcodeVideo = false; vparms.transcodeAudio = false; vparms.fps = "25"; vparms.soutadd = false; for ( unsigned int i = 0; i < videoParmList.size(); i++) { if ((videoParmList[i].extension == extension) && (videoParmList[i].name == name)) { vparms = videoParmList[i]; break; } } // eDebug("[MPCONFIG] vparms.extension: %s",vparms.extension.c_str()); return vparms; }
int eEPGSearch::EPGSearching(eString title, int ExactMatch, int CaseSensitive, int TimeSpanSearch, tm beginTime, tm endTime, int Days, int Max_Duration ) { eString search; eString current; int intFound = 0; search = title; if (!ExactMatch && !CaseSensitive) search = title.upper(); SearchResultsEPG.clear(); current = "1:15:fffffffe:12:ffffffff:0:0:0:0:0:"; eServiceInterface *iface=eServiceInterface::getInstance(); if (iface) { if (search != "") { eServiceReference current_service=string2ref(current); eSearchAllTVServices2 conv( *iface, search,ExactMatch, CaseSensitive, TimeSpanSearch, beginTime, endTime, Days, Max_Duration); Signal1<void,const eServiceReference&> signal; signal.connect(slot(conv, &eSearchAllTVServices2::addEntry)); iface->enterDirectory(current_service, signal); iface->leaveDirectory(current_service); } } if (SearchResultsEPG.size() ) intFound = 1; return intFound; }
void eAllowedOpInput::parseConfig(const eString &config) { _clear(); const eU32 configLen = config.length(); eString buffer; for (eU32 i=0; i<configLen; i++) { buffer = ""; while (i < configLen && config[i] != '|') { buffer += config[i++]; } eString left, right; if (!buffer.split(',', left, right)) { eSwap(left, right); } WhereWhat *ww = new WhereWhat; eASSERT(ww != eNULL); ww->index = (left == "" ? -1 : eStrToInt(left)); ww->what = right; m_allowed.append(ww); m_allAllowed.append(new eString(right)); } }
int eListBoxBase::setProperty(const eString &prop, const eString &value) { if (prop == "noPageMovement") { if (value == "off") flags &= ~flagNoPageMovement; else flags |= flagNoPageMovement; } else if (prop == "noUpDownMovement") { if (value == "off") flags &= ~flagNoUpDownMovement; else flags |= flagNoUpDownMovement; } else if (prop=="activeForegroundColor") colorActiveF=eSkin::getActive()->queryScheme(value); else if (prop=="activeBackgroundColor") colorActiveB=eSkin::getActive()->queryScheme(value); else if (prop=="showEntryHelp") setFlags( flagShowEntryHelp ); else if (prop=="columns") setColumns( value?atoi(value.c_str()):1 ); else return eDecoWidget::setProperty(prop, value); return 0; }
int tcpOpen(eString serverIP, int serverPort, int i) { struct sockaddr_in ads; socklen_t adsLen; int fd = -1; int rc = -1; int retry = 0; memset((char *)&ads, 0, sizeof(ads)); ads.sin_family = AF_INET; ads.sin_addr.s_addr = inet_addr(serverIP.c_str()); ads.sin_port = htons(serverPort); adsLen = sizeof(ads); if ((fd = socket(AF_INET, SOCK_STREAM, 0)) != -1) { fcntl(fd, F_SETFL, O_NONBLOCK); retry = 100 * i; while (retry-- > 0 && rc < 0) { if ((rc = connect(fd, (struct sockaddr *)&ads, adsLen)) < 0) usleep(10000); // 10 milliseconds } if (rc < 0) { close(fd); fd = -1; } } eDebug("[MOVIEPLAYER] tcpOpen: socket fd = %d, waited %d milliseconds", fd, (100 * i - retry) * 10); return fd; }
bool eMountPoint::isIdentical(eString mountOn, eString mountDev) { bool found = false; if ((mountOn == localDir) || (mountOn.strReplace("/media/", "/mnt/") == localDir)) { switch (fstype) { case nfsMount: found = (eString().sprintf("%s:%s", remoteHost.c_str(), mountDir.c_str()) == mountDev); if (!found) found = (eString().sprintf("%s:/%s", remoteHost.c_str(), mountDir.c_str()) == mountDev); break; case cifsMount: found = (eString().sprintf("//%s/%s", remoteHost.c_str(), mountDir.c_str()) == mountDev); if (!found) found = (eString().sprintf("//%s/%s", remoteIP.c_str(), mountDir.c_str()) == mountDev); break; case smbMount: found = (eString().sprintf("//%s/%s", remoteHost.upper().c_str(), mountDir.upper().c_str()) == mountDev.upper()); if (!found) found = (eString().sprintf("//%s/%s", remoteIP.c_str(), mountDir.upper().c_str()) == mountDev.upper()); break; #ifdef ENABLE_DEVMOUNTS case deviceMount: found = ((mountOn == localDir) && (mountDev == mountDir) && remoteHost == (eString) ""); break; #endif default: break; } } return found; }
const eString& eListBoxEntryTransponder::redraw(gPainter *rc, const eRect& rect, gColor coActiveB, gColor coActiveF, gColor coNormalB, gColor coNormalF, int state) { bool b = (state == 2); drawEntryRect( rc, rect, coActiveB, coActiveF, coNormalB, coNormalF, b?0:state ); static eString text; text.sprintf("%d / %d / %c", tp->satellite.frequency/1000, tp->satellite.symbol_rate/1000, tp->satellite.polarisation?'V':'H' ); rc->setFont(font); rc->renderText( rect, text ); if ( b ) drawEntryBorder( rc, rect, coActiveB, coActiveF, coNormalB, coNormalF ); return text; }
void eServicePlaylistHandler::addFile(void *node, const eString &filename) { if (filename.right(4).upper()==".M3U") eServiceFileHandler::getInstance()->addReference(node, eServiceReference(id, eServiceReference::mustDescent| eServiceReference::canDescent| eServiceReference::sort1, filename)); }
void eWidget::setShortcut(const eString &shortcutname) { if (shortcut) getTLW()->actionListener.remove(this); shortcut=i_shortcutActions->map.findAction(shortcutname.c_str()); if (shortcut) getTLW()->actionListener.push_back(this); }
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; }
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); }
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; }
void eServiceHandlerDVB::addFile(void *node, const eString &filename) { if (filename.right(3).upper()==".TS") { // struct stat64 s; // if (::stat64(filename.c_str(), &s)) // return; eServiceFileHandler::getInstance()->addReference(node, eServiceReference(id, 0, filename)); } }
static bool fileSystemIsSupported(eString fsname) { eString s; bool found = false; fsname = fsname.upper(); std::ifstream in("/proc/filesystems", std::ifstream::in); // Note /proc/filesystems has two columns, first column could be "nodev", // the second the real fs. We check both here which doesn't harm eDebug("[MOUNT] looking for %s", fsname.c_str()); while (in >> s) { if (found = (s.upper() == fsname)) break; } in.close(); return found; }
eS32 readValInstanciation(const eString& s, int start, int end, eU32* parMap, eF32* params, const eF32* prevParams) { int pos = start; int v = 0; if((pos >= end) || (s.at(pos) != '(')) { return pos; } else { pos++; while((pos < end) && (s.at(pos) != ')')) { if(s.at(pos) == ',') { pos++; continue; } pos = calculateTerm(s, pos, end, parMap, prevParams, params[v++]); eASSERT(pos != -1); } } return pos + 1; }
bool ChannelManager::matchesCurrentShowFlags( eString name ) { if ( name == eString( "UNKNOWN" ) ) return ( showFlags & CM_SHOW_UNKNOWN ); else if ( name == eString( "IGNORE" ) ) return ( showFlags & CM_SHOW_IGNORE ); else if ( name.length() > 0 ) return ( showFlags & CM_SHOW_MAPPED ); else return false; }
// Converts non recommended mountpoints like /mnt/server to /media/server and so on eString eNetworkMountMgr::fixNonRecommendedMountpoint(const eString& _mountpoint) { eString fixedMountpoint; eString mountpoint = _mountpoint; // Add leading slash if(mountpoint.left(1) != "/") { // xxx -> /xxx mountpoint = "/" + mountpoint; } // Remove trailing slash if(mountpoint.right(1) == "/") { // /xxx/ -> /xxx mountpoint = mountpoint.left(mountpoint.length() - 1); } if(mountpoint.left(9) == "/var/mnt/") { // /var/mnt/xxx -> /media/xxx fixedMountpoint = "/media/" + mountpoint.mid(9); } else if(mountpoint == "/hdd") { // /hdd -> /media/hdd fixedMountpoint = "/media/hdd"; } else if((mountpoint == "/mnt") || (mountpoint == "/media") || (mountpoint == "/var/mnt")) { // /mnt, /media, /var/mnt -> /media/server1 // Yes, I've seen people mounting on /mnt or /media fixedMountpoint = "/media/server1"; } else if(mountpoint.left(5) == "/hdd/") { // /hdd/xxx -> /media/hdd/xxx fixedMountpoint = "/media/hdd/" + mountpoint.mid(5); } else if(mountpoint.left(5) == "/mnt/") { // /mnt/xxx -> /media/xxx fixedMountpoint = "/media/" + mountpoint.mid(5); } else { // All other mountpoints are right fixedMountpoint = mountpoint; } eDebug("[MOUNT] original mountpoint '%s' -> recommended '%s'", _mountpoint.c_str(), fixedMountpoint.c_str()); return fixedMountpoint; }