mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 01:15: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
|
||||
-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>
|
||||
@ -367,7 +371,8 @@ glider -config CONFIGPATH -listen :8080 -verbose
|
||||
|
||||
## Service
|
||||
|
||||
Scheme:
|
||||
#### Scheme:
|
||||
|
||||
service=SERVICE_NAME[,SERVICE_CONFIG]
|
||||
|
||||
- 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)
|
||||
}
|
||||
|
||||
// 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.
|
||||
func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) {
|
||||
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, " -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, "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"
|
||||
"strings"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"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.Write(uuid[:]) // uuid
|
||||
buf.WriteByte(0) // addinfo
|
||||
buf.WriteByte(0) // addLen
|
||||
buf.WriteByte(CmdTCP) // cmd
|
||||
|
||||
// target
|
||||
@ -67,8 +68,8 @@ func (c *Conn) Read(b []byte) (n int, err error) {
|
||||
return n, errors.New("version not supported")
|
||||
}
|
||||
|
||||
if addLen := int64(buf[1]); addLen != 0 {
|
||||
io.CopyN(ioutil.Discard, c.Conn, addLen)
|
||||
if addLen := int64(buf[1]); addLen > 0 {
|
||||
conn.CopyN(ioutil.Discard, c.Conn, addLen)
|
||||
}
|
||||
c.rcved = true
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user