/** RDP连接实例
* 这是创建连接后的客户端选项
* 数据结构申请内存调用freerdp_new,释放为freerdp_free
*/
struct rdp_freerdp
{
ALIGN64
rdpContext* context; /**< (offset 0)
一个指向rdpContext的结构.
客户端应用可以注册大于rdpContext结构的字段,
这里允许客户端使用附加的消息。
当使用这个模块的时候,
client application should ALWAYS declare their structure with the rdpContext
field first, and any additional content following it. Can be allocated
by a call to freerdp_context_new(). Must be deallocated by a call to
freerdp_context_free() before deallocating the current instance. */
ALIGN64 RDP_CLIENT_ENTRY_POINTS* pClientEntryPoints;
UINT64 paddingA[16 - 2]; /* 2 */
ALIGN64 rdpInput* input; /* (offset 16)
Input handle for the connection.
Will be initialized by a call to freerdp_context_new() */
ALIGN64 rdpUpdate*
update; /* (offset 17)
Update display parameters. Used to register display events callbacks and settings.
Will be initialized by a call to freerdp_context_new() */
ALIGN64 rdpSettings* settings; /**< (offset 18)
Pointer to a rdpSettings structure. Will be used to maintain the
required RDP settings. Will be
initialized by a call to freerdp_context_new()
*/
ALIGN64 rdpAutoDetect* autodetect; /* (offset 19)
Auto-Detect handle for the connection.
Will be initialized by a call to freerdp_context_new() */
UINT64 paddingB[32 - 20]; /* 20 */
ALIGN64 size_t
ContextSize; /* (offset 32)
Specifies the size of the 'context' field. freerdp_context_new() will use this
size to allocate the context buffer. freerdp_new() sets it to
sizeof(rdpContext). If modifying it, there should always be a minimum of
sizeof(rdpContext), as the freerdp library will assume it can use the 'context'
field to set the required informations in it. Clients will typically make it
bigger, and use a context structure embedding the rdpContext, and adding
additional information after that.
*/
ALIGN64 pContextNew
ContextNew; /**< (offset 33)
Callback for context allocation
Can be set before calling freerdp_context_new() to have it executed after
allocation and initialization. Must be set to NULL if not needed. */
ALIGN64 pContextFree
ContextFree; /**< (offset 34)
Callback for context deallocation
Can be set before calling freerdp_context_free() to have it executed before
deallocation. Must be set to NULL if not needed. */
UINT64 paddingC[47 - 35]; /* 35 */
ALIGN64 UINT ConnectionCallbackState; /* 47 */
ALIGN64 pPreConnect
PreConnect; /**< (offset 48)
Callback for pre-connect operations.
Can be set before calling freerdp_connect() to have it executed before the
actual connection happens. Must be set to NULL if not needed. */
ALIGN64 pPostConnect
PostConnect; /**< (offset 49)
Callback for post-connect operations.
Can be set before calling freerdp_connect() to have it executed after the
actual connection has succeeded. Must be set to NULL if not needed. */
ALIGN64 pAuthenticate Authenticate; /**< (offset 50)
Callback for authentication.
It is used to get the username/password when it was not
provided at connection time. */
ALIGN64 pVerifyCertificate VerifyCertificate; /**< (offset 51)
Callback for certificate validation.
Used to verify that an unknown certificate is
trusted. DEPRECATED: Use VerifyChangedCertificateEx*/
ALIGN64 pVerifyChangedCertificate VerifyChangedCertificate; /**< (offset 52)
Callback for changed certificate
validation. Used when a certificate differs from stored fingerprint.
DEPRECATED: Use VerifyChangedCertificateEx */
ALIGN64 pVerifyX509Certificate
VerifyX509Certificate; /**< (offset 53) Callback for X509 certificate verification (PEM
format) */
ALIGN64 pLogonErrorInfo
LogonErrorInfo; /**< (offset 54) Callback for logon error info, important for logon
system messages with RemoteApp */
ALIGN64 pPostDisconnect
PostDisconnect; /**< (offset 55)
Callback for cleaning up
resources allocated by connect callbacks. */
ALIGN64 pAuthenticate GatewayAuthenticate; /**< (offset 56)
Callback for gateway authentication.
It is used to get the username/password when it was not
provided at connection time. */
ALIGN64 pPresentGatewayMessage PresentGatewayMessage; /**< (offset 57)
Callback for gateway consent messages.
It is used to present consent messages to the user. */
UINT64 paddingD[64 - 58]; /* 58 */
ALIGN64 pSendChannelData
SendChannelData; /* (offset 64)
Callback for sending data to a channel.
By default, it is set by freerdp_new() to freerdp_send_channel_data(), which
eventually calls freerdp_channel_send() */
ALIGN64 pReceiveChannelData
ReceiveChannelData; /* (offset 65)
Callback for receiving data from a channel.
This is called by freerdp_channel_process() (if not NULL).
Clients will typically use a function that calls freerdp_channels_data()
to perform the needed tasks. */
ALIGN64 pVerifyCertificateEx
VerifyCertificateEx; /**< (offset 66)
Callback for certificate validation.
Used to verify that an unknown certificate is trusted. */
ALIGN64 pVerifyChangedCertificateEx
VerifyChangedCertificateEx; /**< (offset 67)
Callback for changed certificate validation.
Used when a certificate differs from stored fingerprint. */
UINT64 paddingE[80 - 68]; /* 68 */
};
struct rdp_context
{
ALIGN64 freerdp* instance; /**< (offset 0)
Pointer to a rdp_freerdp structure.
This is a back-link to retrieve the freerdp instance from the context.
It is set by the freerdp_context_new() function */
ALIGN64 freerdp_peer* peer; /**< (offset 1)
Pointer to the client peer.
This is set by a call to freerdp_peer_context_new() during peer
initialization. This field is used only on the server side. */
ALIGN64 BOOL ServerMode; /**< (offset 2) true when context is in server mode */
ALIGN64 UINT32 LastError; /* 3 */
UINT64 paddingA[16 - 4]; /* 4 */
ALIGN64 int argc; /**< (offset 16)
Number of arguments given to the program at launch time.
Used to keep this data available and used later on, typically just before
connection initialization.
@see freerdp_parse_args() */
ALIGN64 char** argv; /**< (offset 17)
List of arguments given to the program at launch time.
Used to keep this data available and used later on, typically just before
connection initialization.
@see freerdp_parse_args() */
ALIGN64 wPubSub* pubSub; /* (offset 18) */
ALIGN64 HANDLE channelErrorEvent; /* (offset 19)*/
ALIGN64 UINT channelErrorNum; /*(offset 20)*/
ALIGN64 char* errorDescription; /*(offset 21)*/
UINT64 paddingB[32 - 22]; /* 22 */
ALIGN64 rdpRdp*
rdp; /**< (offset 32)
Pointer to a rdp_rdp structure used to keep the connection's parameters.
It is allocated by freerdp_context_new() and deallocated by
freerdp_context_free(), at the same time that this rdp_context
structure - there is no need to specifically allocate/deallocate this. */
ALIGN64 rdpGdi* gdi; /**< (offset 33)
Pointer to a rdp_gdi structure used to keep the gdi settings.
It is allocated by gdi_init() and deallocated by gdi_free().
It must be deallocated before deallocating this rdp_context structure. */
ALIGN64 rdpRail* rail; /* 34 */
ALIGN64 rdpCache* cache; /* 35 */
ALIGN64 rdpChannels* channels; /* 36 */
ALIGN64 rdpGraphics* graphics; /* 37 */
ALIGN64 rdpInput* input; /* 38 */
ALIGN64 rdpUpdate* update; /* 39 */
ALIGN64 rdpSettings* settings; /* 40 */
ALIGN64 rdpMetrics* metrics; /* 41 */
ALIGN64 rdpCodecs* codecs; /* 42 */
ALIGN64 rdpAutoDetect* autodetect; /* 43 */
ALIGN64 HANDLE abortEvent; /* 44 */
ALIGN64 int disconnectUltimatum; /* 45 */
UINT64 paddingC[64 - 46]; /* 46 */
UINT64 paddingD[96 - 64]; /* 64 */
UINT64 paddingE[128 - 96]; /* 96 */
};
client