Merge pull request #5405 from m4ntis/proxy/filters-api
authorDavid Fort <contact@hardening-consulting.com>
Mon, 3 Jun 2019 13:45:24 +0000 (15:45 +0200)
committerGitHub <noreply@github.com>
Mon, 3 Jun 2019 13:45:24 +0000 (15:45 +0200)
Proxy: Filters API

1  2 
server/proxy/pf_context.c
server/proxy/pf_server.c

@@@ -73,49 -72,65 +72,105 @@@ rdpContext* p_client_context_create(rdp
        settings->Username = _strdup(clientSettings->Username);
        settings->Password = _strdup(clientSettings->Password);
        settings->Domain = _strdup(clientSettings->Domain);
-       settings->ServerHostname = host;
-       settings->ServerPort = port;
        settings->SoftwareGdi = FALSE;
        settings->RedirectClipboard = FALSE;
 +      /* Client Monitor Data */
 +      settings->MonitorCount = clientSettings->MonitorCount;
 +      settings->SpanMonitors = clientSettings->SpanMonitors;
 +      settings->UseMultimon = clientSettings->UseMultimon;
 +      settings->ForceMultimon = clientSettings->ForceMultimon;
 +      settings->DesktopPosX = clientSettings->DesktopPosX;
 +      settings->DesktopPosY = clientSettings->DesktopPosY;
 +      settings->ListMonitors = clientSettings->ListMonitors;
 +      settings->NumMonitorIds = clientSettings->NumMonitorIds;
 +      settings->MonitorLocalShiftX = clientSettings->MonitorLocalShiftX;
 +      settings->MonitorLocalShiftY = clientSettings->MonitorLocalShiftY;
 +      settings->HasMonitorAttributes = clientSettings->HasMonitorAttributes;
 +      settings->MonitorCount = clientSettings->MonitorCount;
 +      settings->MonitorDefArraySize = clientSettings->MonitorDefArraySize;
 +
 +      if (clientSettings->MonitorDefArraySize > 0)
 +      {
 +              settings->MonitorDefArray = (rdpMonitor*) calloc(clientSettings->MonitorDefArraySize,
 +                                          sizeof(rdpMonitor));
 +
 +              if (!settings->MonitorDefArray)
 +              {
 +                      goto error;
 +              }
 +
 +              CopyMemory(settings->MonitorDefArray, clientSettings->MonitorDefArray,
 +                         sizeof(rdpMonitor) * clientSettings->MonitorDefArraySize);
 +      }
 +      else
 +              settings->MonitorDefArray = NULL;
 +
 +      settings->MonitorIds = (UINT32*) calloc(16, sizeof(UINT32));
 +
 +      if (!settings->MonitorIds)
 +              goto error;
 +
 +      CopyMemory(settings->MonitorIds, clientSettings->MonitorIds, 16 * sizeof(UINT32));
        return context;
 +error:
 +      freerdp_client_context_free(context);
 +      return NULL;
  }
+ static void connection_info_free(connectionInfo* info)
+ {
+       free(info->TargetHostname);
+       free(info->ClientHostname);
+       free(info->Username);
+       free(info);
+ }
+ proxyData* proxy_data_new()
+ {
+       proxyData* pdata = calloc(1, sizeof(proxyData));
+       if (pdata == NULL)
+       {
+               return NULL;
+       }
+       pdata->info = calloc(1, sizeof(connectionInfo));
+       if (pdata->info == NULL)
+       {
+               free(pdata);
+               return NULL;
+       }
+       if (!(pdata->connectionClosed = CreateEvent(NULL, TRUE, FALSE, NULL)))
+       {
+               proxy_data_free(pdata);
+               return NULL;
+       }
+       return pdata;
+ }
+ BOOL proxy_data_set_connection_info(proxyData* pdata, rdpSettings* clientSettings,
+                                     const char* target)
+ {
+       if (!(pdata->info->TargetHostname = _strdup(target)))
+               goto out_fail;
+       if (!(pdata->info->ClientHostname = _strdup(clientSettings->ClientHostname)))
+               goto out_fail;
+       if (!(pdata->info->Username = _strdup(clientSettings->Username)))
+               goto out_fail;
+       return TRUE;
+ out_fail:
+       proxy_data_free(pdata);
+       return FALSE;
+ }
+ void proxy_data_free(proxyData* pdata)
+ {
+       connection_info_free(pdata->info);
+       free(pdata);
+ }
Simple merge