// // Copyright 2020 Electronic Arts Inc. // // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free // software: you can redistribute it and/or modify it under the terms of // the GNU General Public License as published by the Free Software Foundation, // either version 3 of the License, or (at your option) any later version. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed // in the hope that it will be useful, but with permitted additional restrictions // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT // distributed with this program. You should have received a copy of the // GNU General Public License along with permitted additional restrictions // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection /* $Header: /CounterStrike/B64STRAW.CPP 1 3/03/97 10:24a Joe_bostic $ */ /*********************************************************************************************** *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** *********************************************************************************************** * * * Project Name : Command & Conquer * * * * File Name : B64STRAW.CPP * * * * Programmer : Joe L. Bostic * * * * Start Date : 07/02/96 * * * * Last Update : July 3, 1996 [JLB] * * * *---------------------------------------------------------------------------------------------* * Functions: * * Base64Straw::Get -- Fetch data and convert it to/from base 64 encoding. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "b64straw.h" #include "base64.h" #include /*********************************************************************************************** * Base64Straw::Get -- Fetch data and convert it to/from base 64 encoding. * * * * This routine will fetch the number of bytes requested and perform any conversion as * * necessary upon the data. The nature of Base 64 encoding means that the data will * * increase in size by 30% when encoding and decrease in like manner when decoding. * * * * INPUT: source -- The buffer to hold the processed data. * * * * length -- The number of bytes requested. * * * * OUTPUT: Returns with the number of bytes stored into the buffer. If the number is less * * than requested, then this indicates that the data stream has been exhausted. * * * * WARNINGS: none * * * * HISTORY: * * 07/03/1996 JLB : Created. * *=============================================================================================*/ int Base64Straw::Get(void * source, int slen) { int total = 0; char * from; int fromsize; char * to; int tosize; if (Control == ENCODE) { from = PBuffer; fromsize = sizeof(PBuffer); to = CBuffer; tosize = sizeof(CBuffer); } else { from = CBuffer; fromsize = sizeof(CBuffer); to = PBuffer; tosize = sizeof(PBuffer); } /* ** Process the byte request in code blocks until there are either ** no more source bytes available or the request has been fulfilled. */ while (slen > 0) { /* ** Transfer any processed bytes available to the request buffer. */ if (Counter > 0) { int len = (slen < Counter) ? slen : Counter; memmove(source, &to[tosize-Counter], len); Counter -= len; slen -= len; source = ((char *)source) + len; total += len; } if (slen == 0) break; /* ** More bytes are needed, so fetch and process another base 64 block. */ int incount = Straw::Get(from, fromsize); if (Control == ENCODE) { Counter = Base64_Encode(from, incount, to, tosize); } else { Counter = Base64_Decode(from, incount, to, tosize); } if (Counter == 0) break; } return(total); }