3#include "ConnectLayer.h" 
    4#include <QLoggingCategory> 
    6static Q_LOGGING_CATEGORY(log, 
"FreeRDP.Connect.Layer")
 
   10    , m_pOperate(pOperate)
 
   14        m_pParameter = pOperate->m_pParameter;
 
   17CConnectLayer::~CConnectLayer()
 
   19    qDebug(log) << Q_FUNC_INFO;
 
   22int CConnectLayer::Initialize(rdpContext* context)
 
   27    auto cb = freerdp_get_io_callbacks(context);
 
   29    rdpTransportIo io = *cb;
 
   30    io.ConnectLayer = cb_transport_connect_layer;
 
   31    bRet = freerdp_set_io_callbacks(context, &io);
 
   33        qCritical(log) << 
"Set freerdp io callback fail";
 
   36    bRet = freerdp_set_io_callback_context(context, 
this);
 
   38        qCritical(log) << 
"Set freerdp io callback context fail";
 
   41    return OnInit(context);
 
   44int CConnectLayer::Clean()
 
   51rdpTransportLayer* CConnectLayer::cb_transport_connect_layer(
 
   52    rdpTransport* transport,
 
   53    const char* hostname, 
int port,
 
   56    rdpContext* context = transport_get_context(transport);
 
   62    if(!pThis) 
return nullptr;
 
   63    return pThis->OnTransportConnectLayer(context);
 
   66rdpTransportLayer* CConnectLayer::OnTransportConnectLayer(rdpContext* context)
 
   69    rdpTransportLayer* layer = 
nullptr;
 
   70    layer = transport_layer_new(freerdp_get_transport(context), 
sizeof(LayerUserData));
 
   73    LayerUserData* userData = (LayerUserData*)layer->userContext;
 
   74    userData->pThis = 
this;
 
   75    layer->Read = cbLayerRead;
 
   76    layer->Write = cbLayerWrite;
 
   77    layer->Close = cbLayerClose;
 
   78    layer->Wait = cbLayerWait;
 
   79    layer->GetEvent = cbLayerGetEvent;
 
   83int CConnectLayer::cbLayerRead(
void *userContext, 
void *data, 
int bytes)
 
   86    if(!userContext) 
return -1;
 
   90    return pThis->OnLayerRead(data, bytes);
 
   93int CConnectLayer::cbLayerWrite(
void *userContext, 
const void *data, 
int bytes)
 
   95    if(!userContext) 
return -1;
 
   99    return pThis->OnLayerWrite(data, bytes);
 
  102BOOL CConnectLayer::cbLayerClose(
void *userContext)
 
  104    qDebug(log) << Q_FUNC_INFO;
 
  105    if(!userContext) 
return FALSE;
 
  107    return pThis->OnLayerClose();
 
  110BOOL CConnectLayer::OnLayerClose()
 
  113    if(nRet) 
return false;
 
  117BOOL CConnectLayer::cbLayerWait(
void *userContext, BOOL waitWrite, DWORD timeout)
 
  121    return pThis->OnLayerWait(waitWrite, timeout);
 
  124HANDLE CConnectLayer::cbLayerGetEvent(
void *userContext)
 
  128    return pThis->OnLayerGetEvent();