21#include <freerdp/config.h> 
   28#include <winpr/stream.h> 
   29#include <winpr/cmdline.h> 
   31#include <freerdp/types.h> 
   32#include <freerdp/settings.h> 
   34#include "rdpsnd_main.h" 
   38  rdpsndDevicePlugin device;
 
   41static BOOL rdpsnd_fake_open(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
 
   43                             WINPR_ATTR_UNUSED UINT32 latency)
 
   48static void rdpsnd_fake_close(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device)
 
   52static BOOL rdpsnd_fake_set_volume(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
 
   53                                   WINPR_ATTR_UNUSED UINT32 value)
 
   58static void rdpsnd_fake_free(rdpsndDevicePlugin* device)
 
   60  rdpsndFakePlugin* fake = (rdpsndFakePlugin*)device;
 
   68static BOOL rdpsnd_fake_format_supported(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
 
   74static UINT rdpsnd_fake_play(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
 
   75                             WINPR_ATTR_UNUSED 
const BYTE* data, WINPR_ATTR_UNUSED 
size_t size)
 
   85static UINT rdpsnd_fake_parse_addin_args(rdpsndFakePlugin* fake, 
const ADDIN_ARGV* args)
 
   92      COMMAND_LINE_SIGIL_NONE | COMMAND_LINE_SEPARATOR_COLON | COMMAND_LINE_IGN_UNKNOWN_KEYWORD;
 
   93  status = CommandLineParseArgumentsA(args->argc, args->argv, rdpsnd_fake_args, flags, fake, NULL,
 
   97    return ERROR_INVALID_DATA;
 
   99  arg = rdpsnd_fake_args;
 
  103    if (!(arg->Flags & COMMAND_LINE_VALUE_PRESENT))
 
  106    CommandLineSwitchStart(arg) CommandLineSwitchEnd(arg)
 
  107  } 
while ((arg = CommandLineFindNextArgumentA(arg)) != NULL);
 
  109  return CHANNEL_RC_OK;
 
  117FREERDP_ENTRY_POINT(UINT VCAPITYPE fake_freerdp_rdpsnd_client_subsystem_entry(
 
  121  rdpsndFakePlugin* fake = NULL;
 
  122  UINT ret = CHANNEL_RC_OK;
 
  123  fake = (rdpsndFakePlugin*)calloc(1, 
sizeof(rdpsndFakePlugin));
 
  126    return CHANNEL_RC_NO_MEMORY;
 
  128  fake->device.Open = rdpsnd_fake_open;
 
  129  fake->device.FormatSupported = rdpsnd_fake_format_supported;
 
  130  fake->device.SetVolume = rdpsnd_fake_set_volume;
 
  131  fake->device.Play = rdpsnd_fake_play;
 
  132  fake->device.Close = rdpsnd_fake_close;
 
  133  fake->device.Free = rdpsnd_fake_free;
 
  134  args = pEntryPoints->args;
 
  138    ret = rdpsnd_fake_parse_addin_args(fake, args);
 
  140    if (ret != CHANNEL_RC_OK)
 
  142      WLog_ERR(TAG, 
"error parsing arguments");
 
  147  pEntryPoints->pRegisterRdpsndDevice(pEntryPoints->rdpsnd, &fake->device);
 
  150  rdpsnd_fake_free(&fake->device);