forked from bitspalter/DNS-Proxy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathC_Net_Udp_Socket.hpp
103 lines (72 loc) · 2.67 KB
/
C_Net_Udp_Socket.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//////////////////////////////////////////////////////////////////////////////////
// [ Udp_Socket_Class_Header ]
//////////////////////////////////////////////////////////////////////////////////
//
// [UDP Socket]
//
// Last modi: 19.08.17 L.ey (µ~)
//
#ifndef _C_NET_UDP_SOCKET_H_
#define _C_NET_UDP_SOCKET_H_
#include <iostream>
using namespace std;
#include <errno.h>
#include <sys/socket.h> // Socket Funktionen wie socket(), bind() und listen()
#include <arpa/inet.h> // Funktionen wie inet_addr()
#include <unistd.h>
#include <string.h>
#include <gtk/gtk.h>
#include "C_Thread.hpp"
#include <sigc++/sigc++.h>
//////////////////////////////////////////////////////////////////////////////////
// CONSTANT
//////////////////////////////////////////////////////////////////////////////////
const int C_NET_UDP_SOCKET_READY = 0x00000001;
const int C_NET_UDP_SOCKET_ERROR = 0x00000000;
//////////////////////////////////////////////////////////////////////////////////
// CLASS
//////////////////////////////////////////////////////////////////////////////////
class C_Net_Udp_Socket {
public:
C_Net_Udp_Socket();
~C_Net_Udp_Socket();
int create();
int close();
int connect(char* psIP, unsigned short Port);
int send(unsigned char* pData, unsigned long cData);
int listen(const char* psIP, unsigned short Port);
// Blocking
int recive(unsigned char* pData, unsigned int* pcData, sockaddr_in* pAddress_Source);
// Non Blocking
int start(int id, unsigned char* pBuffer, unsigned int cBuffer);
int stop();
//////////////////////////////////////////////////////////////////////
int getAddressLocal(sockaddr_in* pAddress_Local);
int getAddressRemote(sockaddr_in* pAddress_Remote);
// Inline
//
int gethSocket(){return(hSocket);}
// Signal
typedef sigc::signal<void, int, int> type_signal_data;
type_signal_data signal_data();
protected:
type_signal_data m_signal_data;
private:
int hSocket;
bool bSocket;
bool bListen;
bool bConnect;
sockaddr_in Address_Local;
sockaddr_in Address_Remote;
//////////////////////////////////////////////////////////
// RECIVE LOOP ((( THREAD )))
C_Thread <C_Net_Udp_Socket> CThread;
void recive();
bool bRun;
int id;
/////////////////
//C_Array* pCAData;
unsigned char* pBuffer;
unsigned int cBuffer;
};
#endif // _C_NET_UDP_SOCKET_H_