5
5
"unsafe"
6
6
7
7
"github.com/goplus/llgo/c"
8
- "github.com/goplus/llgo/c/libuv"
9
8
"github.com/goplus/llgo/c/os"
10
9
"github.com/goplus/llgo/rust/hyper"
11
10
)
@@ -17,39 +16,36 @@ type response struct {
17
16
body []byte
18
17
hyperChannel * hyper.ResponseChannel
19
18
hyperResp * hyper.Response
20
- request * Request
21
- asyncHandler * libuv.Async
22
19
}
23
20
24
- type body struct {
21
+ type responseBodyRaw struct {
25
22
data []byte
26
23
len uintptr
27
24
readLen uintptr
28
25
}
29
26
30
27
type taskData struct {
31
- hyperBody * hyper.Body
32
- body * body
33
- conn * conn
34
- hyperTaskID hyperTaskID
28
+ hyperBody * hyper.Body
29
+ responseBody * responseBodyRaw
30
+ conn * conn
31
+ taskFlag taskFlag
35
32
}
36
33
37
- type hyperTaskID int
34
+ type taskFlag int
38
35
39
36
const (
40
- taskSetBody hyperTaskID = iota
41
- taskGetBody
37
+ setBodyTask taskFlag = iota
38
+ getBodyTask
42
39
)
43
40
44
41
var DefaultChunkSize uintptr = 8192
45
42
46
- func newResponse (request * Request , hyperChannel * hyper.ResponseChannel ) * response {
43
+ func newResponse (hyperChannel * hyper.ResponseChannel ) * response {
47
44
fmt .Printf ("[debug] newResponse called\n " )
48
45
49
46
return & response {
50
47
header : make (Header ),
51
48
hyperChannel : hyperChannel ,
52
- //request: request,
53
49
statusCode : 200 ,
54
50
written : false ,
55
51
body : nil ,
@@ -65,9 +61,7 @@ func (r *response) Write(data []byte) (int, error) {
65
61
if ! r .written {
66
62
r .WriteHeader (200 )
67
63
}
68
- fmt .Printf ("[debug] data: %s\n " , string (data ))
69
64
r .body = append (r .body , data ... )
70
- fmt .Printf ("[debug] r.body: %s\n " , string (r .body ))
71
65
return len (data ), nil
72
66
}
73
67
@@ -84,12 +78,12 @@ func (r *response) WriteHeader(statusCode int) {
84
78
fmt .Println ("[debug] WriteHeaderStatusCode done" )
85
79
86
80
//debug
87
- // fmt.Printf("[debug] < HTTP/1.1 %d\n", statusCode)
88
- // for key, values := range r.header {
89
- // for _, value := range values {
90
- // fmt.Printf("< %s: %s\n", key, value)
91
- // }
92
- // }
81
+ fmt .Printf ("[debug] < HTTP/1.1 %d\n " , statusCode )
82
+ for key , values := range r .header {
83
+ for _ , value := range values {
84
+ fmt .Printf ("< %s: %s\n " , key , value )
85
+ }
86
+ }
93
87
94
88
headers := r .hyperResp .Headers ()
95
89
for key , values := range r .header {
@@ -109,18 +103,11 @@ func (r *response) WriteHeader(statusCode int) {
109
103
}
110
104
}
111
105
112
- fmt .Println ("[debug] WriteHeaderHeaders done" )
113
-
114
106
fmt .Println ("[debug] WriteHeader done" )
115
107
}
116
108
117
109
func (r * response ) finalize () error {
118
110
fmt .Printf ("[debug] finalize called\n " )
119
- // err := r.request.Body.Close()
120
- // if err != nil {
121
- // return err
122
- // }
123
- // fmt.Printf("[debug] request body closed\n")
124
111
125
112
if ! r .written {
126
113
r .WriteHeader (200 )
@@ -132,7 +119,7 @@ func (r *response) finalize() error {
132
119
return fmt .Errorf ("failed to create response" )
133
120
}
134
121
135
- bodyData := body {
122
+ bodyData := responseBodyRaw {
136
123
data : r .body ,
137
124
len : uintptr (len (r .body )),
138
125
readLen : 0 ,
@@ -144,10 +131,10 @@ func (r *response) finalize() error {
144
131
return fmt .Errorf ("failed to create body" )
145
132
}
146
133
taskData := & taskData {
147
- hyperBody : nil ,
148
- body : & bodyData ,
149
- conn : nil ,
150
- hyperTaskID : taskSetBody ,
134
+ hyperBody : nil ,
135
+ responseBody : & bodyData ,
136
+ conn : nil ,
137
+ taskFlag : setBodyTask ,
151
138
}
152
139
body .SetDataFunc (setBodyDataFunc )
153
140
body .SetUserdata (unsafe .Pointer (taskData ), nil )
@@ -173,7 +160,7 @@ func setBodyDataFunc(userdata c.Pointer, ctx *hyper.Context, chunk **hyper.Buf)
173
160
fmt .Println ("[debug] taskData is nil" )
174
161
return hyper .PollError
175
162
}
176
- body := taskData .body
163
+ body := taskData .responseBody
177
164
178
165
if body .len > 0 {
179
166
//debug
0 commit comments