설명 없음

Jorropo 79071510cf Fixing version check (#12) 4 년 전
example 702cc4d699 Configurable host:port (#7) 6 년 전
.gitignore 3fa2f2ef68 Initial commit 10 년 전
LICENSE 3fa2f2ef68 Initial commit 10 년 전
README.md a421daf8d9 Added some Documentation and Example of using it with http.Transport 10 년 전
accept.go 702cc4d699 Configurable host:port (#7) 6 년 전
client.go 79071510cf Fixing version check (#12) 4 년 전
client_test.go 702cc4d699 Configurable host:port (#7) 6 년 전
dial.go 702cc4d699 Configurable host:port (#7) 6 년 전
go.mod 79071510cf Fixing version check (#12) 4 년 전
go.sum 35892cc097 go module 6 년 전
naming.go 622c39b6a5 spring cleaning 9 년 전
naming_test.go 701d7fcf03 fix tests 6 년 전
options.go 89742a3ec4 added reduce-on-idle and close-on-idle options (closes #9) 6 년 전
options_test.go 89742a3ec4 added reduce-on-idle and close-on-idle options (closes #9) 6 년 전
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 년 전
replyParser_test.go 8d5c5f9d36 switch to strings.SplitN and apply gofmt, add test 6 년 전
sessions.go 702cc4d699 Configurable host:port (#7) 6 년 전
stream.go 622c39b6a5 spring cleaning 9 년 전

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)