Blame src/b64/encode.h

Packit Service 7770af
// :mode=c++:
Packit Service 7770af
/*
Packit Service 7770af
encode.h - c++ wrapper for a base64 encoding algorithm
Packit Service 7770af
Packit Service 7770af
This is part of the libb64 project, and has been placed in the public domain.
Packit Service 7770af
For details, see http://sourceforge.net/projects/libb64
Packit Service 7770af
*/
Packit Service 7770af
#ifndef BASE64_ENCODE_H
Packit Service 7770af
#define BASE64_ENCODE_H
Packit Service 7770af
Packit Service 7770af
#include <iostream>
Packit Service 7770af
Packit Service 7770af
namespace base64
Packit Service 7770af
{
Packit Service 7770af
	extern "C"
Packit Service 7770af
	{
Packit Service 7770af
		#include "cencode.h"
Packit Service 7770af
	}
Packit Service 7770af
Packit Service 7770af
	struct encoder
Packit Service 7770af
	{
Packit Service 7770af
		base64_encodestate _state;
Packit Service 7770af
		int _buffersize;
Packit Service 7770af
Packit Service 7770af
		encoder(int buffersize_in = BUFFERSIZE)
Packit Service 7770af
		: _buffersize(buffersize_in)
Packit Service 7770af
		{
Packit Service 7770af
			base64_init_encodestate(&_state);
Packit Service 7770af
		}
Packit Service 7770af
Packit Service 7770af
		int encode(char value_in)
Packit Service 7770af
		{
Packit Service 7770af
			return base64_encode_value(value_in);
Packit Service 7770af
		}
Packit Service 7770af
Packit Service 7770af
		int encode(const char* code_in, const int length_in, char* plaintext_out)
Packit Service 7770af
		{
Packit Service 7770af
			return base64_encode_block(code_in, length_in, plaintext_out, &_state);
Packit Service 7770af
		}
Packit Service 7770af
Packit Service 7770af
		int encode_end(char* plaintext_out)
Packit Service 7770af
		{
Packit Service 7770af
			return base64_encode_blockend(plaintext_out, &_state);
Packit Service 7770af
		}
Packit Service 7770af
Packit Service 7770af
		void encode(std::istream& istream_in, std::ostream& ostream_in)
Packit Service 7770af
		{
Packit Service 7770af
			base64_init_encodestate(&_state);
Packit Service 7770af
			//
Packit Service 7770af
			const int N = _buffersize;
Packit Service 7770af
			char* plaintext = new char[N];
Packit Service 7770af
			char* code = new char[2*N];
Packit Service 7770af
			int plainlength;
Packit Service 7770af
			int codelength;
Packit Service 7770af
Packit Service 7770af
			do
Packit Service 7770af
			{
Packit Service 7770af
				istream_in.read(plaintext, N);
Packit Service 7770af
				plainlength = static_cast<int>(istream_in.gcount());
Packit Service 7770af
				//
Packit Service 7770af
				codelength = encode(plaintext, plainlength, code);
Packit Service 7770af
				ostream_in.write(code, codelength);
Packit Service 7770af
			}
Packit Service 7770af
			while (istream_in.good() && plainlength > 0);
Packit Service 7770af
Packit Service 7770af
			codelength = encode_end(code);
Packit Service 7770af
			ostream_in.write(code, codelength);
Packit Service 7770af
			//
Packit Service 7770af
			base64_init_encodestate(&_state);
Packit Service 7770af
Packit Service 7770af
			delete [] code;
Packit Service 7770af
			delete [] plaintext;
Packit Service 7770af
		}
Packit Service 7770af
	};
Packit Service 7770af
Packit Service 7770af
} // namespace base64
Packit Service 7770af
Packit Service 7770af
#endif // BASE64_ENCODE_H
Packit Service 7770af