Skip to content

okppop/austere

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

austere

austere is a mini TCP Application layer protocol, only have a body length field in protocol header.

This package aims to solve TCP sticky packet. But it's not production ready since it don't have any data verification means.

The checksum field in TCP header may not guarantee data integrity in all scenarios. Do not trust it too much.

Usage

Encode

Example code

func main() {
	s1 := "test data1"
	s2 := "test data2"
	encoder := austere.NewEncoderWithBuffer(os.Stdout)

	// each call will create a new message
	err := encoder.EncodeAndWrite([]byte(s1))
	if err != nil {
		log.Fatal(err)
	}

	err = encoder.EncodeAndWrite([]byte(s2))
	if err != nil {
		log.Fatal(err)
	}

	// Don't forget to write buffer
	encoder.Flush()
}

Run

go run . > data

Decode

Example code

func main() {
	file, err := os.Open("data")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	decoder := austere.NewDecoderWithBuffer(file)

	for {
		msg, err := decoder.ReadAndDecode()
		if err != nil {
			if err == io.EOF {
				break
			}
			log.Fatal(err)
		}

		fmt.Println("message:", string(msg))
	}
}

Run

go run .

Use custom buffer size

func main() {
	encoder := austere.NewEncoderWithBufferSize(os.Stdout, 8192)
	decoder := austere.NewDecoderWithBufferSize(os.Stdin, 8192)
	
	// ...
}

About

A minimal TCP Application layer protocol

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages