Ejemplo n.º 1
0
static boolean rdpsnd_server_send_formats(rdpsnd_server* rdpsnd, STREAM* s)
{
	uint16 i;

	RDPSND_PDU_INIT(s, SNDC_FORMATS);

	stream_write_uint32(s, 0); /* dwFlags */
	stream_write_uint32(s, 0); /* dwVolume */
	stream_write_uint32(s, 0); /* dwPitch */
	stream_write_uint16(s, 0); /* wDGramPort */
	stream_write_uint16(s, rdpsnd->context.num_server_formats); /* wNumberOfFormats */
	stream_write_uint8(s, rdpsnd->context.block_no); /* cLastBlockConfirmed */
	stream_write_uint16(s, 0x06); /* wVersion */
	stream_write_uint8(s, 0); /* bPad */

	for (i = 0; i < rdpsnd->context.num_server_formats; i++)
	{
		stream_write_uint16(s, rdpsnd->context.server_formats[i].wFormatTag); /* wFormatTag (WAVE_FORMAT_PCM) */
		stream_write_uint16(s, rdpsnd->context.server_formats[i].nChannels); /* nChannels */
		stream_write_uint32(s, rdpsnd->context.server_formats[i].nSamplesPerSec); /* nSamplesPerSec */
		stream_write_uint32(s, rdpsnd->context.server_formats[i].nSamplesPerSec *
			rdpsnd->context.server_formats[i].nChannels *
			rdpsnd->context.server_formats[i].wBitsPerSample / 8); /* nAvgBytesPerSec */
		stream_write_uint16(s, rdpsnd->context.server_formats[i].nBlockAlign); /* nBlockAlign */
		stream_write_uint16(s, rdpsnd->context.server_formats[i].wBitsPerSample); /* wBitsPerSample */
		stream_write_uint16(s, rdpsnd->context.server_formats[i].cbSize); /* cbSize */
		if (rdpsnd->context.server_formats[i].cbSize > 0)
		{
			stream_write(s, rdpsnd->context.server_formats[i].data, rdpsnd->context.server_formats[i].cbSize);
		}
	}

	RDPSND_PDU_FINISH(s);
}
Ejemplo n.º 2
0
static BOOL rdpsnd_server_set_volume(rdpsnd_server_context* context, int left, int right)
{
	rdpsnd_server* rdpsnd = (rdpsnd_server*) context;
	STREAM* s = rdpsnd->rdpsnd_pdu;

	RDPSND_PDU_INIT(s, SNDC_SETVOLUME);

	stream_write_UINT16(s, left);
	stream_write_UINT16(s, right);
	
	RDPSND_PDU_FINISH(s);
}
Ejemplo n.º 3
0
static BOOL rdpsnd_server_close(rdpsnd_server_context* context)
{
	rdpsnd_server* rdpsnd = (rdpsnd_server*) context;
	STREAM* s = rdpsnd->rdpsnd_pdu;

	if (rdpsnd->context.selected_client_format < 0)
		return FALSE;

	if (rdpsnd->out_pending_frames > 0)
	{
		if (!rdpsnd_server_send_audio_pdu(rdpsnd))
			return FALSE;
	}

	rdpsnd->context.selected_client_format = -1;

	RDPSND_PDU_INIT(s, SNDC_CLOSE);
	RDPSND_PDU_FINISH(s);
}