mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
73 lines
2.3 KiB
C++
73 lines
2.3 KiB
C++
#pragma once
|
|
#ifndef protocol_relay_H_
|
|
#define protocol_relay_H_
|
|
|
|
#include "threadedRunner.h"
|
|
|
|
/*
|
|
Runnable object that handles the initial part of a relay connection.
|
|
Makes the connection to the source and determines what type of protocol
|
|
should be used, then hands off to that particular protocol
|
|
(shoutcast or uvox relay)
|
|
*/
|
|
|
|
class protocol_relay: public runnable
|
|
{
|
|
private:
|
|
u_short m_srcPort; // server port
|
|
short m_redirectCount;
|
|
|
|
uniString::utf8 m_srcAddrName; // server DNS name or value as specified in relayInfo
|
|
std::string m_srcAddrNumeric; // resolved numeric addr
|
|
uniString::utf8 m_srcURLpart; // server
|
|
|
|
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;
|
|
|
|
bool m_relayWaitingToReconnect;
|
|
bool m_relaySentConnectWait;
|
|
bool m_retryRelay;
|
|
bool m_skip;
|
|
bool m_backupStarted;
|
|
bool m_registered; // true if runnable is ok to start. new relay have to wait for exisitng one to drop
|
|
|
|
uniString::utf8 m_lineBuffer; // in/out lines
|
|
|
|
config::streamConfig m_relayInfo;
|
|
const config::streamConfig m_originalRelayInfo; // used for reconnects later on
|
|
|
|
/// reconnects
|
|
int m_retryCount;
|
|
time_t m_relayReconnectStartTime;
|
|
|
|
typedef void (protocol_relay::*state_t)();
|
|
|
|
state_t m_state;
|
|
state_t m_nextState;
|
|
|
|
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);
|
|
void startBackupConnection(uniString::utf8 errorMessage) throw(std::exception);
|
|
|
|
protected:
|
|
virtual void timeSlice() throw(std::exception);
|
|
virtual uniString::utf8 name() const throw() { return "protocol_relay"; }
|
|
|
|
public:
|
|
protocol_relay(const config::streamConfig &info, const bool retry = false) throw();
|
|
virtual ~protocol_relay() throw();
|
|
};
|
|
|
|
#endif
|