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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_automation.hxx"
26 
27 /*************************************************************************
28  *
29  *	  ATTENTION
30  *	  This file is intended to work inside and outside the StarOffice environment.
31  *	  Only adaption of file commtypes.hxx should be necessary. Else it is a bug!
32  *
33  ************************************************************************/
34 #include <osl/endian.h>
35 
36 #include "cmdbasestream.hxx"
37 #include "rcontrol.hxx"
38 
CmdBaseStream()39 CmdBaseStream::CmdBaseStream()
40 : pCommStream( NULL )
41 {
42 }
43 
~CmdBaseStream()44 CmdBaseStream::~CmdBaseStream()
45 {
46 }
47 
GenError(rtl::OString * pUId,comm_String * pString)48 void CmdBaseStream::GenError (rtl::OString *pUId, comm_String *pString )
49 {
50 	Write(comm_USHORT(SIReturnError));
51 	Write(pUId);
52 	Write(pString);
53 }
54 
GenReturn(comm_USHORT nRet,comm_ULONG nUId)55 void CmdBaseStream::GenReturn (comm_USHORT nRet, comm_ULONG nUId )
56 {
57 	Write(comm_USHORT(SIReturn));
58 	Write(nRet);
59 	Write(nUId);
60 	Write(comm_USHORT(PARAM_NONE));				// Typ der folgenden Parameter
61 }
62 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_ULONG nNr)63 void CmdBaseStream::GenReturn (comm_USHORT nRet, rtl::OString *pUId, comm_ULONG nNr )
64 {
65 	Write(comm_USHORT(SIReturn));
66 	Write(nRet);
67 	if ( pUId->equals( rtl::OString( "UID_ACTIVE" ) ) )
68 		Write(comm_ULONG(0));
69 	else
70 		Write(pUId);
71 	Write(comm_USHORT(PARAM_ULONG_1));			// Typ der folgenden Parameter
72 	Write(nNr);
73 }
74 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_String * pString)75 void CmdBaseStream::GenReturn (comm_USHORT nRet, rtl::OString *pUId, comm_String *pString )
76 {
77 	Write(comm_USHORT(SIReturn));
78 	Write(nRet);
79 	if ( pUId->equals( rtl::OString( "UID_ACTIVE" ) ) )
80 		Write(comm_ULONG(0));
81 	else
82 		Write(pUId);
83 	Write(comm_USHORT(PARAM_STR_1));				// Typ der folgenden Parameter
84 	Write(pString);
85 }
86 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_BOOL bBool)87 void CmdBaseStream::GenReturn (comm_USHORT nRet, rtl::OString *pUId, comm_BOOL bBool )
88 {
89 	Write(comm_USHORT(SIReturn));
90 	Write(nRet);
91 	if ( pUId->equals( rtl::OString( "UID_ACTIVE" ) ) )
92 		Write(comm_ULONG(0));
93 	else
94 		Write(pUId);
95 	Write(comm_USHORT(PARAM_BOOL_1));			// Typ der folgenden Parameter
96 	Write(bBool);
97 }
98 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_ULONG nNr,comm_String * pString,comm_BOOL bBool)99 void CmdBaseStream::GenReturn (comm_USHORT nRet, rtl::OString *pUId, comm_ULONG nNr, comm_String *pString, comm_BOOL bBool )
100 {
101 	Write(comm_USHORT(SIReturn));
102 	Write(nRet);
103 	if ( pUId->equals( rtl::OString( "UID_ACTIVE" ) ) )
104 		Write(comm_ULONG(0));
105 	else
106 		Write(pUId);
107 	Write(comm_USHORT(PARAM_ULONG_1|PARAM_STR_1|PARAM_BOOL_1));		// Typ der folgenden Parameter
108 	Write(nNr);
109 	Write(pString);
110 	Write(bBool);
111 }
112 
GenReturn(comm_USHORT nRet,comm_USHORT nMethod,comm_ULONG nNr)113 void CmdBaseStream::GenReturn (comm_USHORT nRet, comm_USHORT nMethod, comm_ULONG nNr )
114 {
115 	Write(comm_USHORT(SIReturn));
116 	Write(nRet);
117 	Write((comm_ULONG)nMethod); //HELPID BACKWARD (no sal_uLong needed)
118 	Write(comm_USHORT(PARAM_ULONG_1));			// Typ der folgenden Parameter
119 	Write(nNr);
120 }
121 
GenReturn(comm_USHORT nRet,comm_USHORT nMethod,comm_String * pString)122 void CmdBaseStream::GenReturn (comm_USHORT nRet, comm_USHORT nMethod, comm_String *pString )
123 {
124 	Write(comm_USHORT(SIReturn));
125 	Write(nRet);
126 	Write((comm_ULONG)nMethod); //HELPID BACKWARD (no sal_uLong needed)
127 	Write(comm_USHORT(PARAM_STR_1));				// Typ der folgenden Parameter
128 	Write(pString);
129 }
130 
GenReturn(comm_USHORT nRet,comm_USHORT nMethod,comm_BOOL bBool)131 void CmdBaseStream::GenReturn (comm_USHORT nRet, comm_USHORT nMethod, comm_BOOL bBool )
132 {
133 	Write(comm_USHORT(SIReturn));
134 	Write(nRet);
135 	Write((comm_ULONG)nMethod); //HELPID BACKWARD (no sal_uLong needed)
136 	Write(comm_USHORT(PARAM_BOOL_1));			// Typ der folgenden Parameter
137 	Write(bBool);
138 }
139 
GenReturn(comm_USHORT nRet,comm_USHORT nMethod,comm_USHORT nNr)140 void CmdBaseStream::GenReturn (comm_USHORT nRet, comm_USHORT nMethod, comm_USHORT nNr )
141 {
142 	Write(comm_USHORT(SIReturn));
143 	Write(nRet);
144 	Write((comm_ULONG)nMethod); //HELPID BACKWARD (no sal_uLong needed)
145 	Write(comm_USHORT(PARAM_USHORT_1));			// Typ der folgenden Parameter
146 	Write(nNr);
147 }
148 
149 
150 // MacroRecorder
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_USHORT nMethod)151 void CmdBaseStream::GenReturn( comm_USHORT nRet, rtl::OString *pUId, comm_USHORT nMethod )
152 {
153 	Write(comm_USHORT(SIReturn));
154 	Write(nRet);
155 	Write(pUId);
156 	Write(comm_USHORT(PARAM_USHORT_1));		// Typ der folgenden Parameter
157 	Write(nMethod);
158 }
159 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_USHORT nMethod,comm_String * pString)160 void CmdBaseStream::GenReturn( comm_USHORT nRet, rtl::OString *pUId, comm_USHORT nMethod, comm_String *pString )
161 {
162 	Write(comm_USHORT(SIReturn));
163 	Write(nRet);
164 	Write(pUId);
165 	Write(comm_USHORT(PARAM_USHORT_1|PARAM_STR_1));		// Typ der folgenden Parameter
166 	Write(nMethod);
167 	Write(pString);
168 }
169 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_USHORT nMethod,comm_String * pString,comm_BOOL bBool)170 void CmdBaseStream::GenReturn( comm_USHORT nRet, rtl::OString *pUId, comm_USHORT nMethod, comm_String *pString, comm_BOOL bBool )
171 {
172 	Write(comm_USHORT(SIReturn));
173 	Write(nRet);
174 	Write(pUId);
175 	Write(comm_USHORT(PARAM_USHORT_1|PARAM_STR_1|PARAM_BOOL_1));		// Typ der folgenden Parameter
176 	Write(nMethod);
177 	Write(pString);
178 	Write(bBool);
179 }
180 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_USHORT nMethod,comm_BOOL bBool)181 void CmdBaseStream::GenReturn( comm_USHORT nRet, rtl::OString *pUId, comm_USHORT nMethod, comm_BOOL bBool )
182 {
183 	Write(comm_USHORT(SIReturn));
184 	Write(nRet);
185 	Write(pUId);
186 	Write(comm_USHORT(PARAM_USHORT_1|PARAM_BOOL_1));		// Typ der folgenden Parameter
187 	Write(nMethod);
188 	Write(bBool);
189 }
190 
GenReturn(comm_USHORT nRet,rtl::OString * pUId,comm_USHORT nMethod,comm_ULONG nNr)191 void CmdBaseStream::GenReturn( comm_USHORT nRet, rtl::OString *pUId, comm_USHORT nMethod, comm_ULONG nNr )
192 {
193 	Write(comm_USHORT(SIReturn));
194 	Write(nRet);
195 	Write(pUId);
196 	Write(comm_USHORT(PARAM_USHORT_1|PARAM_ULONG_1));		// Typ der folgenden Parameter
197 	Write(nMethod);
198 	Write(nNr);
199 }
200 
201 
202 
Read(comm_USHORT & nNr)203 void CmdBaseStream::Read (comm_USHORT &nNr)
204 {
205 	comm_USHORT nId;
206 	*pCommStream >> nId;
207 	if (pCommStream->IsEof()) return;
208 #ifdef DBG_UTIL
209 	if (nId != BinUSHORT) DBG_ERROR1( "Falscher Typ im Stream: Erwartet USHORT, gefunden :%hu", nId );
210 #endif
211 	*pCommStream >> nNr;
212 }
213 
Read(comm_ULONG & nNr)214 void CmdBaseStream::Read (comm_ULONG &nNr)
215 {
216 	comm_USHORT nId;
217 	*pCommStream >> nId;
218 	if (pCommStream->IsEof()) return;
219 #ifdef DBG_UTIL
220 	if (nId != BinULONG) DBG_ERROR1( "Falscher Typ im Stream: Erwartet ULONG, gefunden :%hu", nId );
221 #endif
222 	*pCommStream >> nNr;
223 }
224 
Read(comm_UniChar * & aString,comm_USHORT & nLenInChars)225 void CmdBaseStream::Read (comm_UniChar* &aString, comm_USHORT &nLenInChars )
226 {
227 	comm_USHORT nId;
228 	*pCommStream >> nId;
229 #ifdef DBG_UTIL
230 	if (nId != BinString) DBG_ERROR1( "Falscher Typ im Stream: Erwartet String, gefunden :%hu", nId );
231 #endif
232 
233 	*pCommStream >> nLenInChars;
234 
235 	aString = new comm_UniChar [nLenInChars];
236 	pCommStream->Read( aString, ((comm_ULONG)nLenInChars) * sizeof( comm_UniChar ) );
237 #ifdef OSL_BIGENDIAN
238     // we have to change the byteorder
239     comm_USHORT n;
240     for ( n = 0 ; n < nLenInChars ; n++ )
241         aString[ n ] = aString[ n ] >> 8 | aString[ n ] << 8;
242 #endif
243 }
244 
Read(comm_BOOL & bBool)245 void CmdBaseStream::Read (comm_BOOL &bBool)
246 {
247 	comm_USHORT nId;
248 	*pCommStream >> nId;
249 #ifdef DBG_UTIL
250 	if (nId != BinBool) DBG_ERROR1( "Falscher Typ im Stream: Erwartet BOOL, gefunden :%hu", nId );
251 #endif
252 	*pCommStream >> bBool;
253 }
254 
GetNextType()255 comm_USHORT CmdBaseStream::GetNextType()
256 {
257 	comm_USHORT nId;
258 	*pCommStream >> nId;
259     pCommStream->SeekRel(-2);
260     return nId;
261 }
262 
263 
Write(comm_USHORT nNr)264 void CmdBaseStream::Write( comm_USHORT nNr )
265 {
266 	*pCommStream << comm_USHORT( BinUSHORT );
267 	*pCommStream << nNr;
268 }
269 
Write(comm_ULONG nNr)270 void CmdBaseStream::Write( comm_ULONG nNr )
271 {
272 	*pCommStream << comm_USHORT( BinULONG );
273 	*pCommStream << nNr;
274 }
275 
Write(const comm_UniChar * aString,comm_USHORT nLenInChars)276 void CmdBaseStream::Write( const comm_UniChar* aString, comm_USHORT nLenInChars )
277 {
278     *pCommStream << comm_USHORT(BinString);
279 
280     comm_USHORT n;
281 
282     // remove BiDi and zero-width-markers    0x200B - 0x200F
283     // remove BiDi and paragraph-markers     0x2028 - 0x202E
284 
285     comm_UniChar* aNoBiDiString;
286     aNoBiDiString = new comm_UniChar [nLenInChars];
287     comm_USHORT nNewLenInChars = 0;
288     for ( n = 0 ; n < nLenInChars ; n++ )
289     {
290         comm_UniChar c = aString[ n ];
291         if (  ((c >= 0x200B) && (c <= 0x200F))
292             ||((c >= 0x2028) && (c <= 0x202E)) )
293         {   //Ignore character
294         }
295         else
296         {
297             aNoBiDiString[ nNewLenInChars ] = c;
298             nNewLenInChars++;
299         }
300     }
301 
302 	*pCommStream << nNewLenInChars;
303 
304 #ifdef OSL_BIGENDIAN
305     // we have to change the byteorder
306     comm_UniChar* aNewString;
307     aNewString = new comm_UniChar [nNewLenInChars];
308     for ( n = 0 ; n < nNewLenInChars ; n++ )
309         aNewString[ n ] = aNoBiDiString[ n ] >> 8 | aNoBiDiString[ n ] << 8;
310 	pCommStream->Write( aNewString, ((comm_ULONG)nNewLenInChars) * sizeof( comm_UniChar ) );
311     delete [] aNewString;
312 #else
313     pCommStream->Write( aNoBiDiString, ((comm_ULONG)nNewLenInChars) * sizeof( comm_UniChar ) );
314 #endif
315 
316     delete [] aNoBiDiString;
317 }
318 
Write(comm_BOOL bBool)319 void CmdBaseStream::Write( comm_BOOL bBool )
320 {
321 	*pCommStream << comm_USHORT( BinBool );
322 	*pCommStream << bBool;
323 }
324 
Read(comm_String * & pString)325 void CmdBaseStream::Read ( comm_String* &pString )
326 {
327     (void) pString; /* avoid warning about unused parameter */
328     DBG_ERROR("Read ( comm_String* &pString ) Not Implemented");
329 }
Read(rtl::OString * & pId)330 void CmdBaseStream::Read ( rtl::OString* &pId )
331 {
332     (void) pId; /* avoid warning about unused parameter */
333     DBG_ERROR("Read ( rtl::OString* &pId ) Not Implemented");
334 }
335 
Write(comm_String * pString)336 void CmdBaseStream::Write( comm_String *pString )
337 {
338     (void) pString; /* avoid warning about unused parameter */
339     DBG_ERROR("Write( comm_String *pString ) Not Implemented");
340 }
Write(rtl::OString * pId)341 void CmdBaseStream::Write( rtl::OString* pId )
342 {
343     (void) pId; /* avoid warning about unused parameter */
344     DBG_ERROR("Write( rtl::OString* pId ) Not Implemented");
345 }
346 
347