Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SoftEtherVPN/SoftEtherVPN_Stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cedar/IPsec_IPC.c')
-rw-r--r--src/Cedar/IPsec_IPC.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/Cedar/IPsec_IPC.c b/src/Cedar/IPsec_IPC.c
index 705a9539..82831784 100644
--- a/src/Cedar/IPsec_IPC.c
+++ b/src/Cedar/IPsec_IPC.c
@@ -314,7 +314,7 @@ IPC *NewIPCByParam(CEDAR *cedar, IPC_PARAM *param, UINT *error_code)
param->UserName, param->Password, error_code, &param->ClientIp,
param->ClientPort, &param->ServerIp, param->ServerPort,
param->ClientHostname, param->CryptName,
- param->BridgeMode, param->Mss, NULL);
+ param->BridgeMode, param->Mss, NULL, param->ClientCertificate, param->Layer);
return ipc;
}
@@ -323,7 +323,8 @@ IPC *NewIPCByParam(CEDAR *cedar, IPC_PARAM *param, UINT *error_code)
IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char *username, char *password,
UINT *error_code, IP *client_ip, UINT client_port, IP *server_ip, UINT server_port,
char *client_hostname, char *crypt_name,
- bool bridge_mode, UINT mss, EAP_CLIENT *eap_client)
+ bool bridge_mode, UINT mss, EAP_CLIENT *eap_client, X *client_certificate,
+ UINT layer)
{
IPC *ipc;
UINT dummy_int = 0;
@@ -338,6 +339,7 @@ IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char
NODE_INFO info;
BUF *b;
UCHAR mschap_v2_server_response_20[20];
+ UINT64 u64;
// Validate arguments
if (cedar == NULL || username == NULL || password == NULL || client_hostname == NULL)
{
@@ -371,6 +373,12 @@ IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char
ipc->Cedar = cedar;
AddRef(cedar->ref);
+ ipc->Layer = layer;
+ if (ipc->Layer == 0)
+ {
+ ipc->Layer = IPC_LAYER_2;
+ }
+
ipc->FlushList = NewTubeFlushList();
StrCpy(ipc->ClientHostname, sizeof(ipc->ClientHostname), client_hostname);
@@ -416,7 +424,14 @@ IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char
FreePack(p);
// Upload the authentication data
- p = PackLoginWithPlainPassword(hubname, username, password);
+ if (client_certificate != NULL)
+ {
+ p = PackLoginWithOpenVPNCertificate(hubname, username, client_certificate);
+ }
+ else
+ {
+ p = PackLoginWithPlainPassword(hubname, username, password);
+ }
PackAddStr(p, "hello", client_name);
PackAddInt(p, "client_ver", cedar->Version);
PackAddInt(p, "client_build", cedar->Build);
@@ -451,6 +466,7 @@ IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char
PackAddStr(p, "inproc_postfix", postfix);
PackAddStr(p, "inproc_cryptname", crypt_name);
+ PackAddInt(p, "inproc_layer", ipc->Layer);
// Node information
Zero(&info, sizeof(info));
@@ -532,6 +548,10 @@ IPC *NewIPC(CEDAR *cedar, char *client_name, char *postfix, char *hubname, char
Debug("IPC: Session = %s, Connection = %s, Mac = %s\n", ipc->SessionName, ipc->ConnectionName, macstr);
+ u64 = PackGetInt64(p, "IpcSessionSharedBuffer");
+ ipc->IpcSessionSharedBuffer = (SHARED_BUFFER *)u64;
+ ipc->IpcSessionShared = ipc->IpcSessionSharedBuffer->Data;
+
FreePack(p);
ReleaseSock(a);
@@ -665,6 +685,8 @@ void FreeIPC(IPC *ipc)
}
ReleaseQueue(ipc->IPv4RecviedQueue);
+
+ ReleaseSharedBuffer(ipc->IpcSessionSharedBuffer);
Free(ipc);
}