func()

in server/server.go [662:699]


func (s *SecureSessionService) EndSession(ctx context.Context, req *sspb.EndSessionRequest) (*sspb.EndSessionResponse, error) {
	if err := s.verifyToken(ctx); err != nil {
		return nil, fmt.Errorf("failed to verify JWT: %w", err)
	}

	connID := base64.StdEncoding.EncodeToString(req.SessionContext)
	ch, found := s.channels[connID]

	if !found {
		return nil, fmt.Errorf("session with id: %v not found", connID)
	}

	if ch.state != ServerStateAttestationAccepted {
		return nil, fmt.Errorf("session with id: %v in unexpected state: %d. Expecting: %d", connID, ch.state, ServerStateAttestationAccepted)
	}

	ch.shim.QueueReceiveBuf(req.TlsRecords)

	buf := make([]byte, len(req.TlsRecords))
	bufLen, err := ch.conn.Read(buf)

	if err != nil {
		ch.state = ServerStateFailed
		return nil, fmt.Errorf("failed to read from tls connection : %v", err)
	}

	if !bytes.Equal(buf[:bufLen], []byte(constants.EndSessionString)) {
		ch.state = ServerStateFailed
		return nil, fmt.Errorf("End of session string mismatch")
	}

	rep := &sspb.EndSessionResponse{}

	glog.Infof("EndSession: %v session ended.", connID)

	ch.state = ServerStateEnded
	return rep, nil
}