This commit is contained in:
withchao 2023-03-15 11:24:59 +08:00
parent 316fa10257
commit e9865539de
7 changed files with 144 additions and 140 deletions

View File

@ -1,6 +1,7 @@
package third package third
import ( import (
"OpenIM/pkg/common/tokenverify"
"OpenIM/pkg/proto/third" "OpenIM/pkg/proto/third"
"context" "context"
"time" "time"
@ -19,6 +20,11 @@ func (t *thirdServer) ConfirmPut(ctx context.Context, req *third.ConfirmPutReq)
} }
func (t *thirdServer) GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.GetUrlResp, error) { func (t *thirdServer) GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.GetUrlResp, error) {
if req.Expires <= 0 {
if err := tokenverify.CheckAdmin(ctx); err != nil {
return nil, err
}
}
return t.s3dataBase.GetUrl(ctx, req) return t.s3dataBase.GetUrl(ctx, req)
} }

View File

@ -92,16 +92,13 @@ type config struct {
OssRoleArn string `yaml:"OssRoleArn"` OssRoleArn string `yaml:"OssRoleArn"`
} }
Minio struct { Minio struct {
Bucket string `yaml:"bucket"` TempBucket string `yaml:"tempBucket"`
AppBucket string `yaml:"appBucket"` DataBucket string `yaml:"dataBucket"`
Location string `yaml:"location"` Location string `yaml:"location"`
Endpoint string `yaml:"endpoint"` Endpoint string `yaml:"endpoint"`
AccessKeyID string `yaml:"accessKeyID"` AccessKeyID string `yaml:"accessKeyID"`
SecretAccessKey string `yaml:"secretAccessKey"` SecretAccessKey string `yaml:"secretAccessKey"`
EndpointInner string `yaml:"endpointInner"` IsDistributedMod bool `yaml:"isDistributedMod"`
EndpointInnerEnable bool `yaml:"endpointInnerEnable"`
StorageTime int `yaml:"storageTime"`
IsDistributedMod bool `yaml:"isDistributedMod"`
} `yaml:"minio"` } `yaml:"minio"`
Aws struct { Aws struct {
AccessKeyID string `yaml:"accessKeyID"` AccessKeyID string `yaml:"accessKeyID"`

View File

@ -20,6 +20,12 @@ import (
"time" "time"
) )
const (
hashPrefix = "hash"
tempPrefix = "temp"
fragmentPrefix = "fragment_"
)
type S3Database interface { type S3Database interface {
ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*third.ApplyPutResp, error) ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*third.ApplyPutResp, error)
GetPut(ctx context.Context, req *third.GetPutReq) (*third.GetPutResp, error) GetPut(ctx context.Context, req *third.GetPutReq) (*third.GetPutResp, error)
@ -51,7 +57,7 @@ func (c *s3Database) today() string {
// fragmentName 根据序号生成文件名 // fragmentName 根据序号生成文件名
func (c *s3Database) fragmentName(index int) string { func (c *s3Database) fragmentName(index int) string {
return "fragment_" + strconv.Itoa(index+1) return fragmentPrefix + strconv.Itoa(index+1)
} }
// getFragmentNum 获取分片大小和分片数量 // getFragmentNum 获取分片大小和分片数量
@ -79,17 +85,12 @@ func (c *s3Database) CheckHash(hash string) error {
return err return err
} }
if len(val) != md5.Size { if len(val) != md5.Size {
return errors.New("hash value error") return errs.ErrArgs.Wrap("invalid hash")
} }
return nil return nil
} }
func (c *s3Database) urlName(name string) string { func (c *s3Database) urlName(name string) string {
//if name[0] != '/' {
// name = "/" + name
//}
//config.Config.Credential.ObjectURL + name
//return "http://127.0.0.1:8080" + name
return config.Config.Object.ApiURL + name return config.Config.Object.ApiURL + name
} }
@ -98,7 +99,7 @@ func (c *s3Database) UUID() string {
} }
func (c *s3Database) HashName(hash string) string { func (c *s3Database) HashName(hash string) string {
return path.Join("hash", c.today(), c.UUID()) return path.Join(hashPrefix, hash+"_"+c.today()+"_"+c.UUID())
} }
func (c *s3Database) isNotFound(err error) bool { func (c *s3Database) isNotFound(err error) bool {
@ -146,7 +147,7 @@ func (c *s3Database) ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*thi
ExpirationTime: expirationTime, ExpirationTime: expirationTime,
EffectiveTime: time.Now().Add(effective), EffectiveTime: time.Now().Add(effective),
} }
put.Path = path.Join("upload", c.today(), req.Hash, put.PutID) put.Path = path.Join(tempPrefix, c.today(), req.Hash, put.PutID)
putURLs := make([]string, 0, pack) putURLs := make([]string, 0, pack)
for i := 0; i < pack; i++ { for i := 0; i < pack; i++ {
url, err := c.obj.PresignedPutURL(ctx, &obj.ApplyPutArgs{ url, err := c.obj.PresignedPutURL(ctx, &obj.ApplyPutArgs{
@ -373,8 +374,12 @@ func (c *s3Database) GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.G
if err != nil { if err != nil {
return nil, err return nil, err
} }
u, err := c.obj.GetURL(ctx, hash.Bucket, hash.Name, time.Duration(req.Expires)*time.Millisecond)
if err != nil {
return nil, err
}
return &third.GetUrlResp{ return &third.GetUrlResp{
Url: c.obj.GetURL(hash.Bucket, hash.Name), Url: u,
Size: hash.Size, Size: hash.Size,
Hash: hash.Hash, Hash: hash.Hash,
}, nil }, nil

View File

@ -2,25 +2,18 @@ package obj
import ( import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
"OpenIM/pkg/utils"
"context" "context"
"errors" "errors"
"fmt" "fmt"
"github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials" "github.com/minio/minio-go/v7/pkg/credentials"
"github.com/minio/minio-go/v7/pkg/s3utils" "github.com/minio/minio-go/v7/pkg/s3utils"
"net/http"
"net/url" "net/url"
"time" "time"
) )
func NewMinioClient() {
}
func NewMinioInterface() (Interface, error) { func NewMinioInterface() (Interface, error) {
if true {
return &minioImpl{}, nil // todo
}
conf := config.Config.Object.Minio conf := config.Config.Object.Minio
u, err := url.Parse(conf.Endpoint) u, err := url.Parse(conf.Endpoint)
if err != nil { if err != nil {
@ -31,42 +24,43 @@ func NewMinioInterface() (Interface, error) {
} }
client, err := minio.New(u.Host, &minio.Options{ client, err := minio.New(u.Host, &minio.Options{
Creds: credentials.NewStaticV4(conf.AccessKeyID, conf.SecretAccessKey, ""), Creds: credentials.NewStaticV4(conf.AccessKeyID, conf.SecretAccessKey, ""),
Secure: false, Secure: u.Scheme == "https",
}) })
if err != nil { if err != nil {
return nil, fmt.Errorf("minio new client %w", err) return nil, fmt.Errorf("minio new client %w", err)
} }
// todo 初始化连接和桶 ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
defer cancel()
for _, bucket := range utils.Distinct([]string{conf.TempBucket, conf.DataBucket}) {
exists, err := client.BucketExists(ctx, bucket)
if err != nil {
return nil, fmt.Errorf("minio bucket %s exists %w", bucket, err)
}
if exists {
continue
}
opt := minio.MakeBucketOptions{
Region: conf.Location,
ObjectLocking: conf.IsDistributedMod,
}
if err := client.MakeBucket(ctx, conf.TempBucket, opt); err != nil {
return nil, fmt.Errorf("minio make bucket %s %w", bucket, err)
}
}
return &minioImpl{ return &minioImpl{
client: client, client: client,
//tempBucket: conf.Bucket, tempBucket: conf.TempBucket,
dataBucket: conf.DataBucket,
}, nil }, nil
} }
type minioImpl struct { type minioImpl struct {
tempBucket string // 上传桶 tempBucket string // 上传桶
permanentBucket string // 永久桶 dataBucket string // 永久桶
clearBucket string // 自动清理桶 urlstr string // 访问地址
urlstr string // 访问地址 client *minio.Client
client *minio.Client
} }
//func (m *minioImpl) Init() error {
// client, err := minio.New("127.0.0.1:9000", &minio.Options{
// Creds: credentials.NewStaticV4("minioadmin", "minioadmin", ""),
// Secure: false,
// })
// if err != nil {
// return fmt.Errorf("minio client error: %w", err)
// }
// m.urlstr = "http://127.0.0.1:9000"
// m.client = client
// m.tempBucket = "temp"
// m.permanentBucket = "permanent"
// m.clearBucket = "clear"
// return nil
//}
func (m *minioImpl) Name() string { func (m *minioImpl) Name() string {
return "minio" return "minio"
} }
@ -83,26 +77,20 @@ func (m *minioImpl) MinExpirationTime() time.Duration {
return time.Hour * 24 return time.Hour * 24
} }
func (m *minioImpl) AppendHeader() http.Header {
return map[string][]string{
"x-amz-object-append": {"true"},
}
}
func (m *minioImpl) TempBucket() string { func (m *minioImpl) TempBucket() string {
return m.tempBucket return m.tempBucket
} }
func (m *minioImpl) DataBucket() string { func (m *minioImpl) DataBucket() string {
return m.permanentBucket return m.dataBucket
} }
func (m *minioImpl) ClearBucket() string { func (m *minioImpl) GetURL(ctx context.Context, bucket string, name string, expires time.Duration) (string, error) {
return m.clearBucket u, err := m.client.PresignedGetObject(ctx, bucket, name, expires, nil)
} if err != nil {
return "", err
func (m *minioImpl) GetURL(bucket string, name string) string { }
return fmt.Sprintf("%s/%s/%s", m.urlstr, bucket, name) return u.String(), nil
} }
func (m *minioImpl) PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error) { func (m *minioImpl) PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error) {
@ -131,7 +119,6 @@ func (m *minioImpl) GetObjectInfo(ctx context.Context, args *BucketObject) (*Obj
return nil, err return nil, err
} }
return &ObjectInfo{ return &ObjectInfo{
URL: m.GetURL(args.Bucket, args.Name),
Size: info.Size, Size: info.Size,
Hash: info.ETag, Hash: info.ETag,
}, nil }, nil

View File

@ -20,10 +20,8 @@ type ApplyPutArgs struct {
} }
type ObjectInfo struct { type ObjectInfo struct {
URL string Size int64
Size int64 Hash string
Hash string
Expiration time.Time
} }
type Interface interface { type Interface interface {
@ -40,7 +38,8 @@ type Interface interface {
// DataBucket 永久存储的桶名 // DataBucket 永久存储的桶名
DataBucket() string DataBucket() string
// GetURL 通过桶名和对象名返回URL // GetURL 通过桶名和对象名返回URL
GetURL(bucket string, name string) string //GetURL(bucket string, name string) string
GetURL(ctx context.Context, bucket string, name string, expires time.Duration) (string, error)
// PresignedPutURL 申请上传,返回PUT的上传地址 // PresignedPutURL 申请上传,返回PUT的上传地址
PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error) PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error)
// GetObjectInfo 获取对象信息 // GetObjectInfo 获取对象信息

View File

@ -39,7 +39,7 @@ func (m *ApplyPutReq) Reset() { *m = ApplyPutReq{} }
func (m *ApplyPutReq) String() string { return proto.CompactTextString(m) } func (m *ApplyPutReq) String() string { return proto.CompactTextString(m) }
func (*ApplyPutReq) ProtoMessage() {} func (*ApplyPutReq) ProtoMessage() {}
func (*ApplyPutReq) Descriptor() ([]byte, []int) { func (*ApplyPutReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{0} return fileDescriptor_third_aac767b0c26bb83e, []int{0}
} }
func (m *ApplyPutReq) XXX_Unmarshal(b []byte) error { func (m *ApplyPutReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyPutReq.Unmarshal(m, b) return xxx_messageInfo_ApplyPutReq.Unmarshal(m, b)
@ -109,7 +109,7 @@ func (m *ApplyPutResp) Reset() { *m = ApplyPutResp{} }
func (m *ApplyPutResp) String() string { return proto.CompactTextString(m) } func (m *ApplyPutResp) String() string { return proto.CompactTextString(m) }
func (*ApplyPutResp) ProtoMessage() {} func (*ApplyPutResp) ProtoMessage() {}
func (*ApplyPutResp) Descriptor() ([]byte, []int) { func (*ApplyPutResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{1} return fileDescriptor_third_aac767b0c26bb83e, []int{1}
} }
func (m *ApplyPutResp) XXX_Unmarshal(b []byte) error { func (m *ApplyPutResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyPutResp.Unmarshal(m, b) return xxx_messageInfo_ApplyPutResp.Unmarshal(m, b)
@ -168,7 +168,7 @@ func (m *ConfirmPutReq) Reset() { *m = ConfirmPutReq{} }
func (m *ConfirmPutReq) String() string { return proto.CompactTextString(m) } func (m *ConfirmPutReq) String() string { return proto.CompactTextString(m) }
func (*ConfirmPutReq) ProtoMessage() {} func (*ConfirmPutReq) ProtoMessage() {}
func (*ConfirmPutReq) Descriptor() ([]byte, []int) { func (*ConfirmPutReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{2} return fileDescriptor_third_aac767b0c26bb83e, []int{2}
} }
func (m *ConfirmPutReq) XXX_Unmarshal(b []byte) error { func (m *ConfirmPutReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfirmPutReq.Unmarshal(m, b) return xxx_messageInfo_ConfirmPutReq.Unmarshal(m, b)
@ -206,7 +206,7 @@ func (m *ConfirmPutResp) Reset() { *m = ConfirmPutResp{} }
func (m *ConfirmPutResp) String() string { return proto.CompactTextString(m) } func (m *ConfirmPutResp) String() string { return proto.CompactTextString(m) }
func (*ConfirmPutResp) ProtoMessage() {} func (*ConfirmPutResp) ProtoMessage() {}
func (*ConfirmPutResp) Descriptor() ([]byte, []int) { func (*ConfirmPutResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{3} return fileDescriptor_third_aac767b0c26bb83e, []int{3}
} }
func (m *ConfirmPutResp) XXX_Unmarshal(b []byte) error { func (m *ConfirmPutResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfirmPutResp.Unmarshal(m, b) return xxx_messageInfo_ConfirmPutResp.Unmarshal(m, b)
@ -235,6 +235,7 @@ func (m *ConfirmPutResp) GetUrl() string {
type GetUrlReq struct { type GetUrlReq struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Expires int64 `protobuf:"varint,2,opt,name=expires" json:"expires,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -244,7 +245,7 @@ func (m *GetUrlReq) Reset() { *m = GetUrlReq{} }
func (m *GetUrlReq) String() string { return proto.CompactTextString(m) } func (m *GetUrlReq) String() string { return proto.CompactTextString(m) }
func (*GetUrlReq) ProtoMessage() {} func (*GetUrlReq) ProtoMessage() {}
func (*GetUrlReq) Descriptor() ([]byte, []int) { func (*GetUrlReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{4} return fileDescriptor_third_aac767b0c26bb83e, []int{4}
} }
func (m *GetUrlReq) XXX_Unmarshal(b []byte) error { func (m *GetUrlReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUrlReq.Unmarshal(m, b) return xxx_messageInfo_GetUrlReq.Unmarshal(m, b)
@ -271,6 +272,13 @@ func (m *GetUrlReq) GetName() string {
return "" return ""
} }
func (m *GetUrlReq) GetExpires() int64 {
if m != nil {
return m.Expires
}
return 0
}
type GetUrlResp struct { type GetUrlResp struct {
Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
Size int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` Size int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"`
@ -284,7 +292,7 @@ func (m *GetUrlResp) Reset() { *m = GetUrlResp{} }
func (m *GetUrlResp) String() string { return proto.CompactTextString(m) } func (m *GetUrlResp) String() string { return proto.CompactTextString(m) }
func (*GetUrlResp) ProtoMessage() {} func (*GetUrlResp) ProtoMessage() {}
func (*GetUrlResp) Descriptor() ([]byte, []int) { func (*GetUrlResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{5} return fileDescriptor_third_aac767b0c26bb83e, []int{5}
} }
func (m *GetUrlResp) XXX_Unmarshal(b []byte) error { func (m *GetUrlResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUrlResp.Unmarshal(m, b) return xxx_messageInfo_GetUrlResp.Unmarshal(m, b)
@ -336,7 +344,7 @@ func (m *GetPutReq) Reset() { *m = GetPutReq{} }
func (m *GetPutReq) String() string { return proto.CompactTextString(m) } func (m *GetPutReq) String() string { return proto.CompactTextString(m) }
func (*GetPutReq) ProtoMessage() {} func (*GetPutReq) ProtoMessage() {}
func (*GetPutReq) Descriptor() ([]byte, []int) { func (*GetPutReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{6} return fileDescriptor_third_aac767b0c26bb83e, []int{6}
} }
func (m *GetPutReq) XXX_Unmarshal(b []byte) error { func (m *GetPutReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetPutReq.Unmarshal(m, b) return xxx_messageInfo_GetPutReq.Unmarshal(m, b)
@ -375,7 +383,7 @@ func (m *GetPutFragment) Reset() { *m = GetPutFragment{} }
func (m *GetPutFragment) String() string { return proto.CompactTextString(m) } func (m *GetPutFragment) String() string { return proto.CompactTextString(m) }
func (*GetPutFragment) ProtoMessage() {} func (*GetPutFragment) ProtoMessage() {}
func (*GetPutFragment) Descriptor() ([]byte, []int) { func (*GetPutFragment) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{7} return fileDescriptor_third_aac767b0c26bb83e, []int{7}
} }
func (m *GetPutFragment) XXX_Unmarshal(b []byte) error { func (m *GetPutFragment) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetPutFragment.Unmarshal(m, b) return xxx_messageInfo_GetPutFragment.Unmarshal(m, b)
@ -425,7 +433,7 @@ func (m *GetPutResp) Reset() { *m = GetPutResp{} }
func (m *GetPutResp) String() string { return proto.CompactTextString(m) } func (m *GetPutResp) String() string { return proto.CompactTextString(m) }
func (*GetPutResp) ProtoMessage() {} func (*GetPutResp) ProtoMessage() {}
func (*GetPutResp) Descriptor() ([]byte, []int) { func (*GetPutResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{8} return fileDescriptor_third_aac767b0c26bb83e, []int{8}
} }
func (m *GetPutResp) XXX_Unmarshal(b []byte) error { func (m *GetPutResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetPutResp.Unmarshal(m, b) return xxx_messageInfo_GetPutResp.Unmarshal(m, b)
@ -498,7 +506,7 @@ func (m *GetSignalInvitationInfoReq) Reset() { *m = GetSignalInvitationI
func (m *GetSignalInvitationInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoReq) ProtoMessage() {} func (*GetSignalInvitationInfoReq) ProtoMessage() {}
func (*GetSignalInvitationInfoReq) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{9} return fileDescriptor_third_aac767b0c26bb83e, []int{9}
} }
func (m *GetSignalInvitationInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoReq.Unmarshal(m, b)
@ -537,7 +545,7 @@ func (m *GetSignalInvitationInfoResp) Reset() { *m = GetSignalInvitation
func (m *GetSignalInvitationInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoResp) ProtoMessage() {} func (*GetSignalInvitationInfoResp) ProtoMessage() {}
func (*GetSignalInvitationInfoResp) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{10} return fileDescriptor_third_aac767b0c26bb83e, []int{10}
} }
func (m *GetSignalInvitationInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoResp.Unmarshal(m, b)
@ -582,7 +590,7 @@ func (m *GetSignalInvitationInfoStartAppReq) Reset() { *m = GetSignalInv
func (m *GetSignalInvitationInfoStartAppReq) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoStartAppReq) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoStartAppReq) ProtoMessage() {} func (*GetSignalInvitationInfoStartAppReq) ProtoMessage() {}
func (*GetSignalInvitationInfoStartAppReq) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoStartAppReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{11} return fileDescriptor_third_aac767b0c26bb83e, []int{11}
} }
func (m *GetSignalInvitationInfoStartAppReq) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoStartAppReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoStartAppReq.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoStartAppReq.Unmarshal(m, b)
@ -621,7 +629,7 @@ func (m *GetSignalInvitationInfoStartAppResp) Reset() { *m = GetSignalIn
func (m *GetSignalInvitationInfoStartAppResp) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoStartAppResp) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoStartAppResp) ProtoMessage() {} func (*GetSignalInvitationInfoStartAppResp) ProtoMessage() {}
func (*GetSignalInvitationInfoStartAppResp) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoStartAppResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{12} return fileDescriptor_third_aac767b0c26bb83e, []int{12}
} }
func (m *GetSignalInvitationInfoStartAppResp) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoStartAppResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoStartAppResp.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoStartAppResp.Unmarshal(m, b)
@ -669,7 +677,7 @@ func (m *FcmUpdateTokenReq) Reset() { *m = FcmUpdateTokenReq{} }
func (m *FcmUpdateTokenReq) String() string { return proto.CompactTextString(m) } func (m *FcmUpdateTokenReq) String() string { return proto.CompactTextString(m) }
func (*FcmUpdateTokenReq) ProtoMessage() {} func (*FcmUpdateTokenReq) ProtoMessage() {}
func (*FcmUpdateTokenReq) Descriptor() ([]byte, []int) { func (*FcmUpdateTokenReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{13} return fileDescriptor_third_aac767b0c26bb83e, []int{13}
} }
func (m *FcmUpdateTokenReq) XXX_Unmarshal(b []byte) error { func (m *FcmUpdateTokenReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FcmUpdateTokenReq.Unmarshal(m, b) return xxx_messageInfo_FcmUpdateTokenReq.Unmarshal(m, b)
@ -727,7 +735,7 @@ func (m *FcmUpdateTokenResp) Reset() { *m = FcmUpdateTokenResp{} }
func (m *FcmUpdateTokenResp) String() string { return proto.CompactTextString(m) } func (m *FcmUpdateTokenResp) String() string { return proto.CompactTextString(m) }
func (*FcmUpdateTokenResp) ProtoMessage() {} func (*FcmUpdateTokenResp) ProtoMessage() {}
func (*FcmUpdateTokenResp) Descriptor() ([]byte, []int) { func (*FcmUpdateTokenResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{14} return fileDescriptor_third_aac767b0c26bb83e, []int{14}
} }
func (m *FcmUpdateTokenResp) XXX_Unmarshal(b []byte) error { func (m *FcmUpdateTokenResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FcmUpdateTokenResp.Unmarshal(m, b) return xxx_messageInfo_FcmUpdateTokenResp.Unmarshal(m, b)
@ -759,7 +767,7 @@ func (m *SetAppBadgeReq) Reset() { *m = SetAppBadgeReq{} }
func (m *SetAppBadgeReq) String() string { return proto.CompactTextString(m) } func (m *SetAppBadgeReq) String() string { return proto.CompactTextString(m) }
func (*SetAppBadgeReq) ProtoMessage() {} func (*SetAppBadgeReq) ProtoMessage() {}
func (*SetAppBadgeReq) Descriptor() ([]byte, []int) { func (*SetAppBadgeReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{15} return fileDescriptor_third_aac767b0c26bb83e, []int{15}
} }
func (m *SetAppBadgeReq) XXX_Unmarshal(b []byte) error { func (m *SetAppBadgeReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetAppBadgeReq.Unmarshal(m, b) return xxx_messageInfo_SetAppBadgeReq.Unmarshal(m, b)
@ -803,7 +811,7 @@ func (m *SetAppBadgeResp) Reset() { *m = SetAppBadgeResp{} }
func (m *SetAppBadgeResp) String() string { return proto.CompactTextString(m) } func (m *SetAppBadgeResp) String() string { return proto.CompactTextString(m) }
func (*SetAppBadgeResp) ProtoMessage() {} func (*SetAppBadgeResp) ProtoMessage() {}
func (*SetAppBadgeResp) Descriptor() ([]byte, []int) { func (*SetAppBadgeResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_85db3e967ff9b8c1, []int{16} return fileDescriptor_third_aac767b0c26bb83e, []int{16}
} }
func (m *SetAppBadgeResp) XXX_Unmarshal(b []byte) error { func (m *SetAppBadgeResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetAppBadgeResp.Unmarshal(m, b) return xxx_messageInfo_SetAppBadgeResp.Unmarshal(m, b)
@ -1146,55 +1154,56 @@ var _Third_serviceDesc = grpc.ServiceDesc{
Metadata: "third/third.proto", Metadata: "third/third.proto",
} }
func init() { proto.RegisterFile("third/third.proto", fileDescriptor_third_85db3e967ff9b8c1) } func init() { proto.RegisterFile("third/third.proto", fileDescriptor_third_aac767b0c26bb83e) }
var fileDescriptor_third_85db3e967ff9b8c1 = []byte{ var fileDescriptor_third_aac767b0c26bb83e = []byte{
// 746 bytes of a gzipped FileDescriptorProto // 754 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xc1, 0x6e, 0xda, 0x4a, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xdf, 0x6e, 0xd3, 0x3e,
0x14, 0x95, 0x21, 0xf0, 0xc2, 0x25, 0x8f, 0xbc, 0x8c, 0xa2, 0xf7, 0x90, 0x5f, 0x9a, 0x90, 0x89, 0x18, 0x55, 0xda, 0xb5, 0x5b, 0xbf, 0xee, 0xd7, 0xfd, 0x66, 0x4d, 0x10, 0x85, 0xb1, 0x75, 0x9e,
0x92, 0xb2, 0x09, 0x48, 0xa9, 0xd4, 0x56, 0x6a, 0x55, 0x35, 0x49, 0x45, 0x44, 0x55, 0x14, 0x64, 0x36, 0x7a, 0xb3, 0x56, 0x1a, 0x12, 0x7f, 0x04, 0x42, 0x6c, 0x43, 0x9d, 0x8a, 0xa8, 0x56, 0xa5,
0x42, 0x17, 0xdd, 0x54, 0x2e, 0x0c, 0x60, 0xc5, 0x8c, 0xa7, 0x33, 0xe3, 0xa4, 0xcd, 0x0f, 0x54, 0x2b, 0x17, 0xdc, 0xa0, 0xd0, 0xba, 0x6d, 0xb4, 0x34, 0x31, 0xb6, 0xb3, 0xc1, 0x5e, 0x00, 0x21,
0x55, 0x77, 0xfd, 0x9a, 0x2e, 0xfb, 0x01, 0xfd, 0xa8, 0xca, 0x63, 0x1b, 0x6c, 0xb0, 0x21, 0xe9, 0xee, 0x78, 0x1a, 0x2e, 0x79, 0x00, 0x1e, 0x0a, 0xc5, 0x49, 0xda, 0xa4, 0x4d, 0xda, 0x8d, 0x1b,
0xa6, 0xdd, 0x58, 0x33, 0xc7, 0xe7, 0x9e, 0x39, 0x73, 0x7d, 0xef, 0x05, 0xd8, 0x90, 0x23, 0x8b, 0xb8, 0x89, 0xec, 0x93, 0xf3, 0x1d, 0x1f, 0x7f, 0xf1, 0x71, 0x0b, 0xeb, 0x62, 0x68, 0xb2, 0x5e,
0xf7, 0xeb, 0xea, 0x59, 0x63, 0xdc, 0x91, 0x0e, 0x42, 0xe7, 0x8c, 0xd0, 0x66, 0xab, 0x43, 0xf8, 0x4d, 0x3e, 0xab, 0x94, 0x39, 0xc2, 0x41, 0xe8, 0x8c, 0x12, 0xbb, 0xd1, 0x6c, 0x13, 0x76, 0x49,
0x15, 0xe1, 0x35, 0xf5, 0x46, 0xbf, 0xef, 0x61, 0x87, 0xcd, 0xd6, 0xa1, 0x8f, 0xd6, 0xd9, 0xe5, 0x58, 0x55, 0xbe, 0xd1, 0x1e, 0x78, 0xd8, 0x41, 0xa3, 0x79, 0xe0, 0xa3, 0x35, 0x7a, 0x31, 0xa8,
0xb0, 0xae, 0xd8, 0x75, 0xd1, 0xbf, 0xbc, 0x16, 0xf5, 0x6b, 0xe1, 0x07, 0xe3, 0x2f, 0x1a, 0x14, 0x49, 0x76, 0x8d, 0xf7, 0x2e, 0xae, 0x78, 0xed, 0x8a, 0xfb, 0xc5, 0xf8, 0x9b, 0x02, 0xc5, 0x23,
0x8f, 0x19, 0xb3, 0x3f, 0xb6, 0x5d, 0x69, 0x90, 0xf7, 0x08, 0xc1, 0x0a, 0x35, 0xc7, 0xa4, 0xac, 0x4a, 0xad, 0xcf, 0x2d, 0x57, 0xe8, 0xe4, 0x23, 0x42, 0xb0, 0x64, 0x1b, 0x23, 0xa2, 0x2a, 0x65,
0x55, 0xb4, 0x6a, 0xc1, 0x50, 0x6b, 0x0f, 0x13, 0xd6, 0x0d, 0x29, 0x67, 0x2a, 0x5a, 0x35, 0x6b, 0xa5, 0x52, 0xd0, 0xe5, 0xd8, 0xc3, 0xb8, 0x79, 0x4d, 0xd4, 0x4c, 0x59, 0xa9, 0x64, 0x75, 0x39,
0xa8, 0xb5, 0x87, 0x8d, 0x4c, 0x31, 0x2a, 0x67, 0x7d, 0x9e, 0xb7, 0x46, 0x18, 0xd6, 0x06, 0xdc, 0xf6, 0xb0, 0xa1, 0xc1, 0x87, 0x6a, 0xd6, 0xe7, 0x79, 0x63, 0x84, 0x61, 0xb5, 0xcf, 0x8c, 0xc1,
0x1c, 0x8e, 0x09, 0x95, 0x1d, 0x8f, 0xbf, 0xa2, 0xf8, 0x31, 0x0c, 0x6d, 0x41, 0xa1, 0x67, 0x13, 0x88, 0xd8, 0xa2, 0xed, 0xf1, 0x97, 0x24, 0x3f, 0x86, 0xa1, 0x4d, 0x28, 0x74, 0x2d, 0x62, 0xd8,
0x93, 0x5e, 0x58, 0x63, 0x52, 0xce, 0x29, 0xc2, 0x14, 0xc0, 0x12, 0xd6, 0xa6, 0x66, 0x04, 0x43, 0xe7, 0xe6, 0x88, 0xa8, 0x39, 0x49, 0x98, 0x00, 0x58, 0xc0, 0xea, 0xc4, 0x0c, 0xa7, 0xe8, 0x7f,
0xff, 0x40, 0xd6, 0xe5, 0x76, 0x60, 0xc6, 0x5b, 0xa2, 0x4d, 0xc8, 0x31, 0x57, 0x36, 0x5f, 0x28, 0xc8, 0xba, 0xcc, 0x0a, 0xcc, 0x78, 0x43, 0xb4, 0x01, 0x39, 0xea, 0x8a, 0xc6, 0x2b, 0x69, 0xa6,
0x33, 0x05, 0xc3, 0xdf, 0xcc, 0x9d, 0x9c, 0x4d, 0x38, 0xb9, 0x0c, 0x7f, 0xb5, 0x5d, 0xd9, 0x35, 0xa0, 0xfb, 0x93, 0x99, 0x95, 0xb3, 0x09, 0x2b, 0xab, 0xb0, 0xdc, 0x72, 0x45, 0x47, 0x7f, 0xc3,
0x5e, 0x89, 0x72, 0xae, 0x92, 0xad, 0x16, 0x8c, 0x70, 0x8b, 0xf7, 0xe1, 0xef, 0x53, 0x87, 0x0e, 0xd5, 0x5c, 0x39, 0x5b, 0x29, 0xe8, 0xe1, 0x14, 0xef, 0xc1, 0x7f, 0x27, 0x8e, 0xdd, 0x37, 0xd9,
0x2c, 0x3e, 0x0e, 0x92, 0x30, 0x39, 0x44, 0x8b, 0x1c, 0x82, 0x31, 0x94, 0xa2, 0xb4, 0x24, 0x7b, 0x28, 0x68, 0xc2, 0x78, 0x11, 0x25, 0xb2, 0x08, 0xc6, 0x50, 0x8a, 0xd2, 0x92, 0xec, 0xe1, 0xa7,
0x78, 0x07, 0x0a, 0x67, 0x44, 0x76, 0xb9, 0x9d, 0x92, 0x4b, 0xdc, 0x00, 0x08, 0x09, 0x89, 0xf7, 0x50, 0x38, 0x25, 0xa2, 0xc3, 0xac, 0xb4, 0x5e, 0xaa, 0xb0, 0x4c, 0x3e, 0x51, 0x93, 0x11, 0x1e,
0xbb, 0x65, 0xae, 0xf1, 0xae, 0x3a, 0x68, 0xa1, 0xdf, 0xc7, 0x50, 0xf2, 0x29, 0x8d, 0x20, 0x0d, 0xb4, 0x33, 0x9c, 0xe2, 0x3a, 0x40, 0x58, 0x9a, 0xb8, 0xf3, 0x1b, 0x7e, 0x05, 0xbc, 0x23, 0x2d,
0x13, 0x71, 0x2d, 0x41, 0x3c, 0x13, 0x11, 0xff, 0xa1, 0x29, 0x97, 0xe1, 0x35, 0x7f, 0x6b, 0x4d, 0xcc, 0xdd, 0xc9, 0x13, 0x28, 0xf9, 0x94, 0x7a, 0xd0, 0xa0, 0xb1, 0xb8, 0x92, 0x20, 0x9e, 0x89,
0xa0, 0xe7, 0x50, 0x08, 0xd9, 0xa2, 0x9c, 0xaf, 0x64, 0xab, 0xc5, 0x23, 0x5c, 0x9b, 0x2f, 0xf9, 0x88, 0xff, 0x52, 0xa4, 0xcb, 0xb0, 0x01, 0x7f, 0xf5, 0xb4, 0xa0, 0x97, 0x50, 0x08, 0xd9, 0x5c,
0x5a, 0xfc, 0xae, 0xc6, 0x34, 0x08, 0x3f, 0x03, 0xfd, 0x8c, 0xc8, 0x8e, 0x35, 0xa4, 0xa6, 0xdd, 0xcd, 0x97, 0xb3, 0x95, 0xe2, 0x21, 0xae, 0xce, 0x86, 0xa1, 0x1a, 0xdf, 0xab, 0x3e, 0x29, 0xc2,
0xa4, 0x57, 0x96, 0x34, 0xa5, 0xe5, 0xd0, 0x26, 0x1d, 0x38, 0x5e, 0xf2, 0x2a, 0x50, 0x3c, 0xb5, 0x2f, 0x40, 0x3b, 0x25, 0xa2, 0x6d, 0x0e, 0x6c, 0xc3, 0x6a, 0xd8, 0x97, 0xa6, 0x30, 0x84, 0xe9,
0x2d, 0x42, 0x65, 0x4b, 0x0c, 0x27, 0x29, 0x8c, 0x42, 0xf8, 0x9b, 0x06, 0xff, 0xa7, 0x0a, 0x08, 0xd8, 0x0d, 0xbb, 0xef, 0x78, 0xcd, 0x2b, 0x43, 0xf1, 0xc4, 0x32, 0x89, 0x2d, 0x9a, 0x7c, 0x30,
0x86, 0x5e, 0x42, 0xc9, 0x8a, 0xa1, 0x4a, 0x64, 0xce, 0xa6, 0xea, 0xbc, 0xda, 0x4c, 0xfc, 0x4c, 0x6e, 0x61, 0x14, 0xc2, 0x3f, 0x14, 0xb8, 0x97, 0x2a, 0xc0, 0x29, 0x7a, 0x0d, 0x25, 0x33, 0x86,
0x24, 0x6a, 0xc1, 0xba, 0x33, 0x18, 0xd8, 0x16, 0x25, 0x6d, 0x57, 0x8c, 0x94, 0x58, 0x46, 0x89, 0x4a, 0x91, 0x19, 0x9b, 0x32, 0x93, 0xd5, 0xa9, 0xfa, 0xa9, 0x4a, 0xd4, 0x84, 0x35, 0xa7, 0xdf,
0xed, 0x25, 0x89, 0x9d, 0xc7, 0xa9, 0xc6, 0x6c, 0x2c, 0x7e, 0x0a, 0x38, 0xc5, 0x79, 0x47, 0x9a, 0xb7, 0x4c, 0x9b, 0xb4, 0x5c, 0x3e, 0x94, 0x62, 0x19, 0x29, 0xb6, 0x9b, 0x24, 0x76, 0x16, 0xa7,
0x5c, 0x1e, 0x33, 0xe6, 0xa5, 0xe0, 0x5f, 0xc8, 0xbb, 0x82, 0xf0, 0xc9, 0xed, 0x83, 0x1d, 0xfe, 0xea, 0xd3, 0xb5, 0xf8, 0x39, 0xe0, 0x14, 0xe7, 0x6d, 0x61, 0x30, 0x71, 0x44, 0xa9, 0xd7, 0x82,
0xae, 0xc1, 0xde, 0xd2, 0xf0, 0x3f, 0x3b, 0x01, 0x9f, 0x35, 0xd8, 0x68, 0xf4, 0xc6, 0x5d, 0xd6, 0x3b, 0x90, 0x77, 0x39, 0x61, 0xe3, 0xdd, 0x07, 0x33, 0xfc, 0x53, 0x81, 0xdd, 0x85, 0xe5, 0xff,
0x37, 0x25, 0xb9, 0x70, 0x2e, 0x09, 0xf5, 0x2e, 0xbc, 0x0d, 0xd0, 0xb6, 0x4d, 0x39, 0x70, 0xf8, 0x76, 0x03, 0xbe, 0x2a, 0xb0, 0x5e, 0xef, 0x8e, 0x3a, 0xb4, 0x67, 0x08, 0x72, 0xee, 0x5c, 0x10,
0x38, 0xb8, 0x74, 0xce, 0x88, 0x20, 0x48, 0x87, 0xd5, 0x46, 0x6f, 0xac, 0xe8, 0x41, 0x63, 0x4c, 0xdb, 0xdb, 0xf0, 0x16, 0x40, 0xcb, 0x32, 0x44, 0xdf, 0x61, 0xa3, 0x60, 0xd3, 0x39, 0x3d, 0x82,
0xf6, 0xde, 0x1c, 0x31, 0x7b, 0x3d, 0xc7, 0xa5, 0x32, 0x28, 0xf4, 0x70, 0xeb, 0xa9, 0x92, 0x0f, 0x20, 0x0d, 0x56, 0xea, 0xdd, 0x91, 0xa4, 0x07, 0xc1, 0x18, 0xcf, 0xbd, 0x6c, 0x1b, 0xdd, 0xae,
0xcc, 0xe2, 0x44, 0x15, 0xb2, 0x5f, 0xe9, 0x11, 0x04, 0x6f, 0x02, 0x9a, 0xb5, 0x22, 0x18, 0x6e, 0xe3, 0xda, 0x22, 0x38, 0xe8, 0xe1, 0xd4, 0x53, 0xf5, 0x63, 0x2e, 0x0f, 0xb2, 0x7f, 0xd2, 0x23,
0x43, 0xa9, 0x43, 0xbc, 0x54, 0x9e, 0x98, 0xfd, 0x21, 0x59, 0xf0, 0x39, 0xd0, 0x01, 0x94, 0x8e, 0x08, 0xde, 0x00, 0x34, 0x6d, 0x85, 0x53, 0xdc, 0x82, 0x52, 0x9b, 0x78, 0xad, 0x3c, 0x36, 0x7a,
0x19, 0xeb, 0x52, 0x4e, 0xcc, 0xfe, 0xa9, 0x32, 0x90, 0x51, 0xce, 0x67, 0x50, 0xbc, 0x01, 0xeb, 0x03, 0x32, 0xe7, 0x73, 0xa0, 0x7d, 0x28, 0x1d, 0x51, 0xda, 0xb1, 0x19, 0x31, 0x7a, 0x27, 0xd2,
0x31, 0x45, 0xc1, 0x8e, 0x3e, 0xe5, 0x21, 0xa7, 0xda, 0x04, 0xb5, 0x60, 0x35, 0x1c, 0xb1, 0x68, 0x40, 0x46, 0x3a, 0x9f, 0x42, 0xf1, 0x3a, 0xac, 0xc5, 0x14, 0x39, 0x3d, 0xfc, 0x92, 0x87, 0x9c,
0x27, 0xa9, 0x8f, 0x22, 0xbf, 0x06, 0x7a, 0x65, 0x31, 0x41, 0x30, 0x74, 0x06, 0x79, 0xbf, 0xf1, 0x8c, 0x09, 0x6a, 0xc2, 0x4a, 0x78, 0xf9, 0xa2, 0xed, 0xa4, 0x1c, 0x45, 0x7e, 0x27, 0xb4, 0xf2,
0xd0, 0xbd, 0xf4, 0xa6, 0xf4, 0xa4, 0xb6, 0x17, 0xbd, 0x16, 0x0c, 0x75, 0x00, 0xa6, 0xd3, 0x15, 0x7c, 0x02, 0xa7, 0xe8, 0x14, 0xf2, 0x7e, 0xf0, 0xd0, 0xfd, 0xf4, 0x50, 0x7a, 0x52, 0x5b, 0xf3,
0xed, 0x26, 0xb1, 0x63, 0x43, 0x5a, 0xc7, 0xcb, 0x28, 0x13, 0x77, 0x5d, 0x6e, 0xa7, 0xba, 0xf3, 0x5e, 0x73, 0x8a, 0xda, 0x00, 0x93, 0x7b, 0x17, 0xed, 0x24, 0xb1, 0x63, 0xd7, 0xb7, 0x86, 0x17,
0x47, 0x75, 0xaa, 0xbb, 0x70, 0x50, 0xdf, 0xc0, 0x7f, 0x29, 0x8d, 0x80, 0x6a, 0x29, 0xa1, 0x29, 0x51, 0xc6, 0xee, 0x3a, 0xcc, 0x4a, 0x75, 0xe7, 0x5f, 0xe2, 0xa9, 0xee, 0xc2, 0x8b, 0xfa, 0x1a,
0xf3, 0x46, 0xaf, 0xdf, 0x89, 0x2f, 0x18, 0xfa, 0xaa, 0xc1, 0xce, 0x92, 0x2e, 0x44, 0x0f, 0xef, 0xee, 0xa6, 0x04, 0x01, 0x55, 0x53, 0x4a, 0x53, 0xee, 0x1b, 0xad, 0x76, 0x2b, 0x3e, 0xa7, 0xe8,
0x20, 0x1a, 0xe9, 0x7c, 0xfd, 0xd1, 0x2f, 0xc5, 0x09, 0x86, 0xde, 0x42, 0x29, 0x5e, 0xcb, 0x68, 0xbb, 0x02, 0xdb, 0x0b, 0x52, 0x88, 0x1e, 0xdd, 0x42, 0x34, 0x92, 0x7c, 0xed, 0xf1, 0x1f, 0xd5,
0x3f, 0x49, 0x6a, 0xae, 0xf5, 0xf4, 0x83, 0xdb, 0xd0, 0x04, 0x43, 0xaf, 0xa1, 0x18, 0x29, 0x62, 0x71, 0x8a, 0xde, 0x43, 0x29, 0x7e, 0x96, 0xd1, 0x5e, 0x92, 0xd4, 0x4c, 0xf4, 0xb4, 0xfd, 0x9b,
0x94, 0xf8, 0xb5, 0xe3, 0x7d, 0xa3, 0xef, 0x2d, 0xe5, 0x08, 0x76, 0xb2, 0xfd, 0x66, 0xcb, 0x67, 0xd0, 0x38, 0x45, 0x6f, 0xa1, 0x18, 0x39, 0xc4, 0x28, 0xf1, 0x6b, 0xc7, 0x73, 0xa3, 0xed, 0x2e,
0x45, 0xfe, 0x13, 0x29, 0xe6, 0x13, 0xf5, 0x7c, 0x97, 0x57, 0xd0, 0x83, 0x9f, 0x01, 0x00, 0x00, 0xe4, 0x70, 0x7a, 0xbc, 0xf5, 0x6e, 0xd3, 0x67, 0x45, 0xfe, 0x2d, 0x49, 0xe6, 0x33, 0xf9, 0xfc,
0xff, 0xff, 0x14, 0x1d, 0x29, 0xf8, 0x69, 0x09, 0x00, 0x00, 0x90, 0x97, 0xd0, 0xc3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x87, 0x96, 0xee, 0x73, 0x83, 0x09,
0x00, 0x00,
} }

View File

@ -28,7 +28,8 @@ message ConfirmPutResp {
} }
message GetUrlReq { message GetUrlReq {
string name = 1; string name = 1; //
int64 expires = 2; // url有效时间
} }
message GetUrlResp { message GetUrlResp {