b64pipe.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** 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 ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : Command & Conquer *
  23. * *
  24. * $Archive:: /G/wwlib/b64pipe.h $*
  25. * *
  26. * $Author:: Eric_c $*
  27. * *
  28. * $Modtime:: 4/02/99 11:58a $*
  29. * *
  30. * $Revision:: 2 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #if _MSC_VER >= 1000
  36. #pragma once
  37. #endif // _MSC_VER >= 1000
  38. #ifndef B64PIPE_H
  39. #define B64PIPE_H
  40. #include "pipe.h"
  41. /*
  42. ** This class performs Base64 encoding/decoding to the data that is piped through. Note that
  43. ** encoded data will grow in size by about 30%. The reverse occurs when decoding.
  44. */
  45. class Base64Pipe : public Pipe
  46. {
  47. public:
  48. typedef enum CodeControl {
  49. ENCODE,
  50. DECODE
  51. } CodeControl;
  52. Base64Pipe(CodeControl control) : Control(control), Counter(0) {}
  53. virtual int Flush(void);
  54. virtual int Put(void const * source, int slen);
  55. private:
  56. /*
  57. ** Indicates if this is for encoding or decoding of Base64 data.
  58. */
  59. CodeControl Control;
  60. /*
  61. ** The counter of the number of accumulated bytes pending for processing.
  62. */
  63. int Counter;
  64. /*
  65. ** Buffer that holds the Base64 coded bytes. This will be the staging buffer if
  66. ** this is for a decoding process. Otherwise, it will be used as a scratch buffer.
  67. */
  68. char CBuffer[4];
  69. /*
  70. ** Buffer that holds the plain bytes. This will be the staging buffer if this
  71. ** is for an encoding process. Otherwise, it will be used as a scratch buffer.
  72. */
  73. char PBuffer[3];
  74. /*
  75. ** Explicitly disable the copy constructor and the assignment operator.
  76. */
  77. Base64Pipe(Base64Pipe & rvalue);
  78. Base64Pipe & operator = (Base64Pipe const & pipe);
  79. };
  80. #endif