Documentation ¶
Overview ¶
Package alo implements a forward error correction scheme using Reed Solomon Erasure Coding. It segments the data into 1kb chunks in 16kb segments and contains a function for use in a network handler to process received packets
Index ¶
- Constants
- func Check(err error) bool
- func Debug(a ...interface{})
- func Debugc(fn func() string)
- func Debugf(format string, a ...interface{})
- func Debugs(a interface{})
- func Error(a ...interface{})
- func Errorc(fn func() string)
- func Errorf(format string, a ...interface{})
- func Errors(a interface{})
- func Fatal(a ...interface{})
- func Fatalc(fn func() string)
- func Fatalf(format string, a ...interface{})
- func Fatals(a interface{})
- func Info(a ...interface{})
- func Infoc(fn func() string)
- func Infof(format string, a ...interface{})
- func Infos(a interface{})
- func Pieces(dLen, size int) (s int)
- func SegmentBytes(buf []byte, lim int) (out [][]byte)
- func ShardsPerRedundancy(nShards, redundancy int) int
- func Trace(a ...interface{})
- func Tracec(fn func() string)
- func Tracef(format string, a ...interface{})
- func Traces(a interface{})
- func Warn(a ...interface{})
- func Warnc(fn func() string)
- func Warnf(format string, a ...interface{})
- func Warns(a interface{})
- type PartialSegment
- type Partials
- type Segments
- type ShardPrefix
- type ShardedSegments
Constants ¶
const ( SegmentSize = 2 << 13 ShardSize = 2 << 9 )
Variables ¶
This section is empty.
Functions ¶
func SegmentBytes ¶
SegmentBytes breaks a chunk of data into requested sized limit chunks
func ShardsPerRedundancy ¶
Types ¶
type PartialSegment ¶
type PartialSegment struct {
// contains filtered or unexported fields
}
PartialSegment is a max 16kb long segment with arbitrary redundancy parameters when all of the data segments are successfully received hasAll indicates the segment may be ready to reassemble
func (PartialSegment) GetShardCount ¶
func (p PartialSegment) GetShardCount() (count int)
GetShardCount returns the number of shards already acquired
type Partials ¶
type Partials struct {
// contains filtered or unexported fields
}
Partials is a structure for storing a new inbound packet
func NewPacket ¶
NewPacket creates a new structure to store a collection of incoming shards when the first of a new packet arrives
func (*Partials) AddShard ¶
AddShard adds a newly received shard to a Partials, ensuring that it has matching parameters (if the HMAC on the packet's wrapper passes it should be unless someone is playing silly buggers)
func (*Partials) GetRatio ¶
GetRatio is used after the receive delay period expires to determine how successful a packet was. If it was exactly enough with no surplus, return 0, if there is more than the minimum, return the proportion compared to the total redundancy of the packet, if there is less, return a negative proportion versus the amount, -1 means zero received, and a fraction of 1 indicates the proportion that was received compared to the minimum
func (*Partials) HasAllDataShards ¶
HasAllDataShards returns true if all data shards are present in a Partials
func (*Partials) HasMinimum ¶
HasMinimum returns true if there may be enough data to decode
type ShardPrefix ¶
type ShardPrefix struct {
// contains filtered or unexported fields
}
func GetParams ¶
func GetParams(data []byte) ( p ShardPrefix, err error, )
GetParams reads the shard's prefix to provide the correct parameters for the RS codec the packet requires based on the prefix on a shard (presumably to create the codec when a new packet/group of shards arrives)
type ShardedSegments ¶
type ShardedSegments []Segments
func GetShards ¶
func GetShards(buf []byte, redundancy int) (out ShardedSegments)
GetShards returns a bundle of segments to be sent or stored in a 1kb segment size with redundancy shards added to each segment's shards that can reconstruct the original message by derivation via the available parity shards.