Added ConnectionStateChangeEvent for clients

Clients can now subscribe to connection state change events to
prevend data from being transmitted on sessions being redirected.
This commit is contained in:
Armin Novak 2021-02-08 10:41:34 +01:00 committed by akallabeth
parent 6d04c0831c
commit f9c2d5bab9
3 changed files with 22 additions and 5 deletions

View File

@ -71,6 +71,11 @@ extern "C"
BOOL firstActivation; BOOL firstActivation;
DEFINE_EVENT_END(Activated) DEFINE_EVENT_END(Activated)
DEFINE_EVENT_BEGIN(ConnectionStateChange)
int state;
BOOL active;
DEFINE_EVENT_END(ConnectionStateChange)
DEFINE_EVENT_BEGIN(Terminate) DEFINE_EVENT_BEGIN(Terminate)
int code; int code;
DEFINE_EVENT_END(Terminate) DEFINE_EVENT_END(Terminate)

View File

@ -1194,6 +1194,14 @@ int rdp_client_transition_to_state(rdpRdp* rdp, int state)
case CONNECTION_STATE_ACTIVE: case CONNECTION_STATE_ACTIVE:
rdp->state = CONNECTION_STATE_ACTIVE; rdp->state = CONNECTION_STATE_ACTIVE;
{
ActivatedEventArgs activatedEvent;
rdpContext* context = rdp->context;
EventArgsInit(&activatedEvent, "libfreerdp");
activatedEvent.firstActivation = !rdp->deactivation_reactivation;
PubSub_OnActivated(context->pubSub, context, &activatedEvent);
}
break; break;
default: default:
@ -1201,6 +1209,15 @@ int rdp_client_transition_to_state(rdpRdp* rdp, int state)
break; break;
} }
{
ConnectionStateChangeEventArgs stateEvent;
rdpContext* context = rdp->context;
EventArgsInit(&stateEvent, "libfreerdp");
stateEvent.state = rdp->state;
stateEvent.active = rdp->state == CONNECTION_STATE_ACTIVE;
PubSub_OnConnectionStateChange(context->pubSub, context, &stateEvent);
}
return status; return status;
} }

View File

@ -1648,12 +1648,7 @@ int rdp_recv_callback(rdpTransport* transport, wStream* s, void* extra)
if ((status >= 0) && (rdp->finalize_sc_pdus == FINALIZE_SC_COMPLETE)) if ((status >= 0) && (rdp->finalize_sc_pdus == FINALIZE_SC_COMPLETE))
{ {
ActivatedEventArgs activatedEvent;
rdpContext* context = rdp->context;
rdp_client_transition_to_state(rdp, CONNECTION_STATE_ACTIVE); rdp_client_transition_to_state(rdp, CONNECTION_STATE_ACTIVE);
EventArgsInit(&activatedEvent, "libfreerdp");
activatedEvent.firstActivation = !rdp->deactivation_reactivation;
PubSub_OnActivated(context->pubSub, context, &activatedEvent);
return 2; return 2;
} }