]> git.sesse.net Git - greproxy/commitdiff
Switch to a different RS encoding.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Feb 2015 00:12:30 +0000 (01:12 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Feb 2015 00:12:30 +0000 (01:12 +0100)
rsdecoder.cpp
rsdecoder.h
rsencoder.cpp
rsencoder.h

index 20297bf53230e77e84bfd9bd2f8aab98c114b9b6..8a27896d8dedd70f2c3b8094e703a8c81eadd661 100644 (file)
@@ -15,7 +15,10 @@ extern "C" {
 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)
 {
@@ -109,8 +112,7 @@ void RSDecoder::send_packet(uint16_t proto, const std::string &data, int incomin
                                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.
index 5ee52d1b9c1867122f21b77add55739a5ad361c9..c4303f00cb543d0d4110c9d3f2dba641531324b6 100644 (file)
@@ -21,6 +21,7 @@ private:
        };
        Sender *sender;
        std::map<int, RSGroup> rs_groups;
+       void *rs;
 };
 
 #endif  /* !defined(_RSDECODER_H) */
index 3026dd4d2373fdc552fbe1660ab88dbf37ce818e..d98a13caf16cb9612965915a501f833a820cc96a 100644 (file)
@@ -16,6 +16,12 @@ extern "C" {
 #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)
 {
@@ -73,9 +79,9 @@ void RSEncoder::finish_group()
                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];
                }
index 75f0f24cc9ba6330603f3ca42f0748d38971bc32..ef8f2893451ab67e1308bd4c813ba47665b105c9 100644 (file)
@@ -12,14 +12,15 @@ class Sender;
 
 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();
 
-       Sendersender;
+       Sender *sender;
        std::vector<GREPacket> packet_history;
+       void *rs;
 };
 
 #endif  // !defined(_RSENCODER_H)