MCPcopy Create free account
hub / github.com/coder/wush / handleNextMessage

Method handleNextMessage

overlay/wasm_js.go:380–487  ·  view source on GitHub ↗
(derpPub key.NodePublic, selfPriv key.NodePrivate, peerPub key.NodePublic, msg []byte)

Source from the content-addressed store, hash-verified

378}
379
380func (r *Wasm) handleNextMessage(derpPub key.NodePublic, selfPriv key.NodePrivate, peerPub key.NodePublic, msg []byte) (resRaw []byte, nodeKey key.NodePublic, _ overlayMessage, _ error) {
381 cleartext, ok := selfPriv.OpenFrom(peerPub, msg)
382 if !ok {
383 return nil, key.NodePublic{}, overlayMessage{}, errors.New("message failed decryption")
384 }
385
386 var ovMsg overlayMessage
387 fmt.Println(string(cleartext))
388 err := json.Unmarshal(cleartext, &ovMsg)
389 if err != nil {
390 fmt.Printf("Unmarshal error: %#v\n", err)
391 panic("unmarshal node: " + err.Error())
392 }
393
394 res := overlayMessage{}
395 switch ovMsg.Typ {
396 case messageTypePing:
397 res.Typ = messageTypePong
398 case messageTypePong:
399 // do nothing
400 case messageTypeHello:
401 res.Typ = messageTypeHelloResponse
402 res.HostInfo.Username = r.username
403 res.HostInfo.Hostname = "wush.dev"
404 username := "unknown"
405 if u := ovMsg.HostInfo.Username; u != "" {
406 username = u
407 }
408 hostname := "unknown"
409 if h := ovMsg.HostInfo.Hostname; h != "" {
410 hostname = h
411 }
412 if node := r.lastNode.Load(); node != nil {
413 res.Node = *node
414 }
415 r.HumanLogf("%s Received connection request from %s", cliui.Timestamp(time.Now()), cliui.Keyword(fmt.Sprintf("%s@%s", username, hostname)))
416 // TODO: impl
417 r.onNewPeer.Invoke(map[string]any{
418 "id": js.ValueOf(derpPub.String()),
419 "name": js.ValueOf("test"),
420 "ip": js.ValueOf("1.2.3.4"),
421 "cancel": js.FuncOf(func(this js.Value, args []js.Value) any {
422 return nil
423 }),
424 })
425
426 if ovMsg.WebrtcDescription != nil {
427 r.handleWebrtcOffer(derpPub, &res, *ovMsg.WebrtcDescription)
428 }
429
430 case messageTypeHelloResponse:
431 if !ovMsg.Node.Key.IsZero() {
432 r.in <- &ovMsg.Node
433 }
434
435 if ovMsg.WebrtcDescription != nil {
436 r.onWebrtcAnswer.Invoke(js.ValueOf(derpPub.String()), map[string]any{
437 "type": js.ValueOf(ovMsg.WebrtcDescription.Type.String()),

Callers 2

ConnectMethod · 0.95
ListenOverlayDERPMethod · 0.95

Calls 4

handleWebrtcOfferMethod · 0.95
TimestampFunction · 0.92
KeywordFunction · 0.92
CodeFunction · 0.92

Tested by

no test coverage detected