freerdp: pad multiple interfaces for improved ABI stability

This commit is contained in:
Marc-André Moreau 2011-11-19 02:33:49 -05:00
parent 28647840ba
commit 666fbb0405
8 changed files with 75 additions and 37 deletions

View File

@ -58,9 +58,11 @@ struct rdp_context
{
freerdp* instance;
freerdp_peer* peer;
uint32 paddingA[16 - 2]; /* offset 16 */
int argc;
char** argv;
uint32 paddingB[16 - 2]; /* offset 32 */
rdpRdp* rdp;
rdpGdi* gdi;
@ -68,27 +70,33 @@ struct rdp_context
rdpCache* cache;
rdpChannels* channels;
rdpGraphics* graphics;
uint32 paddingC[32 - 6]; /* offset 64 */
};
struct rdp_freerdp
{
rdpContext* context;
uint32 paddingA[16 - 1]; /* offset 16 */
rdpInput* input;
rdpUpdate* update;
rdpSettings* settings;
uint32 paddingB[16 - 3]; /* offset 32 */
size_t context_size;
pContextNew ContextNew;
pContextFree ContextFree;
uint32 paddingC[16 - 3]; /* offset 48 */
pPreConnect PreConnect;
pPostConnect PostConnect;
pAuthenticate Authenticate;
pVerifyCertificate VerifyCertificate;
uint32 paddingD[16 - 4]; /* offset 64 */
pSendChannelData SendChannelData;
pReceiveChannelData ReceiveChannelData;
uint32 paddingE[16 - 2]; /* offset 80 */
};
FREERDP_API void freerdp_context_new(freerdp* instance);

View File

@ -41,27 +41,28 @@ typedef void (*pBitmap_SetSurface)(rdpContext* context, rdpBitmap* bitmap, boole
struct rdp_bitmap
{
size_t size;
pBitmap_New New;
pBitmap_Free Free;
pBitmap_Paint Paint;
pBitmap_Decompress Decompress;
pBitmap_SetSurface SetSurface;
uint32 paddingA[16 - 6]; /* offset 16 */
uint16 left;
uint16 top;
uint16 right;
uint16 bottom;
uint16 width;
uint16 height;
uint16 bpp;
uint16 flags;
uint32 left;
uint32 top;
uint32 right;
uint32 bottom;
uint32 width;
uint32 height;
uint32 bpp;
uint32 flags;
uint32 length;
uint8* data;
uint32 paddingB[16 - 10]; /* offset 32 */
boolean compressed;
boolean ephemeral;
uint32 paddingC[16 - 2]; /* offset 48 */
};
FREERDP_API rdpBitmap* Bitmap_Alloc(rdpContext* context);
@ -84,20 +85,21 @@ typedef void (*pPointer_Set)(rdpContext* context, rdpPointer* pointer);
struct rdp_pointer
{
size_t size;
pPointer_New New;
pPointer_Free Free;
pPointer_Set Set;
uint32 paddingA[16 - 4]; /* offset 16 */
uint16 xPos;
uint16 yPos;
uint16 width;
uint16 height;
uint16 xorBpp;
uint16 lengthAndMask;
uint16 lengthXorMask;
uint32 xPos;
uint32 yPos;
uint32 width;
uint32 height;
uint32 xorBpp;
uint32 lengthAndMask;
uint32 lengthXorMask;
uint8* xorMaskData;
uint8* andMaskData;
uint32 paddingB[16 - 9]; /* offset 32 */
};
FREERDP_API rdpPointer* Pointer_Alloc(rdpContext* context);
@ -116,19 +118,20 @@ typedef void (*pGlyph_EndDraw)(rdpContext* context, int x, int y, int width, int
struct rdp_glyph
{
size_t size;
sint16 x;
sint16 y;
uint16 cx;
uint16 cy;
uint16 cb;
uint8* aj;
pGlyph_New New;
pGlyph_Free Free;
pGlyph_Draw Draw;
pGlyph_BeginDraw BeginDraw;
pGlyph_EndDraw EndDraw;
uint32 paddingA[16 - 6]; /* offset 16 */
sint32 x;
sint32 y;
uint32 cx;
uint32 cy;
uint32 cb;
uint8* aj;
uint32 paddingB[16 - 6]; /* offset 32 */
};
FREERDP_API rdpGlyph* Glyph_Alloc(rdpContext* context);
@ -146,6 +149,7 @@ struct rdp_graphics
rdpBitmap* Bitmap_Prototype;
rdpPointer* Pointer_Prototype;
rdpGlyph* Glyph_Prototype;
uint32 paddingA[16 - 4]; /* offset 16 */
};
FREERDP_API void graphics_register_bitmap(rdpGraphics* graphics, rdpBitmap* bitmap);

View File

@ -61,14 +61,15 @@ typedef void (*pExtendedMouseEvent)(rdpInput* input, uint16 flags, uint16 x, uin
struct rdp_input
{
rdpContext* context;
void* param1;
uint32 paddingA[16 - 2]; /* offset 16 */
pSynchronizeEvent SynchronizeEvent;
pKeyboardEvent KeyboardEvent;
pUnicodeKeyboardEvent UnicodeKeyboardEvent;
pMouseEvent MouseEvent;
pExtendedMouseEvent ExtendedMouseEvent;
void* param1;
uint32 paddingB[16 - 5]; /* offset 32 */
};
#endif /* __INPUT_API_H */

View File

@ -183,7 +183,7 @@ struct rdp_monitor
struct rdp_settings
{
void* instance;
uint32 paddingA[16 - 1];
uint32 paddingA[16 - 1]; /* offset 16 */
/* Core Protocol Parameters */
uint32 width;
@ -200,7 +200,7 @@ struct rdp_settings
uint32 encryption_method;
uint32 encryption_level;
boolean authentication;
uint32 paddingB[32 - 14];
uint32 paddingB[32 - 14]; /* offset 48 */
/* Connection Settings */
uint32 port;
@ -216,7 +216,7 @@ struct rdp_settings
boolean autologon;
boolean compression;
uint32 performance_flags;
uint32 paddingC[32 - 13];
uint32 paddingC[32 - 13]; /* offset 80 */
/* User Interface Parameters */
boolean sw_gdi;
@ -226,7 +226,7 @@ struct rdp_settings
boolean decorations;
uint32 percent_screen;
boolean mouse_motion;
uint32 paddingD[32 - 7];
uint32 paddingD[32 - 7]; /* offset 112 */
/* Internal Parameters */
char* home_path;
@ -234,7 +234,7 @@ struct rdp_settings
uint32 pdu_source;
UNICONV* uniconv;
boolean server_mode;
uint32 paddingE[32 - 5];
uint32 paddingE[32 - 5]; /* offset 144 */
/* Session */
boolean console_audio;

View File

@ -1141,6 +1141,7 @@ typedef void (*pSurfaceCommand)(rdpUpdate* update, STREAM* s);
struct rdp_update
{
rdpContext* context;
uint32 paddingA[16 - 1];
pBeginPaint BeginPaint;
pEndPaint EndPaint;
@ -1150,11 +1151,14 @@ struct rdp_update
pBitmapUpdate BitmapUpdate;
pPalette Palette;
pPlaySound PlaySound;
uint32 paddingB[16 - 8];
pPointerPosition PointerPosition;
pPointerSystem PointerSystem;
pPointerColor PointerColor;
pPointerNew PointerNew;
pPointerCached PointerCached;
uint32 paddingC[16 - 5];
pDstBlt DstBlt;
pPatBlt PatBlt;
@ -1178,6 +1182,7 @@ struct rdp_update
pPolygonCB PolygonCB;
pEllipseSC EllipseSC;
pEllipseCB EllipseCB;
uint32 paddingD[32 - 22];
pCacheBitmap CacheBitmap;
pCacheBitmapV2 CacheBitmapV2;
@ -1186,6 +1191,7 @@ struct rdp_update
pCacheGlyph CacheGlyph;
pCacheGlyphV2 CacheGlyphV2;
pCacheBrush CacheBrush;
uint32 paddingE[32 - 7];
pCreateOffscreenBitmap CreateOffscreenBitmap;
pSwitchSurface SwitchSurface;
@ -1199,6 +1205,7 @@ struct rdp_update
pDrawGdiPlusCacheFirst DrawGdiPlusCacheFirst;
pDrawGdiPlusCacheNext DrawGdiPlusCacheNext;
pDrawGdiPlusCacheEnd DrawGdiPlusCacheEnd;
uint32 paddingF[32 - 12];
pWindowCreate WindowCreate;
pWindowUpdate WindowUpdate;
@ -1210,12 +1217,17 @@ struct rdp_update
pNotifyIconDelete NotifyIconDelete;
pMonitoredDesktop MonitoredDesktop;
pNonMonitoredDesktop NonMonitoredDesktop;
uint32 paddingG[32 - 10];
pRefreshRect RefreshRect;
pSuppressOutput SuppressOutput;
uint32 paddingH[16 - 2];
pSurfaceBits SurfaceBits;
pSurfaceCommand SurfaceCommand;
uint32 paddingI[16 - 2];
/* everything below is internal, and should not be directly accessed */
boolean glyph_v2;

View File

@ -1739,6 +1739,7 @@ boolean rdp_recv_demand_active(rdpRdp* rdp, STREAM* s)
uint16 channelId;
uint16 pduType;
uint16 pduLength;
uint16 pduSource;
uint16 numberCapabilities;
uint16 lengthSourceDescriptor;
uint16 lengthCombinedCapabilities;
@ -1771,12 +1772,14 @@ boolean rdp_recv_demand_active(rdpRdp* rdp, STREAM* s)
return False;
}
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &rdp->settings->pdu_source))
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
{
printf("rdp_read_share_control_header failed\n");
return False;
}
rdp->settings->pdu_source = pduSource;
if (pduType != PDU_TYPE_DEMAND_ACTIVE)
{
printf("pduType bad\n");
@ -1870,6 +1873,7 @@ boolean rdp_recv_confirm_active(rdpRdp* rdp, STREAM* s)
uint16 channelId;
uint16 pduType;
uint16 pduLength;
uint16 pduSource;
uint16 lengthSourceDescriptor;
uint16 lengthCombinedCapabilities;
uint16 numberCapabilities;
@ -1879,8 +1883,11 @@ boolean rdp_recv_confirm_active(rdpRdp* rdp, STREAM* s)
if (channelId != MCS_GLOBAL_CHANNEL_ID)
return False;
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &rdp->settings->pdu_source))
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
return False;
rdp->settings->pdu_source = pduSource;
if (pduType != PDU_TYPE_CONFIRM_ACTIVE)
return False;

View File

@ -115,6 +115,7 @@ static boolean peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
uint16 length;
uint16 pduType;
uint16 pduLength;
uint16 pduSource;
uint16 channelId;
if (!rdp_read_header(client->context->rdp, s, &length, &channelId))
@ -129,9 +130,11 @@ static boolean peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
}
else
{
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &client->settings->pdu_source))
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
return False;
client->settings->pdu_source = pduSource;
switch (pduType)
{
case PDU_TYPE_DATA:

View File

@ -619,6 +619,7 @@ static boolean rdp_recv_tpkt_pdu(rdpRdp* rdp, STREAM* s)
uint16 length;
uint16 pduType;
uint16 pduLength;
uint16 pduSource;
uint16 channelId;
uint32 securityHeader;
@ -652,7 +653,9 @@ static boolean rdp_recv_tpkt_pdu(rdpRdp* rdp, STREAM* s)
}
else
{
rdp_read_share_control_header(s, &pduLength, &pduType, &rdp->settings->pdu_source);
rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource);
rdp->settings->pdu_source = pduSource;
switch (pduType)
{