@@ -45,8 +45,9 @@ proc sendStopError(
4545) {.async : (raises: [CancelledError ]).} =
4646 trace " send stop status" , status = $ code & " (" & $ ord (code) & " )"
4747 try :
48- let msg = StopMessage (msgType: StopMessageType .Status , status: Opt .some (code))
49- await stream.writeLp (encode (msg).buffer)
48+ let msg =
49+ StopMessage (msgType: Opt .some (StopMessageType .Status ), status: Opt .some (code))
50+ await stream.writeLp (encode (msg))
5051 except CancelledError as e:
5152 raise e
5253 except LPStreamError as e:
@@ -61,18 +62,17 @@ proc handleRelayedConnect(
6162 src = msg.peer.valueOr:
6263 await sendStopError (stream, MalformedMessage )
6364 return
64- limitDuration = msg.limit.duration
65- limitData = msg.limit.data
66- msg = StopMessage (msgType: StopMessageType .Status , status: Opt .some (Ok ))
67- pb = encode (msg)
65+ limitDuration = msg.limit.get (Limit ()).duration
66+ limitData = msg.limit.get (Limit ()).data
67+ msg = StopMessage (msgType: Opt .some (StopMessageType .Status ), status: Opt .some (Ok ))
6868
6969 trace " incoming relay connection" , src
7070
7171 if cl.onNewConnection == nil :
7272 await sendStopError (stream, StatusV2 .ConnectionFailed )
7373 await stream.close ()
7474 return
75- await stream.writeLp (pb.buffer )
75+ await stream.writeLp (encode (msg) )
7676 # This sound redundant but the callback could, in theory, be set to nil during
7777 # stream.writeLp so it's safer to double check
7878 if cl.onNewConnection != nil :
@@ -87,29 +87,31 @@ proc reserve*(
8787 defer :
8888 await stream.close ()
8989 let
90- pb = encode (HopMessage (msgType: HopMessageType .Reserve ))
90+ pb = encode (HopMessage (msgType: Opt . some ( HopMessageType .Reserve ) ))
9191 msg =
9292 try :
93- await stream.writeLp (pb.buffer )
93+ await stream.writeLp (pb)
9494 HopMessage .decode (await stream.readLp (RelayClientMsgSize )).tryGet ()
9595 except CancelledError as exc:
9696 raise exc
9797 except CatchableError as exc:
9898 trace " error writing or reading reservation message" , description = exc.msg
9999 raise newException (ReservationError , exc.msg)
100100
101- if msg.msgType != HopMessageType .Status :
101+ if msg.msgType.isNone or msg.msgType. get () != HopMessageType .Status :
102102 raise newException (ReservationError , " Unexpected relay response type" )
103103 if msg.status.get (UnexpectedMessage ) != Ok :
104104 raise newException (ReservationError , " Reservation failed" )
105105
106106 let reservation = msg.reservation.valueOr:
107107 raise newException (ReservationError , " Missing reservation information" )
108- if reservation.expire > int64 .high ().uint64 or
109- now ().utc > reservation.expire.int64 .fromUnix.utc:
108+ let expire = reservation.expire.valueOr:
109+ raise newException (ReservationError , " Missing expire" )
110+
111+ if expire > int64 .high ().uint64 or now ().utc > expire.int64 .fromUnix.utc:
110112 raise newException (ReservationError , " Bad expiration date" )
111113 var rsvp: Rsvp
112- rsvp.expire = reservation. expire
114+ rsvp.expire = expire
113115 rsvp.addrs = reservation.addrs
114116
115117 reservation.svoucher.withValue (sv):
@@ -119,27 +121,25 @@ proc reserve*(
119121 raise newException (ReservationError , " Invalid voucher PeerId" )
120122 rsvp.voucher = Opt .some (svoucher.data)
121123
122- rsvp.limitDuration = msg.limit.duration
123- rsvp.limitData = msg.limit.data
124+ rsvp.limitDuration = msg.limit.get ( Limit ()). duration
125+ rsvp.limitData = msg.limit.get ( Limit ()). data
124126 rsvp
125127
126128proc dialPeerV1 * (
127129 cl: RelayClient , stream: Stream , dstPeerId: PeerId , dstAddrs: seq [MultiAddress ]
128130): Future [RawConn ] {.async : (raises: [CancelledError , RelayV1DialError ]).} =
129- var
130- msg = RelayMessage (
131- msgType: Opt .some (RelayType .Hop ),
132- srcPeer: Opt .some (
133- RelayPeer (peerId: cl.switch.peerInfo.peerId, addrs: cl.switch.peerInfo.addrs)
134- ),
135- dstPeer: Opt .some (RelayPeer (peerId: dstPeerId, addrs: dstAddrs)),
136- )
137- pb = encode (msg)
131+ var msg = RelayMessage (
132+ msgType: Opt .some (RelayType .Hop ),
133+ srcPeer: Opt .some (
134+ RelayPeer (peerId: cl.switch.peerInfo.peerId, addrs: cl.switch.peerInfo.addrs)
135+ ),
136+ dstPeer: Opt .some (RelayPeer (peerId: dstPeerId, addrs: dstAddrs)),
137+ )
138138
139139 trace " Dial peer" , msgSend = msg
140140
141141 try :
142- await stream.writeLp (pb.buffer )
142+ await stream.writeLp (encode (msg) )
143143 except CancelledError as exc:
144144 raise exc
145145 except LPStreamError as exc:
@@ -188,15 +188,15 @@ proc dialPeerV2*(
188188 dstPeerId: PeerId ,
189189 dstAddrs: seq [MultiAddress ],
190190): Future [RawConn ] {.async : (raises: [RelayV2DialError , CancelledError ]).} =
191- let
192- p = Peer (peerId: dstPeerId, addrs: dstAddrs)
193- pb = encode (HopMessage (msgType: HopMessageType .Connect , peer: Opt .some (p)))
191+ let p = Peer (peerId: Opt .some (dstPeerId), addrs: dstAddrs)
194192
195193 trace " Dial peer" , p
196194
197195 let msgRcvFromRelay =
198196 try :
199- await relayConn.writeLp (pb.buffer)
197+ await relayConn.writeLp (
198+ encode (HopMessage (msgType: Opt .some (HopMessageType .Connect ), peer: Opt .some (p)))
199+ )
200200 HopMessage .decode (await relayConn.readLp (RelayClientMsgSize )).tryGet ()
201201 except CancelledError as exc:
202202 raise exc
@@ -205,13 +205,14 @@ proc dialPeerV2*(
205205 raise
206206 newException (RelayV2DialError , " Exception decoding HopMessage: " & exc.msg, exc)
207207
208- if msgRcvFromRelay.msgType != HopMessageType .Status :
208+ if msgRcvFromRelay.msgType.isNone or
209+ msgRcvFromRelay.msgType != Opt .some (HopMessageType .Status ):
209210 raise newException (RelayV2DialError , " Unexpected stop response" )
210211 if msgRcvFromRelay.status.get (UnexpectedMessage ) != Ok :
211212 trace " Relay stop failed" , description = msgRcvFromRelay.status
212213 raise newException (RelayV2DialError , " Relay stop failure" )
213- relayConn.limitDuration = msgRcvFromRelay.limit.duration
214- relayConn.limitData = msgRcvFromRelay.limit.data
214+ relayConn.limitDuration = msgRcvFromRelay.limit.get ( Limit ()). duration
215+ relayConn.limitData = msgRcvFromRelay.limit.get ( Limit ()). data
215216 return relayConn
216217
217218proc handleStopStreamV2 (
@@ -222,7 +223,7 @@ proc handleStopStreamV2(
222223 return
223224 trace " client circuit relay v2 handle stream" , msg
224225
225- if msg.msgType == StopMessageType .Connect :
226+ if msg.msgType.isSome and msg.msgType. get () == StopMessageType .Connect :
226227 await cl.handleRelayedConnect (stream, msg)
227228 else :
228229 trace " Unexpected client / relayv2 handshake" , msgType = msg.msgType
0 commit comments