/*************************************************************************** * Copyright (C) 2005 by Joris Guisson * * joris.guisson@gmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "functions.h" #include "error.h" #include "log.h" namespace bt { bool IsMultimediaFile(const TQString & filename) { KMimeType::Ptr ptr = KMimeType::findByPath(filename); TQString name = ptr->name(); return name.startsWith("audio") || name.startsWith("video") || name == "application/ogg"; } TQHostAddress LookUpHost(const TQString & host) { struct hostent * he = gethostbyname(host.ascii()); TQHostAddress addr; if (he) { addr.setAddress(inet_ntoa(*((struct in_addr *)he->h_addr))); } return addr; } TQString DirSeparator() { TQString tmp; tmp.append(TQDir::separator()); return tmp; } void WriteUint64(Uint8* buf,Uint32 off,Uint64 val) { buf[off + 0] = (Uint8) ((val & 0xFF00000000000000ULL) >> 56); buf[off + 1] = (Uint8) ((val & 0x00FF000000000000ULL) >> 48); buf[off + 2] = (Uint8) ((val & 0x0000FF0000000000ULL) >> 40); buf[off + 3] = (Uint8) ((val & 0x000000FF00000000ULL) >> 32); buf[off + 4] = (Uint8) ((val & 0x00000000FF000000ULL) >> 24); buf[off + 5] = (Uint8) ((val & 0x0000000000FF0000ULL) >> 16); buf[off + 6] = (Uint8) ((val & 0x000000000000FF00ULL) >> 8); buf[off + 7] = (Uint8) ((val & 0x00000000000000FFULL) >> 0); } Uint64 ReadUint64(const Uint8* buf,Uint64 off) { Uint64 tmp = ((Uint64)buf[off] << 56) | ((Uint64)buf[off+1] << 48) | ((Uint64)buf[off+2] << 40) | ((Uint64)buf[off+3] << 32) | ((Uint64)buf[off+4] << 24) | ((Uint64)buf[off+5] << 16) | ((Uint64)buf[off+6] << 8) | ((Uint64)buf[off+7] << 0); return tmp; } void WriteUint32(Uint8* buf,Uint32 off,Uint32 val) { buf[off + 0] = (Uint8) ((val & 0xFF000000) >> 24); buf[off + 1] = (Uint8) ((val & 0x00FF0000) >> 16); buf[off + 2] = (Uint8) ((val & 0x0000FF00) >> 8); buf[off + 3] = (Uint8) (val & 0x000000FF); } Uint32 ReadUint32(const Uint8* buf,Uint32 off) { return (buf[off] << 24) | (buf[off+1] << 16) | (buf[off+2] << 8) | buf[off + 3]; } void WriteUint16(Uint8* buf,Uint32 off,Uint16 val) { buf[off + 0] = (Uint8) ((val & 0xFF00) >> 8); buf[off + 1] = (Uint8) (val & 0x000FF); } Uint16 ReadUint16(const Uint8* buf,Uint32 off) { return (buf[off] << 8) | buf[off + 1]; } void WriteInt64(Uint8* buf,Uint32 off,Int64 val) { buf[off + 0] = (Uint8) ((val & 0xFF00000000000000ULL) >> 56); buf[off + 1] = (Uint8) ((val & 0x00FF000000000000ULL) >> 48); buf[off + 2] = (Uint8) ((val & 0x0000FF0000000000ULL) >> 40); buf[off + 3] = (Uint8) ((val & 0x000000FF00000000ULL) >> 32); buf[off + 4] = (Uint8) ((val & 0x00000000FF000000ULL) >> 24); buf[off + 5] = (Uint8) ((val & 0x0000000000FF0000ULL) >> 16); buf[off + 6] = (Uint8) ((val & 0x000000000000FF00ULL) >> 8); buf[off + 7] = (Uint8) ((val & 0x00000000000000FFULL) >> 0); } Int64 ReadInt64(const Uint8* buf,Uint32 off) { Int64 tmp = ((Int64)buf[off] << 56) | ((Int64)buf[off+1] << 48) | ((Int64)buf[off+2] << 40) | ((Int64)buf[off+3] << 32) | ((Int64)buf[off+4] << 24) | ((Int64)buf[off+5] << 16) | ((Int64)buf[off+6] << 8) | ((Int64)buf[off+7] << 0); return tmp; } void WriteInt32(Uint8* buf,Uint32 off,Int32 val) { buf[off + 0] = (Uint8) ((val & 0xFF000000) >> 24); buf[off + 1] = (Uint8) ((val & 0x00FF0000) >> 16); buf[off + 2] = (Uint8) ((val & 0x0000FF00) >> 8); buf[off + 3] = (Uint8) (val & 0x000000FF); } Int32 ReadInt32(const Uint8* buf,Uint32 off) { return (Int32)(buf[off] << 24) | (buf[off+1] << 16) | (buf[off+2] << 8) | buf[off + 3]; } void WriteInt16(Uint8* buf,Uint32 off,Int16 val) { buf[off + 0] = (Uint8) ((val & 0xFF00) >> 8); buf[off + 1] = (Uint8) (val & 0x000FF); } Int16 ReadInt16(const Uint8* buf,Uint32 off) { return (Int16)(buf[off] << 8) | buf[off + 1]; } void UpdateCurrentTime() { global_time_stamp = Now(); } TimeStamp global_time_stamp = 0; Uint64 Now() { struct timeval tv; gettimeofday(&tv,0); global_time_stamp = (Uint64)tv.tv_sec * 1000 + (Uint64)tv.tv_usec * 0.001; return global_time_stamp; } Uint32 MaxOpenFiles() { struct rlimit lim; getrlimit(RLIMIT_NOFILE,&lim); return lim.rlim_cur; } bool MaximizeLimits() { // first get the current limits struct rlimit lim; getrlimit(RLIMIT_NOFILE,&lim); if (lim.rlim_cur != lim.rlim_max) { Out(SYS_GEN|LOG_DEBUG) << "Current limit for number of files : " << lim.rlim_cur << " (" << lim.rlim_max << " max)" << endl; lim.rlim_cur = lim.rlim_max; if (setrlimit(RLIMIT_NOFILE,&lim) < 0) { Out(SYS_GEN|LOG_DEBUG) << "Failed to maximize file limit : " << TQString(strerror(errno)) << endl; return false; } } else { Out(SYS_GEN|LOG_DEBUG) << "File limit allready at maximum " << endl; } getrlimit(RLIMIT_DATA,&lim); if (lim.rlim_cur != lim.rlim_max) { Out(SYS_GEN|LOG_DEBUG) << "Current limit for data size : " << lim.rlim_cur << " (" << lim.rlim_max << " max)" << endl; lim.rlim_cur = lim.rlim_max; if (setrlimit(RLIMIT_DATA,&lim) < 0) { Out(SYS_GEN|LOG_DEBUG) << "Failed to maximize data limit : " << TQString(strerror(errno)) << endl; return false; } } else { Out(SYS_GEN|LOG_DEBUG) << "Data limit allready at maximum " << endl; } return true; } }