From d27eb317aae4a71dbc451b2baa232ea51b55f7af Mon Sep 17 00:00:00 2001 From: Mikhail Bragin Date: Wed, 21 Jul 2021 20:23:11 +0200 Subject: [PATCH] update signal gRpc, enable TLS and add keepalive params (#62) * chore: update signal gRpc * chore: add Signal keep alive params and policy * feature: add signal TLS support * refactor: move signal Dockerfile to the corresponding folder Co-authored-by: braginini --- .goreleaser.yaml | 4 +- cmd/root.go | 33 ++ cmd/signal.go | 43 +- Dockerfile => signal/Dockerfile | 2 - signal/README.md | 27 +- signal/proto/signalexchange.pb.go | 608 ++++++++++++------------- signal/proto/signalexchange.proto | 2 +- signal/proto/signalexchange_grpc.pb.go | 174 +++++++ signal/signal.go | 1 + 9 files changed, 565 insertions(+), 329 deletions(-) rename Dockerfile => signal/Dockerfile (73%) create mode 100644 signal/proto/signalexchange_grpc.pb.go diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 14ef37b43..586591de3 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -41,7 +41,7 @@ dockers: - wiretrustee/wiretrustee:signal-{{ .Version }}-amd64 goarch: amd64 use: buildx - dockerfile: Dockerfile + dockerfile: signal/Dockerfile build_flag_templates: - "--platform=linux/amd64" - "--label=org.opencontainers.image.created={{.Date}}" @@ -54,7 +54,7 @@ dockers: - wiretrustee/wiretrustee:signal-{{ .Version }}-arm64v8 goarch: arm64 use: buildx - dockerfile: Dockerfile + dockerfile: signal/Dockerfile build_flag_templates: - "--platform=linux/arm64" - "--label=org.opencontainers.image.created={{.Date}}" diff --git a/cmd/root.go b/cmd/root.go index 698f1a576..ef1b6f0ee 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,11 +1,16 @@ package cmd import ( + "crypto/tls" "fmt" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "golang.org/x/crypto/acme/autocert" + "google.golang.org/grpc/credentials" + "net/http" "os" "os/signal" + "path/filepath" "runtime" ) @@ -74,3 +79,31 @@ func InitLog(logLevel string) { } log.SetLevel(level) } + +func enableLetsEncrypt(datadir string, letsencryptDomain string) credentials.TransportCredentials { + certDir := filepath.Join(datadir, "letsencrypt") + + if _, err := os.Stat(certDir); os.IsNotExist(err) { + err = os.MkdirAll(certDir, os.ModeDir) + if err != nil { + log.Fatalf("failed creating Let's encrypt certdir: %s: %v", certDir, err) + } + } + + log.Infof("running with Let's encrypt with domain %s. Cert will be stored in %s", letsencryptDomain, certDir) + + certManager := autocert.Manager{ + Prompt: autocert.AcceptTOS, + Cache: autocert.DirCache(certDir), + HostPolicy: autocert.HostWhitelist(letsencryptDomain), + } + + // listener to handle Let's encrypt certificate challenge + go func() { + if err := http.Serve(certManager.Listener(), certManager.HTTPHandler(nil)); err != nil { + log.Fatalf("failed to serve letsencrypt handler: %v", err) + } + }() + + return credentials.NewTLS(&tls.Config{GetCertificate: certManager.GetCertificate}) +} diff --git a/cmd/signal.go b/cmd/signal.go index dfca307c4..487987032 100644 --- a/cmd/signal.go +++ b/cmd/signal.go @@ -8,11 +8,28 @@ import ( sig "github.com/wiretrustee/wiretrustee/signal" sigProto "github.com/wiretrustee/wiretrustee/signal/proto" "google.golang.org/grpc" + "google.golang.org/grpc/keepalive" "net" + "os" + "time" ) var ( - signalPort int + signalPort int + signalLetsencryptDomain string + signalDataDir string + + signalKaep = grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{ + MinTime: 5 * time.Second, + PermitWithoutStream: true, + }) + + signalKasp = grpc.KeepaliveParams(keepalive.ServerParameters{ + MaxConnectionIdle: 15 * time.Second, + MaxConnectionAgeGrace: 5 * time.Second, + Time: 5 * time.Second, + Timeout: 2 * time.Second, + }) signalCmd = &cobra.Command{ Use: "signal", @@ -20,6 +37,22 @@ var ( Run: func(cmd *cobra.Command, args []string) { flag.Parse() + if _, err := os.Stat(signalDataDir); os.IsNotExist(err) { + err = os.MkdirAll(signalDataDir, os.ModeDir) + if err != nil { + log.Fatalf("failed creating datadir: %s: %v", signalDataDir, err) + } + } + + var opts []grpc.ServerOption + if mgmtLetsencryptDomain != "" { + transportCredentials := enableLetsEncrypt(signalDataDir, signalLetsencryptDomain) + opts = append(opts, grpc.Creds(transportCredentials)) + } + + opts = append(opts, signalKaep, signalKasp) + grpcServer := grpc.NewServer(opts...) + lis, err := net.Listen("tcp", fmt.Sprintf(":%d", signalPort)) if err != nil { log.Fatalf("failed to listen: %v", err) @@ -28,8 +61,7 @@ var ( if err != nil { log.Fatalf("failed to listen: %v", err) } - var opts []grpc.ServerOption - grpcServer := grpc.NewServer(opts...) + sigProto.RegisterSignalExchangeServer(grpcServer, sig.NewServer()) log.Printf("started server: localhost:%v", signalPort) if err := grpcServer.Serve(lis); err != nil { @@ -37,11 +69,14 @@ var ( } SetupCloseHandler() - select {} + <-stopCh + log.Println("Receive signal to stop running the Signal server") }, } ) func init() { signalCmd.PersistentFlags().IntVar(&signalPort, "port", 10000, "Server port to listen on (e.g. 10000)") + signalCmd.Flags().StringVar(&signalDataDir, "datadir", "/var/lib/wiretrustee/", "server data directory location") + signalCmd.Flags().StringVar(&signalLetsencryptDomain, "letsencrypt-domain", "", "a domain to issue Let's Encrypt certificate for. Enables TLS using Let's Encrypt. Will fetch and renew certificate, and run the server with TLS") } diff --git a/Dockerfile b/signal/Dockerfile similarity index 73% rename from Dockerfile rename to signal/Dockerfile index 4c39a6f67..9a6b74218 100644 --- a/Dockerfile +++ b/signal/Dockerfile @@ -1,5 +1,3 @@ FROM gcr.io/distroless/base:debug -EXPOSE 10000 ENTRYPOINT [ "/go/bin/wiretrustee","signal" ] -CMD ["--log-level","DEBUG"] COPY wiretrustee /go/bin/wiretrustee \ No newline at end of file diff --git a/signal/README.md b/signal/README.md index 277882d5b..657e3fdc1 100644 --- a/signal/README.md +++ b/signal/README.md @@ -1,23 +1,22 @@ # Wiretrustee Signal Server -This is a Wiretrustee signal-exchange server and client library to exchange connection information between Wiretrustee Trusted Device and Wiretrustee Hub +This is a Wiretrustee signal-exchange server and client library to exchange connection information between Wiretrustee peers -The project uses gRPC library and defines service in protobuf file located in: - ```proto/signal_exchange.proto``` +The project uses gRpc library and defines service in protobuf file located in: + ```proto/signalexchange.proto``` - To build the project you have to do the following things. +To build the project you have to do the following things. -Install protobuf version 3 (by default v3 is installed on ubuntu 20.04. On previous versions it is proto 2): +Install golang gRpc tools: +```bash +#!/bin/bash +go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 +go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1 +``` + +Generate gRpc code: ```bash #!/bin/bash -sudo apt install protoc-gen-go -sudo apt install golang-goprotobuf-dev -``` - -Generate gRPC code: - -```bash -#!/bin/bash -protoc -I proto/ proto/signalexchange.proto --go_out=plugins=grpc:proto +protoc -I proto/ proto/signalexchange.proto --go_out=. --go-grpc_out=. ``` diff --git a/signal/proto/signalexchange.pb.go b/signal/proto/signalexchange.pb.go index 4c1ed6f69..cac490da1 100644 --- a/signal/proto/signalexchange.pb.go +++ b/signal/proto/signalexchange.pb.go @@ -1,29 +1,25 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.12.4 // source: signalexchange.proto package proto import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" //nolint _ "github.com/golang/protobuf/protoc-gen-go/descriptor" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Message type type Body_Type int32 @@ -34,140 +30,177 @@ const ( Body_CANDIDATE Body_Type = 2 ) -var Body_Type_name = map[int32]string{ - 0: "OFFER", - 1: "ANSWER", - 2: "CANDIDATE", -} +// Enum value maps for Body_Type. +var ( + Body_Type_name = map[int32]string{ + 0: "OFFER", + 1: "ANSWER", + 2: "CANDIDATE", + } + Body_Type_value = map[string]int32{ + "OFFER": 0, + "ANSWER": 1, + "CANDIDATE": 2, + } +) -var Body_Type_value = map[string]int32{ - "OFFER": 0, - "ANSWER": 1, - "CANDIDATE": 2, +func (x Body_Type) Enum() *Body_Type { + p := new(Body_Type) + *p = x + return p } func (x Body_Type) String() string { - return proto.EnumName(Body_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (Body_Type) Descriptor() protoreflect.EnumDescriptor { + return file_signalexchange_proto_enumTypes[0].Descriptor() +} + +func (Body_Type) Type() protoreflect.EnumType { + return &file_signalexchange_proto_enumTypes[0] +} + +func (x Body_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Body_Type.Descriptor instead. func (Body_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bf680d70b8e3473f, []int{2, 0} + return file_signalexchange_proto_rawDescGZIP(), []int{2, 0} } // Used for sending through signal. // The body of this message is the Body message encrypted with the Wireguard private key and the remote Peer key type EncryptedMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Wireguard public key Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` // Wireguard public key of the remote peer to connect to RemoteKey string `protobuf:"bytes,3,opt,name=remoteKey,proto3" json:"remoteKey,omitempty"` // encrypted message Body - Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` } -func (m *EncryptedMessage) Reset() { *m = EncryptedMessage{} } -func (m *EncryptedMessage) String() string { return proto.CompactTextString(m) } -func (*EncryptedMessage) ProtoMessage() {} +func (x *EncryptedMessage) Reset() { + *x = EncryptedMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_signalexchange_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EncryptedMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EncryptedMessage) ProtoMessage() {} + +func (x *EncryptedMessage) ProtoReflect() protoreflect.Message { + mi := &file_signalexchange_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EncryptedMessage.ProtoReflect.Descriptor instead. func (*EncryptedMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_bf680d70b8e3473f, []int{0} + return file_signalexchange_proto_rawDescGZIP(), []int{0} } -func (m *EncryptedMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EncryptedMessage.Unmarshal(m, b) -} -func (m *EncryptedMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EncryptedMessage.Marshal(b, m, deterministic) -} -func (m *EncryptedMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_EncryptedMessage.Merge(m, src) -} -func (m *EncryptedMessage) XXX_Size() int { - return xxx_messageInfo_EncryptedMessage.Size(m) -} -func (m *EncryptedMessage) XXX_DiscardUnknown() { - xxx_messageInfo_EncryptedMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_EncryptedMessage proto.InternalMessageInfo - -func (m *EncryptedMessage) GetKey() string { - if m != nil { - return m.Key +func (x *EncryptedMessage) GetKey() string { + if x != nil { + return x.Key } return "" } -func (m *EncryptedMessage) GetRemoteKey() string { - if m != nil { - return m.RemoteKey +func (x *EncryptedMessage) GetRemoteKey() string { + if x != nil { + return x.RemoteKey } return "" } -func (m *EncryptedMessage) GetBody() []byte { - if m != nil { - return m.Body +func (x *EncryptedMessage) GetBody() []byte { + if x != nil { + return x.Body } return nil } // A decrypted representation of the EncryptedMessage. Used locally before/after encryption type Message struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Wireguard public key Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` // Wireguard public key of the remote peer to connect to - RemoteKey string `protobuf:"bytes,3,opt,name=remoteKey,proto3" json:"remoteKey,omitempty"` - Body *Body `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RemoteKey string `protobuf:"bytes,3,opt,name=remoteKey,proto3" json:"remoteKey,omitempty"` + Body *Body `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` } -func (m *Message) Reset() { *m = Message{} } -func (m *Message) String() string { return proto.CompactTextString(m) } -func (*Message) ProtoMessage() {} +func (x *Message) Reset() { + *x = Message{} + if protoimpl.UnsafeEnabled { + mi := &file_signalexchange_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Message) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Message) ProtoMessage() {} + +func (x *Message) ProtoReflect() protoreflect.Message { + mi := &file_signalexchange_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_bf680d70b8e3473f, []int{1} + return file_signalexchange_proto_rawDescGZIP(), []int{1} } -func (m *Message) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Message.Unmarshal(m, b) -} -func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Message.Marshal(b, m, deterministic) -} -func (m *Message) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message.Merge(m, src) -} -func (m *Message) XXX_Size() int { - return xxx_messageInfo_Message.Size(m) -} -func (m *Message) XXX_DiscardUnknown() { - xxx_messageInfo_Message.DiscardUnknown(m) -} - -var xxx_messageInfo_Message proto.InternalMessageInfo - -func (m *Message) GetKey() string { - if m != nil { - return m.Key +func (x *Message) GetKey() string { + if x != nil { + return x.Key } return "" } -func (m *Message) GetRemoteKey() string { - if m != nil { - return m.RemoteKey +func (x *Message) GetRemoteKey() string { + if x != nil { + return x.RemoteKey } return "" } -func (m *Message) GetBody() *Body { - if m != nil { - return m.Body +func (x *Message) GetBody() *Body { + if x != nil { + return x.Body } return nil } @@ -175,234 +208,197 @@ func (m *Message) GetBody() *Body { // Actual body of the message that can contain credentials (type OFFER/ANSWER) or connection Candidate // This part will be encrypted type Body struct { - Type Body_Type `protobuf:"varint,1,opt,name=type,proto3,enum=signalexchange.Body_Type" json:"type,omitempty"` - Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type Body_Type `protobuf:"varint,1,opt,name=type,proto3,enum=signalexchange.Body_Type" json:"type,omitempty"` + Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` } -func (m *Body) Reset() { *m = Body{} } -func (m *Body) String() string { return proto.CompactTextString(m) } -func (*Body) ProtoMessage() {} +func (x *Body) Reset() { + *x = Body{} + if protoimpl.UnsafeEnabled { + mi := &file_signalexchange_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Body) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Body) ProtoMessage() {} + +func (x *Body) ProtoReflect() protoreflect.Message { + mi := &file_signalexchange_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Body.ProtoReflect.Descriptor instead. func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_bf680d70b8e3473f, []int{2} + return file_signalexchange_proto_rawDescGZIP(), []int{2} } -func (m *Body) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Body.Unmarshal(m, b) -} -func (m *Body) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Body.Marshal(b, m, deterministic) -} -func (m *Body) XXX_Merge(src proto.Message) { - xxx_messageInfo_Body.Merge(m, src) -} -func (m *Body) XXX_Size() int { - return xxx_messageInfo_Body.Size(m) -} -func (m *Body) XXX_DiscardUnknown() { - xxx_messageInfo_Body.DiscardUnknown(m) -} - -var xxx_messageInfo_Body proto.InternalMessageInfo - -func (m *Body) GetType() Body_Type { - if m != nil { - return m.Type +func (x *Body) GetType() Body_Type { + if x != nil { + return x.Type } return Body_OFFER } -func (m *Body) GetPayload() string { - if m != nil { - return m.Payload +func (x *Body) GetPayload() string { + if x != nil { + return x.Payload } return "" } -func init() { - proto.RegisterEnum("signalexchange.Body_Type", Body_Type_name, Body_Type_value) - proto.RegisterType((*EncryptedMessage)(nil), "signalexchange.EncryptedMessage") - proto.RegisterType((*Message)(nil), "signalexchange.Message") - proto.RegisterType((*Body)(nil), "signalexchange.Body") +var File_signalexchange_proto protoreflect.FileDescriptor + +var file_signalexchange_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x63, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x7d, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x42, 0x6f, 0x64, + 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, + 0x0a, 0x05, 0x4f, 0x46, 0x46, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x4e, 0x53, + 0x57, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x44, 0x49, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x02, 0x32, 0xb9, 0x01, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, + 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x6c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x42, 0x08, 0x5a, 0x06, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } -func init() { proto.RegisterFile("signalexchange.proto", fileDescriptor_bf680d70b8e3473f) } +var ( + file_signalexchange_proto_rawDescOnce sync.Once + file_signalexchange_proto_rawDescData = file_signalexchange_proto_rawDesc +) -var fileDescriptor_bf680d70b8e3473f = []byte{ - // 319 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0x4f, 0x4b, 0xfb, 0x40, - 0x10, 0xed, 0xb6, 0xf9, 0xb5, 0x64, 0x7e, 0xb6, 0x84, 0xa1, 0x87, 0x58, 0x3c, 0x84, 0x9c, 0x72, - 0xd0, 0x54, 0xea, 0xd1, 0x53, 0xff, 0xa4, 0x20, 0x6a, 0x85, 0xa4, 0x28, 0x7a, 0x4b, 0x93, 0x31, - 0x16, 0xdb, 0x6c, 0xd8, 0xac, 0xe0, 0x1e, 0xfc, 0x60, 0x7e, 0x3b, 0xe9, 0xb6, 0xa2, 0x06, 0x41, - 0x10, 0x4f, 0x3b, 0xf3, 0xf6, 0xcd, 0x7b, 0x6f, 0x97, 0x81, 0x6e, 0xb9, 0xcc, 0xf2, 0x78, 0x45, - 0xcf, 0xc9, 0x43, 0x9c, 0x67, 0xe4, 0x17, 0x82, 0x4b, 0x8e, 0x9d, 0xaf, 0x68, 0xcf, 0xc9, 0x38, - 0xcf, 0x56, 0xd4, 0xd7, 0xb7, 0x8b, 0xa7, 0xfb, 0x7e, 0x4a, 0x65, 0x22, 0x96, 0x85, 0xe4, 0x62, - 0x3b, 0xe1, 0x5e, 0x83, 0x15, 0xe4, 0x89, 0x50, 0x85, 0xa4, 0xf4, 0x92, 0xca, 0x32, 0xce, 0x08, - 0x2d, 0x68, 0x3c, 0x92, 0xb2, 0xeb, 0x0e, 0xf3, 0xcc, 0x70, 0x53, 0xe2, 0x01, 0x98, 0x82, 0xd6, - 0x5c, 0xd2, 0x39, 0x29, 0xbb, 0xa1, 0xf1, 0x0f, 0x00, 0x11, 0x8c, 0x05, 0x4f, 0x95, 0x6d, 0x38, - 0xcc, 0xdb, 0x0b, 0x75, 0xed, 0x26, 0xd0, 0xfa, 0xad, 0x9c, 0xf7, 0x49, 0xee, 0xff, 0xa0, 0xeb, - 0x57, 0x5e, 0x3a, 0xe2, 0xa9, 0xda, 0x99, 0xbc, 0x80, 0xb1, 0xe9, 0xf0, 0x08, 0x0c, 0xa9, 0x0a, - 0xb2, 0x99, 0xc3, 0xbc, 0xce, 0x60, 0xff, 0xbb, 0x09, 0x7f, 0xae, 0x0a, 0x0a, 0x35, 0x0d, 0x6d, - 0x68, 0x15, 0xb1, 0x5a, 0xf1, 0x38, 0xdd, 0x85, 0x7a, 0x6f, 0xdd, 0x43, 0x30, 0x36, 0x3c, 0x34, - 0xe1, 0xdf, 0xd5, 0x74, 0x1a, 0x84, 0x56, 0x0d, 0x01, 0x9a, 0xc3, 0x59, 0x74, 0x13, 0x84, 0x16, - 0xc3, 0x36, 0x98, 0xe3, 0xe1, 0x6c, 0x72, 0x36, 0x19, 0xce, 0x03, 0xab, 0x3e, 0x78, 0x65, 0xd0, - 0x89, 0xb4, 0x55, 0xb0, 0xb3, 0xc2, 0x0b, 0x30, 0x22, 0xca, 0x53, 0x74, 0xaa, 0x19, 0xaa, 0x9f, - 0xdc, 0xfb, 0x91, 0xe1, 0xd6, 0xf0, 0x16, 0xda, 0x63, 0x9e, 0xe7, 0x94, 0xc8, 0x48, 0x0a, 0x8a, - 0xd7, 0x7f, 0x23, 0xeb, 0xb1, 0x63, 0x36, 0x32, 0xef, 0x5a, 0xfe, 0xe9, 0x76, 0x2d, 0x9a, 0xfa, - 0x38, 0x79, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xb5, 0xbf, 0xeb, 0x53, 0x02, 0x00, 0x00, +func file_signalexchange_proto_rawDescGZIP() []byte { + file_signalexchange_proto_rawDescOnce.Do(func() { + file_signalexchange_proto_rawDescData = protoimpl.X.CompressGZIP(file_signalexchange_proto_rawDescData) + }) + return file_signalexchange_proto_rawDescData } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// SignalExchangeClient is the client API for SignalExchange service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type SignalExchangeClient interface { - // Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer) - Send(ctx context.Context, in *EncryptedMessage, opts ...grpc.CallOption) (*EncryptedMessage, error) - // Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer) - ConnectStream(ctx context.Context, opts ...grpc.CallOption) (SignalExchange_ConnectStreamClient, error) +var file_signalexchange_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_signalexchange_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_signalexchange_proto_goTypes = []interface{}{ + (Body_Type)(0), // 0: signalexchange.Body.Type + (*EncryptedMessage)(nil), // 1: signalexchange.EncryptedMessage + (*Message)(nil), // 2: signalexchange.Message + (*Body)(nil), // 3: signalexchange.Body +} +var file_signalexchange_proto_depIdxs = []int32{ + 3, // 0: signalexchange.Message.body:type_name -> signalexchange.Body + 0, // 1: signalexchange.Body.type:type_name -> signalexchange.Body.Type + 1, // 2: signalexchange.SignalExchange.Send:input_type -> signalexchange.EncryptedMessage + 1, // 3: signalexchange.SignalExchange.ConnectStream:input_type -> signalexchange.EncryptedMessage + 1, // 4: signalexchange.SignalExchange.Send:output_type -> signalexchange.EncryptedMessage + 1, // 5: signalexchange.SignalExchange.ConnectStream:output_type -> signalexchange.EncryptedMessage + 4, // [4:6] is the sub-list for method output_type + 2, // [2:4] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } -type signalExchangeClient struct { - cc *grpc.ClientConn -} - -func NewSignalExchangeClient(cc *grpc.ClientConn) SignalExchangeClient { - return &signalExchangeClient{cc} -} - -func (c *signalExchangeClient) Send(ctx context.Context, in *EncryptedMessage, opts ...grpc.CallOption) (*EncryptedMessage, error) { - out := new(EncryptedMessage) - err := c.cc.Invoke(ctx, "/signalexchange.SignalExchange/Send", in, out, opts...) - if err != nil { - return nil, err +func init() { file_signalexchange_proto_init() } +func file_signalexchange_proto_init() { + if File_signalexchange_proto != nil { + return } - return out, nil -} - -func (c *signalExchangeClient) ConnectStream(ctx context.Context, opts ...grpc.CallOption) (SignalExchange_ConnectStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_SignalExchange_serviceDesc.Streams[0], "/signalexchange.SignalExchange/ConnectStream", opts...) - if err != nil { - return nil, err + if !protoimpl.UnsafeEnabled { + file_signalexchange_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EncryptedMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signalexchange_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Message); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signalexchange_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Body); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - x := &signalExchangeConnectStreamClient{stream} - return x, nil -} - -type SignalExchange_ConnectStreamClient interface { - Send(*EncryptedMessage) error - Recv() (*EncryptedMessage, error) - grpc.ClientStream -} - -type signalExchangeConnectStreamClient struct { - grpc.ClientStream -} - -func (x *signalExchangeConnectStreamClient) Send(m *EncryptedMessage) error { - return x.ClientStream.SendMsg(m) -} - -func (x *signalExchangeConnectStreamClient) Recv() (*EncryptedMessage, error) { - m := new(EncryptedMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// SignalExchangeServer is the server API for SignalExchange service. -type SignalExchangeServer interface { - // Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer) - Send(context.Context, *EncryptedMessage) (*EncryptedMessage, error) - // Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer) - ConnectStream(SignalExchange_ConnectStreamServer) error -} - -// UnimplementedSignalExchangeServer can be embedded to have forward compatible implementations. -type UnimplementedSignalExchangeServer struct { -} - -func (*UnimplementedSignalExchangeServer) Send(ctx context.Context, req *EncryptedMessage) (*EncryptedMessage, error) { - return nil, status.Errorf(codes.Unimplemented, "method Send not implemented") -} -func (*UnimplementedSignalExchangeServer) ConnectStream(srv SignalExchange_ConnectStreamServer) error { - return status.Errorf(codes.Unimplemented, "method ConnectStream not implemented") -} - -func RegisterSignalExchangeServer(s *grpc.Server, srv SignalExchangeServer) { - s.RegisterService(&_SignalExchange_serviceDesc, srv) -} - -func _SignalExchange_Send_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EncryptedMessage) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SignalExchangeServer).Send(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/signalexchange.SignalExchange/Send", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SignalExchangeServer).Send(ctx, req.(*EncryptedMessage)) - } - return interceptor(ctx, in, info, handler) -} - -func _SignalExchange_ConnectStream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(SignalExchangeServer).ConnectStream(&signalExchangeConnectStreamServer{stream}) -} - -type SignalExchange_ConnectStreamServer interface { - Send(*EncryptedMessage) error - Recv() (*EncryptedMessage, error) - grpc.ServerStream -} - -type signalExchangeConnectStreamServer struct { - grpc.ServerStream -} - -func (x *signalExchangeConnectStreamServer) Send(m *EncryptedMessage) error { - return x.ServerStream.SendMsg(m) -} - -func (x *signalExchangeConnectStreamServer) Recv() (*EncryptedMessage, error) { - m := new(EncryptedMessage) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _SignalExchange_serviceDesc = grpc.ServiceDesc{ - ServiceName: "signalexchange.SignalExchange", - HandlerType: (*SignalExchangeServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Send", - Handler: _SignalExchange_Send_Handler, + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_signalexchange_proto_rawDesc, + NumEnums: 1, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "ConnectStream", - Handler: _SignalExchange_ConnectStream_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "signalexchange.proto", + GoTypes: file_signalexchange_proto_goTypes, + DependencyIndexes: file_signalexchange_proto_depIdxs, + EnumInfos: file_signalexchange_proto_enumTypes, + MessageInfos: file_signalexchange_proto_msgTypes, + }.Build() + File_signalexchange_proto = out.File + file_signalexchange_proto_rawDesc = nil + file_signalexchange_proto_goTypes = nil + file_signalexchange_proto_depIdxs = nil } diff --git a/signal/proto/signalexchange.proto b/signal/proto/signalexchange.proto index 4c3ab7c27..3db383723 100644 --- a/signal/proto/signalexchange.proto +++ b/signal/proto/signalexchange.proto @@ -2,7 +2,7 @@ syntax = "proto3"; import "google/protobuf/descriptor.proto"; -option go_package = ".;proto"; +option go_package = "/proto"; package signalexchange; diff --git a/signal/proto/signalexchange_grpc.pb.go b/signal/proto/signalexchange_grpc.pb.go new file mode 100644 index 000000000..238cd14e2 --- /dev/null +++ b/signal/proto/signalexchange_grpc.pb.go @@ -0,0 +1,174 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// SignalExchangeClient is the client API for SignalExchange service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SignalExchangeClient interface { + // Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer) + Send(ctx context.Context, in *EncryptedMessage, opts ...grpc.CallOption) (*EncryptedMessage, error) + // Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer) + ConnectStream(ctx context.Context, opts ...grpc.CallOption) (SignalExchange_ConnectStreamClient, error) +} + +type signalExchangeClient struct { + cc grpc.ClientConnInterface +} + +func NewSignalExchangeClient(cc grpc.ClientConnInterface) SignalExchangeClient { + return &signalExchangeClient{cc} +} + +func (c *signalExchangeClient) Send(ctx context.Context, in *EncryptedMessage, opts ...grpc.CallOption) (*EncryptedMessage, error) { + out := new(EncryptedMessage) + err := c.cc.Invoke(ctx, "/signalexchange.SignalExchange/Send", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *signalExchangeClient) ConnectStream(ctx context.Context, opts ...grpc.CallOption) (SignalExchange_ConnectStreamClient, error) { + stream, err := c.cc.NewStream(ctx, &SignalExchange_ServiceDesc.Streams[0], "/signalexchange.SignalExchange/ConnectStream", opts...) + if err != nil { + return nil, err + } + x := &signalExchangeConnectStreamClient{stream} + return x, nil +} + +type SignalExchange_ConnectStreamClient interface { + Send(*EncryptedMessage) error + Recv() (*EncryptedMessage, error) + grpc.ClientStream +} + +type signalExchangeConnectStreamClient struct { + grpc.ClientStream +} + +func (x *signalExchangeConnectStreamClient) Send(m *EncryptedMessage) error { + return x.ClientStream.SendMsg(m) +} + +func (x *signalExchangeConnectStreamClient) Recv() (*EncryptedMessage, error) { + m := new(EncryptedMessage) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// SignalExchangeServer is the server API for SignalExchange service. +// All implementations must embed UnimplementedSignalExchangeServer +// for forward compatibility +type SignalExchangeServer interface { + // Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer) + Send(context.Context, *EncryptedMessage) (*EncryptedMessage, error) + // Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer) + ConnectStream(SignalExchange_ConnectStreamServer) error + mustEmbedUnimplementedSignalExchangeServer() +} + +// UnimplementedSignalExchangeServer must be embedded to have forward compatible implementations. +type UnimplementedSignalExchangeServer struct { +} + +func (UnimplementedSignalExchangeServer) Send(context.Context, *EncryptedMessage) (*EncryptedMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Send not implemented") +} +func (UnimplementedSignalExchangeServer) ConnectStream(SignalExchange_ConnectStreamServer) error { + return status.Errorf(codes.Unimplemented, "method ConnectStream not implemented") +} +func (UnimplementedSignalExchangeServer) mustEmbedUnimplementedSignalExchangeServer() {} + +// UnsafeSignalExchangeServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SignalExchangeServer will +// result in compilation errors. +type UnsafeSignalExchangeServer interface { + mustEmbedUnimplementedSignalExchangeServer() +} + +func RegisterSignalExchangeServer(s grpc.ServiceRegistrar, srv SignalExchangeServer) { + s.RegisterService(&SignalExchange_ServiceDesc, srv) +} + +func _SignalExchange_Send_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EncryptedMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SignalExchangeServer).Send(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/signalexchange.SignalExchange/Send", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SignalExchangeServer).Send(ctx, req.(*EncryptedMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _SignalExchange_ConnectStream_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SignalExchangeServer).ConnectStream(&signalExchangeConnectStreamServer{stream}) +} + +type SignalExchange_ConnectStreamServer interface { + Send(*EncryptedMessage) error + Recv() (*EncryptedMessage, error) + grpc.ServerStream +} + +type signalExchangeConnectStreamServer struct { + grpc.ServerStream +} + +func (x *signalExchangeConnectStreamServer) Send(m *EncryptedMessage) error { + return x.ServerStream.SendMsg(m) +} + +func (x *signalExchangeConnectStreamServer) Recv() (*EncryptedMessage, error) { + m := new(EncryptedMessage) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// SignalExchange_ServiceDesc is the grpc.ServiceDesc for SignalExchange service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SignalExchange_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "signalexchange.SignalExchange", + HandlerType: (*SignalExchangeServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Send", + Handler: _SignalExchange_Send_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ConnectStream", + Handler: _SignalExchange_ConnectStream_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "signalexchange.proto", +} diff --git a/signal/signal.go b/signal/signal.go index a94370f31..7e2fe6c5e 100644 --- a/signal/signal.go +++ b/signal/signal.go @@ -15,6 +15,7 @@ import ( // Server an instance of a Signal server type Server struct { registry *peer.Registry + proto.UnimplementedSignalExchangeServer } // NewServer creates a new Signal server