source: filezilla/trunk/fuentes/src/engine/proxy.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 1.9 KB
Line 
1#ifndef __PROXY_H__
2#define __PROXY_H__
3
4#include "backend.h"
5#include "socket.h"
6
7class CControlSocket;
8class CProxySocket final : protected CEventHandler, public CBackend
9{
10public:
11        CProxySocket(CEventHandler* pEvtHandler, CSocket* pSocket, CControlSocket* pOwner);
12        virtual ~CProxySocket();
13
14        enum ProxyState {
15                noconn,
16                handshake,
17                conn
18        };
19
20        enum ProxyType {
21                unknown,
22                HTTP,
23                SOCKS5,
24                SOCKS4,
25
26                proxytype_count
27        };
28        static wxString Name(ProxyType t);
29
30        int Handshake(ProxyType type, const wxString& host, unsigned int port, const wxString& user, const wxString& pass);
31
32        ProxyState GetState() const { return m_proxyState; }
33
34        // Past the initial handshake, proxies are transparent.
35        // Class users should detach socket and use a normal socket backend instead.
36        virtual void OnRateAvailable(CRateLimiter::rate_direction) {};
37        virtual int Read(void *buffer, unsigned int size, int& error);
38        virtual int Peek(void *buffer, unsigned int size, int& error);
39        virtual int Write(const void *buffer, unsigned int size, int& error);
40
41        void Detach();
42        bool Detached() const { return m_pSocket == 0; }
43
44        ProxyType GetProxyType() const { return m_proxyType; }
45        wxString GetUser() const { return m_user; }
46        wxString GetPass() const { return m_pass; }
47
48protected:
49        CSocket* m_pSocket;
50        CControlSocket* m_pOwner;
51
52        ProxyType m_proxyType{unknown};
53        wxString m_host;
54        int m_port{};
55        wxString m_user;
56        wxString m_pass;
57
58        ProxyState m_proxyState{noconn};
59
60        int m_handshakeState{};
61
62        char* m_pSendBuffer{};
63        int m_sendBufferLen{};
64
65        char* m_pRecvBuffer{};
66        int m_recvBufferPos{};
67        int m_recvBufferLen{};
68
69        virtual void operator()(CEventBase const& ev);
70        void OnSocketEvent(CSocketEventSource* source, SocketEventType t, int error);
71        void OnHostAddress(CSocketEventSource* source, wxString const& address);
72
73        void OnReceive();
74        void OnSend();
75
76        bool m_can_write{};
77        bool m_can_read{};
78};
79
80#endif //__PROXY_H__
Note: See TracBrowser for help on using the repository browser.