diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/index.html b/index.html new file mode 100644 index 0000000..3d3a194 --- /dev/null +++ b/index.html @@ -0,0 +1,300 @@ + + + + goSam + + + + + + + + + +

+ + goSam + +

+

+ A go library for using the + + I2P + + Simple Anonymous + Messaging ( + + SAM version 3.0 + + ) bridge. It + has support for all streaming features SAM version 3.2. +

+

+ This is widely used and easy to use, but thusfar, mostly by me. It sees a lot of + testing and no breaking changes to the API are expected. +

+

+ Installation +

+
go get github.com/eyedeekay/goSam
+
+

+ Using it for HTTP Transport +

+

+ + Client.Dial + + implements + + 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)
+	}
+}
+
+
+

+ Using SAM by default, as a proxy for all HTTP Clients used by a Go application +

+

+ This will make the SAM transport dialer the default for all HTTP clients. +

+
package main
+
+import (
+	"io"
+	"log"
+	"net/http"
+	"os"
+
+	"github.com/cryptix/goSam"
+)
+
+func main() {
+	sam, err := goSam.NewDefaultClient()
+	checkErr(err)
+
+	log.Println("Client Created")
+
+	// create a transport that uses SAM to dial TCP Connections
+	httpClient := &http.Client{
+		Transport: &http.Transport{
+			Dial: sam.Dial,
+		},
+	}
+
+	http.DefaultClient = httpClient
+	return nil
+}
+
+func checkErr(err error) {
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+
+

+ Using it as a SOCKS proxy +

+

+ + client + + also implements a resolver compatible with + + + getlantern/go-socks5 + + + , + making it very easy to implement a SOCKS5 server. +

+
package main
+
+import (
+  "flag"
+
+	"github.com/eyedeekay/goSam"
+	"github.com/getlantern/go-socks5"
+	"log"
+)
+
+var (
+  samaddr = flag.String("sam", "127.0.0.1:7656", "SAM API address to use")
+  socksaddr = flag.String("socks", "127.0.0.1:7675", "SOCKS address to use")
+)
+
+func main() {
+	sam, err := goSam.NewClient(*samaddr)
+	if err != nil {
+		panic(err)
+	}
+	log.Println("Client Created")
+
+	// create a transport that uses SAM to dial TCP Connections
+	conf := &socks5.Config{
+		Dial:     sam.DialContext,
+		Resolver: sam,
+	}
+	server, err := socks5.New(conf)
+	if err != nil {
+		panic(err)
+	}
+
+	// Create SOCKS5 proxy on localhost port 8000
+	if err := server.ListenAndServe("tcp", *socksaddr); err != nil {
+		panic(err)
+	}
+}
+
+

+ .deb package +

+

+ A package for installing this on Debian is buildable, and a version for Ubuntu + is available as a PPA and mirrored via i2p. To build the deb package, from the + root of this repository with the build dependencies installed(git, i2p, go, + debuild) run the command +

+
    debuild -us -uc
+
+

+ to produce an unsigned deb for personal use only. For packagers, +

+
    debuild -S
+
+

+ will produce a viable source package for use with Launchpad PPA’s and other + similar systems. +

+

+ TODO +

+ +
+ + Show license + +
+
+
The MIT License (MIT)
+
+Copyright (c) 2014 Henry
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+ + Hide license + +
+
+
+
+ +
+ + \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..83a9810 --- /dev/null +++ b/style.css @@ -0,0 +1,157 @@ +/* edgar default CSS file */ + +body { + font-family: "Roboto"; + font-family: monospace; + text-align: justify; + background-color: #373636; + color: whitesmoke; + font-size: 1.15em; +} + +ul { + width: 55%; + display: block; +} + +ol { + width: 55%; + display: block; +} + +li { + margin-top: 1%; +} + +p { + max-width: 90%; + margin-top: 1%; + margin-left: 3%; + margin-right: 3%; +} + +img { + float: left; + top: 5%; + left: 5%; + max-width: 60%; + display: inline; +} + +.inline { + display: inline; +} + +.link-button:focus { + outline: none; +} + +.link-button:active { + color: red; +} + +code { + font-family: monospace; + border-radius: 5%; + padding: 1%; + border-color: darkgray; + font-size: .9em; +} + +a { + color: #C6D9FE; + padding: 1%; +} + +ul li { + color: #C6D9FE; +} + +iframe { + background: aliceblue; + border-radius: 15%; + margin: 2%; +} + +.container { + width: 36vw; + height: 64vh; + display: inline-block; + margin: 0; + padding: 0; +} + +.editor-toolbar a { + display: inline-block; + text-align: center; + text-decoration: none !important; + color: whitesmoke !important; +} + +#feed { + width: 60vw; + height: unset !important; + margin: 0; + padding: 0; + float: right; + background-color: #373636; + color: whitesmoke; + border: #C6D9FE solid 1px; +} + +.thread-post, +.thread { + color: whitesmoke !important; + background-color: #373636; + border: 1px solid darkgray; + font-size: inherit; + padding-top: 1%; + padding-bottom: 1%; +} + +.thread-post { + margin-left: 4%; +} + +input { + text-align: center; + color: whitesmoke !important; + background-color: #373636; + border: 1px solid darkgray; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + padding-top: 1%; + padding-bottom: 1%; +} + +.thread-hash { + text-align: right; + color: whitesmoke !important; + background-color: #373636; + border: 1px solid darkgray; + font-size: inherit; + padding-top: 1%; + padding-bottom: 1%; +} + +.post-body { + text-align: left; + color: whitesmoke !important; + font-size: inherit; + padding-top: 1%; + padding-bottom: 1%; +} +#show {display:none; } +#hide {display:block; } +#show:target {display: block; } +#hide:target {display: none; } + +#shownav {display:none; } +#hidenav {display:block; } +#shownav:target {display: block; } +#hidenav:target {display: none; } + +#navbar { + float: right; + width: 10%; +}