diff --git a/include/freerdp/event.h b/include/freerdp/event.h index 74346b30f..15623625f 100644 --- a/include/freerdp/event.h +++ b/include/freerdp/event.h @@ -71,6 +71,11 @@ extern "C" BOOL firstActivation; DEFINE_EVENT_END(Activated) + DEFINE_EVENT_BEGIN(ConnectionStateChange) + int state; + BOOL active; + DEFINE_EVENT_END(ConnectionStateChange) + DEFINE_EVENT_BEGIN(Terminate) int code; DEFINE_EVENT_END(Terminate) diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index bbc603103..143a1cbc5 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -1194,6 +1194,14 @@ int rdp_client_transition_to_state(rdpRdp* rdp, int state) case 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; default: @@ -1201,6 +1209,15 @@ int rdp_client_transition_to_state(rdpRdp* rdp, int state) 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; } diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c index feb0b7db3..b6aeafed7 100644 --- a/libfreerdp/core/rdp.c +++ b/libfreerdp/core/rdp.c @@ -1648,12 +1648,7 @@ int rdp_recv_callback(rdpTransport* transport, wStream* s, void* extra) 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); - EventArgsInit(&activatedEvent, "libfreerdp"); - activatedEvent.firstActivation = !rdp->deactivation_reactivation; - PubSub_OnActivated(context->pubSub, context, &activatedEvent); return 2; }