xref: /AOO41X/main/automation/source/server/cmdbasestream.cxx (revision 9d1279ece119b840266617e54d20d4d5fa7aea95)
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