From f97bb461613a4ac128db63d5a4c1484ba75c6ceb Mon Sep 17 00:00:00 2001 From: fangdingjun Date: Wed, 4 Jul 2018 12:16:10 +0800 Subject: [PATCH] add doc --- doc.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 doc.go diff --git a/doc.go b/doc.go new file mode 100644 index 0000000..a26f755 --- /dev/null +++ b/doc.go @@ -0,0 +1,111 @@ +// Package nghttp2 is libnghttp2 binding for golang +/* +server example + + cert, err := tls.LoadX509KeyPair("testdata/server.crt", "testdata/server.key") + if err != nil { + t.Fatal(err) + } + + l, err := tls.Listen("tcp", "127.0.0.1:1100", &tls.Config{ + Certificates: []tls.Certificate{cert}, + NextProtos: []string{"h2"}, + }) + if err != nil { + t.Fatal(err) + } + defer l.Close() + addr := l.Addr().String() + + http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { + log.Printf("%+v", r) + hdr := w.Header() + hdr.Set("content-type", "text/plain") + hdr.Set("aa", "bb") + d, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err) + return + } + w.Write(d) + }) + + for { + c, err := l.Accept() + if err != nil { + break + } + h2conn, err := NewServerConn(c, nil) + if err != nil { + t.Fatal(err) + } + log.Printf("%+v", h2conn) + go h2conn.Run() + } + +client example + + conn, err := tls.Dial("tcp", "nghttp2.org:443", &tls.Config{ + NextProtos: []string{"h2"}, + ServerName: "nghttp2.org", + }) + if err != nil { + t.Fatal(err) + } + defer conn.Close() + + cstate := conn.ConnectionState() + if cstate.NegotiatedProtocol != "h2" { + t.Fatal("no http2 on server") + } + + h2conn, err := NewClientConn(conn) + if err != nil { + t.Fatal(err) + } + + param := url.Values{} + param.Add("e", "b") + param.Add("f", "d") + data := bytes.NewReader([]byte(param.Encode())) + req, _ := http.NewRequest("POST", + "https://nghttp2.org/httpbin/post?a=b&c=d", + data) + + log.Printf("%+v", req) + + req.Header.Set("user-agent", "go-nghttp2/1.0") + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + res, err := h2conn.CreateRequest(req) + if err != nil { + t.Fatal(err) + } + + if res.StatusCode != http.StatusOK { + t.Errorf("expect %d, got %d", http.StatusOK, res.StatusCode) + } + res.Write(os.Stderr) + + +co-work with net/http example + + l, err := net.Listen("tcp", "127.0.0.1:1222") + if err != nil { + t.Fatal(err) + } + srv := &http.Server{ + TLSConfig: &tls.Config{ + NextProtos: []string{"h2", "http/1.1"}, + }, + TLSNextProto: map[string]func(*http.Server, *tls.Conn, http.Handler){ + "h2": nghttp2.HTTP2Handler, + }, + } + defer srv.Close() + + srv.ServeTLS(l, "testdata/server.crt", "testdata/server.key") + +see http2_test.go for more details +*/ +package nghttp2