//
// Copyright 2013-2014 Ettus Research LLC
//
// This program 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.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include
#include
#include
#include
#include
#include
#include
namespace uhd { namespace niusrprio {
std::string nifpga_lvbitx::_get_bitstream_checksum(const std::string& file_path)
{
std::string checksum;
std::ifstream lvbitx_stream(file_path.c_str());
if (lvbitx_stream.is_open()) {
std::string lvbitx_contents;
lvbitx_stream.seekg(0, std::ios::end);
lvbitx_contents.reserve(static_cast(lvbitx_stream.tellg()));
lvbitx_stream.seekg(0, std::ios::beg);
lvbitx_contents.assign((std::istreambuf_iterator(lvbitx_stream)), std::istreambuf_iterator());
try {
boost::smatch md5_match;
if (boost::regex_search(lvbitx_contents, md5_match, boost::regex("([a-zA-Z0-9]{32})<\\/BitstreamMD5>", boost::regex::icase))) {
checksum = std::string(md5_match[1].first, md5_match[1].second);
}
} catch (boost::exception&) {
checksum = "";
}
}
boost::to_upper(checksum);
return checksum;
}
}}