From 95a227b314b078c95fbcf4dcecec38e68bbfded9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Sat, 1 Jun 2024 23:41:40 +0200 Subject: [PATCH 1/6] check if connection is successful --- client/client.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/client/client.go b/client/client.go index bb06952..aa364b7 100644 --- a/client/client.go +++ b/client/client.go @@ -23,7 +23,8 @@ import ( ) type InitiationInfo struct { - otherSideNick string + otherSideNick string + punchLaddrUsed string } type Context struct { @@ -150,6 +151,7 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er return nil, nil } + cliCtx.initiations[idx].punchLaddrUsed = conn.LocalAddr().String() enc := json.NewEncoder(conn) err = enc.Encode(cm.PunchRequest{PunchCode: startChatDReq.PunchCode}) @@ -159,6 +161,8 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er } logger.Debug("punch request sent!") + conn.Close() + logger.Debug("UDP 'connection' closed", "laddr", conn.LocalAddr()) return nil, nil } @@ -174,6 +178,62 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re "nick", startChatFinishReq.OtherSideNickname, "addr", startChatFinishReq.OtherSideAddress) + ctx.initiationsLock.RLock() + defer ctx.initiationsLock.RUnlock() + + idx := slices.IndexFunc(ctx.initiations, func(i InitiationInfo) bool { + return i.otherSideNick == startChatFinishReq.OtherSideNickname + }) + relatedInitiation := ctx.initiations[idx] + + logger.Debug("punch laddr used", "laddr", relatedInitiation.punchLaddrUsed) + + logger.Debug("resolving udp addrs") + laddr, err := net.ResolveUDPAddr("udp", relatedInitiation.punchLaddrUsed) + if err != nil { + logger.Error(err) + return nil, nil + } + logger.Debug("resolved laddr", "laddr", laddr.String()) + + raddr, err := net.ResolveUDPAddr("udp", startChatFinishReq.OtherSideAddress) + if err != nil { + logger.Error(err) + return nil, nil + } + logger.Debug("resolved raddr", "raddr", raddr.String()) + + time.Sleep(time.Second * 3) + + logger.Debug("dialing udp") + conn, err := net.DialUDP("udp", laddr, raddr) + if err != nil { + logger.Error(err) + return nil, nil + } + log.Debugf("dialed udp L%s<->R%s", laddr.String(), raddr.String()) + + for i := 0; i < 3; i++ { + log.Debugf("writing Hello to other peer") + _, err = conn.Write([]byte("Hello")) + if err != nil { + logger.Error(err) + return nil, nil + } + + log.Debug("waiting for message from other peer") + bb := make([]byte, 1024) + //conn.SetDeadline(time.Now().Add(time.Second * 5)) + n, _, err := conn.ReadFrom(bb) + if err != nil { + logger.Error(err) + return nil, nil + } + bb = bb[:n] + logger.Debug("got info from other peer", "info", string(bb)) + time.Sleep(time.Second) + } + return nil, nil } @@ -445,7 +505,7 @@ func RunClient(settings common.ClientSettings) { cliCtx.initiationsLock.RLock() for _, i := range cliCtx.initiations { - logger.Debugf("with %s", i.otherSideNick) + logger.Debugf("with %+v", i) } cliCtx.initiationsLock.RUnlock() } else if cmdName == "startchatc" { From 15babe60d1ea632add529754e9fafb8ded8cd015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Sun, 2 Jun 2024 00:24:39 +0200 Subject: [PATCH 2/6] Removed unecessary sleep --- client/client.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/client.go b/client/client.go index aa364b7..e471d94 100644 --- a/client/client.go +++ b/client/client.go @@ -202,9 +202,6 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re return nil, nil } logger.Debug("resolved raddr", "raddr", raddr.String()) - - time.Sleep(time.Second * 3) - logger.Debug("dialing udp") conn, err := net.DialUDP("udp", laddr, raddr) if err != nil { From 694a1d810e5db6c8fc4205957b8f0f47691f3cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Sat, 1 Jun 2024 23:41:40 +0200 Subject: [PATCH 3/6] Check if connection is successful --- client/client.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/client/client.go b/client/client.go index bb06952..aa364b7 100644 --- a/client/client.go +++ b/client/client.go @@ -23,7 +23,8 @@ import ( ) type InitiationInfo struct { - otherSideNick string + otherSideNick string + punchLaddrUsed string } type Context struct { @@ -150,6 +151,7 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er return nil, nil } + cliCtx.initiations[idx].punchLaddrUsed = conn.LocalAddr().String() enc := json.NewEncoder(conn) err = enc.Encode(cm.PunchRequest{PunchCode: startChatDReq.PunchCode}) @@ -159,6 +161,8 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er } logger.Debug("punch request sent!") + conn.Close() + logger.Debug("UDP 'connection' closed", "laddr", conn.LocalAddr()) return nil, nil } @@ -174,6 +178,62 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re "nick", startChatFinishReq.OtherSideNickname, "addr", startChatFinishReq.OtherSideAddress) + ctx.initiationsLock.RLock() + defer ctx.initiationsLock.RUnlock() + + idx := slices.IndexFunc(ctx.initiations, func(i InitiationInfo) bool { + return i.otherSideNick == startChatFinishReq.OtherSideNickname + }) + relatedInitiation := ctx.initiations[idx] + + logger.Debug("punch laddr used", "laddr", relatedInitiation.punchLaddrUsed) + + logger.Debug("resolving udp addrs") + laddr, err := net.ResolveUDPAddr("udp", relatedInitiation.punchLaddrUsed) + if err != nil { + logger.Error(err) + return nil, nil + } + logger.Debug("resolved laddr", "laddr", laddr.String()) + + raddr, err := net.ResolveUDPAddr("udp", startChatFinishReq.OtherSideAddress) + if err != nil { + logger.Error(err) + return nil, nil + } + logger.Debug("resolved raddr", "raddr", raddr.String()) + + time.Sleep(time.Second * 3) + + logger.Debug("dialing udp") + conn, err := net.DialUDP("udp", laddr, raddr) + if err != nil { + logger.Error(err) + return nil, nil + } + log.Debugf("dialed udp L%s<->R%s", laddr.String(), raddr.String()) + + for i := 0; i < 3; i++ { + log.Debugf("writing Hello to other peer") + _, err = conn.Write([]byte("Hello")) + if err != nil { + logger.Error(err) + return nil, nil + } + + log.Debug("waiting for message from other peer") + bb := make([]byte, 1024) + //conn.SetDeadline(time.Now().Add(time.Second * 5)) + n, _, err := conn.ReadFrom(bb) + if err != nil { + logger.Error(err) + return nil, nil + } + bb = bb[:n] + logger.Debug("got info from other peer", "info", string(bb)) + time.Sleep(time.Second) + } + return nil, nil } @@ -445,7 +505,7 @@ func RunClient(settings common.ClientSettings) { cliCtx.initiationsLock.RLock() for _, i := range cliCtx.initiations { - logger.Debugf("with %s", i.otherSideNick) + logger.Debugf("with %+v", i) } cliCtx.initiationsLock.RUnlock() } else if cmdName == "startchatc" { From bee6160547677c44eac88e687763ed0523fea6a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Sun, 2 Jun 2024 00:24:39 +0200 Subject: [PATCH 4/6] Remove unecessary sleep --- client/client.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/client.go b/client/client.go index aa364b7..e471d94 100644 --- a/client/client.go +++ b/client/client.go @@ -202,9 +202,6 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re return nil, nil } logger.Debug("resolved raddr", "raddr", raddr.String()) - - time.Sleep(time.Second * 3) - logger.Debug("dialing udp") conn, err := net.DialUDP("udp", laddr, raddr) if err != nil { From ddb3bb641c06f5d6b0530e77caee72e41b3b5301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Sun, 2 Jun 2024 02:29:26 +0200 Subject: [PATCH 5/6] P2P connection works, tested --- client/client.go | 68 +++++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/client/client.go b/client/client.go index e471d94..1e7db82 100644 --- a/client/client.go +++ b/client/client.go @@ -24,7 +24,7 @@ import ( type InitiationInfo struct { otherSideNick string - punchLaddrUsed string + punchLaddrUsed *net.UDPAddr } type Context struct { @@ -145,13 +145,23 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er return nil, nil } - conn, err := net.Dial("udp", cliCtx.settings.UdpAddr) + raddr, err := net.ResolveUDPAddr("udp", cliCtx.settings.UdpAddr) + if err != nil { + logger.Error(err) + return nil, nil + } + + conn, err := net.DialUDP("udp", nil, raddr) + defer func() { + conn.Close() + logger.Debug("UDP 'connection' closed", "laddr", conn.LocalAddr()) + }() if err != nil { logger.Error("error udp dialing for punch", err) return nil, nil } - cliCtx.initiations[idx].punchLaddrUsed = conn.LocalAddr().String() + cliCtx.initiations[idx].punchLaddrUsed, _ = conn.LocalAddr().(*net.UDPAddr) enc := json.NewEncoder(conn) err = enc.Encode(cm.PunchRequest{PunchCode: startChatDReq.PunchCode}) @@ -161,8 +171,6 @@ func (cliCtx *Context) handleStartChatD(reqFrame cm.RFrame) (res cm.Response, er } logger.Debug("punch request sent!") - conn.Close() - logger.Debug("UDP 'connection' closed", "laddr", conn.LocalAddr()) return nil, nil } @@ -188,14 +196,6 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re logger.Debug("punch laddr used", "laddr", relatedInitiation.punchLaddrUsed) - logger.Debug("resolving udp addrs") - laddr, err := net.ResolveUDPAddr("udp", relatedInitiation.punchLaddrUsed) - if err != nil { - logger.Error(err) - return nil, nil - } - logger.Debug("resolved laddr", "laddr", laddr.String()) - raddr, err := net.ResolveUDPAddr("udp", startChatFinishReq.OtherSideAddress) if err != nil { logger.Error(err) @@ -203,31 +203,45 @@ func (ctx *Context) handleChatStartFinish(reqFrame common.RFrame) (res common.Re } logger.Debug("resolved raddr", "raddr", raddr.String()) logger.Debug("dialing udp") - conn, err := net.DialUDP("udp", laddr, raddr) + logger.Debug("other test dial") + + raddr2, _ := net.ResolveUDPAddr("udp", "krzyzanowski.dev:8081") + conn2, err2 := net.DialUDP("udp", relatedInitiation.punchLaddrUsed, raddr2) + if err2 != nil { + logger.Error(err2) + } else { + conn2.Close() + } + logger.Debug("DIALED") + + conn, err := net.DialUDP("udp", relatedInitiation.punchLaddrUsed, raddr) if err != nil { logger.Error(err) return nil, nil } - log.Debugf("dialed udp L%s<->R%s", laddr.String(), raddr.String()) + logger.Debugf("dialed udp L%s<->R%s", relatedInitiation.punchLaddrUsed.String(), raddr.String()) - for i := 0; i < 3; i++ { - log.Debugf("writing Hello to other peer") + go func() { + logger.Debug("waiting for message from other peer") + bb := make([]byte, 1024) + conn.SetDeadline(time.Now().Add(time.Second * 5)) + n, _, err := conn.ReadFrom(bb) + if err != nil { + logger.Error(err) + return + } + bb = bb[:n] + logger.Debug("got info from other peer", "info", string(bb)) + }() + + for i := 0; i < 5; i++ { + logger.Debugf("writing Hello to other peer") _, err = conn.Write([]byte("Hello")) if err != nil { logger.Error(err) return nil, nil } - log.Debug("waiting for message from other peer") - bb := make([]byte, 1024) - //conn.SetDeadline(time.Now().Add(time.Second * 5)) - n, _, err := conn.ReadFrom(bb) - if err != nil { - logger.Error(err) - return nil, nil - } - bb = bb[:n] - logger.Debug("got info from other peer", "info", string(bb)) time.Sleep(time.Second) } From fff246214c12f4e0c18b96a4bc82968ad3f60e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Mon, 3 Jun 2024 20:42:23 +0000 Subject: [PATCH 6/6] Accept all origins to allow client to connect --- server/server.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/server.go b/server/server.go index 4dc6cf6..924e041 100644 --- a/server/server.go +++ b/server/server.go @@ -558,7 +558,11 @@ func testEcho(hdlCtx *HandlerContext) { } func (ctx *Context) wsapiHandler(w http.ResponseWriter, r *http.Request) { - upgrader := websocket.Upgrader{} + upgrader := websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true // Allow all origins + }, + } conn, err := upgrader.Upgrade(w, r, nil) if err != nil {