diff options
Diffstat (limited to 'xorg/X11R7.6/rdp/rdp.h')
-rw-r--r-- | xorg/X11R7.6/rdp/rdp.h | 447 |
1 files changed, 447 insertions, 0 deletions
diff --git a/xorg/X11R7.6/rdp/rdp.h b/xorg/X11R7.6/rdp/rdp.h new file mode 100644 index 00000000..ee68d511 --- /dev/null +++ b/xorg/X11R7.6/rdp/rdp.h @@ -0,0 +1,447 @@ +/* +Copyright 2005-2012 Jay Sorg + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#if defined(__arm__) && !defined(__arm32__) +#define __arm32__ +#endif + +#include "xorg-server.h" +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/param.h> +#include <netinet/tcp.h> +#include <netinet/in.h> +#include <netdb.h> +#include "X.h" +#define NEED_EVENTS +#include "Xproto.h" +#include "Xos.h" +#include "scrnintstr.h" +#include "servermd.h" +#define PSZ 8 +//#include "cfb.h" +#include "mibstore.h" +#include "colormapst.h" +#include "gcstruct.h" +#include "input.h" +#include "mipointer.h" +#include "dixstruct.h" +#include "propertyst.h" +#include "Xatom.h" +#include "dix.h" +#include "X11/keysym.h" +#include "dixfontstr.h" +#include "fontstruct.h" +#include "cursorstr.h" +#include "picturestr.h" +#include "XKBstr.h" +#include "inputstr.h" +#include "randrstr.h" + +/* test to see if this is xorg source or xfree86 */ +#ifdef XORGSERVER +# define RDP_IS_XORG +#else +# include <xf86Version.h> +# if (XF86_VERSION_MAJOR == 4 && XF86_VERSION_MINOR > 3) +# define RDP_IS_XFREE86 +# elif (XF86_VERSION_MAJOR > 4) +# define RDP_IS_XFREE86 +# else +# define RDP_IS_XORG +# endif +#endif + +#define X11RDPVER "0.5.0" + +#define PixelDPI 100 +#define PixelToMM(_size) (((_size) * 254 + (PixelDPI) * 5) / ((PixelDPI) * 10)) + +/* Per-screen (framebuffer) structure. There is only one of these, since we + don't allow the X server to have multiple screens. */ +struct _rdpScreenInfoRec +{ + int width; + int paddedWidthInBytes; + int height; + int depth; + int bitsPerPixel; + int sizeInBytes; + char* pfbMemory; + Pixel blackPixel; + Pixel whitePixel; + /* wrapped screen functions */ + /* Random screen procedures */ + CloseScreenProcPtr CloseScreen; + /* GC procedures */ + CreateGCProcPtr CreateGC; + /* Pixmap procedures */ + CreatePixmapProcPtr CreatePixmap; + DestroyPixmapProcPtr DestroyPixmap; + /* Window Procedures */ + PaintWindowBackgroundProcPtr PaintWindowBackground; + PaintWindowBorderProcPtr PaintWindowBorder; + CopyWindowProcPtr CopyWindow; + ClearToBackgroundProcPtr ClearToBackground; + ScreenWakeupHandlerProcPtr WakeupHandler; + CompositeProcPtr Composite; + /* Backing store procedures */ + RestoreAreasProcPtr RestoreAreas; + + int rdp_width; + int rdp_height; + int rdp_bpp; + int rdp_Bpp; + int rdp_Bpp_mask; +}; +typedef struct _rdpScreenInfoRec rdpScreenInfoRec; +typedef rdpScreenInfoRec* rdpScreenInfoPtr; + +struct _rdpGCRec +{ + GCFuncs* funcs; + GCOps* ops; +}; +typedef struct _rdpGCRec rdpGCRec; +typedef rdpGCRec* rdpGCPtr; + +/* rdpmisc.c */ +void +rdpLog(char *format, ...); +int +rdpBitsPerPixel(int depth); +void +rdpClientStateChange(CallbackListPtr* cbl, pointer myData, pointer clt); +int +g_tcp_recv(int sck, void* ptr, int len, int flags); +void +g_tcp_close(int sck); +int +g_tcp_last_error_would_block(int sck); +void +g_sleep(int msecs); +int +g_tcp_send(int sck, void* ptr, int len, int flags); +void* +g_malloc(int size, int zero); +void +g_free(void* ptr); +void +g_sprintf(char* dest, char* format, ...); +int +g_tcp_socket(void); +int +g_tcp_local_socket_dgram(void); +void +g_memcpy(void* d_ptr, const void* s_ptr, int size); +int +g_tcp_set_no_delay(int sck); +int +g_tcp_set_non_blocking(int sck); +int +g_tcp_accept(int sck); +int +g_tcp_select(int sck1, int sck2, int sck3); +int +g_tcp_bind(int sck, char* port); +int +g_tcp_local_bind(int sck, char* port); +int +g_tcp_listen(int sck); + +/* rdpdraw.c */ +Bool +rdpCloseScreen(int i, ScreenPtr pScreen); +PixmapPtr +rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth); +Bool +rdpDestroyPixmap(PixmapPtr pPixmap); +Bool +rdpDestroyPixmap(PixmapPtr pPixmap); +Bool +rdpCreateGC(GCPtr pGC); +void +rdpPaintWindowBackground(WindowPtr pWin, RegionPtr pRegion, int what); +void +rdpPaintWindowBorder(WindowPtr pWin, RegionPtr pRegion, int what); +void +rdpCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr pOldRegion); +void +rdpClearToBackground(WindowPtr pWin, int x, int y, int w, int h, + Bool generateExposures); +RegionPtr +rdpRestoreAreas(WindowPtr pWin, RegionPtr prgnExposed); +void +rdpInstallColormap(ColormapPtr pmap); +void +rdpUninstallColormap(ColormapPtr pmap); +int +rdpListInstalledColormaps(ScreenPtr pScreen, Colormap* pmaps); +void +rdpStoreColors(ColormapPtr pmap, int ndef, xColorItem* pdefs); +Bool +rdpSaveScreen(ScreenPtr pScreen, int on); +Bool +rdpRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); +Bool +rdpUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); +void +rdpCursorLimits(ScreenPtr pScreen, CursorPtr pCursor, + BoxPtr pHotBox, BoxPtr pTopLeftBox); +void +rdpConstrainCursor(ScreenPtr pScreen, BoxPtr pBox); +Bool +rdpSetCursorPosition(ScreenPtr pScreen, int x, int y, Bool generateEvent); +Bool +rdpDisplayCursor(ScreenPtr pScreen, CursorPtr pCursor); +void +rdpRecolorCursor(ScreenPtr pScreen, CursorPtr pCursor, + Bool displayed); +void +rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, + INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, + INT16 yDst, CARD16 width, CARD16 height); + + +/* rdpinput.c */ +int +rdpKeybdProc(DeviceIntPtr pDevice, int onoff); +int +rdpMouseProc(DeviceIntPtr pDevice, int onoff); +Bool +rdpCursorOffScreen(ScreenPtr* ppScreen, int* x, int* y); +void +rdpCrossScreen(ScreenPtr pScreen, Bool entering); +Bool +rdpSpriteRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); +Bool +rdpSpriteUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); +void +rdpSpriteSetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y); +void +rdpSpriteMoveCursor(ScreenPtr pScreen, int x, int y); +void +PtrAddEvent(int buttonMask, int x, int y); +void +KbdAddEvent(int down, int param1, int param2, int param3, int param4); +void +KbdSync(int param1); + +/* rdpup.c */ +int +rdpup_init(void); +int +rdpup_check(void); +int +rdpup_begin_update(void); +int +rdpup_end_update(void); +int +rdpup_fill_rect(short x, short y, int cx, int cy); +int +rdpup_screen_blt(short x, short y, int cx, int cy, short srcx, short srcy); +int +rdpup_set_clip(short x, short y, int cx, int cy); +int +rdpup_reset_clip(void); +int +rdpup_set_fgcolor(int fgcolor); +int +rdpup_set_bgcolor(int bgcolor); +int +rdpup_set_opcode(int opcode); +int +rdpup_paint_rect(short x, short y, int cx, int cy, + char* bmpdata, int width, int height, + short srcx, short srcy); +int +rdpup_set_pen(int style, int width); +int +rdpup_draw_line(short x1, short y1, short x2, short y2); +void +rdpup_send_area(int x, int y, int w, int h); + +#if defined(X_BYTE_ORDER) +# if X_BYTE_ORDER == X_LITTLE_ENDIAN +# define L_ENDIAN +# else +# define B_ENDIAN +# endif +#else +# error Unknown endianness in rdp.h +#endif +/* check if we need to align data */ +/* check if we need to align data */ +#if defined(__sparc__) || defined(__alpha__) || defined(__hppa__) || \ + defined(__AIX__) || defined(__PPC__) || defined(__mips__) || \ + defined(__ia64__) || defined(__ppc__) || defined(__arm__) +#define NEED_ALIGN +#endif + +/* parser state */ +struct stream +{ + char* p; + char* end; + char* data; + int size; + /* offsets of various headers */ + char* iso_hdr; + char* mcs_hdr; + char* sec_hdr; + char* rdp_hdr; + char* channel_hdr; + char* next_packet; +}; + +/******************************************************************************/ +#define s_push_layer(s, h, n) \ +{ \ + (s)->h = (s)->p; \ + (s)->p += (n); \ +} + +/******************************************************************************/ +#define s_pop_layer(s, h) \ +{ \ + (s)->p = (s)->h; \ +} + +/******************************************************************************/ +#if defined(B_ENDIAN) || defined(NEED_ALIGN) +#define out_uint16_le(s, v) \ +{ \ + *((s)->p) = (unsigned char)((v) >> 0); \ + (s)->p++; \ + *((s)->p) = (unsigned char)((v) >> 8); \ + (s)->p++; \ +} +#else +#define out_uint16_le(s, v) \ +{ \ + *((unsigned short*)((s)->p)) = (unsigned short)(v); \ + (s)->p += 2; \ +} +#endif + +/******************************************************************************/ +#define init_stream(s, v) \ +{ \ + if ((v) > (s)->size) \ + { \ + g_free((s)->data); \ + (s)->data = (char*)g_malloc((v), 0); \ + (s)->size = (v); \ + } \ + (s)->p = (s)->data; \ + (s)->end = (s)->data; \ + (s)->next_packet = 0; \ +} + +/******************************************************************************/ +#define out_uint8p(s, v, n) \ +{ \ + g_memcpy((s)->p, (v), (n)); \ + (s)->p += (n); \ +} + +/******************************************************************************/ +#define out_uint8a(s, v, n) \ +{ \ + out_uint8p((s), (v), (n)); \ +} + +/******************************************************************************/ +#if defined(B_ENDIAN) || defined(NEED_ALIGN) +#define out_uint32_le(s, v) \ +{ \ + *((s)->p) = (unsigned char)((v) >> 0); \ + (s)->p++; \ + *((s)->p) = (unsigned char)((v) >> 8); \ + (s)->p++; \ + *((s)->p) = (unsigned char)((v) >> 16); \ + (s)->p++; \ + *((s)->p) = (unsigned char)((v) >> 24); \ + (s)->p++; \ +} +#else +#define out_uint32_le(s, v) \ +{ \ + *((unsigned int*)((s)->p)) = (v); \ + (s)->p += 4; \ +} +#endif + +/******************************************************************************/ +#if defined(B_ENDIAN) || defined(NEED_ALIGN) +#define in_uint32_le(s, v) \ +{ \ + (v) = (unsigned int) \ + ( \ + (*((unsigned char*)((s)->p + 0)) << 0) | \ + (*((unsigned char*)((s)->p + 1)) << 8) | \ + (*((unsigned char*)((s)->p + 2)) << 16) | \ + (*((unsigned char*)((s)->p + 3)) << 24) \ + ); \ + (s)->p += 4; \ +} +#else +#define in_uint32_le(s, v) \ +{ \ + (v) = *((unsigned int*)((s)->p)); \ + (s)->p += 4; \ +} +#endif + +/******************************************************************************/ +#if defined(B_ENDIAN) || defined(NEED_ALIGN) +#define in_uint16_le(s, v) \ +{ \ + (v) = (unsigned short) \ + ( \ + (*((unsigned char*)((s)->p + 0)) << 0) | \ + (*((unsigned char*)((s)->p + 1)) << 8) \ + ); \ + (s)->p += 2; \ +} +#else +#define in_uint16_le(s, v) \ +{ \ + (v) = *((unsigned short*)((s)->p)); \ + (s)->p += 2; \ +} +#endif + +/******************************************************************************/ +#define s_mark_end(s) \ +{ \ + (s)->end = (s)->p; \ +} + +/******************************************************************************/ +#define make_stream(s) \ +{ \ + (s) = (struct stream*)g_malloc(sizeof(struct stream), 1); \ +} |