Skip to content

Commit d81d463

Browse files
committed
dns
1 parent 27dca67 commit d81d463

18 files changed

Lines changed: 350 additions & 73 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ func main() {
6969
## Lua Demo
7070
+ [tcp](https://github.com/vlorc/lua-vm/blob/master/demo/tcp.lua)
7171
+ [udp](https://github.com/vlorc/lua-vm/blob/master/demo/udp.lua)
72+
+ [dns](https://github.com/vlorc/lua-vm/blob/master/demo/dns.lua)
7273
+ [http](https://github.com/vlorc/lua-vm/blob/master/demo/http.lua)
7374
+ [time](https://github.com/vlorc/lua-vm/blob/master/demo/time.lua)
7475
+ [hash](https://github.com/vlorc/lua-vm/blob/master/demo/hash.lua)

README_CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ func main() {
6969
## Lua 例子
7070
+ [tcp](https://github.com/vlorc/lua-vm/blob/master/demo/tcp.lua)
7171
+ [udp](https://github.com/vlorc/lua-vm/blob/master/demo/udp.lua)
72+
+ [dns](https://github.com/vlorc/lua-vm/blob/master/demo/dns.lua)
7273
+ [http](https://github.com/vlorc/lua-vm/blob/master/demo/http.lua)
7374
+ [time](https://github.com/vlorc/lua-vm/blob/master/demo/time.lua)
7475
+ [hash](https://github.com/vlorc/lua-vm/blob/master/demo/hash.lua)

base/buffer.go

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ func (BufferFactory) Form(str string) Buffer {
2222
return Buffer(str)
2323
}
2424

25-
func (BufferFactory) FormInt(val ...int) Buffer {
26-
return __intBuffer(val...)
25+
func (BufferFactory) FormNumber(val ...int) Buffer {
26+
return __numberBuffer(val...)
2727
}
2828

2929
func (BufferFactory) FormString(val ...string) Buffer {
@@ -79,27 +79,19 @@ func (b Buffer) Clone(args ...int) Buffer {
7979
return dst
8080
}
8181

82-
func (b Buffer) Copy(src Buffer, args ...int) {
83-
if len(src) > 0 {
84-
copy(b.Slice(args...), src)
85-
}
82+
func (b Buffer) Copy(src Buffer, args ...int) int {
83+
return copy(b.Slice(args...), src)
8684
}
8785

8886
func (b Buffer) Concat(src ...Buffer) Buffer {
89-
i := 0
87+
i := len(b)
9088
for _, v := range src {
9189
i += len(v)
9290
}
93-
dst := make(Buffer, i+len(b))
94-
i = len(b)
95-
if i > 0 {
96-
copy(dst, b)
97-
}
91+
dst := make(Buffer, i)
92+
i = copy(dst, b)
9893
for _, v := range src {
99-
if len(v) > 0 {
100-
copy(dst[i:], v)
101-
i += len(v)
102-
}
94+
i += copy(dst[i:], v)
10395
}
10496
return dst
10597
}
@@ -109,7 +101,7 @@ func (b Buffer) Equal(buf Buffer) bool {
109101
}
110102

111103
func (b Buffer) String() string {
112-
return __hexUpperString(b)
104+
return __HEXString(b)
113105
}
114106

115107
func (b Buffer) ToString(args ...string) string {
@@ -124,16 +116,22 @@ func (b Buffer) ToString(args ...string) string {
124116

125117
func (b Buffer) ToRune(args ...int) rune {
126118
n := b.Slice(args...)
127-
v, _ := utf8.DecodeRune(n)
128-
return v
119+
r, _ := utf8.DecodeRune(n)
120+
return r
129121
}
130122

131-
func (b Buffer) ToNumber(args ...int) (v int64) {
123+
func (b Buffer) ToNumber(args ...int) (r uint64) {
132124
n := b.Slice(args...)
133-
for i := len(n) - 1; i >= 0; i-- {
134-
v = (v << 8) + int64(n[i])
125+
if 3 != len(args) {
126+
for i := len(n) - 1; i >= 0; i-- {
127+
r = (r << 8) + uint64(n[i])
128+
}
129+
} else {
130+
for _, v := range n {
131+
r = (r << 8) + uint64(v)
132+
}
135133
}
136-
return v
134+
return r
137135
}
138136

139137
func (b Buffer) ToLine(args ...int) string {
@@ -147,3 +145,13 @@ func (b Buffer) ToLine(args ...int) string {
147145
}
148146
return __rawString(n)
149147
}
148+
149+
func (b Buffer) ToHash(args ...string) uint64 {
150+
if len(args) <= 0 {
151+
return __hashChecksum8(b)
152+
}
153+
if hash, ok := HashTable[args[0]]; ok {
154+
return hash(b)
155+
}
156+
return 0
157+
}

base/encode.go

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package base
22

33
import (
4+
"crypto/md5"
5+
"crypto/sha1"
6+
"encoding/base32"
47
"encoding/base64"
58
"golang.org/x/text/encoding/simplifiedchinese"
69
"golang.org/x/text/transform"
@@ -10,22 +13,27 @@ import (
1013
var EncodeTable = map[string]func(Buffer) string{
1114
"raw": __rawString,
1215
"utf8": __rawString,
13-
"HEX": __hexUpperString,
14-
"hex": __hexLowerString,
16+
"HEX": __HEXString,
17+
"hex": __hexString,
18+
"base32": __base32String,
1519
"base64": __base64String,
1620
"gbk": __gbkString,
1721
"gb18030": __gb18030String,
22+
"md5": __md5String,
23+
"MD5": __MD5String,
24+
"sha1": __sha1String,
25+
"SHA1": __SHA1String,
1826
}
1927

20-
func __hexUpperString(src Buffer) string {
21-
return __hexString(src, "0123456789ABCDEF")
28+
func __HEXString(src Buffer) string {
29+
return __hex(src, "0123456789ABCDEF")
2230
}
2331

24-
func __hexLowerString(src Buffer) string {
25-
return __hexString(src, "0123456789abcdef")
32+
func __hexString(src Buffer) string {
33+
return __hex(src, "0123456789abcdef")
2634
}
2735

28-
func __hexString(src Buffer, tab string) string {
36+
func __hex(src Buffer, tab string) string {
2937
dst := make([]byte, len(src)*2)
3038
for i, v := range src {
3139
dst[i*2+0] = tab[v>>4]
@@ -34,6 +42,10 @@ func __hexString(src Buffer, tab string) string {
3442
return *(*string)(unsafe.Pointer(&dst))
3543
}
3644

45+
func __base32String(src Buffer) string {
46+
return base32.StdEncoding.EncodeToString(src)
47+
}
48+
3749
func __base64String(src Buffer) string {
3850
return base64.StdEncoding.EncodeToString(src)
3951
}
@@ -51,3 +63,31 @@ func __gbkString(src Buffer) string {
5163
dst, _, _ := transform.Bytes(simplifiedchinese.GBK.NewDecoder(), src)
5264
return *(*string)(unsafe.Pointer(&dst))
5365
}
66+
67+
func __md5String(src Buffer) string {
68+
h := md5.New()
69+
h.Write(src)
70+
dst := h.Sum(nil)
71+
return __hexString(dst)
72+
}
73+
74+
func __MD5String(src Buffer) string {
75+
h := md5.New()
76+
h.Write(src)
77+
dst := h.Sum(nil)
78+
return __HEXString(dst)
79+
}
80+
81+
func __sha1String(src Buffer) string {
82+
h := sha1.New()
83+
h.Write(src)
84+
dst := h.Sum(nil)
85+
return __hexString(dst)
86+
}
87+
88+
func __SHA1String(src Buffer) string {
89+
h := sha1.New()
90+
h.Write(src)
91+
dst := h.Sum(nil)
92+
return __HEXString(dst)
93+
}

base/hash.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package base
2+
3+
import (
4+
"hash/crc32"
5+
"hash/crc64"
6+
)
7+
8+
var HashTable = map[string]func(Buffer) uint64{
9+
"checksum8": __hashChecksum8,
10+
"checksum16": __hashChecksum16,
11+
"checksum32": __hashChecksum32,
12+
"checksum64": __hashChecksum64,
13+
"crc32": __hashCrc32,
14+
"crc64": __hashCrc64ISO,
15+
"crc64.iso": __hashCrc64ISO,
16+
"crc64.ecma": __hashCrc64ECMA,
17+
}
18+
19+
func __hashChecksum8(b Buffer) uint64 {
20+
r := byte(0)
21+
for _, v := range b {
22+
r += v
23+
}
24+
return uint64(r)
25+
}
26+
27+
func __hashChecksum16(b Buffer) uint64 {
28+
r := uint16(0)
29+
for _, v := range b {
30+
r += uint16(v)
31+
}
32+
return uint64(r)
33+
}
34+
35+
func __hashChecksum32(b Buffer) uint64 {
36+
r := uint32(0)
37+
for _, v := range b {
38+
r += uint32(v)
39+
}
40+
return uint64(r)
41+
}
42+
43+
func __hashChecksum64(b Buffer) uint64 {
44+
r := uint64(0)
45+
for _, v := range b {
46+
r += uint64(v)
47+
}
48+
return uint64(r)
49+
}
50+
51+
func __hashCrc32(b Buffer) uint64 {
52+
h := crc32.NewIEEE()
53+
h.Write(b)
54+
return uint64(h.Sum32())
55+
}
56+
57+
func __hashCrc64ISO(b Buffer) uint64 {
58+
h := crc64.New(crc64.MakeTable(crc64.ISO))
59+
h.Write(b)
60+
return h.Sum64()
61+
}
62+
63+
func __hashCrc64ECMA(b Buffer) uint64 {
64+
h := crc64.New(crc64.MakeTable(crc64.ECMA))
65+
h.Write(b)
66+
return h.Sum64()
67+
}

base/tobuffer.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package base
22

33
import (
4+
"encoding"
5+
"encoding/json"
46
"github.com/yuin/gopher-lua"
57
"layeh.com/gopher-luar"
68
"reflect"
@@ -36,8 +38,32 @@ func __newBuffer(v lua.LValue) Buffer {
3638
func __dataBuffer(v interface{}) Buffer {
3739
reflect.TypeOf(v)
3840
switch r := v.(type) {
41+
case *[]byte:
42+
if nil != r {
43+
return Buffer(*r)
44+
}
45+
case *Buffer:
46+
if nil != r {
47+
return Buffer(*r)
48+
}
49+
case *string:
50+
if nil != r {
51+
return Buffer(*r)
52+
}
3953
case []byte:
4054
return Buffer(r)
55+
case encoding.BinaryMarshaler:
56+
if b, err := r.MarshalBinary(); nil != err && len(b) > 0 {
57+
return Buffer(b)
58+
}
59+
case encoding.TextMarshaler:
60+
if b, err := r.MarshalText(); nil != err && len(b) > 0 {
61+
return Buffer(b)
62+
}
63+
case json.Marshaler:
64+
if b, err := r.MarshalJSON(); nil != err && len(b) > 0 {
65+
return Buffer(b)
66+
}
4167
}
4268
return nil
4369
}
@@ -69,7 +95,7 @@ func __stringBuffer(val ...string) Buffer {
6995
return buf
7096
}
7197

72-
func __intBuffer(val ...int) Buffer {
98+
func __numberBuffer(val ...int) Buffer {
7399
buf := make(Buffer, len(val))
74100
for i, v := range val {
75101
buf[i] = byte(v)

crypto/hash/hash.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package hash
22

33
import (
4+
"crypto/hmac"
45
"crypto/md5"
56
"crypto/sha1"
67
"crypto/sha256"
@@ -13,6 +14,7 @@ type SHA1Factory struct{}
1314
type SHA256Factory struct{}
1415
type SHA512Factory struct{}
1516
type MD5Factory struct{}
17+
type HMACFactory struct{}
1618

1719
func __sum(h hash.Hash, buf ...base.Buffer) base.Buffer {
1820
for _, v := range buf {
@@ -52,3 +54,18 @@ func (SHA512Factory) New() hash.Hash {
5254
func (SHA512Factory) Sum(buf ...base.Buffer) base.Buffer {
5355
return __sum(sha512.New(), buf...)
5456
}
57+
58+
var __table = map[string]func() hash.Hash{
59+
"md5": md5.New,
60+
"sha1": sha1.New,
61+
"sha256": sha256.New,
62+
"sha512": sha512.New,
63+
}
64+
65+
func (HMACFactory) New(method, secret string) hash.Hash {
66+
return hmac.New(__table[method], []byte(secret))
67+
}
68+
69+
func (f HMACFactory) Sum(method, secret string, buf ...base.Buffer) base.Buffer {
70+
return __sum(f.New(method, secret), buf...)
71+
}
File renamed without changes.

demo/dns.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
local dns = require("net.dns")
2+
local ips = dns:lookup("www.baidu.com")
3+
4+
for key,value in ips() do
5+
print(key, value)
6+
end

fs/native.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func (NativeFileFactory) Open(file string, args ...int) (FileDriver, error) {
2727
}
2828

2929
func (NativeFileFactory) Rename(src, dst string) error {
30-
return os.Rename(src,dst)
30+
return os.Rename(src, dst)
3131
}
3232

3333
func (NativeFileFactory) Remove(file string) error {
@@ -43,10 +43,10 @@ func (NativeFileFactory) Exist(file string) bool {
4343
return true
4444
}
4545

46-
func (NativeFileFactory) Mkdir(file string,mode int) error {
47-
return os.MkdirAll(file,os.FileMode(mode))
46+
func (NativeFileFactory) Mkdir(file string, mode int) error {
47+
return os.MkdirAll(file, os.FileMode(mode))
4848
}
4949

50-
func (NativeFileFactory) Walk(root string,callback filepath.WalkFunc) error {
50+
func (NativeFileFactory) Walk(root string, callback filepath.WalkFunc) error {
5151
return filepath.Walk(root, callback)
5252
}

0 commit comments

Comments
 (0)