winamp/Src/Plugins/DSP/sc_serv3/protocol_relay_shoutcast.h
2024-09-24 14:54:57 +02:00

58 lines
1.8 KiB
C++

#pragma once
#ifndef protocol_relay_shoutcast_H_
#define protocol_relay_shoutcast_H_
#include "threadedRunner.h"
class streamData;
class protocol_relay_shoutcast: public runnable
{
int m_originalBitrate; // original bitrate for checking
uniString::utf8 m_originalMimeType; // original mimetype for checking
const config::streamConfig m_originalRelayInfo;
short unsigned int m_metadataInterval; // interval on source
const bool m_backup; // used to change log output depending on relay or backup usage
bool m_denied; // used to prevent source disconnected messages e.g. for failed passwords
short unsigned int m_remainderSize;
__uint8 *m_remainder;
const uniString::utf8 m_srcAddrName;
const uniString::utf8 m_srcAddrNumeric;
const uniString::utf8 m_srcURLpart;
uniString::utf8 m_metadataBuffer;
streamData *m_streamData;
const uniString::utf8 m_srcLogString;
typedef void (protocol_relay_shoutcast::*state_t)();
state_t m_state;
int m_bytesSinceMetadata;
int m_metadataSizeByte; // metadata length indicator
void state_GetStreamData() throw(std::exception);
void state_GetMetadata() throw(std::exception);
void state_Fail() throw(std::exception);
void state_CloseConnection() throw(std::exception);
void cleanup();
protected:
virtual void timeSlice() throw(std::exception);
virtual uniString::utf8 name() const throw() { return "protocol_relay_shoutcast"; }
public:
protocol_relay_shoutcast(const socketOps::tSOCKET s, const config::streamConfig &originalRelayInfo,
const uniString::utf8 &srcAddrName, const uniString::utf8 &srcAddrNumeric,
const int srcPort, const uniString::utf8 &srcURLpart,
httpHeaderMap_t &httpHeaders, const int originalbitrate = 0,
const uniString::utf8& originalMimeType = "", const bool backup = false);
~protocol_relay_shoutcast() throw();
};
#endif