Imported Upstream version 878.70.2
[platform/upstream/mdnsresponder.git] / mDNSMacOSX / BonjourTop / source / bjsocket.h
1 //
2 //  bjsocket.h
3 //  TestTB
4 //
5 //  Created by Terrin Eager on 10/24/12.
6 //
7 //
8
9 #ifndef __TestTB__bjsocket__
10 #define __TestTB__bjsocket__
11
12 #include <iostream>
13
14 #include <sys/socket.h>
15
16 #include "bjtypes.h"
17 #include "bjIPAddr.h"
18 #include "bjstring.h"
19
20 #include "Frame.h"
21
22
23 class BJSocket
24 {
25 public:
26
27     BJSocket();
28     virtual ~BJSocket();
29
30     bool Init();
31
32     bool CreateListenerIPv4(BJString interfaceName);
33     bool CreateListenerIPv6(BJString interfaceName);
34
35     bool Close();
36
37     int Read();
38
39     Frame m_CurrentFrame;
40
41     bool IsMulticastPacket();
42
43     int GetSockectHandle();
44
45     BJ_UINT8* GetBuffer();
46     BJIPAddr* GetSrcAddr();
47     BJIPAddr* GetDestAddr();
48
49 private:
50     void JoinMulticastv4(BJString interfaceName);
51     void JoinMulticastv6(BJString interfaceName);
52
53     bool CheckInterface();
54
55     BJ_UINT32 interfaceID;
56
57     int socketHandle;
58     BJ_UINT8* buffer;
59
60
61     int IPVersion;
62     BJIPAddr sourceAddr;
63     BJIPAddr destAddr;
64
65     struct msghdr socketMsghdr;
66     sockaddr_storage peerAddr;
67     struct iovec socketIovec[1];
68     struct cmsghdr socketCmsghdr[10];
69
70 };
71
72 class BJSelect
73 {
74 public:
75     BJSelect();
76
77     bool Add(BJSocket& s);
78     int Wait(int sec);
79
80     bool IsReady(BJSocket& s);
81
82 private:
83     fd_set socketSet;
84     int maxSocket;
85
86 };
87
88 #endif /* defined(__TestTB__bjsocket__) */