github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/tunnel/server_stream.go (about)

     1  package tunnel
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  )
     8  
     9  func NewServerStream(ctx context.Context, grpcStream GRPCStream) (Stream, error) {
    10  	s := &stream{tag: "SRV", grpcStream: grpcStream, syncRatio: 8, ackWindow: 1}
    11  	m, err := s.Receive(ctx)
    12  	if err != nil {
    13  		return nil, fmt.Errorf("failed to read initial StreamInfo message: %w", err)
    14  	}
    15  	if m.Code() != streamInfo {
    16  		return nil, errors.New("initial message was not StreamInfo")
    17  	}
    18  	if err = setConnectInfo(m, s); err != nil {
    19  		return nil, fmt.Errorf("failed to parse StreamInfo message: %w", err)
    20  	}
    21  	if err = s.Send(ctx, StreamOKMessage()); err != nil {
    22  		return nil, err
    23  	}
    24  	return s, nil
    25  }