From 749497dde0a1dd08c434a73b9d4e93dc3e3326d9 Mon Sep 17 00:00:00 2001 From: dnobori Date: Sat, 4 Jan 2014 22:00:08 +0900 Subject: v4.03-9408-rtm --- src/Cedar/Listener.h | 188 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 src/Cedar/Listener.h (limited to 'src/Cedar/Listener.h') diff --git a/src/Cedar/Listener.h b/src/Cedar/Listener.h new file mode 100644 index 00000000..454b5f87 --- /dev/null +++ b/src/Cedar/Listener.h @@ -0,0 +1,188 @@ +// SoftEther VPN Source Code +// Cedar Communication Module +// +// SoftEther VPN Server, Client and Bridge are free software under GPLv2. +// +// Copyright (c) 2012-2014 Daiyuu Nobori. +// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. +// Copyright (c) 2012-2014 SoftEther Corporation. +// +// All Rights Reserved. +// +// http://www.softether.org/ +// +// Author: Daiyuu Nobori +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +// Listener.h +// Header of Listener.c + +#ifndef LISTENER_H +#define LISTENER_H + + +// Function to call when receiving a new connection +typedef void (NEW_CONNECTION_PROC)(CONNECTION *c); + + + +// Listener structure +struct LISTENER +{ + LOCK *lock; // Lock + REF *ref; // Reference counter + CEDAR *Cedar; // Cedar + UINT Protocol; // Protocol + UINT Port; // Port number + THREAD *Thread; // Operating thread + SOCK *Sock; // Socket + EVENT *Event; // Event + volatile bool Halt; // Halting flag + UINT Status; // State + + + THREAD_PROC *ThreadProc; // Thread procedure + void *ThreadParam; // Thread parameters + bool LocalOnly; // Can be connected only from localhost + bool ShadowIPv6; // Flag indicating that the shadow IPv6 listener + LISTENER *ShadowListener; // Reference to managing shadow IPv6 listener + bool DisableDos; // Disable the DoS attack detection + volatile UINT *NatTGlobalUdpPort; // NAT-T global UDP port number + UCHAR RandPortId; // NAT-T UDP random port ID + bool EnableConditionalAccept; // The flag of whether to enable the Conditional Accept +}; + +// Parameters of TCPAcceptedThread +struct TCP_ACCEPTED_PARAM +{ + LISTENER *r; + SOCK *s; +}; + +// UDP entry +struct UDP_ENTRY +{ + UINT SessionKey32; // 32bit session key + SESSION *Session; // Reference to the session +}; + +// Dynamic listener +struct DYNAMIC_LISTENER +{ + UINT Protocol; // Protocol + UINT Port; // Port + LOCK *Lock; // Lock + CEDAR *Cedar; // Cedar + bool *EnablePtr; // A pointer to the flag of the valid / invalid state + LISTENER *Listener; // Listener +}; + + +// Function prototype +LISTENER *NewListener(CEDAR *cedar, UINT proto, UINT port); +LISTENER *NewListenerEx(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc, void *thread_param); +LISTENER *NewListenerEx2(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc, void *thread_param, bool local_only); +LISTENER *NewListenerEx3(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc, void *thread_param, bool local_only, bool shadow_ipv6); +LISTENER *NewListenerEx4(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc, void *thread_param, bool local_only, bool shadow_ipv6, + volatile UINT *natt_global_udp_port, UCHAR rand_port_id); +LISTENER *NewListenerEx5(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc, void *thread_param, bool local_only, bool shadow_ipv6, + volatile UINT *natt_global_udp_port, UCHAR rand_port_id, bool enable_ca); +void ReleaseListener(LISTENER *r); +void CleanupListener(LISTENER *r); +void ListenerThread(THREAD *thread, void *param); +void ListenerTCPMainLoop(LISTENER *r); +void StopListener(LISTENER *r); +int CompareListener(void *p1, void *p2); +void TCPAccepted(LISTENER *r, SOCK *s); +void EnableDosProtect(); +void DisableDosProtect(); +void TCPAcceptedThread(THREAD *t, void *param); +void ListenerUDPMainLoop(LISTENER *r); +void UDPReceivedPacket(CEDAR *cedar, SOCK *s, IP *ip, UINT port, void *data, UINT size); +int CompareUDPEntry(void *p1, void *p2); +void CleanupUDPEntry(CEDAR *cedar); +void AddUDPEntry(CEDAR *cedar, SESSION *session); +void DelUDPEntry(CEDAR *cedar, SESSION *session); +SESSION *GetSessionFromUDPEntry(CEDAR *cedar, UINT key32); +UINT GetMaxConnectionsPerIp(); +void SetMaxConnectionsPerIp(UINT num); +UINT GetMaxUnestablishedConnections(); +void SetMaxUnestablishedConnections(UINT num); +DYNAMIC_LISTENER *NewDynamicListener(CEDAR *c, bool *enable_ptr, UINT protocol, UINT port); +void ApplyDynamicListener(DYNAMIC_LISTENER *d); +void FreeDynamicListener(DYNAMIC_LISTENER *d); +bool ListenerRUDPRpcRecvProc(RUDP_STACK *r, UDPPACKET *p); +void ListenerSetProcRecvRpcEnable(bool b); + + +#endif // LISTENER_H + + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ -- cgit v1.2.3