Nav apraksta

Jorropo 79071510cf Fixing version check (#12) 4 gadi atpakaļ
example 702cc4d699 Configurable host:port (#7) 6 gadi atpakaļ
.gitignore 3fa2f2ef68 Initial commit 10 gadi atpakaļ
LICENSE 3fa2f2ef68 Initial commit 10 gadi atpakaļ
README.md a421daf8d9 Added some Documentation and Example of using it with http.Transport 10 gadi atpakaļ
accept.go 702cc4d699 Configurable host:port (#7) 6 gadi atpakaļ
client.go 79071510cf Fixing version check (#12) 4 gadi atpakaļ
client_test.go 702cc4d699 Configurable host:port (#7) 6 gadi atpakaļ
dial.go 702cc4d699 Configurable host:port (#7) 6 gadi atpakaļ
go.mod 79071510cf Fixing version check (#12) 4 gadi atpakaļ
go.sum 35892cc097 go module 6 gadi atpakaļ
naming.go 622c39b6a5 spring cleaning 9 gadi atpakaļ
naming_test.go 701d7fcf03 fix tests 6 gadi atpakaļ
options.go 89742a3ec4 added reduce-on-idle and close-on-idle options (closes #9) 6 gadi atpakaļ
options_test.go 89742a3ec4 added reduce-on-idle and close-on-idle options (closes #9) 6 gadi atpakaļ
replyParser.go 2b14108a06 I don't know exactly why, but checking that the kvPair in replyParser.go is not nil fixes the crash on image-heavy sites. 6 gadi atpakaļ
replyParser_test.go 8d5c5f9d36 switch to strings.SplitN and apply gofmt, add test 6 gadi atpakaļ
sessions.go 702cc4d699 Configurable host:port (#7) 6 gadi atpakaļ
stream.go 622c39b6a5 spring cleaning 9 gadi atpakaļ

README.md

goSam

A go library for using the I2P Simple Anonymous Messaging (SAM version 3.0) bridge

This is in an early development stage. I would love to hear about any issues or ideas for improvement.

Installation

go get github.com/cryptix/goSam

Using it for HTTP Transport

I implemented Client.Dial like net.Dial so you can use go's library packages like http.

package main

import (
	"io"
	"log"
	"net/http"
	"os"

	"github.com/cryptix/goSam"
)

func main() {
	// create a default sam client
	sam, err := goSam.NewDefaultClient()
	checkErr(err)

	log.Println("Client Created")

	// create a transport that uses SAM to dial TCP Connections
	tr := &http.Transport{
		Dial: sam.Dial,
	}

	// create  a client using this transport
	client := &http.Client{Transport: tr}

	// send a get request
	resp, err := client.Get("http://stats.i2p/")
	checkErr(err)
	defer resp.Body.Close()

	log.Printf("Get returned %+v\n", resp)

	// create a file for the response
	file, err := os.Create("stats.html")
	checkErr(err)
	defer file.Close()

	// copy the response to the file
	_, err = io.Copy(file, resp.Body)
	checkErr(err)

	log.Println("Done.")
}

func checkErr(err error) {
	if err != nil {
		log.Fatal(err)
	}
}

TODO

  • Implement STREAM ACCEPT and STREAM FORWARD
  • Implement datagrams (Repliable and Anon)