mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
219 lines
7.3 KiB
C
219 lines
7.3 KiB
C
|
#pragma once
|
||
|
#ifndef global_H_
|
||
|
#define global_H_
|
||
|
|
||
|
#include "config.h"
|
||
|
#include "versions.h"
|
||
|
#include <limits.h>
|
||
|
#include <stdexcept>
|
||
|
|
||
|
// #define INCLUDE_BACKUP_STREAMS 1
|
||
|
// #define INCLUDE_SSL_CERTS 1
|
||
|
|
||
|
#define EL "\n"
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
#define getpid _getpid
|
||
|
#define MAXHOSTNAMELEN 256
|
||
|
#endif
|
||
|
#ifndef MAXHOSTNAMELEN
|
||
|
#ifndef HOST_NAME_MAX
|
||
|
#define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
|
||
|
#endif
|
||
|
#define MAXHOSTNAMELEN HOST_NAME_MAX
|
||
|
#endif
|
||
|
|
||
|
extern config gOptions;
|
||
|
extern size_t gFF_fix;
|
||
|
|
||
|
// manage killed state
|
||
|
const int iskilled() throw();
|
||
|
void setkill(int v) throw();
|
||
|
|
||
|
// manage post-setup handling
|
||
|
const int isPostSetup() throw();
|
||
|
void setPostSetup(int v) throw();
|
||
|
|
||
|
// helper template to throw an exception with a utf8 stream
|
||
|
template<typename T> inline void throwEx(const char *msg) throw(T) { throw T(msg); }
|
||
|
template<typename T> inline void throwEx(const uniString::utf8 &msg) throw(T) { throw T(msg.hideAsString()); }
|
||
|
template<typename T> inline void throwEx(const std::string &msg) throw(T) { throw T(msg); }
|
||
|
|
||
|
// subclass used to distinguish between error messages that are already labeled
|
||
|
// with [<subsystem>] and those that aren't
|
||
|
class tagged_error: public std::runtime_error
|
||
|
{
|
||
|
public:
|
||
|
explicit tagged_error(const std::string &s):runtime_error(s){}
|
||
|
};
|
||
|
|
||
|
|
||
|
struct parserInfo
|
||
|
{
|
||
|
unsigned long m_mask;
|
||
|
unsigned long m_pattern;
|
||
|
unsigned int m_samplerate;
|
||
|
int m_version;
|
||
|
int m_bitrate;
|
||
|
unsigned m_frameCount;
|
||
|
unsigned m_reduce;
|
||
|
float m_duration;
|
||
|
bool m_inUse;
|
||
|
std::string m_description;
|
||
|
|
||
|
virtual int verifyFrame (const unsigned char *buf, unsigned int len) = 0;
|
||
|
virtual const std::string &getDescription() const { return m_description; }
|
||
|
virtual const char *getVersionName() const = 0;
|
||
|
|
||
|
parserInfo(unsigned long mask = 0, unsigned long v = 0) { m_mask = mask; m_pattern = v; m_samplerate = m_bitrate = 0; m_inUse = false; m_frameCount = m_reduce = 0; m_duration = 0.0; m_version = 0; }
|
||
|
virtual int getUvoxType() = 0;
|
||
|
virtual ~parserInfo() {}
|
||
|
};
|
||
|
|
||
|
/////////////// various strings /////////////////////////////
|
||
|
|
||
|
void constructMessageResponses();
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_INVALIDPASSWORD;
|
||
|
extern const int MSG_INVALIDPASSWORD_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_VALIDPASSWORD;
|
||
|
extern const int MSG_VALIDPASSWORD_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP_VALIDPASSWORD;
|
||
|
extern const int MSG_HTTP_VALIDPASSWORD_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_BADSTREAMID;
|
||
|
extern const int MSG_BADSTREAMID_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_STREAMINUSE;
|
||
|
extern const int MSG_STREAMINUSE_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_STREAMMOVED;
|
||
|
extern const int MSG_STREAMMOVED_LEN;
|
||
|
|
||
|
extern uniString::utf8 MSG_ICY_HTTP401;
|
||
|
extern uniString::utf8 MSG_ICY200;
|
||
|
extern uniString::utf8 MSG_ICY_HTTP200;
|
||
|
extern uniString::utf8 MSG_UVOX_HTTP200;
|
||
|
|
||
|
extern int MSG_ICY_HTTP401_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_AUTHFAILURE401;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_200;
|
||
|
extern const uniString::utf8::value_type* MSG_NO_CLOSE_200;
|
||
|
extern const uniString::utf8::value_type* MSG_STD200;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP400;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP403;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP404;
|
||
|
extern const int MSG_HTTP404_LEN;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP405;
|
||
|
|
||
|
extern const uniString::utf8::value_type* MSG_HTTP503;
|
||
|
extern const int MSG_HTTP503_LEN;
|
||
|
|
||
|
extern uniString::utf8 g_userAgentBase; // user agent for sc_serv2
|
||
|
extern uniString::utf8 g_userAgent; // user agent for sc_serv2
|
||
|
|
||
|
extern time_t g_upTime;
|
||
|
const uniString::utf8 timeString(const time_t t, const bool slim = false) throw();
|
||
|
|
||
|
const bool isUserAgentRelay(const uniString::utf8 &user_agent) throw();
|
||
|
const bool isUserAgentOfficial(const uniString::utf8 &user_agent) throw();
|
||
|
|
||
|
const uniString::utf8 redirect(const uniString::utf8 &url, bool compress) throw();
|
||
|
const uniString::utf8 urlLink(const uniString::utf8 &url, const uniString::utf8 &text = "", const bool embed = false) throw();
|
||
|
|
||
|
const uniString::utf8 http302(const uniString::utf8 &url) throw();
|
||
|
|
||
|
const uniString::utf8 addWBR(const uniString::utf8 &str) throw();
|
||
|
|
||
|
uniString::utf8 getfooterStr();
|
||
|
uniString::utf8 getHTML5Remover();
|
||
|
uniString::utf8 getIEFlexFix();
|
||
|
uniString::utf8 getStreamListeners(const size_t sid, const bool nowrap, const int fh);
|
||
|
|
||
|
extern uniString::utf8 g_IPAddressForClients; // address clients will connect to
|
||
|
extern u_short g_portForClients; // port clients will connect to, generally portBase
|
||
|
extern int g_legacyPort; // port legacy v1 sources will connect to, or not
|
||
|
|
||
|
const bool reloadConfig(int force);
|
||
|
void reloadBanLists();
|
||
|
void reloadRipLists();
|
||
|
void reloadAdminAccessList();
|
||
|
void reloadAgentLists();
|
||
|
void rotatew3cFiles(uniString::utf8 files);
|
||
|
|
||
|
const uniString::utf8 loadLocalFile(uniFile::filenameType fn, const uniString::utf8& logPrefix = "", const size_t sizeLimit = 0);
|
||
|
|
||
|
const uniString::utf8 escapeJSON(const uniString::utf8 &s) throw();
|
||
|
|
||
|
// creates GZIP (RFC 1952) encoded output as
|
||
|
// either one go or in blocks for logs, etc
|
||
|
#include <zlib.h>
|
||
|
const bool compressData(uniString::utf8 &body);
|
||
|
const bool compressDataStart(uniString::utf8 &body, z_stream *stream, Bytef* name = (Bytef*)"sc_serv.log\0", bool local = true);
|
||
|
const int compressDataCont(uniString::utf8 &body, z_stream *stream);
|
||
|
void compressDataFinish(uniString::utf8 &body, z_stream *stream);
|
||
|
const bool compressDataEnd(z_stream *stream);
|
||
|
|
||
|
|
||
|
// used for getting and setting modified dates on relevant http responses
|
||
|
// set use = 0 for current time, otherwise pass in a time_t as needed
|
||
|
const uniString::utf8 getRFCDate(const time_t use);
|
||
|
const time_t readRFCDate(const uniString::utf8& str);
|
||
|
#ifdef _WIN32
|
||
|
char *strptime(const char *buf, const char *format, struct tm *timeptr);
|
||
|
#endif
|
||
|
const uniString::utf8 getStreamPath(const size_t sid, const bool for_public = false);
|
||
|
|
||
|
const bool isCDNMaster(size_t sid);
|
||
|
const bool isCDNSlave(size_t sid);
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
#define localtime_s(x,y) localtime_r(y,x)
|
||
|
#else
|
||
|
#define snprintf _snprintf
|
||
|
#endif
|
||
|
|
||
|
// return system error string
|
||
|
const uniString::utf8 errMessage() throw();
|
||
|
|
||
|
const uniString::utf8 bob();
|
||
|
|
||
|
void printUpdateMessage();
|
||
|
|
||
|
extern uniString::utf8 listenerId;
|
||
|
const uniString::utf8 randomId(uniString::utf8 &temp);
|
||
|
|
||
|
const uniString::utf8 getCurrentSong(uniString::utf8 currentSong);
|
||
|
const uniString::utf8 stripHTTPprefix(const uniString::utf8& addr);
|
||
|
|
||
|
const bool isAddress(const uniString::utf8& addr);
|
||
|
|
||
|
const bool extractPassword(uniString::utf8 &dj_password, uniString::utf8 &dj_name, int &streamID);
|
||
|
|
||
|
typedef std::map<uniString::utf8,uniString::utf8> httpHeaderMap_t;
|
||
|
const int getStreamBitrate(const httpHeaderMap_t &headers);
|
||
|
const int getStreamSamplerate(const httpHeaderMap_t &headers);
|
||
|
const int getHTTPRequestDetails(const std::string &firstLine, std::string &request,
|
||
|
std::string &url, std::string &protocolAndVersion);
|
||
|
const uniString::utf8 fixMimeType(const uniString::utf8& mimeType);
|
||
|
|
||
|
const uniString::utf8 sampleRateStr(const int sr);
|
||
|
|
||
|
const int detectAutoDumpTimeout(time_t &cur_time, const time_t lastActivityTime,
|
||
|
const uniString::utf8& msg, const bool debug,
|
||
|
const size_t streamID = DEFAULT_SOURCE_STREAM) throw(std::runtime_error);
|
||
|
|
||
|
const __uint64 time_now_ms();
|
||
|
|
||
|
const bool isRemoteAddress(const uniString::utf8 &addr);
|
||
|
|
||
|
#endif
|