1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
/*
*
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// Package main establishes a connection with an Echo service.
package main
import (
"context"
"flag"
"log"
"time"
"github.com/google/s2a-go"
"google.golang.org/grpc"
pb "github.com/google/s2a-go/example/proto/echo_go_proto"
)
const (
defaultTimeout = 10.0 * time.Second
)
var (
serverAddr = flag.String("server_addr", "0.0.0.0:8080", "Echo service address.")
s2aAddr = flag.String("s2a_addr", "0.0.0.0:61365", "S2A service address.")
)
func runClient(serverAddr *string) {
creds, err := s2a.NewClientCreds(&s2a.ClientOptions{
S2AAddress: *s2aAddr,
VerificationMode: s2a.ConnectToGoogle,
LocalIdentity: s2a.NewHostname("test_rsa_client_identity"),
})
if err != nil {
log.Fatalf("NewClientCreds() failed: %v", err)
}
opts := []grpc.DialOption{
grpc.WithTransportCredentials(creds),
grpc.WithReturnConnectionError(),
grpc.WithDisableRetry(),
grpc.WithBlock(),
}
conn, err := grpc.Dial(*serverAddr, opts...)
if err != nil {
log.Fatalf("Client: failed to connect: %v", err)
}
defer conn.Close()
c := pb.NewEchoClient(conn)
log.Printf("Client: connected to: %s", *serverAddr)
ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
defer cancel()
msg := "Hello S2Av2 user!"
r, err := c.Echo(ctx, &pb.EchoRequest{Msg: msg})
if err != nil {
log.Fatalf("Client: failed to send echo message: %v", err)
}
log.Printf("Client: received message from server: %s", r.GetMsg())
}
func main() {
runClient(serverAddr)
}
|