1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 /*************************************************************************
25  *
26  *	  ATTENTION
27  *	  This file is intended to work inside and outside the OpenOffice environment.
28  *	  Only adaption of file commtypes.hxx should be necessary. Else it is a bug!
29  *
30  ************************************************************************/
31 
32 #include <automation/commtypes.hxx>
33 #include <osl/endian.h>
34 
35 #ifndef MAKEDWORD
36 #define MAKEDWORD(wl, wh)   ((comm_DWORD)((wl) & 0xFFFF) | (((comm_DWORD)(wh) & 0xFFFF) << 16))
37 #endif
38 #ifndef LOWORD
39 #define LOWORD(d)           ((comm_WORD)((comm_DWORD)(d) & 0xFFFF))
40 #endif
41 #ifndef HIWORD
42 #define HIWORD(d)           ((comm_WORD)(((comm_DWORD)(d) >> 16) & 0xFFFF))
43 #endif
44 #ifndef MAKEWORD
45 #define MAKEWORD(bl, bh)    ((comm_WORD)((bl) & 0xFF) | (((comm_WORD)(bh) & 0xFF) << 8))
46 #endif
47 #ifndef LOBYTE
48 #define LOBYTE(w)           ((comm_BYTE)((comm_WORD)(w) & 0xFF))
49 #endif
50 #ifndef HIBYTE
51 #define HIBYTE(w)           ((comm_BYTE)(((comm_WORD)(w) >> 8) & 0xFF))
52 #endif
53 #ifndef MAKEBYTE
54 #define MAKEBYTE(nl, nh)    ((comm_BYTE)(((nl) & 0x0F) | (((nh) & 0x0F) << 4)))
55 #endif
56 #ifndef LONIBBLE
57 #define LONIBBLE(b)         ((comm_BYTE)((b) & 0x0F))
58 #endif
59 #ifndef HINIBBLE
60 #define HINIBBLE(b)         ((comm_BYTE)(((b) >> 4) & 0x0F))
61 #endif
62 
63 #ifndef SWAPWORD
64 #define SWAPWORD(w)         MAKEWORD(HIBYTE(w),LOBYTE(w))
65 #endif
66 #ifndef SWAPDWORD
67 #define SWAPDWORD(d)        MAKEDWORD(SWAPWORD(HIWORD(d)),SWAPWORD(LOWORD(d)))
68 #endif
69 
70 #ifdef OSL_BIGENDIAN
71 #ifndef NETWORD
72 #define NETWORD(w)          (comm_WORD)(w)
73 #endif
74 #ifndef NETDWORD
75 #define NETDWORD(d)         (comm_DWORD)(d)
76 #endif
77 #endif // OSL_BIGENDIAN
78 
79 #ifdef OSL_LITENDIAN
80 #ifndef NETWORD
81 #define NETWORD(w)          MAKEWORD(HIBYTE(w),LOBYTE(w))
82 #endif
83 #ifndef NETDWORD
84 #define NETDWORD(d)         MAKEDWORD(NETWORD(HIWORD(d)),NETWORD(LOWORD(d)))
85 #endif
86 #endif // OSL_LITENDIAN
87 
88 /**
89 	Es gibt zwei Arten von Datenpaketen
90 	Die erste enth�lt in den ersten 4 Byte die L�ngenangabe und in den darauffolgenden die Daten.
91 	Die L�ngenangabe bezieht sich nur auf die Daten ohne die L�ngenangabe selbst.
92 
93 	Die zweite Art von Datenpaketen enth�lt Header mit weiteren Informationen
94 	wie unten beschrieben.
95 
96 	Umgeschaltet wird mit dem Boolean bUseMultiChannel im Konstruktor des Managers.
97 **/
98 /**
99 Defines f�r Header Typen:
100 
101 Allgemeiner Header:
102 		Byte	L�nge		Inhalt
103 		0..3		4		L�nge des Paketes ohne diese 4 Byte
104 		4			1		Pr�fsumme �ber die L�nge. Stimmt sie nicht wird die Verbindung geschlossen
105 		5..6		2		L�nge des Headers ohne diese 2 Byte
106 		7..8		2		Typ des Headers
107 
108 CH_SimpleMultiChannel:
109 		9..10		2		Channel
110 CH_Handshake				Internal Use ONLY
111 							Keine Weiteren Daten!
112 
113 **/
114 typedef comm_UINT16 CMProtocol;
115 
116 #define CM_PROTOCOL_OLDSTYLE		(CMProtocol)0x0001
117 #define CM_PROTOCOL_MARS			(CMProtocol)0x0001
118 #define CM_PROTOCOL_BROADCASTER		(CMProtocol)0x0002
119 #define CM_PROTOCOL_USER_START		(CMProtocol)0x0100
120 
121 typedef comm_USHORT HandshakeType;
122 typedef comm_USHORT CommunicationOption;
123 
124 #define CH_NoHeader					0x0000
125 #define CH_SimpleMultiChannel		0x0001
126 #define CH_Handshake				0x0002
127 
128 #define CH_REQUEST_HandshakeAlive	((HandshakeType)0x0101)	/// Fordert eine Alive Antwort an
129 #define CH_RESPONSE_HandshakeAlive	((HandshakeType)0x0102)	/// Alive Antwort
130 
131 /**
132 	Announce supported options:
133 	Client announces available options
134 	Server returns subset of these options (note that the sbset can be the entire set also)
135 **/
136 #define CH_SUPPORT_OPTIONS			((HandshakeType)0x0103)
137 #define OPT_USE_SHUTDOWN_PROTOCOL	((CommunicationOption)0x0001)
138 
139 /// these are for making sure all Data is read prior to shutting down the link
140 #define CH_REQUEST_ShutdownLink		((HandshakeType)0x0104)	/// Request to Shutdown this link
141 #define CH_ShutdownLink				((HandshakeType)0x0105)	/// Shutdown this link
142 
143 #define CH_SetApplication			((HandshakeType)0x0106)	/// Set Description of Client
144 
145