From 0a81b76d23b9ef02ed38341494628a6d4ba46256 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sun, 4 Apr 2021 16:18:45 +0800 Subject: [PATCH] use uploaded image to ocr request. --- binary/utils.go | 4 - client/builders.go | 22 - client/client.go | 1 - client/decoders.go | 37 - client/image.go | 98 +- client/pb/highway/bdhExtInfo.pb.go | 1479 ++++++++++++++++++++++++++++ client/pb/highway/bdhExtInfo.proto | 110 +++ 7 files changed, 1685 insertions(+), 66 deletions(-) create mode 100644 client/pb/highway/bdhExtInfo.pb.go create mode 100644 client/pb/highway/bdhExtInfo.proto diff --git a/binary/utils.go b/binary/utils.go index 5ba6fabe..e74d3793 100644 --- a/binary/utils.go +++ b/binary/utils.go @@ -79,10 +79,6 @@ func AppendUUID(dst []byte, uuid []byte) []byte { return dst } -func genUUID(uuid []byte, dst []byte) { - -} - func ToIPV4Address(arr []byte) string { ip := (net.IP)(arr) return ip.String() diff --git a/client/builders.go b/client/builders.go index 1b4f47f6..9d61cedd 100644 --- a/client/builders.go +++ b/client/builders.go @@ -1009,28 +1009,6 @@ func (c *QQClient) buildQuitGroupPacket(groupCode int64) (uint16, []byte) { return seq, packet } -// OidbSvc.0xe07_0 -func (c *QQClient) buildImageOcrRequestPacket(url, md5 string, size, weight, height int32) (uint16, []byte) { - seq := c.nextSeq() - body := &oidb.DE07ReqBody{ - Version: 1, - Entrance: 3, - OcrReqBody: &oidb.OCRReqBody{ - ImageUrl: url, - OriginMd5: md5, - AfterCompressMd5: md5, - AfterCompressFileSize: size, - AfterCompressWeight: weight, - AfterCompressHeight: height, - IsCut: false, - }, - } - b, _ := proto.Marshal(body) - payload := c.packOIDBPackage(3591, 0, b) - packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xe07_0", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) - return seq, packet -} - // LightAppSvc.mini_app_info.GetAppInfoById func (c *QQClient) buildAppInfoRequestPacket(id string) (uint16, []byte) { seq := c.nextSeq() diff --git a/client/client.go b/client/client.go index 29a51bf7..e125d4fb 100644 --- a/client/client.go +++ b/client/client.go @@ -148,7 +148,6 @@ var decoders = map[string]func(*QQClient, *incomingPacketInfo, []byte) (interfac "LongConn.OffPicUp": decodeOffPicUpResponse, "ProfileService.Pb.ReqSystemMsgNew.Group": decodeSystemMsgGroupPacket, "ProfileService.Pb.ReqSystemMsgNew.Friend": decodeSystemMsgFriendPacket, - "OidbSvc.0xe07_0": decodeImageOcrResponse, "OidbSvc.0xd79": decodeWordSegmentation, "OidbSvc.0x990": decodeTranslateResponse, "SummaryCard.ReqSummaryCard": decodeSummaryCardResponse, diff --git a/client/decoders.go b/client/decoders.go index c1a9007a..f48fbf09 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -767,43 +767,6 @@ func decodeWordSegmentation(_ *QQClient, _ *incomingPacketInfo, payload []byte) return nil, errors.New("no word received") } -// OidbSvc.0xe07_0 -func decodeImageOcrResponse(_ *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { - pkg := oidb.OIDBSSOPkg{} - rsp := oidb.DE07RspBody{} - if err := proto.Unmarshal(payload, &pkg); err != nil { - return nil, errors.Wrap(err, "failed to unmarshal protobuf message") - } - if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil { - return nil, errors.Wrap(err, "failed to unmarshal protobuf message") - } - if rsp.Wording != "" { - return nil, errors.New(rsp.Wording) - } - if rsp.RetCode != 0 { - return nil, errors.Errorf("server error, code: %v msg: %v", rsp.RetCode, rsp.ErrMsg) - } - var texts = make([]*TextDetection, 0, len(rsp.OcrRspBody.TextDetections)) - for _, text := range rsp.OcrRspBody.TextDetections { - var points = make([]*Coordinate, 0, len(text.Polygon.Coordinates)) - for _, c := range text.Polygon.Coordinates { - points = append(points, &Coordinate{ - X: c.X, - Y: c.Y, - }) - } - texts = append(texts, &TextDetection{ - Text: text.DetectedText, - Confidence: text.Confidence, - Coordinates: points, - }) - } - return &OcrResponse{ - Texts: texts, - Language: rsp.OcrRspBody.Language, - }, nil -} - // LightAppSvc.mini_app_info.GetAppInfoById func decodeAppInfoResponse(_ *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { pkg := qweb.QWebRsp{} diff --git a/client/image.go b/client/image.go index 86a64712..d2437e53 100644 --- a/client/image.go +++ b/client/image.go @@ -4,8 +4,11 @@ import ( "bytes" "encoding/hex" "fmt" + "github.com/Mrs4s/MiraiGo/client/pb/highway" + "github.com/Mrs4s/MiraiGo/client/pb/oidb" "image" "io" + "math/rand" "os" "strings" @@ -20,6 +23,7 @@ import ( func init() { decoders["ImgStore.GroupPicUp"] = decodeGroupImageStoreResponse + decoders["OidbSvc.0xe07_0"] = decodeImageOcrResponse } func (c *QQClient) UploadGroupImage(groupCode int64, img io.ReadSeeker) (*message.GroupImageElement, error) { @@ -128,15 +132,28 @@ func (c *QQClient) uploadPrivateImage(target int64, img io.ReadSeeker, count int } func (c *QQClient) ImageOcr(img interface{}) (*OcrResponse, error) { + url := "" switch e := img.(type) { case *message.GroupImageElement: - rsp, err := c.sendAndWait(c.buildImageOcrRequestPacket(e.Url, strings.ToUpper(hex.EncodeToString(e.Md5)), e.Size, e.Width, e.Height)) + url = e.Url + if b, err := utils.HttpGetBytes(e.Url, ""); err == nil { + if url, err = c.uploadOcrImage(bytes.NewReader(b)); err != nil { + url = e.Url + } + } + rsp, err := c.sendAndWait(c.buildImageOcrRequestPacket(url, strings.ToUpper(hex.EncodeToString(e.Md5)), e.Size, e.Width, e.Height)) if err != nil { return nil, err } return rsp.(*OcrResponse), nil case *message.ImageElement: - rsp, err := c.sendAndWait(c.buildImageOcrRequestPacket(e.Url, strings.ToUpper(hex.EncodeToString(e.Md5)), e.Size, e.Width, e.Height)) + url = e.Url + if b, err := utils.HttpGetBytes(e.Url, ""); err == nil { + if url, err = c.uploadOcrImage(bytes.NewReader(b)); err != nil { + url = e.Url + } + } + rsp, err := c.sendAndWait(c.buildImageOcrRequestPacket(url, strings.ToUpper(hex.EncodeToString(e.Md5)), e.Size, e.Width, e.Height)) if err != nil { return nil, err } @@ -214,6 +231,46 @@ func (c *QQClient) buildGroupImageStorePacket(groupCode int64, md5 []byte, size return seq, packet } +func (c *QQClient) uploadOcrImage(img io.ReadSeeker) (string, error) { + r := make([]byte, 16) + rand.Read(r) + ext, _ := proto.Marshal(&highway.CommFileExtReq{ + ActionType: proto.Uint32(0), + Uuid: binary.GenUUID(r), + }) + rsp, err := c.highwayUploadByBDH(img, 76, c.highwaySession.SigSession, ext, false) + if err != nil { + return "", errors.Wrap(err, "upload ocr image error") + } + rspExt := highway.CommFileExtRsp{} + if err = proto.Unmarshal(rsp, &rspExt); err != nil { + return "", errors.Wrap(err, "error unmarshal highway resp") + } + return string(rspExt.GetDownloadUrl()), nil +} + +// OidbSvc.0xe07_0 +func (c *QQClient) buildImageOcrRequestPacket(url, md5 string, size, weight, height int32) (uint16, []byte) { + seq := c.nextSeq() + body := &oidb.DE07ReqBody{ + Version: 1, + Entrance: 3, + OcrReqBody: &oidb.OCRReqBody{ + ImageUrl: url, + OriginMd5: md5, + AfterCompressMd5: md5, + AfterCompressFileSize: size, + AfterCompressWeight: weight, + AfterCompressHeight: height, + IsCut: false, + }, + } + b, _ := proto.Marshal(body) + payload := c.packOIDBPackage(3591, 0, b) + packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xe07_0", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + // ImgStore.GroupPicUp func decodeGroupImageStoreResponse(_ *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { pkt := pb.D388RespBody{} @@ -241,3 +298,40 @@ func decodeGroupImageStoreResponse(_ *QQClient, _ *incomingPacketInfo, payload [ UploadPort: rsp.Uint32UpPort, }, nil } + +// OidbSvc.0xe07_0 +func decodeImageOcrResponse(_ *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { + pkg := oidb.OIDBSSOPkg{} + rsp := oidb.DE07RspBody{} + if err := proto.Unmarshal(payload, &pkg); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } + if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } + if rsp.Wording != "" { + return nil, errors.New(rsp.Wording) + } + if rsp.RetCode != 0 { + return nil, errors.Errorf("server error, code: %v msg: %v", rsp.RetCode, rsp.ErrMsg) + } + var texts = make([]*TextDetection, 0, len(rsp.OcrRspBody.TextDetections)) + for _, text := range rsp.OcrRspBody.TextDetections { + var points = make([]*Coordinate, 0, len(text.Polygon.Coordinates)) + for _, c := range text.Polygon.Coordinates { + points = append(points, &Coordinate{ + X: c.X, + Y: c.Y, + }) + } + texts = append(texts, &TextDetection{ + Text: text.DetectedText, + Confidence: text.Confidence, + Coordinates: points, + }) + } + return &OcrResponse{ + Texts: texts, + Language: rsp.OcrRspBody.Language, + }, nil +} diff --git a/client/pb/highway/bdhExtInfo.pb.go b/client/pb/highway/bdhExtInfo.pb.go new file mode 100644 index 00000000..a4aef9e6 --- /dev/null +++ b/client/pb/highway/bdhExtInfo.pb.go @@ -0,0 +1,1479 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.14.0 +// source: bdhExtInfo.proto + +package highway + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type CommFileExtReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ActionType *uint32 `protobuf:"varint,1,opt,name=actionType" json:"actionType,omitempty"` + Uuid []byte `protobuf:"bytes,2,opt,name=uuid" json:"uuid,omitempty"` +} + +func (x *CommFileExtReq) Reset() { + *x = CommFileExtReq{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommFileExtReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommFileExtReq) ProtoMessage() {} + +func (x *CommFileExtReq) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_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 CommFileExtReq.ProtoReflect.Descriptor instead. +func (*CommFileExtReq) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{0} +} + +func (x *CommFileExtReq) GetActionType() uint32 { + if x != nil && x.ActionType != nil { + return *x.ActionType + } + return 0 +} + +func (x *CommFileExtReq) GetUuid() []byte { + if x != nil { + return x.Uuid + } + return nil +} + +type CommFileExtRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Retcode *int32 `protobuf:"varint,1,opt,name=retcode" json:"retcode,omitempty"` + DownloadUrl []byte `protobuf:"bytes,2,opt,name=downloadUrl" json:"downloadUrl,omitempty"` +} + +func (x *CommFileExtRsp) Reset() { + *x = CommFileExtRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommFileExtRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommFileExtRsp) ProtoMessage() {} + +func (x *CommFileExtRsp) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_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 CommFileExtRsp.ProtoReflect.Descriptor instead. +func (*CommFileExtRsp) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{1} +} + +func (x *CommFileExtRsp) GetRetcode() int32 { + if x != nil && x.Retcode != nil { + return *x.Retcode + } + return 0 +} + +func (x *CommFileExtRsp) GetDownloadUrl() []byte { + if x != nil { + return x.DownloadUrl + } + return nil +} + +type PicInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Idx *uint32 `protobuf:"varint,1,opt,name=idx" json:"idx,omitempty"` + Size *uint32 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` + BinMd5 []byte `protobuf:"bytes,3,opt,name=binMd5" json:"binMd5,omitempty"` + Type *uint32 `protobuf:"varint,4,opt,name=type" json:"type,omitempty"` +} + +func (x *PicInfo) Reset() { + *x = PicInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PicInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PicInfo) ProtoMessage() {} + +func (x *PicInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_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 PicInfo.ProtoReflect.Descriptor instead. +func (*PicInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{2} +} + +func (x *PicInfo) GetIdx() uint32 { + if x != nil && x.Idx != nil { + return *x.Idx + } + return 0 +} + +func (x *PicInfo) GetSize() uint32 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *PicInfo) GetBinMd5() []byte { + if x != nil { + return x.BinMd5 + } + return nil +} + +func (x *PicInfo) GetType() uint32 { + if x != nil && x.Type != nil { + return *x.Type + } + return 0 +} + +type QQVoiceExtReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Qid []byte `protobuf:"bytes,1,opt,name=qid" json:"qid,omitempty"` + Fmt *uint32 `protobuf:"varint,2,opt,name=fmt" json:"fmt,omitempty"` + Rate *uint32 `protobuf:"varint,3,opt,name=rate" json:"rate,omitempty"` + Bits *uint32 `protobuf:"varint,4,opt,name=bits" json:"bits,omitempty"` + Channel *uint32 `protobuf:"varint,5,opt,name=channel" json:"channel,omitempty"` + Pinyin *uint32 `protobuf:"varint,6,opt,name=pinyin" json:"pinyin,omitempty"` +} + +func (x *QQVoiceExtReq) Reset() { + *x = QQVoiceExtReq{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQVoiceExtReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQVoiceExtReq) ProtoMessage() {} + +func (x *QQVoiceExtReq) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[3] + 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 QQVoiceExtReq.ProtoReflect.Descriptor instead. +func (*QQVoiceExtReq) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{3} +} + +func (x *QQVoiceExtReq) GetQid() []byte { + if x != nil { + return x.Qid + } + return nil +} + +func (x *QQVoiceExtReq) GetFmt() uint32 { + if x != nil && x.Fmt != nil { + return *x.Fmt + } + return 0 +} + +func (x *QQVoiceExtReq) GetRate() uint32 { + if x != nil && x.Rate != nil { + return *x.Rate + } + return 0 +} + +func (x *QQVoiceExtReq) GetBits() uint32 { + if x != nil && x.Bits != nil { + return *x.Bits + } + return 0 +} + +func (x *QQVoiceExtReq) GetChannel() uint32 { + if x != nil && x.Channel != nil { + return *x.Channel + } + return 0 +} + +func (x *QQVoiceExtReq) GetPinyin() uint32 { + if x != nil && x.Pinyin != nil { + return *x.Pinyin + } + return 0 +} + +type QQVoiceExtRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Qid []byte `protobuf:"bytes,1,opt,name=qid" json:"qid,omitempty"` + Retcode *int32 `protobuf:"varint,2,opt,name=retcode" json:"retcode,omitempty"` + Result []*QQVoiceResult `protobuf:"bytes,3,rep,name=result" json:"result,omitempty"` +} + +func (x *QQVoiceExtRsp) Reset() { + *x = QQVoiceExtRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQVoiceExtRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQVoiceExtRsp) ProtoMessage() {} + +func (x *QQVoiceExtRsp) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[4] + 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 QQVoiceExtRsp.ProtoReflect.Descriptor instead. +func (*QQVoiceExtRsp) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{4} +} + +func (x *QQVoiceExtRsp) GetQid() []byte { + if x != nil { + return x.Qid + } + return nil +} + +func (x *QQVoiceExtRsp) GetRetcode() int32 { + if x != nil && x.Retcode != nil { + return *x.Retcode + } + return 0 +} + +func (x *QQVoiceExtRsp) GetResult() []*QQVoiceResult { + if x != nil { + return x.Result + } + return nil +} + +type QQVoiceResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text []byte `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + Pinyin []byte `protobuf:"bytes,2,opt,name=pinyin" json:"pinyin,omitempty"` + Source *uint32 `protobuf:"varint,3,opt,name=source" json:"source,omitempty"` +} + +func (x *QQVoiceResult) Reset() { + *x = QQVoiceResult{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQVoiceResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQVoiceResult) ProtoMessage() {} + +func (x *QQVoiceResult) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[5] + 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 QQVoiceResult.ProtoReflect.Descriptor instead. +func (*QQVoiceResult) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{5} +} + +func (x *QQVoiceResult) GetText() []byte { + if x != nil { + return x.Text + } + return nil +} + +func (x *QQVoiceResult) GetPinyin() []byte { + if x != nil { + return x.Pinyin + } + return nil +} + +func (x *QQVoiceResult) GetSource() uint32 { + if x != nil && x.Source != nil { + return *x.Source + } + return 0 +} + +type ShortVideoReqExtInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cmd *uint32 `protobuf:"varint,1,opt,name=cmd" json:"cmd,omitempty"` + SessionId *uint64 `protobuf:"varint,2,opt,name=sessionId" json:"sessionId,omitempty"` + Thumbinfo *PicInfo `protobuf:"bytes,3,opt,name=thumbinfo" json:"thumbinfo,omitempty"` + Videoinfo *VideoInfo `protobuf:"bytes,4,opt,name=videoinfo" json:"videoinfo,omitempty"` + ShortvideoSureReq *ShortVideoSureReqInfo `protobuf:"bytes,5,opt,name=shortvideoSureReq" json:"shortvideoSureReq,omitempty"` + IsMergeCmdBeforeData *bool `protobuf:"varint,6,opt,name=isMergeCmdBeforeData" json:"isMergeCmdBeforeData,omitempty"` +} + +func (x *ShortVideoReqExtInfo) Reset() { + *x = ShortVideoReqExtInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShortVideoReqExtInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShortVideoReqExtInfo) ProtoMessage() {} + +func (x *ShortVideoReqExtInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[6] + 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 ShortVideoReqExtInfo.ProtoReflect.Descriptor instead. +func (*ShortVideoReqExtInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{6} +} + +func (x *ShortVideoReqExtInfo) GetCmd() uint32 { + if x != nil && x.Cmd != nil { + return *x.Cmd + } + return 0 +} + +func (x *ShortVideoReqExtInfo) GetSessionId() uint64 { + if x != nil && x.SessionId != nil { + return *x.SessionId + } + return 0 +} + +func (x *ShortVideoReqExtInfo) GetThumbinfo() *PicInfo { + if x != nil { + return x.Thumbinfo + } + return nil +} + +func (x *ShortVideoReqExtInfo) GetVideoinfo() *VideoInfo { + if x != nil { + return x.Videoinfo + } + return nil +} + +func (x *ShortVideoReqExtInfo) GetShortvideoSureReq() *ShortVideoSureReqInfo { + if x != nil { + return x.ShortvideoSureReq + } + return nil +} + +func (x *ShortVideoReqExtInfo) GetIsMergeCmdBeforeData() bool { + if x != nil && x.IsMergeCmdBeforeData != nil { + return *x.IsMergeCmdBeforeData + } + return false +} + +type ShortVideoRspExtInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cmd *uint32 `protobuf:"varint,1,opt,name=cmd" json:"cmd,omitempty"` + SessionId *uint64 `protobuf:"varint,2,opt,name=sessionId" json:"sessionId,omitempty"` + Retcode *int32 `protobuf:"varint,3,opt,name=retcode" json:"retcode,omitempty"` + Errinfo []byte `protobuf:"bytes,4,opt,name=errinfo" json:"errinfo,omitempty"` + Thumbinfo *PicInfo `protobuf:"bytes,5,opt,name=thumbinfo" json:"thumbinfo,omitempty"` + Videoinfo *VideoInfo `protobuf:"bytes,6,opt,name=videoinfo" json:"videoinfo,omitempty"` + ShortvideoSureRsp *ShortVideoSureRspInfo `protobuf:"bytes,7,opt,name=shortvideoSureRsp" json:"shortvideoSureRsp,omitempty"` + RetryFlag *uint32 `protobuf:"varint,8,opt,name=retryFlag" json:"retryFlag,omitempty"` +} + +func (x *ShortVideoRspExtInfo) Reset() { + *x = ShortVideoRspExtInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShortVideoRspExtInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShortVideoRspExtInfo) ProtoMessage() {} + +func (x *ShortVideoRspExtInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[7] + 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 ShortVideoRspExtInfo.ProtoReflect.Descriptor instead. +func (*ShortVideoRspExtInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{7} +} + +func (x *ShortVideoRspExtInfo) GetCmd() uint32 { + if x != nil && x.Cmd != nil { + return *x.Cmd + } + return 0 +} + +func (x *ShortVideoRspExtInfo) GetSessionId() uint64 { + if x != nil && x.SessionId != nil { + return *x.SessionId + } + return 0 +} + +func (x *ShortVideoRspExtInfo) GetRetcode() int32 { + if x != nil && x.Retcode != nil { + return *x.Retcode + } + return 0 +} + +func (x *ShortVideoRspExtInfo) GetErrinfo() []byte { + if x != nil { + return x.Errinfo + } + return nil +} + +func (x *ShortVideoRspExtInfo) GetThumbinfo() *PicInfo { + if x != nil { + return x.Thumbinfo + } + return nil +} + +func (x *ShortVideoRspExtInfo) GetVideoinfo() *VideoInfo { + if x != nil { + return x.Videoinfo + } + return nil +} + +func (x *ShortVideoRspExtInfo) GetShortvideoSureRsp() *ShortVideoSureRspInfo { + if x != nil { + return x.ShortvideoSureRsp + } + return nil +} + +func (x *ShortVideoRspExtInfo) GetRetryFlag() uint32 { + if x != nil && x.RetryFlag != nil { + return *x.RetryFlag + } + return 0 +} + +type ShortVideoSureReqInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fromuin *uint64 `protobuf:"varint,1,opt,name=fromuin" json:"fromuin,omitempty"` + ChatType *uint32 `protobuf:"varint,2,opt,name=chatType" json:"chatType,omitempty"` + Touin *uint64 `protobuf:"varint,3,opt,name=touin" json:"touin,omitempty"` + GroupCode *uint64 `protobuf:"varint,4,opt,name=groupCode" json:"groupCode,omitempty"` + ClientType *uint32 `protobuf:"varint,5,opt,name=clientType" json:"clientType,omitempty"` + Thumbinfo *PicInfo `protobuf:"bytes,6,opt,name=thumbinfo" json:"thumbinfo,omitempty"` + MergeVideoinfo []*VideoInfo `protobuf:"bytes,7,rep,name=mergeVideoinfo" json:"mergeVideoinfo,omitempty"` + DropVideoinfo []*VideoInfo `protobuf:"bytes,8,rep,name=dropVideoinfo" json:"dropVideoinfo,omitempty"` + BusinessType *uint32 `protobuf:"varint,9,opt,name=businessType" json:"businessType,omitempty"` + SubBusinessType *uint32 `protobuf:"varint,10,opt,name=subBusinessType" json:"subBusinessType,omitempty"` +} + +func (x *ShortVideoSureReqInfo) Reset() { + *x = ShortVideoSureReqInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShortVideoSureReqInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShortVideoSureReqInfo) ProtoMessage() {} + +func (x *ShortVideoSureReqInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[8] + 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 ShortVideoSureReqInfo.ProtoReflect.Descriptor instead. +func (*ShortVideoSureReqInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{8} +} + +func (x *ShortVideoSureReqInfo) GetFromuin() uint64 { + if x != nil && x.Fromuin != nil { + return *x.Fromuin + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetChatType() uint32 { + if x != nil && x.ChatType != nil { + return *x.ChatType + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetTouin() uint64 { + if x != nil && x.Touin != nil { + return *x.Touin + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetGroupCode() uint64 { + if x != nil && x.GroupCode != nil { + return *x.GroupCode + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetClientType() uint32 { + if x != nil && x.ClientType != nil { + return *x.ClientType + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetThumbinfo() *PicInfo { + if x != nil { + return x.Thumbinfo + } + return nil +} + +func (x *ShortVideoSureReqInfo) GetMergeVideoinfo() []*VideoInfo { + if x != nil { + return x.MergeVideoinfo + } + return nil +} + +func (x *ShortVideoSureReqInfo) GetDropVideoinfo() []*VideoInfo { + if x != nil { + return x.DropVideoinfo + } + return nil +} + +func (x *ShortVideoSureReqInfo) GetBusinessType() uint32 { + if x != nil && x.BusinessType != nil { + return *x.BusinessType + } + return 0 +} + +func (x *ShortVideoSureReqInfo) GetSubBusinessType() uint32 { + if x != nil && x.SubBusinessType != nil { + return *x.SubBusinessType + } + return 0 +} + +type ShortVideoSureRspInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fileid []byte `protobuf:"bytes,1,opt,name=fileid" json:"fileid,omitempty"` + Ukey []byte `protobuf:"bytes,2,opt,name=ukey" json:"ukey,omitempty"` + Videoinfo *VideoInfo `protobuf:"bytes,3,opt,name=videoinfo" json:"videoinfo,omitempty"` + MergeCost *uint32 `protobuf:"varint,4,opt,name=mergeCost" json:"mergeCost,omitempty"` +} + +func (x *ShortVideoSureRspInfo) Reset() { + *x = ShortVideoSureRspInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShortVideoSureRspInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShortVideoSureRspInfo) ProtoMessage() {} + +func (x *ShortVideoSureRspInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[9] + 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 ShortVideoSureRspInfo.ProtoReflect.Descriptor instead. +func (*ShortVideoSureRspInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{9} +} + +func (x *ShortVideoSureRspInfo) GetFileid() []byte { + if x != nil { + return x.Fileid + } + return nil +} + +func (x *ShortVideoSureRspInfo) GetUkey() []byte { + if x != nil { + return x.Ukey + } + return nil +} + +func (x *ShortVideoSureRspInfo) GetVideoinfo() *VideoInfo { + if x != nil { + return x.Videoinfo + } + return nil +} + +func (x *ShortVideoSureRspInfo) GetMergeCost() uint32 { + if x != nil && x.MergeCost != nil { + return *x.MergeCost + } + return 0 +} + +type StoryVideoExtReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StoryVideoExtReq) Reset() { + *x = StoryVideoExtReq{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StoryVideoExtReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StoryVideoExtReq) ProtoMessage() {} + +func (x *StoryVideoExtReq) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[10] + 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 StoryVideoExtReq.ProtoReflect.Descriptor instead. +func (*StoryVideoExtReq) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{10} +} + +type StoryVideoExtRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Retcode *int32 `protobuf:"varint,1,opt,name=retcode" json:"retcode,omitempty"` + Msg []byte `protobuf:"bytes,2,opt,name=msg" json:"msg,omitempty"` + CdnUrl []byte `protobuf:"bytes,3,opt,name=cdnUrl" json:"cdnUrl,omitempty"` + FileKey []byte `protobuf:"bytes,4,opt,name=fileKey" json:"fileKey,omitempty"` + FileId []byte `protobuf:"bytes,5,opt,name=fileId" json:"fileId,omitempty"` +} + +func (x *StoryVideoExtRsp) Reset() { + *x = StoryVideoExtRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StoryVideoExtRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StoryVideoExtRsp) ProtoMessage() {} + +func (x *StoryVideoExtRsp) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[11] + 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 StoryVideoExtRsp.ProtoReflect.Descriptor instead. +func (*StoryVideoExtRsp) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{11} +} + +func (x *StoryVideoExtRsp) GetRetcode() int32 { + if x != nil && x.Retcode != nil { + return *x.Retcode + } + return 0 +} + +func (x *StoryVideoExtRsp) GetMsg() []byte { + if x != nil { + return x.Msg + } + return nil +} + +func (x *StoryVideoExtRsp) GetCdnUrl() []byte { + if x != nil { + return x.CdnUrl + } + return nil +} + +func (x *StoryVideoExtRsp) GetFileKey() []byte { + if x != nil { + return x.FileKey + } + return nil +} + +func (x *StoryVideoExtRsp) GetFileId() []byte { + if x != nil { + return x.FileId + } + return nil +} + +type UploadPicExtInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileResid []byte `protobuf:"bytes,1,opt,name=fileResid" json:"fileResid,omitempty"` + DownloadUrl []byte `protobuf:"bytes,2,opt,name=downloadUrl" json:"downloadUrl,omitempty"` + ThumbDownloadUrl []byte `protobuf:"bytes,3,opt,name=thumbDownloadUrl" json:"thumbDownloadUrl,omitempty"` +} + +func (x *UploadPicExtInfo) Reset() { + *x = UploadPicExtInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UploadPicExtInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadPicExtInfo) ProtoMessage() {} + +func (x *UploadPicExtInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[12] + 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 UploadPicExtInfo.ProtoReflect.Descriptor instead. +func (*UploadPicExtInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{12} +} + +func (x *UploadPicExtInfo) GetFileResid() []byte { + if x != nil { + return x.FileResid + } + return nil +} + +func (x *UploadPicExtInfo) GetDownloadUrl() []byte { + if x != nil { + return x.DownloadUrl + } + return nil +} + +func (x *UploadPicExtInfo) GetThumbDownloadUrl() []byte { + if x != nil { + return x.ThumbDownloadUrl + } + return nil +} + +type VideoInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Idx *uint32 `protobuf:"varint,1,opt,name=idx" json:"idx,omitempty"` + Size *uint32 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` + BinMd5 []byte `protobuf:"bytes,3,opt,name=binMd5" json:"binMd5,omitempty"` + Format *uint32 `protobuf:"varint,4,opt,name=format" json:"format,omitempty"` + ResLen *uint32 `protobuf:"varint,5,opt,name=resLen" json:"resLen,omitempty"` + ResWidth *uint32 `protobuf:"varint,6,opt,name=resWidth" json:"resWidth,omitempty"` + Time *uint32 `protobuf:"varint,7,opt,name=time" json:"time,omitempty"` + Starttime *uint64 `protobuf:"varint,8,opt,name=starttime" json:"starttime,omitempty"` + IsAudio *uint32 `protobuf:"varint,9,opt,name=isAudio" json:"isAudio,omitempty"` +} + +func (x *VideoInfo) Reset() { + *x = VideoInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_bdhExtInfo_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VideoInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VideoInfo) ProtoMessage() {} + +func (x *VideoInfo) ProtoReflect() protoreflect.Message { + mi := &file_bdhExtInfo_proto_msgTypes[13] + 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 VideoInfo.ProtoReflect.Descriptor instead. +func (*VideoInfo) Descriptor() ([]byte, []int) { + return file_bdhExtInfo_proto_rawDescGZIP(), []int{13} +} + +func (x *VideoInfo) GetIdx() uint32 { + if x != nil && x.Idx != nil { + return *x.Idx + } + return 0 +} + +func (x *VideoInfo) GetSize() uint32 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *VideoInfo) GetBinMd5() []byte { + if x != nil { + return x.BinMd5 + } + return nil +} + +func (x *VideoInfo) GetFormat() uint32 { + if x != nil && x.Format != nil { + return *x.Format + } + return 0 +} + +func (x *VideoInfo) GetResLen() uint32 { + if x != nil && x.ResLen != nil { + return *x.ResLen + } + return 0 +} + +func (x *VideoInfo) GetResWidth() uint32 { + if x != nil && x.ResWidth != nil { + return *x.ResWidth + } + return 0 +} + +func (x *VideoInfo) GetTime() uint32 { + if x != nil && x.Time != nil { + return *x.Time + } + return 0 +} + +func (x *VideoInfo) GetStarttime() uint64 { + if x != nil && x.Starttime != nil { + return *x.Starttime + } + return 0 +} + +func (x *VideoInfo) GetIsAudio() uint32 { + if x != nil && x.IsAudio != nil { + return *x.IsAudio + } + return 0 +} + +var File_bdhExtInfo_proto protoreflect.FileDescriptor + +var file_bdhExtInfo_proto_rawDesc = []byte{ + 0x0a, 0x10, 0x62, 0x64, 0x68, 0x45, 0x78, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, + 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x52, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x74, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x22, 0x5b, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, + 0x69, 0x64, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x4d, 0x64, + 0x35, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x4d, 0x64, 0x35, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x0d, 0x51, 0x51, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x45, + 0x78, 0x74, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x71, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x6d, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x66, 0x6d, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x72, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, 0x69, 0x74, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x70, 0x69, 0x6e, + 0x79, 0x69, 0x6e, 0x22, 0x63, 0x0a, 0x0d, 0x51, 0x51, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x45, 0x78, + 0x74, 0x52, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x71, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x74, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x51, 0x51, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x53, 0x0a, 0x0d, 0x51, 0x51, 0x56, 0x6f, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, + 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x92, 0x02, + 0x0a, 0x14, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x71, 0x45, + 0x78, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x09, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x50, 0x69, 0x63, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x28, + 0x0a, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x76, + 0x69, 0x64, 0x65, 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x64, 0x65, 0x6f, + 0x53, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x12, 0x32, + 0x0a, 0x14, 0x69, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6d, 0x64, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6d, 0x64, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x22, 0xb0, 0x02, 0x0a, 0x14, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x52, 0x73, 0x70, 0x45, 0x78, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x63, + 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, + 0x65, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x65, + 0x74, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x12, + 0x26, 0x0a, 0x09, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x50, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x74, 0x68, + 0x75, 0x6d, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x64, + 0x65, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x69, 0x6e, 0x66, + 0x6f, 0x12, 0x44, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x53, + 0x75, 0x72, 0x65, 0x52, 0x73, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, + 0x68, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x72, 0x65, 0x52, 0x73, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, + 0x53, 0x75, 0x72, 0x65, 0x52, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x72, 0x79, + 0x46, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x46, 0x6c, 0x61, 0x67, 0x22, 0xfd, 0x02, 0x0a, 0x15, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x56, + 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x68, 0x61, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x75, 0x69, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x75, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x74, 0x68, 0x75, + 0x6d, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x50, + 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x69, 0x6e, 0x66, + 0x6f, 0x12, 0x32, 0x0a, 0x0e, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x0d, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x69, 0x64, + 0x65, 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, + 0x69, 0x64, 0x65, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x69, + 0x64, 0x65, 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, + 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x62, + 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, + 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x15, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x56, + 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x72, 0x65, 0x52, 0x73, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x09, 0x76, + 0x69, 0x64, 0x65, 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, + 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x76, 0x69, 0x64, 0x65, + 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, + 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x43, + 0x6f, 0x73, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x45, 0x78, 0x74, 0x52, 0x65, 0x71, 0x22, 0x88, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, + 0x79, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x45, 0x78, 0x74, 0x52, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, + 0x72, 0x65, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, + 0x65, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x64, 0x6e, 0x55, + 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x64, 0x6e, 0x55, 0x72, 0x6c, + 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, + 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x63, 0x45, + 0x78, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x10, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, + 0x72, 0x6c, 0x22, 0xe1, 0x01, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x69, + 0x64, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x4d, 0x64, 0x35, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x4d, 0x64, 0x35, 0x12, 0x16, + 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x4c, 0x65, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x69, 0x73, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x69, + 0x73, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x3b, 0x68, 0x69, 0x67, 0x68, + 0x77, 0x61, 0x79, +} + +var ( + file_bdhExtInfo_proto_rawDescOnce sync.Once + file_bdhExtInfo_proto_rawDescData = file_bdhExtInfo_proto_rawDesc +) + +func file_bdhExtInfo_proto_rawDescGZIP() []byte { + file_bdhExtInfo_proto_rawDescOnce.Do(func() { + file_bdhExtInfo_proto_rawDescData = protoimpl.X.CompressGZIP(file_bdhExtInfo_proto_rawDescData) + }) + return file_bdhExtInfo_proto_rawDescData +} + +var file_bdhExtInfo_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_bdhExtInfo_proto_goTypes = []interface{}{ + (*CommFileExtReq)(nil), // 0: CommFileExtReq + (*CommFileExtRsp)(nil), // 1: CommFileExtRsp + (*PicInfo)(nil), // 2: PicInfo + (*QQVoiceExtReq)(nil), // 3: QQVoiceExtReq + (*QQVoiceExtRsp)(nil), // 4: QQVoiceExtRsp + (*QQVoiceResult)(nil), // 5: QQVoiceResult + (*ShortVideoReqExtInfo)(nil), // 6: ShortVideoReqExtInfo + (*ShortVideoRspExtInfo)(nil), // 7: ShortVideoRspExtInfo + (*ShortVideoSureReqInfo)(nil), // 8: ShortVideoSureReqInfo + (*ShortVideoSureRspInfo)(nil), // 9: ShortVideoSureRspInfo + (*StoryVideoExtReq)(nil), // 10: StoryVideoExtReq + (*StoryVideoExtRsp)(nil), // 11: StoryVideoExtRsp + (*UploadPicExtInfo)(nil), // 12: UploadPicExtInfo + (*VideoInfo)(nil), // 13: VideoInfo +} +var file_bdhExtInfo_proto_depIdxs = []int32{ + 5, // 0: QQVoiceExtRsp.result:type_name -> QQVoiceResult + 2, // 1: ShortVideoReqExtInfo.thumbinfo:type_name -> PicInfo + 13, // 2: ShortVideoReqExtInfo.videoinfo:type_name -> VideoInfo + 8, // 3: ShortVideoReqExtInfo.shortvideoSureReq:type_name -> ShortVideoSureReqInfo + 2, // 4: ShortVideoRspExtInfo.thumbinfo:type_name -> PicInfo + 13, // 5: ShortVideoRspExtInfo.videoinfo:type_name -> VideoInfo + 9, // 6: ShortVideoRspExtInfo.shortvideoSureRsp:type_name -> ShortVideoSureRspInfo + 2, // 7: ShortVideoSureReqInfo.thumbinfo:type_name -> PicInfo + 13, // 8: ShortVideoSureReqInfo.mergeVideoinfo:type_name -> VideoInfo + 13, // 9: ShortVideoSureReqInfo.dropVideoinfo:type_name -> VideoInfo + 13, // 10: ShortVideoSureRspInfo.videoinfo:type_name -> VideoInfo + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { file_bdhExtInfo_proto_init() } +func file_bdhExtInfo_proto_init() { + if File_bdhExtInfo_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_bdhExtInfo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommFileExtReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommFileExtRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PicInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QQVoiceExtReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QQVoiceExtRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QQVoiceResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShortVideoReqExtInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShortVideoRspExtInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShortVideoSureReqInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShortVideoSureRspInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StoryVideoExtReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StoryVideoExtRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadPicExtInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bdhExtInfo_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VideoInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_bdhExtInfo_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_bdhExtInfo_proto_goTypes, + DependencyIndexes: file_bdhExtInfo_proto_depIdxs, + MessageInfos: file_bdhExtInfo_proto_msgTypes, + }.Build() + File_bdhExtInfo_proto = out.File + file_bdhExtInfo_proto_rawDesc = nil + file_bdhExtInfo_proto_goTypes = nil + file_bdhExtInfo_proto_depIdxs = nil +} diff --git a/client/pb/highway/bdhExtInfo.proto b/client/pb/highway/bdhExtInfo.proto new file mode 100644 index 00000000..3942af7d --- /dev/null +++ b/client/pb/highway/bdhExtInfo.proto @@ -0,0 +1,110 @@ +syntax = "proto2"; + +option go_package = ".;highway"; + +message CommFileExtReq { + optional uint32 actionType = 1; + optional bytes uuid = 2; +} + +message CommFileExtRsp { + optional int32 retcode = 1; + optional bytes downloadUrl = 2; +} + +message PicInfo { + optional uint32 idx = 1; + optional uint32 size = 2; + optional bytes binMd5 = 3; + optional uint32 type = 4; +} + +message QQVoiceExtReq { + optional bytes qid = 1; + optional uint32 fmt = 2; + optional uint32 rate = 3; + optional uint32 bits = 4; + optional uint32 channel = 5; + optional uint32 pinyin = 6; +} + +message QQVoiceExtRsp { + optional bytes qid = 1; + optional int32 retcode = 2; + repeated QQVoiceResult result = 3; +} + +message QQVoiceResult { + optional bytes text = 1; + optional bytes pinyin = 2; + optional uint32 source = 3; +} + +message ShortVideoReqExtInfo { + optional uint32 cmd = 1; + optional uint64 sessionId = 2; + optional PicInfo thumbinfo = 3; + optional VideoInfo videoinfo = 4; + optional ShortVideoSureReqInfo shortvideoSureReq = 5; + optional bool isMergeCmdBeforeData = 6; +} + +message ShortVideoRspExtInfo { + optional uint32 cmd = 1; + optional uint64 sessionId = 2; + optional int32 retcode = 3; + optional bytes errinfo = 4; + optional PicInfo thumbinfo = 5; + optional VideoInfo videoinfo = 6; + optional ShortVideoSureRspInfo shortvideoSureRsp = 7; + optional uint32 retryFlag = 8; +} + +message ShortVideoSureReqInfo { + optional uint64 fromuin = 1; + optional uint32 chatType = 2; + optional uint64 touin = 3; + optional uint64 groupCode = 4; + optional uint32 clientType = 5; + optional PicInfo thumbinfo = 6; + repeated VideoInfo mergeVideoinfo = 7; + repeated VideoInfo dropVideoinfo = 8; + optional uint32 businessType = 9; + optional uint32 subBusinessType = 10; +} + +message ShortVideoSureRspInfo { + optional bytes fileid = 1; + optional bytes ukey = 2; + optional VideoInfo videoinfo = 3; + optional uint32 mergeCost = 4; +} + +message StoryVideoExtReq { +} + +message StoryVideoExtRsp { + optional int32 retcode = 1; + optional bytes msg = 2; + optional bytes cdnUrl = 3; + optional bytes fileKey = 4; + optional bytes fileId = 5; +} + +message UploadPicExtInfo { + optional bytes fileResid = 1; + optional bytes downloadUrl = 2; + optional bytes thumbDownloadUrl = 3; +} + +message VideoInfo { + optional uint32 idx = 1; + optional uint32 size = 2; + optional bytes binMd5 = 3; + optional uint32 format = 4; + optional uint32 resLen = 5; + optional uint32 resWidth = 6; + optional uint32 time = 7; + optional uint64 starttime = 8; + optional uint32 isAudio = 9; +} \ No newline at end of file