size_t CObjectIStreamJson::ReadBase64Bytes( ByteBlock& block, char* dst, size_t length) { size_t count = 0; bool end_of_data = false; const size_t chunk_in = 80; char src_buf[chunk_in]; size_t bytes_left = length; size_t src_size, src_read, dst_written; while (!end_of_data && bytes_left > chunk_in && bytes_left <= length) { for ( src_size = 0; src_size < chunk_in; ) { int c = GetBase64Char(); if (c < 0) { end_of_data = true; break; } /*if (c != '=')*/ { src_buf[ src_size++ ] = c; } m_Input.SkipChar(); } BASE64_Decode( src_buf, src_size, &src_read, dst, bytes_left, &dst_written); if (src_size != src_read) { ThrowError(fFail, "error decoding base64Binary data"); } count += dst_written; bytes_left -= dst_written; dst += dst_written; } if (end_of_data) { block.EndOfBlock(); } return count; }
static bool s_GetFtpCreds(string& user, string& pass) { user.clear(); pass.clear(); ifstream ifs("/am/ncbiapdata/test_data/ftp/test_ncbi_ftp_upload"); if (ifs) { string src; ifs >> src; ifs.close(); string dst(src.size(), '\0'); size_t n_read, n_written; BASE64_Decode(src.c_str(), src.size(), &n_read, &dst[0], dst.size(), &n_written); dst.resize(n_written); NStr::SplitInTwo(dst, ":", user, pass); } return !user.empty() && !pass.empty(); }