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

73 lines
2.3 KiB
C++

#pragma once
#ifndef protocol_backup_H_
#define protocol_backup_H_
#include "threadedRunner.h"
/*
Runnable object that handles the initial part of a backup connection
which is basically the same as a relay connection bar a different name.
Makes the connection to the source and determines what type of protocol
should be used, then hands off to the particular relay protocol
(shoutcast or uvox relay)
*/
class protocol_backup: public runnable
{
private:
uniString::utf8 m_srcAddrName; // server DNS name or value as specified in backupInfo
std::string m_srcAddrNumeric; // resolved numeric addr
uniString::utf8 m_srcURLpart; // server
uniString::utf8 m_originalMimeType; // original mimetype for checking
uniString::utf8 m_srcLogString;
httpHeaderMap_t m_HTTPHeaders;
uniString::utf8 m_HTTPGreetingResponse; // first line of response
const uniString::utf8::value_type *m_outBuffer; // for outgoing text lines
int m_outBufferSize;
const int m_originalBitrate; // original bitrate for checking
uniString::utf8 m_lineBuffer; // in/out lines
int m_retryCount;
bool m_backupWaitingToReconnect;
bool m_backupSentConnectWait;
bool m_skip;
bool m_tryRelaySource;
time_t m_backupReconnectStartTime;
typedef void (protocol_backup::*state_t)();
state_t m_state;
state_t m_nextState;
config::streamConfig m_backupInfo;
const config::streamConfig m_originalbackupInfo; // used for reconnects later on
u_short m_srcPort; // server port
short m_redirectCount;
void state_Initial() throw(std::exception);
void state_ResolveServer() throw(std::exception);
void state_Connect() throw(std::exception);
void state_ConnectWait() throw(std::exception);
void state_SendGreeting() throw(std::exception);
void state_GetGreetingResponse() throw(std::exception);
void state_AnalyzeGreetingResponse() throw(std::exception);
void state_DetermineProtocol() throw(std::exception);
void state_Send() throw(std::exception);
void state_GetLine() throw(std::exception);
protected:
virtual void timeSlice() throw(std::exception);
virtual uniString::utf8 name() const throw() { return "protocol_backup"; }
public:
protocol_backup(const config::streamConfig &info, const int originalBitrate, const uniString::utf8& originalMimeType) throw();
virtual ~protocol_backup() throw();
};
#endif