@@ -18,56 +18,49 @@ func main() {
1818 flag .Parse ()
1919 switch flag .Arg (0 ) {
2020 case "server" :
21- server := etch.Server {}
21+ server := etch .NewServer ( "127.0.0.1:8080" )
2222 server .Run ()
2323 select {}
2424 case "client" :
25- // client := etch.NewClient()
26- // log.Println(client.DnsQuery())
27- r := ResolverDoh ("http://127.0.0.1:8080" )
28- log .Println (r .LookupHost (context .Background (), "baidu.com" ))
25+ // client := etch.NewClient("http://127.0.0.1:8080")
26+ // log.Println(client.Call("Dns.Wire", []byte{111, 60, 129, 128, 0, 1, 0, 2, 0, 0, 0, 1, 5, 98, 97, 105, 100, 117, 3, 99, 111, 109, 0, 0, 1, 0, 1, 192, 12, 0, 1, 0, 1, 0, 0, 1, 21, 0, 4, 182, 61, 201, 211, 192, 12, 0, 1, 0, 1, 0, 0, 1, 21, 0, 4, 182, 61, 244, 181, 0, 0, 41, 4, 208, 0, 0, 0, 0, 0, 0}))
27+
28+ r := ResolverDoe ("http://127.0.0.1:8080" )
29+ log .Println (r .LookupHost (context .Background (), "google.com" ))
2930 }
3031}
3132
3233// Cdoh structure can be used for DoH protocol processing.
33- type Cdoh struct {
34+ type Cdoe struct {
3435 Server string
3536 Buffer * bytes.Buffer
3637}
3738
38- func (c Cdoh ) Read (b []byte ) (n int , err error ) { return c .Buffer .Read (b ) }
39- func (c Cdoh ) Close () error { return nil }
40- func (c Cdoh ) LocalAddr () net.Addr { return nil }
41- func (c Cdoh ) RemoteAddr () net.Addr { return nil }
42- func (c Cdoh ) SetDeadline (t time.Time ) error { return nil }
43- func (c Cdoh ) SetReadDeadline (t time.Time ) error { return nil }
44- func (c Cdoh ) SetWriteDeadline (t time.Time ) error { return nil }
45- func (c Cdoh ) Write (b []byte ) (n int , err error ) {
39+ func (c Cdoe ) Read (b []byte ) (n int , err error ) { return c .Buffer .Read (b ) }
40+ func (c Cdoe ) Close () error { return nil }
41+ func (c Cdoe ) LocalAddr () net.Addr { return nil }
42+ func (c Cdoe ) RemoteAddr () net.Addr { return nil }
43+ func (c Cdoe ) SetDeadline (t time.Time ) error { return nil }
44+ func (c Cdoe ) SetReadDeadline (t time.Time ) error { return nil }
45+ func (c Cdoe ) SetWriteDeadline (t time.Time ) error { return nil }
46+ func (c Cdoe ) Write (b []byte ) (n int , err error ) {
4647 size := int (binary .BigEndian .Uint16 (b [:2 ]))
4748 doa .Doa (size == len (b )- 2 )
48-
49- client := etch .NewClient ("127.0.0.1:8080" )
50- body := client .DnsQuery (b [2 :])
51-
52- // resp, err := http.Post(c.Server, "application/dns-message", bytes.NewReader(b[2:]))
53- // if err != nil {
54- // log.Println("cdoh:", err)
55- // return len(b), nil
56- // }
57- // body, err := io.ReadAll(resp.Body)
58- // if err != nil {
59- // log.Println("cdoh:", err)
60- // return len(b), nil
61- // }
62- data := make ([]byte , 2 + len (body ))
63- binary .BigEndian .PutUint16 (data [:2 ], uint16 (len (body )))
64- copy (data [2 :], body )
49+ client := etch .NewClient ("http://127.0.0.1:8080" )
50+ r , err := client .Call ("Dns.Wire" , b [2 :])
51+ if err != nil {
52+ log .Println ("cdoe:" , err )
53+ return len (b ), nil
54+ }
55+ data := make ([]byte , 2 + len (r ))
56+ binary .BigEndian .PutUint16 (data [:2 ], uint16 (len (r )))
57+ copy (data [2 :], r )
6558 c .Buffer .Write (data )
6659 return len (b ), nil
6760}
6861
6962// ResolverDoh returns a DoH resolver. For further information, see https://datatracker.ietf.org/doc/html/rfc8484.
70- func ResolverDoh (addr string ) * net.Resolver {
63+ func ResolverDoe (addr string ) * net.Resolver {
7164 urls := doa .Try (url .Parse (addr ))
7265 host := doa .Try (net .LookupHost (urls .Hostname ()))[0 ]
7366 port := urls .Port ()
@@ -78,7 +71,7 @@ func ResolverDoh(addr string) *net.Resolver {
7871 return & net.Resolver {
7972 PreferGo : true ,
8073 Dial : func (ctx context.Context , network , address string ) (net.Conn , error ) {
81- conn := & Cdoh {
74+ conn := & Cdoe {
8275 Server : urls .String (),
8376 Buffer : bytes .NewBuffer ([]byte {}),
8477 }
0 commit comments