mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
74 lines
2.3 KiB
C
74 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
|