Rod Hynes 3 лет назад
Родитель
Сommit
5406af204d

+ 10 - 2
psiphon/common/quic/gquic-go/packet_packer.go

@@ -21,7 +21,11 @@ type packer interface {
 	PackConnectionClose(*wire.ConnectionCloseFrame) (*packedPacket, error)
 
 	HandleTransportParameters(*handshake.TransportParameters)
-	ChangeDestConnectionID(protocol.ConnectionID)
+
+	// [Psiphon]
+	// - Add error return value.
+	ChangeDestConnectionID(protocol.ConnectionID) error
+	// [Psiphon]
 }
 
 type packedPacket struct {
@@ -477,8 +481,12 @@ func (p *packetPacker) canSendData(encLevel protocol.EncryptionLevel) bool {
 	return encLevel == protocol.EncryptionForwardSecure
 }
 
-func (p *packetPacker) ChangeDestConnectionID(connID protocol.ConnectionID) {
+func (p *packetPacker) ChangeDestConnectionID(connID protocol.ConnectionID) error {
 	p.destConnID = connID
+
+	// [Psiphon]
+	return nil
+	// [Psiphon]
 }
 
 func (p *packetPacker) HandleTransportParameters(params *handshake.TransportParameters) {

+ 6 - 2
psiphon/common/quic/gquic-go/packet_packer_legacy.go

@@ -459,8 +459,12 @@ func (p *packetPackerLegacy) canSendData(encLevel protocol.EncryptionLevel) bool
 	return encLevel == protocol.EncryptionForwardSecure
 }
 
-func (p *packetPackerLegacy) ChangeDestConnectionID(connID protocol.ConnectionID) {
-	panic("changing connection IDs not supported by gQUIC")
+func (p *packetPackerLegacy) ChangeDestConnectionID(connID protocol.ConnectionID) error {
+	// [Psiphon]
+	// - Don't panic, since this may be invoked due to invalid input.
+	//panic("changing connection IDs not supported by gQUIC")
+	return errors.New("changing connection IDs not supported by gQUIC")
+	// [Psiphon]
 }
 
 func (p *packetPackerLegacy) HandleTransportParameters(params *handshake.TransportParameters) {

+ 7 - 1
psiphon/common/quic/gquic-go/session.go

@@ -663,7 +663,13 @@ func (s *session) handlePacketImpl(p *receivedPacket) error {
 	if s.perspective == protocol.PerspectiveClient && !s.receivedFirstPacket && hdr.IsLongHeader && !hdr.SrcConnectionID.Equal(s.destConnID) {
 		s.logger.Debugf("Received first packet. Switching destination connection ID to: %s", hdr.SrcConnectionID)
 		s.destConnID = hdr.SrcConnectionID
-		s.packer.ChangeDestConnectionID(s.destConnID)
+		err = s.packer.ChangeDestConnectionID(s.destConnID)
+		// [Psiphon]
+		// - Check error return value.
+		if err != nil {
+			return err
+		}
+		// [Psiphon]
 	}
 
 	s.receivedFirstPacket = true