diff options
Diffstat (limited to 'src/Cedar/IPsec_IPC.c')
-rw-r--r-- | src/Cedar/IPsec_IPC.c | 28 |
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, ¶m->ClientIp,
param->ClientPort, ¶m->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);
}
|