diff --git a/common/net.go b/common/net.go index a9b2b25..8f2e43c 100644 --- a/common/net.go +++ b/common/net.go @@ -85,7 +85,7 @@ func (a *Address) Marshal(r io.Reader) error { byteBuf := [1]byte{} _, err := r.Read(byteBuf[:]) if err != nil { - return NewError("Unable to read atype").Base(err) + return NewError("Unable to read ATYPE").Base(err) } a.AddressType = AddressType(byteBuf[0]) switch a.AddressType { diff --git a/docs/content/advance/api.md b/docs/content/advance/api.md index 56426ff..9d80488 100644 --- a/docs/content/advance/api.md +++ b/docs/content/advance/api.md @@ -41,9 +41,9 @@ Trojan-Go本身集成了API控制功能,也即可以使用一个Trojan-Go实 ./trojan-go -api-addr SERVER_API_ADDRESS -api COMMAND ``` -其中SERVER_API_ADDRESS为API地址和端口,如127.0.0.1:10000 +其中```SERVER_API_ADDRESS```为API地址和端口,如127.0.0.1:10000 -COMMAND为API命令,合法的命令有 +```COMMAND```为API命令,合法的命令有 - list 列出所有用户 @@ -59,7 +59,7 @@ COMMAND为API命令,合法的命令有 ./trojan-go -api-addr 127.0.0.1:10000 -api list ``` - 所有的用户信息将以json的形式导出,信息包括在线IP数量,实时速度,总上传和下载流量等。下面是一个例子 + 所有的用户信息将以json的形式导出,信息包括在线IP数量,实时速度,总上传和下载流量等。下面是一个返回的结果的例子 ```json [{"user":{"hash":"d63dc919e201d7bc4c825630d2cf25fdc93d4b2f0d46706d29038d01"},"status":{"traffic_total":{"upload_traffic":36393,"download_traffic":186478},"speed_current":{"upload_speed":25210,"download_speed":72384},"speed_limit":{"upload_speed":5242880,"download_speed":5242880},"ip_limit":50}}] @@ -83,7 +83,7 @@ COMMAND为API命令,合法的命令有 以上两条命令等价,下面的例子统一使用明文密码的方式,散列值指定某个用户的方式以此类推。 - 该用户信息将以json的形式导出,格式与list命令类似。下面是一个例子 + 该用户信息将以json的形式导出,格式与list命令类似。下面是一个返回的结果的例子 ```json {"user":{"hash":"d63dc919e201d7bc4c825630d2cf25fdc93d4b2f0d46706d29038d01"},"status":{"traffic_total":{"upload_traffic":36393,"download_traffic":186478},"speed_current":{"upload_speed":25210,"download_speed":72384},"speed_limit":{"upload_speed":5242880,"download_speed":5242880},"ip_limit":50}} @@ -110,4 +110,4 @@ COMMAND为API命令,合法的命令有 -download-speed-limit 5242880 ``` - 这个命令将密码为password的用户上传和下载速度限制为5MiB/s,同时连接的IP数量限制为3个,注意这里5242880的单位是字节。如果不填写相关限制或填写0,则维持原状。如果填写负数,则表示不进行限制。 + 这个命令将密码为password的用户上传和下载速度限制为5MiB/s,同时连接的IP数量限制为3个,注意这里5242880的单位是字节。如果不填写这些限制或填写0,则维持原状。如果填写负数,则表示不进行限制。 diff --git a/protocol/trojan/inbound.go b/protocol/trojan/inbound.go index b687259..68228a5 100644 --- a/protocol/trojan/inbound.go +++ b/protocol/trojan/inbound.go @@ -45,7 +45,6 @@ func (i *TrojanInboundConnSession) Close() error { log.Info("User", i.passwordHash, "to", i.request, "closed", "sent:", common.HumanFriendlyTraffic(i.sent), "recv:", common.HumanFriendlyTraffic(i.recv)) i.cancel() i.user.DelIP(i.ip) - log.Debug("IP " + i.ip + " deleted") return i.rwc.Close() } @@ -68,17 +67,23 @@ func (i *TrojanInboundConnSession) parseRequest(r *common.RewindReader) error { if !ok { return common.NewError("IP limit reached") } - log.Debug("IP " + i.ip + " added") crlf := [2]byte{} - r.Read(crlf[:]) + _, err = io.ReadFull(r, crlf[:]) + + if err != nil { + return err + } i.request = new(protocol.Request) if err := i.request.Marshal(r); err != nil { return err } - r.Read(crlf[:]) + _, err = io.ReadFull(r, crlf[:]) + if err != nil { + return err + } return nil } diff --git a/protocol/trojan/packet.go b/protocol/trojan/packet.go index 2cd6038..7d04d25 100644 --- a/protocol/trojan/packet.go +++ b/protocol/trojan/packet.go @@ -31,7 +31,7 @@ func (i *TrojanPacketSession) ReadPacket() (*protocol.Request, []byte, error) { length := binary.BigEndian.Uint16(lengthBuf[:]) packet := make([]byte, length) n, err := i.conn.Read(packet) - return req, packet[0:n], err + return req, packet[:n], err } func (i *TrojanPacketSession) WritePacket(req *protocol.Request, packet []byte) (int, error) {