MCPcopy Create free account
hub / github.com/baidu-golang/pbrpc / ServeHTTP

Method ServeHTTP

httpserver.go:61–162  ·  view source on GitHub ↗

ServeHTTP to serve http reqeust and response to process http rpc handle

(w http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

59
60// ServeHTTP to serve http reqeust and response to process http rpc handle
61func (h *HttpServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
62 path := req.URL.Path
63 if !strings.HasPrefix(path, HttpRpcPath) {
64 data := toJson(errResponse(ST_SERVICE_NOTFOUND, fmt.Sprintf("no service or method found by path='%s'", path)))
65 w.Write(data)
66 return
67 }
68 serviceName, method, err := getServiceMethod(path)
69 if err != nil {
70 data := toJson(errResponse(ST_ERROR, err.Error()))
71 w.Write(data)
72 return
73 }
74
75 sid := GetServiceId(serviceName, method)
76
77 service, ok := h.s.services[sid]
78 if !ok {
79 data := toJson(errResponse(ST_SERVICE_NOTFOUND, fmt.Sprintf("no service or method found by path='%s'", path)))
80 w.Write(data)
81 return
82 }
83
84 // authenticate
85 if h.s.authService != nil {
86 authData := getHeaderAsByte(req, Auth_key)
87 authOk := h.s.authService.Authenticate(serviceName, method, authData)
88 if !authOk {
89 data := toJson(errResponse(ST_AUTH_ERROR, errAuth.Error()))
90 w.Write(data)
91 return
92 }
93 }
94
95 if h.s.traceService != nil {
96 traceId := getHeaderAsInt64(req, Trace_Id_key)
97 spanId := getHeaderAsInt64(req, Trace_Span_key)
98 parentId := getHeaderAsInt64(req, Trace_Parent_key)
99 traceInfo := &TraceInfo{TraceId: traceId, SpanId: spanId, ParentSpanId: parentId}
100
101 value := getHeaderAsByte(req, Request_Meta_Key)
102 if value != nil {
103 value, _ = UnescapeUnicode(value)
104 metaExt := map[string]string{}
105 err := json.Unmarshal(value, &metaExt)
106 if err == nil {
107 traceInfo.RpcRequestMetaExt = metaExt
108 }
109 }
110
111 traceRetrun := h.s.traceService.Trace(serviceName, method, traceInfo)
112 if traceRetrun != nil {
113 w.Header().Set(Trace_Id_key, int64ToString(traceRetrun.TraceId))
114 w.Header().Set(Trace_Span_key, int64ToString(traceRetrun.SpanId))
115 w.Header().Set(Trace_Parent_key, int64ToString(traceRetrun.ParentSpanId))
116 if traceRetrun.RpcRequestMetaExt != nil {
117 metaData, err := json.Marshal(traceRetrun.RpcRequestMetaExt)
118 if err == nil {

Callers

nothing calls this directly

Calls 13

toJsonFunction · 0.85
errResponseFunction · 0.85
getServiceMethodFunction · 0.85
GetServiceIdFunction · 0.85
getHeaderAsByteFunction · 0.85
getHeaderAsInt64Function · 0.85
UnescapeUnicodeFunction · 0.85
int64ToStringFunction · 0.85
doServiceInvokeMethod · 0.80
WriteMethod · 0.65
AuthenticateMethod · 0.65
TraceMethod · 0.65

Tested by

no test coverage detected