MCPcopy Create free account
hub / github.com/coder/coder / handleRPC

Method handleRPC

vpn/tunnel.go:122–173  ·  view source on GitHub ↗

handleRPC handles unary RPCs from the manager, sending a reply back to the manager.

(req *request[*TunnelMessage, *ManagerMessage])

Source from the content-addressed store, hash-verified

120
121// handleRPC handles unary RPCs from the manager, sending a reply back to the manager.
122func (t *Tunnel) handleRPC(req *request[*TunnelMessage, *ManagerMessage]) {
123 resp := &TunnelMessage{}
124 resp.Rpc = &RPC{ResponseTo: req.msg.Rpc.MsgId}
125 switch msg := req.msg.GetMsg().(type) {
126 case *ManagerMessage_GetPeerUpdate:
127 err := t.updater.sendUpdateResponse(req)
128 if err != nil {
129 t.logger.Error(t.ctx, "failed to send peer update", slog.Error(err))
130 }
131 // Reply has already been sent.
132 return
133 case *ManagerMessage_Start:
134 startReq := msg.Start
135 t.logger.Info(t.ctx, "starting CoderVPN tunnel",
136 slog.F("url", startReq.CoderUrl),
137 slog.F("tunnel_fd", startReq.TunnelFileDescriptor),
138 )
139 err := t.start(startReq)
140 var errStr string
141 if err != nil {
142 t.logger.Error(t.ctx, "failed to start tunnel", slog.Error(err))
143 errStr = err.Error()
144 }
145 resp.Msg = &TunnelMessage_Start{
146 Start: &StartResponse{
147 Success: err == nil,
148 ErrorMessage: errStr,
149 },
150 }
151 case *ManagerMessage_Stop:
152 t.logger.Info(t.ctx, "stopping CoderVPN tunnel")
153 err := t.stop(msg.Stop)
154 var errStr string
155 if err != nil {
156 t.logger.Error(t.ctx, "failed to stop tunnel", slog.Error(err))
157 errStr = err.Error()
158 } else {
159 t.logger.Info(t.ctx, "coderVPN tunnel stopped")
160 }
161 resp.Msg = &TunnelMessage_Stop{
162 Stop: &StopResponse{
163 Success: err == nil,
164 ErrorMessage: errStr,
165 },
166 }
167 default:
168 t.logger.Warn(t.ctx, "unhandled manager request", slog.F("request", msg))
169 }
170 if err := req.sendReply(resp); err != nil {
171 t.logger.Debug(t.ctx, "failed to send RPC reply", slog.Error(err))
172 }
173}
174
175type NetworkStack struct {
176 WireguardMonitor *netmon.Monitor

Callers 1

requestLoopMethod · 0.95

Calls 7

startMethod · 0.95
stopMethod · 0.95
sendUpdateResponseMethod · 0.80
sendReplyMethod · 0.80
GetMsgMethod · 0.45
ErrorMethod · 0.45
InfoMethod · 0.45

Tested by

no test coverage detected