mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 09:25:41 +08:00
conn: add CopyN function
This commit is contained in:
parent
c01c2d1839
commit
47e20cf7f4
@ -306,6 +306,10 @@ Examples:
|
|||||||
|
|
||||||
./glider -verbose -dns=:53 -dnsserver=8.8.8.8:53 -dnsrecord=www.example.com/1.2.3.4
|
./glider -verbose -dns=:53 -dnsserver=8.8.8.8:53 -dnsrecord=www.example.com/1.2.3.4
|
||||||
-listen on :53 as dns server, forward dns requests to 8.8.8.8:53, return 1.2.3.4 when resolving www.example.com.
|
-listen on :53 as dns server, forward dns requests to 8.8.8.8:53, return 1.2.3.4 when resolving www.example.com.
|
||||||
|
|
||||||
|
Services:
|
||||||
|
dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP
|
||||||
|
e.g.,service=dhcpd,en0,192.168.254.100,192.168.254.199
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@ -367,7 +371,8 @@ glider -config CONFIGPATH -listen :8080 -verbose
|
|||||||
|
|
||||||
## Service
|
## Service
|
||||||
|
|
||||||
Scheme:
|
#### Scheme:
|
||||||
|
|
||||||
service=SERVICE_NAME[,SERVICE_CONFIG]
|
service=SERVICE_NAME[,SERVICE_CONFIG]
|
||||||
|
|
||||||
- dhcpd(from v0.11.0):
|
- dhcpd(from v0.11.0):
|
||||||
|
@ -107,6 +107,19 @@ func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
|
|||||||
return CopyBuffer(dst, src)
|
return CopyBuffer(dst, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyN copies n bytes (or until an error) from src to dst.
|
||||||
|
func CopyN(dst io.Writer, src io.Reader, n int64) (written int64, err error) {
|
||||||
|
written, err = Copy(dst, io.LimitReader(src, n))
|
||||||
|
if written == n {
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
if written < n && err == nil {
|
||||||
|
// src stopped early; must have been EOF.
|
||||||
|
err = io.EOF
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// CopyBuffer copies from src to dst with a userspace buffer.
|
// CopyBuffer copies from src to dst with a userspace buffer.
|
||||||
func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) {
|
func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) {
|
||||||
size := TCPBufSize
|
size := TCPBufSize
|
||||||
|
@ -313,4 +313,9 @@ func usage() {
|
|||||||
fmt.Fprintf(w, " "+app+" -verbose -dns=:53 -dnsserver=8.8.8.8:53 -dnsrecord=www.example.com/1.2.3.4\n")
|
fmt.Fprintf(w, " "+app+" -verbose -dns=:53 -dnsserver=8.8.8.8:53 -dnsrecord=www.example.com/1.2.3.4\n")
|
||||||
fmt.Fprintf(w, " -listen on :53 as dns server, forward dns requests to 8.8.8.8:53, return 1.2.3.4 when resolving www.example.com.\n")
|
fmt.Fprintf(w, " -listen on :53 as dns server, forward dns requests to 8.8.8.8:53, return 1.2.3.4 when resolving www.example.com.\n")
|
||||||
fmt.Fprintf(w, "\n")
|
fmt.Fprintf(w, "\n")
|
||||||
|
|
||||||
|
fmt.Fprintf(w, "Services:\n")
|
||||||
|
fmt.Fprintf(w, " dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP\n")
|
||||||
|
fmt.Fprintf(w, " e.g.,service=dhcpd,en0,192.168.254.100,192.168.254.199\n")
|
||||||
|
fmt.Fprintf(w, "\n")
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/nadoo/glider/common/conn"
|
||||||
"github.com/nadoo/glider/common/pool"
|
"github.com/nadoo/glider/common/pool"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ func NewConn(c net.Conn, uuid [16]byte, target string) (*Conn, error) {
|
|||||||
|
|
||||||
buf.WriteByte(Version) // ver
|
buf.WriteByte(Version) // ver
|
||||||
buf.Write(uuid[:]) // uuid
|
buf.Write(uuid[:]) // uuid
|
||||||
buf.WriteByte(0) // addinfo
|
buf.WriteByte(0) // addLen
|
||||||
buf.WriteByte(CmdTCP) // cmd
|
buf.WriteByte(CmdTCP) // cmd
|
||||||
|
|
||||||
// target
|
// target
|
||||||
@ -67,8 +68,8 @@ func (c *Conn) Read(b []byte) (n int, err error) {
|
|||||||
return n, errors.New("version not supported")
|
return n, errors.New("version not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
if addLen := int64(buf[1]); addLen != 0 {
|
if addLen := int64(buf[1]); addLen > 0 {
|
||||||
io.CopyN(ioutil.Discard, c.Conn, addLen)
|
conn.CopyN(ioutil.Discard, c.Conn, addLen)
|
||||||
}
|
}
|
||||||
c.rcved = true
|
c.rcved = true
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user