ProxyServerTcp / include /udp_client.h
xukc
[feat]support udp
1bff97b
raw
history blame
1.48 kB
#ifndef PROXYSERVER_UDP_CLIENT_H
#define PROXYSERVER_UDP_CLIENT_H
#include "hv/hloop.h"
#include "hv/UdpClient.h"
#include "bolt/crypt.h"
#include "udp_client_map.h"
#include <string>
class UdpBoltConfig
{
public:
uint32_t request_id;
uint32_t session_id;
std::string signal_id;
std::string data_st;
bool encrypt = false;
CRYPT_TYPE ept_type;
char ept_key;
};
class UdpClientProxy
{
public:
UdpClientProxy(struct sockaddr_in t_addr, struct sockaddr_in u_addr, uint32_t session_id) : t_addr(t_addr), u_addr(u_addr), session_id(session_id) {}
hv::UdpClient *getClient() { return &cli; }
bool init();
void close();
private:
void onRecv(const hv::SocketChannelPtr &channel, hv::Buffer *buf);
void onWrited(const hv::SocketChannelPtr &channel, hv::Buffer *buf);
public:
struct sockaddr_in t_addr, u_addr;
private:
hv::UdpClient cli;
uint32_t session_id;
};
class UdpServerBoltProxy
{
public:
UdpServerBoltProxy(hio_t *_io) : io(_io) {}
UdpBoltConfig &getConfig() { return config; }
bool analyzeData(struct sockaddr_in t_addr, struct sockaddr_in u_addr, uint32_t session_id, char *data, int data_len, char *extend, int extend_len);
int sendData(struct sockaddr_in t_addr, struct sockaddr_in u_addr, void *data, int data_len);
void recycle();
private:
UdpBoltConfig config;
hio_t *io;
UdpClientMap<std::string, UdpClientProxy> _map;
};
#endif // PROXYSERVER_UDP_CLIENT_H