Skip to content

Commit e33aec2

Browse files
committed
rebase update
1 parent 4276b38 commit e33aec2

17 files changed

+1375
-1240
lines changed

.gitignore

100755100644
File mode changed.

LICENSE

100755100644
File mode changed.

README.md

100755100644
File mode changed.

README_ZH.md

100755100644
File mode changed.

agent.go

100755100644
+334-335
Large diffs are not rendered by default.

agent_bsd.go

100755100644
+26-26
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
// +build darwin dragonfly freebsd netbsd openbsd
2-
3-
package surfer
4-
5-
import (
6-
"runtime"
7-
"syscall"
8-
)
9-
10-
// osName returns the name of the OS.
11-
func osName() string {
12-
name, err := syscall.Sysctl("kern.ostype")
13-
if err != nil {
14-
return runtime.GOOS
15-
}
16-
return name
17-
}
18-
19-
// osVersion returns the OS version.
20-
func osVersion() string {
21-
release, err := syscall.Sysctl("kern.osrelease")
22-
if err != nil {
23-
return "0.0"
24-
}
25-
return release
26-
}
1+
// +build darwin dragonfly freebsd netbsd openbsd
2+
3+
package surfer
4+
5+
import (
6+
"runtime"
7+
"syscall"
8+
)
9+
10+
// osName returns the name of the OS.
11+
func osName() string {
12+
name, err := syscall.Sysctl("kern.ostype")
13+
if err != nil {
14+
return runtime.GOOS
15+
}
16+
return name
17+
}
18+
19+
// osVersion returns the OS version.
20+
func osVersion() string {
21+
release, err := syscall.Sysctl("kern.osrelease")
22+
if err != nil {
23+
return "0.0"
24+
}
25+
return release
26+
}

agent_linux.go

100755100644
+41-41
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
1-
// +build linux
2-
3-
package surfer
4-
5-
import (
6-
"runtime"
7-
"syscall"
8-
)
9-
10-
// osName returns the name of the OS.
11-
func osName() string {
12-
buf := &syscall.Utsname{}
13-
err := syscall.Uname(buf)
14-
if err != nil {
15-
return runtime.GOOS
16-
}
17-
return charsToString(buf.Sysname)
18-
}
19-
20-
// osVersion returns the OS version.
21-
func osVersion() string {
22-
buf := &syscall.Utsname{}
23-
err := syscall.Uname(buf)
24-
if err != nil {
25-
return "0.0"
26-
}
27-
return charsToString(buf.Release)
28-
}
29-
30-
// charsToString converts a [65]int8 byte array into a string.
31-
func charsToString(ca [65]int8) string {
32-
s := make([]byte, len(ca))
33-
var lens int
34-
for ; lens < len(ca); lens++ {
35-
if ca[lens] == 0 {
36-
break
37-
}
38-
s[lens] = uint8(ca[lens])
39-
}
40-
return string(s[0:lens])
41-
}
1+
// +build linux,!arm
2+
3+
package surfer
4+
5+
import (
6+
"runtime"
7+
"syscall"
8+
)
9+
10+
// osName returns the name of the OS.
11+
func osName() string {
12+
buf := &syscall.Utsname{}
13+
err := syscall.Uname(buf)
14+
if err != nil {
15+
return runtime.GOOS
16+
}
17+
return charsToString(buf.Sysname)
18+
}
19+
20+
// osVersion returns the OS version.
21+
func osVersion() string {
22+
buf := &syscall.Utsname{}
23+
err := syscall.Uname(buf)
24+
if err != nil {
25+
return "0.0"
26+
}
27+
return charsToString(buf.Release)
28+
}
29+
30+
// charsToString converts a [65]int8 byte array into a string.
31+
func charsToString(ca [65]int8) string {
32+
s := make([]byte, len(ca))
33+
var lens int
34+
for ; lens < len(ca); lens++ {
35+
if ca[lens] == 0 {
36+
break
37+
}
38+
s[lens] = uint8(ca[lens])
39+
}
40+
return string(s[0:lens])
41+
}

agent_linux_arm.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// +build linux,arm
2+
3+
package surfer
4+
5+
import (
6+
"runtime"
7+
"syscall"
8+
)
9+
10+
// osName returns the name of the OS.
11+
func osName() string {
12+
buf := &syscall.Utsname{}
13+
err := syscall.Uname(buf)
14+
if err != nil {
15+
return runtime.GOOS
16+
}
17+
return charsToString(buf.Sysname)
18+
}
19+
20+
// osVersion returns the OS version.
21+
func osVersion() string {
22+
buf := &syscall.Utsname{}
23+
err := syscall.Uname(buf)
24+
if err != nil {
25+
return "0.0"
26+
}
27+
return charsToString(buf.Release)
28+
}
29+
30+
// charsToString converts a [65]uint8 byte array into a string.
31+
func charsToString(ca [65]uint8) string {
32+
s := make([]byte, len(ca))
33+
var lens int
34+
for ; lens < len(ca); lens++ {
35+
if ca[lens] == 0 {
36+
break
37+
}
38+
s[lens] = uint8(ca[lens])
39+
}
40+
return string(s[0:lens])
41+
}

agent_windows.go

100755100644
+25-25
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
// +build windows
2-
3-
package surfer
4-
5-
import (
6-
"fmt"
7-
"runtime"
8-
"syscall"
9-
)
10-
11-
// osName returns the name of the OS.
12-
func osName() string {
13-
return runtime.GOOS
14-
}
15-
16-
// osVersion returns the OS version.
17-
func osVersion() string {
18-
v, err := syscall.GetVersion()
19-
if err != nil {
20-
return "0.0"
21-
}
22-
major := uint8(v)
23-
minor := uint8(v >> 8)
24-
return fmt.Sprintf("%d.%d", major, minor)
25-
}
1+
// +build windows
2+
3+
package surfer
4+
5+
import (
6+
"fmt"
7+
"runtime"
8+
"syscall"
9+
)
10+
11+
// osName returns the name of the OS.
12+
func osName() string {
13+
return runtime.GOOS
14+
}
15+
16+
// osVersion returns the OS version.
17+
func osVersion() string {
18+
v, err := syscall.GetVersion()
19+
if err != nil {
20+
return "0.0"
21+
}
22+
major := uint8(v)
23+
minor := uint8(v >> 8)
24+
return fmt.Sprintf("%d.%d", major, minor)
25+
}

body.go

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
// Copyright 2015 henrylee2cn Author. All Rights Reserved.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package surfer
16+
17+
import (
18+
"bytes"
19+
"encoding/json"
20+
"encoding/xml"
21+
"io"
22+
"io/ioutil"
23+
"log"
24+
"mime/multipart"
25+
"net/url"
26+
"strings"
27+
)
28+
29+
// body set request body
30+
type body interface {
31+
SetBody(*Request) error
32+
}
33+
34+
// Content bytes type of body content
35+
type Content struct {
36+
ContentType string
37+
Bytes []byte
38+
}
39+
40+
var _ body = new(Content)
41+
42+
// SetBody sets request body
43+
func (c *Content) SetBody(r *Request) error {
44+
r.Header.Set("Content-Type", c.ContentType)
45+
r.body = bytes.NewReader(c.Bytes)
46+
return nil
47+
}
48+
49+
// Bytes bytes type of body content, without content type
50+
type Bytes []byte
51+
52+
var _ body = Bytes("")
53+
54+
// SetBody sets request body
55+
func (b Bytes) SetBody(r *Request) error {
56+
r.body = bytes.NewReader(b)
57+
return nil
58+
}
59+
60+
type (
61+
// Form impletes body interface
62+
Form struct {
63+
// Values [field name]-[]value
64+
Values map[string][]string
65+
// Files [field name]-[]File
66+
Files map[string][]File
67+
}
68+
// File post form file
69+
File struct {
70+
Filename string
71+
Bytes []byte
72+
}
73+
)
74+
75+
var _ body = new(Form)
76+
77+
// SetBody sets request body
78+
func (f Form) SetBody(r *Request) error {
79+
if len(f.Files) > 0 {
80+
pr, pw := io.Pipe()
81+
bodyWriter := multipart.NewWriter(pw)
82+
go func() {
83+
for fieldname, postfiles := range f.Files {
84+
for _, postfile := range postfiles {
85+
fileWriter, err := bodyWriter.CreateFormFile(fieldname, postfile.Filename)
86+
if err != nil {
87+
log.Println("[E] Surfer: Multipart:", err)
88+
}
89+
_, err = fileWriter.Write(postfile.Bytes)
90+
if err != nil {
91+
log.Println("[E] Surfer: Multipart:", err)
92+
}
93+
}
94+
}
95+
for k, v := range f.Values {
96+
for _, vv := range v {
97+
bodyWriter.WriteField(k, vv)
98+
}
99+
}
100+
bodyWriter.Close()
101+
pw.Close()
102+
}()
103+
r.Header.Set("Content-Type", bodyWriter.FormDataContentType())
104+
r.body = ioutil.NopCloser(pr)
105+
} else {
106+
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
107+
r.body = strings.NewReader(url.Values(f.Values).Encode())
108+
}
109+
return nil
110+
}
111+
112+
// JSONObj JSON type of body content
113+
type JSONObj struct{ Data interface{} }
114+
115+
var _ body = new(JSONObj)
116+
117+
// SetBody sets request body
118+
func (obj *JSONObj) SetBody(r *Request) error {
119+
r.Header.Set("Content-Type", "application/json;charset=utf-8")
120+
if obj == nil || obj.Data == nil {
121+
return nil
122+
}
123+
b, err := json.Marshal(obj.Data)
124+
if err != nil {
125+
return err
126+
}
127+
r.body = bytes.NewReader(b)
128+
return nil
129+
}
130+
131+
// XMLObj XML type of body content
132+
type XMLObj struct{ Data interface{} }
133+
134+
var _ body = new(XMLObj)
135+
136+
// SetBody sets request body
137+
func (obj *XMLObj) SetBody(r *Request) error {
138+
r.Header.Set("Content-Type", "application/xml;charset=utf-8")
139+
if obj == nil || obj.Data == nil {
140+
return nil
141+
}
142+
b, err := xml.Marshal(obj.Data)
143+
if err != nil {
144+
return err
145+
}
146+
r.body = bytes.NewReader(b)
147+
return nil
148+
}

0 commit comments

Comments
 (0)