using namespace std;
RSDecoder::RSDecoder(Sender *sender)
- : sender(sender) {}
+ : sender(sender)
+{
+ rs = init_rs_char(RS_SYM_SIZE, RS_GF_POLY, 1, 1, RS_PARITY_SIZE, RS_PAD);
+}
void RSDecoder::send_packet(uint16_t proto, const std::string &data, int incoming_seq)
{
for (int j = 0; j < RS_GROUP_SIZE; ++j) {
ch[j] = padded_packets[j][i];
}
- int ret = decode_rs_8(ch, &missing_packets[0], missing_packets.size(),
- RS_PAD);
+ int ret = decode_rs_char(rs, ch, &missing_packets[0], missing_packets.size());
if (ret == -1) {
printf("Failed reconstruction!\n");
// We might get more data later, so don't remove it.
};
Sender *sender;
std::map<int, RSGroup> rs_groups;
+ void *rs;
};
#endif /* !defined(_RSDECODER_H) */
#include <algorithm>
using namespace std;
+
+RSEncoder::RSEncoder(Sender *sender)
+ : sender(sender)
+{
+ rs = init_rs_char(RS_SYM_SIZE, RS_GF_POLY, 1, 1, RS_PARITY_SIZE, RS_PAD);
+}
void RSEncoder::send_packet(uint16_t proto, const std::string &data, int incoming_seq)
{
for (int j = 0; j < packet_history.size(); ++j) {
data[j] = packet_history[j].data[i];
}
- encode_rs_8(reinterpret_cast<unsigned char *>(&data[0]),
- reinterpret_cast<unsigned char *>(&parity[0]),
- RS_PAD);
+ encode_rs_char(rs,
+ reinterpret_cast<unsigned char *>(&data[0]),
+ reinterpret_cast<unsigned char *>(&parity[0]));
for (int j = 0; j < RS_PARITY_SIZE; ++j) {
rs_packets[j][i] = parity[j];
}
class RSEncoder : public Sender {
public:
- RSEncoder(Sender* sender) : sender(sender) {}
+ RSEncoder(Sender* sender);
virtual void send_packet(uint16_t proto, const std::string &data, int incoming_seq);
private:
void finish_group();
- Sender* sender;
+ Sender *sender;
std::vector<GREPacket> packet_history;
+ void *rs;
};
#endif // !defined(_RSENCODER_H)