1 // SoftEther VPN Source Code - Developer Edition Master Branch
2 // Cedar Communication Module
3 
4 
5 // Link.h
6 // Header of Link.c
7 
8 #ifndef	LINK_H
9 #define	LINK_H
10 
11 #include "CedarType.h"
12 
13 #include "Mayaqua/MayaType.h"
14 
15 struct LINK
16 {
17 	bool Started;					// Running flag
18 	volatile bool Halting;			// Halting flag
19 	bool Offline;					// Offline
20 	bool NoOnline;					// Do not set to online flag
21 	REF *ref;						// Reference counter
22 	LOCK *lock;						// Lock
23 	CEDAR *Cedar;					// Cedar
24 	HUB *Hub;						// HUB
25 	SESSION *ClientSession;			// Client session
26 	SESSION *ServerSession;			// Server session
27 	CLIENT_OPTION *Option;			// Client Option
28 	CLIENT_AUTH *Auth;				// Authentication data
29 	POLICY *Policy;					// Policy
30 	QUEUE *SendPacketQueue;			// Transmission packet queue
31 	UINT CurrentSendPacketQueueSize;	// Current send packet queue size
32 	UINT LastError;					// Last error
33 	bool CheckServerCert;			// To check the server certificate
34 	X *ServerCert;					// Server certificate
35 	bool LockFlag;					// Lock flag
36 	bool *StopAllLinkFlag;			// Stop all link flag
37 	UINT LastServerConnectionReceivedBlocksNum;	// Last server connection recv queue num
38 	UINT Flag1;
39 };
40 
41 
42 PACKET_ADAPTER *LinkGetPacketAdapter();
43 bool LinkPaInit(SESSION *s);
44 CANCEL *LinkPaGetCancel(SESSION *s);
45 UINT LinkPaGetNextPacket(SESSION *s, void **data);
46 bool LinkPaPutPacket(SESSION *s, void *data, UINT size);
47 void LinkPaFree(SESSION *s);
48 
49 void LinkServerSessionThread(THREAD *t, void *param);
50 LINK *NewLink(CEDAR *cedar, HUB *hub, CLIENT_OPTION *option, CLIENT_AUTH *auth, POLICY *policy);
51 void StartLink(LINK *k);
52 void StopLink(LINK *k);
53 void DelLink(HUB *hub, LINK *k);
54 void LockLink(LINK *k);
55 void UnlockLink(LINK *k);
56 void StopAllLink(HUB *h);
57 void StartAllLink(HUB *h);
58 void SetLinkOnline(LINK *k);
59 void SetLinkOffline(LINK *k);
60 void ReleaseLink(LINK *k);
61 void CleanupLink(LINK *k);
62 void ReleaseAllLink(HUB *h);
63 void NormalizeLinkPolicy(POLICY *p);
64 
65 #endif	// LINK_H
66 
67 
68 
69 
70