Updated init script.
[dtbartle/bnbt.git] / link.h
1 //\r
2 // Copyright (C) 2003-2004 Trevor Hogan\r
3 //\r
4 \r
5 #ifndef LINK_H\r
6  #define LINK_H\r
7 \r
8 #define LINK_VER                        "TrackerLINK Ver. 0.1"\r
9 \r
10 #define LINKMSG_ERROR           -1\r
11 #define LINKMSG_NONE            0               // not transmitted\r
12 #define LINKMSG_VERSION         1\r
13 #define LINKMSG_INFO            2\r
14 #define LINKMSG_PASSWORD        3\r
15 #define LINKMSG_READY           4\r
16 #define LINKMSG_ANNOUNCE        7\r
17 #define LINKMSG_CLOSE           99\r
18 \r
19 struct linkmsg_t\r
20 {\r
21         long len;\r
22         int type;\r
23         string msg;\r
24 };\r
25 \r
26 //\r
27 // CLink\r
28 //  - one instance created on the secondary tracker to connect to the primary tracker\r
29 //\r
30 \r
31 class CLink\r
32 {\r
33 public:\r
34         CLink( );\r
35         virtual ~CLink( );\r
36 \r
37         void Kill( );\r
38         void Go( );\r
39 \r
40         string getName( );\r
41 \r
42         void Queue( struct linkmsg_t lm );\r
43 \r
44 private:\r
45         bool m_bKill;\r
46 \r
47         string m_strIP;\r
48         string m_strPass;\r
49 \r
50         SOCKET m_sckLink;\r
51 \r
52         struct sockaddr_in sin;\r
53 \r
54         string m_strReceiveBuf;\r
55         string m_strSendBuf;\r
56 \r
57         void Send( struct linkmsg_t lm );\r
58         struct linkmsg_t Receive( bool bBlock );\r
59         struct linkmsg_t Parse( );\r
60 \r
61         CMutex m_mtxQueued;\r
62 \r
63         vector<struct linkmsg_t> m_vecQueued;\r
64 };\r
65 \r
66 void StartLink( );\r
67 \r
68 //\r
69 // CLinkClient\r
70 //  - one instance created on the primary tracker for each secondary tracker\r
71 //\r
72 \r
73 class CLinkClient\r
74 {\r
75 public:\r
76         CLinkClient( SOCKET sckLink, struct sockaddr_in sinAddress );\r
77         virtual ~CLinkClient( );\r
78 \r
79         void Kill( );\r
80         void Go( );\r
81 \r
82         string getName( );\r
83 \r
84         void Queue( struct linkmsg_t lm );\r
85 \r
86         bool m_bActive;\r
87 \r
88 private:\r
89         bool m_bKill;\r
90 \r
91         SOCKET m_sckLink;\r
92 \r
93         struct sockaddr_in sin;\r
94 \r
95         string m_strReceiveBuf;\r
96         string m_strSendBuf;\r
97 \r
98         void Send( struct linkmsg_t lm );\r
99         struct linkmsg_t Receive( bool bBlock );\r
100         struct linkmsg_t Parse( );\r
101 \r
102         CMutex m_mtxQueued;\r
103 \r
104         vector<struct linkmsg_t> m_vecQueued;\r
105 };\r
106 \r
107 void StartLinkClient( CLinkClient *pLinkClient );\r
108 \r
109 //\r
110 // CLinkServer\r
111 //  - one instance created on the primary tracker\r
112 //\r
113 \r
114 class CLinkServer\r
115 {\r
116 public:\r
117         CLinkServer( );\r
118         virtual ~CLinkServer( );\r
119 \r
120         void Update( );\r
121 \r
122         void Queue( struct linkmsg_t lm );\r
123         void Queue( struct linkmsg_t lm, string strExclude );\r
124 \r
125         string m_strPass;\r
126 \r
127         CMutex m_mtxLinks;\r
128 \r
129         vector<CLinkClient *> m_vecLinks;\r
130 \r
131 private:\r
132         string m_strBind;\r
133 \r
134         SOCKET m_sckLinkServer;\r
135 };\r
136 \r
137 #endif\r