keeping the old callback and adding the new one at the end of the struct, so that...
authorzihao.jiang <zihao.jiang@yahoo.com>
Fri, 28 Oct 2016 16:28:10 +0000 (00:28 +0800)
committerzihao.jiang <zihao.jiang@yahoo.com>
Fri, 28 Oct 2016 16:28:10 +0000 (00:28 +0800)
include/freerdp/peer.h
libfreerdp/core/peer.c

index 7bc7f19..fff7b8e 100644 (file)
@@ -34,6 +34,7 @@ typedef void (*psPeerContextFree)(freerdp_peer* peer, rdpContext* context);
 
 typedef BOOL (*psPeerInitialize)(freerdp_peer* peer);
 typedef BOOL (*psPeerGetFileDescriptor)(freerdp_peer* peer, void** rfds, int* rcount);
+typedef HANDLE(*psPeerGetEventHandle)(freerdp_peer* peer);
 typedef DWORD (*psPeerGetEventHandles)(freerdp_peer* peer, HANDLE* events, DWORD count);
 typedef HANDLE(*psPeerGetReceiveEventHandle)(freerdp_peer* peer);
 typedef BOOL (*psPeerCheckFileDescriptor)(freerdp_peer* peer);
@@ -79,7 +80,7 @@ struct rdp_freerdp_peer
 
        psPeerInitialize Initialize;
        psPeerGetFileDescriptor GetFileDescriptor;
-       psPeerGetEventHandles GetEventHandles;
+       psPeerGetEventHandle GetEventHandle;
        psPeerGetReceiveEventHandle GetReceiveEventHandle;
        psPeerCheckFileDescriptor CheckFileDescriptor;
        psPeerClose Close;
@@ -111,6 +112,7 @@ struct rdp_freerdp_peer
        psPeerIsWriteBlocked IsWriteBlocked;
        psPeerDrainOutputBuffer DrainOutputBuffer;
        psPeerHasMoreToRead HasMoreToRead;
+       psPeerGetEventHandles GetEventHandles;
 };
 
 #ifdef __cplusplus
index 82fc964..b845c65 100644 (file)
@@ -248,6 +248,14 @@ static BOOL freerdp_peer_get_fds(freerdp_peer* client, void** rfds, int* rcount)
        return TRUE;
 }
 
+static HANDLE freerdp_peer_get_event_handle(freerdp_peer* client)
+{
+       HANDLE hEvent = NULL;
+       rdpTransport* transport = client->context->rdp->transport;
+       BIO_get_event(transport->frontBio, &hEvent);
+       return hEvent;
+}
+
 static DWORD freerdp_peer_get_event_handles(freerdp_peer* client, HANDLE* events, DWORD count)
 {
        DWORD nCount = 0;
@@ -807,6 +815,7 @@ freerdp_peer* freerdp_peer_new(int sockfd)
                client->ContextSize = sizeof(rdpContext);
                client->Initialize = freerdp_peer_initialize;
                client->GetFileDescriptor = freerdp_peer_get_fds;
+               client->GetEventHandle = freerdp_peer_get_event_handle;
                client->GetEventHandles = freerdp_peer_get_event_handles;
                client->CheckFileDescriptor = freerdp_peer_check_fds;
                client->Close = freerdp_peer_close;