chore: web addon add drop message type

addon-dailer
liqiang 4 years ago
parent ebc3f940ea
commit c3b2e5261b

@ -130,14 +130,26 @@ func (c *concurrentConn) isIntercpt(f *flow.Flow, after *messageFlow) bool {
// 拦截 // 拦截
func (c *concurrentConn) waitIntercept(f *flow.Flow, after *messageFlow) { func (c *concurrentConn) waitIntercept(f *flow.Flow, after *messageFlow) {
log.Infof("waiting Intercept: %s\n", f.Request.URL)
ch := c.initWaitChan(f.Id.String()) ch := c.initWaitChan(f.Id.String())
msg := (<-ch).(*messageEdit) msg := (<-ch).(*messageEdit)
log.Infof("waited Intercept: %s\n", f.Request.URL)
// f.Request.Method = req.Method // drop
// f.Request.URL = req.URL if msg.mType == messageTypeDropRequest || msg.mType == messageTypeDropResponse {
// f.Request.Header = req.Header f.Response = &flow.Response{
StatusCode: 502,
}
return
}
log.Infof("waitIntercept: %v", msg) // change
if msg.mType == messageTypeChangeRequest {
f.Request.Method = msg.request.Method
f.Request.URL = msg.request.URL
f.Request.Header = msg.request.Header
f.Request.Body = msg.request.Body
} else if msg.mType == messageTypeChangeResponse {
// TODO: statusCode
f.Response.Header = msg.response.Header
f.Response.Body = msg.response.Body
}
} }

@ -16,7 +16,7 @@ import (
// messageFlow // messageFlow
// version 1 byte + type 1 byte + id 36 byte + waitIntercept 1 byte + content left bytes // version 1 byte + type 1 byte + id 36 byte + waitIntercept 1 byte + content left bytes
// type: 11/12 // type: 11/12/13/14
// messageEdit // messageEdit
// version 1 byte + type 1 byte + id 36 byte + header len 4 byte + header content bytes + body len 4 byte + [body content bytes] // version 1 byte + type 1 byte + id 36 byte + header len 4 byte + header content bytes + body len 4 byte + [body content bytes]
@ -36,6 +36,8 @@ const (
messageTypeChangeRequest messageType = 11 messageTypeChangeRequest messageType = 11
messageTypeChangeResponse messageType = 12 messageTypeChangeResponse messageType = 12
messageTypeDropRequest messageType = 13
messageTypeDropResponse messageType = 14
messageTypeChangeBreakPointRules messageType = 21 messageTypeChangeBreakPointRules messageType = 21
) )
@ -47,6 +49,8 @@ var allMessageTypes = []messageType{
messageTypeResponseBody, messageTypeResponseBody,
messageTypeChangeRequest, messageTypeChangeRequest,
messageTypeChangeResponse, messageTypeChangeResponse,
messageTypeDropRequest,
messageTypeDropResponse,
messageTypeChangeBreakPointRules, messageTypeChangeBreakPointRules,
} }
@ -115,8 +119,8 @@ type messageEdit struct {
} }
func parseMessageEdit(data []byte) *messageEdit { func parseMessageEdit(data []byte) *messageEdit {
// 2 + 36 + 4 + 4 // 2 + 36
if len(data) < 46 { if len(data) < 38 {
return nil return nil
} }
@ -127,6 +131,20 @@ func parseMessageEdit(data []byte) *messageEdit {
return nil return nil
} }
msg := &messageEdit{
mType: mType,
id: id,
}
if mType == messageTypeDropRequest || mType == messageTypeDropResponse {
return msg
}
// 2 + 36 + 4 + 4
if len(data) < 46 {
return nil
}
hl := (int)(binary.BigEndian.Uint32(data[38:42])) hl := (int)(binary.BigEndian.Uint32(data[38:42]))
if 42+hl+4 > len(data) { if 42+hl+4 > len(data) {
return nil return nil
@ -139,11 +157,6 @@ func parseMessageEdit(data []byte) *messageEdit {
} }
bodyContent := data[42+hl+4:] bodyContent := data[42+hl+4:]
msg := &messageEdit{
mType: mType,
id: id,
}
if mType == messageTypeChangeRequest { if mType == messageTypeChangeRequest {
req := new(flow.Request) req := new(flow.Request)
err := json.Unmarshal(headerContent, req) err := json.Unmarshal(headerContent, req)
@ -254,7 +267,7 @@ func parseMessage(data []byte) message {
mType := (messageType)(data[1]) mType := (messageType)(data[1])
if mType == messageTypeChangeRequest || mType == messageTypeChangeResponse { if mType == messageTypeChangeRequest || mType == messageTypeChangeResponse || mType == messageTypeDropRequest || mType == messageTypeDropResponse {
return parseMessageEdit(data) return parseMessageEdit(data)
} else if mType == messageTypeChangeBreakPointRules { } else if mType == messageTypeChangeBreakPointRules {
return parseMessageMeta(data) return parseMessageMeta(data)

Loading…
Cancel
Save