From 2b5f099b36dba545fd1b177990f76b7106280239 Mon Sep 17 00:00:00 2001 From: veto9292 Date: Tue, 9 Jun 2026 14:06:29 +0330 Subject: [PATCH] feat: add GetLANIP RPC method and LANIPResponse message --- docs/hiddifyrpc.md | 681 ++++++++++++++++++---------- v2/ezytel/ezytel.pb.go | 368 ++++++++++----- v2/ezytel/ezytel_service.pb.go | 49 +- v2/ezytel/ezytel_service_grpc.pb.go | 14 +- v2/hcore/commands.go | 64 +++ v2/hcore/hcore.pb.go | 172 ++++--- v2/hcore/hcore.proto | 6 +- v2/hcore/hcore_service.pb.go | 64 +-- v2/hcore/hcore_service.proto | 3 +- v2/hcore/hcore_service_grpc.pb.go | 38 ++ 10 files changed, 1005 insertions(+), 454 deletions(-) diff --git a/docs/hiddifyrpc.md b/docs/hiddifyrpc.md index a9624080e..886c5a8e6 100644 --- a/docs/hiddifyrpc.md +++ b/docs/hiddifyrpc.md @@ -11,6 +11,25 @@ - [Outbound](#config-Outbound) - [Protocol](#config-Protocol) +- [v2/ezytel/ezytel.proto](#v2_ezytel_ezytel-proto) + - [ChannelInfo](#ezytel-ChannelInfo) + - [ChannelInfoRequest](#ezytel-ChannelInfoRequest) + - [ChannelMessagesRequest](#ezytel-ChannelMessagesRequest) + - [ChannelMessagesResponse](#ezytel-ChannelMessagesResponse) + - [ParseChannelsRequest](#ezytel-ParseChannelsRequest) + - [ParseChannelsResponse](#ezytel-ParseChannelsResponse) + - [ProxyImageRequest](#ezytel-ProxyImageRequest) + - [ProxyImageResponse](#ezytel-ProxyImageResponse) + +- [v2/ezytel/ezytel_service.proto](#v2_ezytel_ezytel_service-proto) + - [Ezytel](#ezytel-Ezytel) + +- [v2/hcommon/common.proto](#v2_hcommon_common-proto) + - [Empty](#hcommon-Empty) + - [Response](#hcommon-Response) + + - [ResponseCode](#hcommon-ResponseCode) + - [v2/hcore/hcore.proto](#v2_hcore_hcore-proto) - [ChangeHiddifySettingsRequest](#hcore-ChangeHiddifySettingsRequest) - [CloseRequest](#hcore-CloseRequest) @@ -19,6 +38,7 @@ - [GenerateConfigResponse](#hcore-GenerateConfigResponse) - [GenerateWarpConfigRequest](#hcore-GenerateWarpConfigRequest) - [IpInfo](#hcore-IpInfo) + - [LANIPResponse](#hcore-LANIPResponse) - [LogMessage](#hcore-LogMessage) - [LogRequest](#hcore-LogRequest) - [OutboundGroup](#hcore-OutboundGroup) @@ -54,6 +74,13 @@ - [v2/hcore/tunnelservice/tunnel_service.proto](#v2_hcore_tunnelservice_tunnel_service-proto) - [TunnelService](#tunnelservice-TunnelService) +- [v2/hello/hello.proto](#v2_hello_hello-proto) + - [HelloRequest](#hello-HelloRequest) + - [HelloResponse](#hello-HelloResponse) + +- [v2/hello/hello_service.proto](#v2_hello_hello_service-proto) + - [Hello](#hello-Hello) + - [v2/hiddifyoptions/hiddify_options.proto](#v2_hiddifyoptions_hiddify_options-proto) - [DNSOptions](#hiddifyoptions-DNSOptions) - [HiddifyOptions](#hiddifyoptions-HiddifyOptions) @@ -70,6 +97,11 @@ - [DomainStrategy](#hiddifyoptions-DomainStrategy) +- [v2/profile/profile.proto](#v2_profile_profile-proto) + - [ProfileEntity](#profile-ProfileEntity) + - [ProfileOptions](#profile-ProfileOptions) + - [SubscriptionInfo](#profile-SubscriptionInfo) + - [v2/profile/profile_service.proto](#v2_profile_profile_service-proto) - [AddProfileRequest](#profile-AddProfileRequest) - [MultiProfilesResponse](#profile-MultiProfilesResponse) @@ -78,27 +110,6 @@ - [ProfileService](#profile-ProfileService) -- [v2/profile/profile.proto](#v2_profile_profile-proto) - - [ProfileEntity](#profile-ProfileEntity) - - [ProfileOptions](#profile-ProfileOptions) - - [SubscriptionInfo](#profile-SubscriptionInfo) - -- [v2/hcommon/common.proto](#v2_hcommon_common-proto) - - [Empty](#hcommon-Empty) - - [Response](#hcommon-Response) - - - [ResponseCode](#hcommon-ResponseCode) - -- [v2/hello/hello_service.proto](#v2_hello_hello_service-proto) - - [Hello](#hello-Hello) - -- [v2/hello/hello.proto](#v2_hello_hello-proto) - - [HelloRequest](#hello-HelloRequest) - - [HelloResponse](#hello-HelloResponse) - -- [extension/extension_service.proto](#extension_extension_service-proto) - - [ExtensionHostService](#extension-ExtensionHostService) - - [extension/extension.proto](#extension_extension-proto) - [EditExtensionRequest](#extension-EditExtensionRequest) - [ExtensionActionResult](#extension-ExtensionActionResult) @@ -112,6 +123,9 @@ - [ExtensionResponseType](#extension-ExtensionResponseType) +- [extension/extension_service.proto](#extension_extension_service-proto) + - [ExtensionHostService](#extension-ExtensionHostService) + - [Scalar Value Types](#scalar-value-types) @@ -222,6 +236,246 @@ + +

Top

+ +## v2/ezytel/ezytel.proto + + + + + +### ChannelInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | | +| description | [string](#string) | | Plain-text preview of the most recent post, or "فایل" if it is a media post. | +| avatar_path | [string](#string) | | By default this is a "data:image/jpeg;base64,…" URI ready for <img src>. When the request set disable_inline_images=true it is the legacy "cache/<md5>.jpg" file path relative to GetCacheDir(). Empty if the avatar could not be fetched. | +| date | [int64](#int64) | | Unix epoch seconds of the most recent post. | +| date_str | [string](#string) | | Persian-calendar formatted "MM-DD HH:mm" string for the most recent post. | +| newmsg | [string](#string) | | Unread badge, e.g. "+12" or "+99" (capped). Empty when caught up. | +| last_post_id | [int64](#int64) | | Last post id observed on the channel page (server-side cookie replacement). | +| ok | [bool](#bool) | | True when the channel page was reachable and parsed; false if served from stale cache (newmsg is then forced to "OFF"). | + + + + + + + + +### ChannelInfoRequest +Request the metadata card of a Telegram public channel +(name, description preview, avatar, last-post timestamp, unread badge). + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| channel_id | [string](#string) | | Channel id, e.g. "durov" — without "@" or "t.me/". | +| last_read | [int64](#int64) | | Last post id the client has already read; used to compute the unread badge (newmsg). 0 means "everything is unread". | +| disable_inline_images | [bool](#bool) | | By default avatar_path in the response carries a "data:image/jpeg;base64,…" URI ready to drop into <img src>. Set this to true to opt out and receive the legacy "cache/<md5>.jpg" server-side file path instead. | + + + + + + + + +### ChannelMessagesRequest +Request a slab of HTML for the channel timeline. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| channel_id | [string](#string) | | | +| before | [int64](#int64) | | 0 = latest page; otherwise the "before" cursor returned by Telegram (the data-before attribute of messages_more_wrap). | +| disable_inline_images | [bool](#bool) | | By default every image URL in the returned html and the channel_avatar field is a "data:image/jpeg;base64,…" URI ready to render. Set this to true to opt out: html and channel_avatar will both carry the legacy "proxy.php?url=<hex>" placeholder form, requiring per-image ProxyImage calls. | + + + + + + + + +### ChannelMessagesResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| html | [string](#string) | | Pre-rendered HTML fragment ready to be injected into .main_block. Dates have been converted to the Persian calendar. By default <img src> and background-image:url(...) carry inline "data:image/jpeg;base64,…" payloads; with disable_inline_images=true they carry "proxy.php?url=<hex>" placeholders. | +| channel_avatar | [string](#string) | | Channel avatar embedded in the header (only set when before == 0). "data:image/jpeg;base64,…" by default, "proxy.php?url=<hex>" placeholder when disable_inline_images=true. | +| last_post_id | [int64](#int64) | | Last post id seen on the page (mirrors the lastread_<chid> cookie). | + + + + + + + + +### ParseChannelsRequest +Parse the operator-supplied newline-separated channel list into the +normalised ids the other RPCs accept. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| raw | [string](#string) | | | + + + + + + + + +### ParseChannelsResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| channel_ids | [string](#string) | repeated | | + + + + + + + + +### ProxyImageRequest +Fetch a Telegram-hosted image through the translate.goog domain front +and cache it locally. Mirrors proxy.php?url=<hex>. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| hex_url | [string](#string) | | Hex-encoded source URL without the "https://" prefix, exactly as the PHP version expected (bin2hex of the host+path). | + + + + + + + + +### ProxyImageResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| data | [bytes](#bytes) | | | +| content_type | [string](#string) | | | +| cache_name | [string](#string) | | Local cache filename (md5(url) + ".jpg") for clients that prefer to reload from disk instead of holding the bytes. | + + + + + + + + + + + + + + + + +

Top

+ +## v2/ezytel/ezytel_service.proto + + + + + + + + + + + +### Ezytel +Ezytel exposes the Telegram public-channel viewer originally shipped as +the ezytel.zip PHP app. Traffic to t.me is routed through Google's +translate.goog domain front so it reaches users behind GFW-style filters. + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------ | ------------- | ------------| +| GetChannelInfo | [ChannelInfoRequest](#ezytel-ChannelInfoRequest) | [ChannelInfo](#ezytel-ChannelInfo) | | +| GetChannelMessages | [ChannelMessagesRequest](#ezytel-ChannelMessagesRequest) | [ChannelMessagesResponse](#ezytel-ChannelMessagesResponse) | | +| ProxyImage | [ProxyImageRequest](#ezytel-ProxyImageRequest) | [ProxyImageResponse](#ezytel-ProxyImageResponse) | | +| ParseChannels | [ParseChannelsRequest](#ezytel-ParseChannelsRequest) | [ParseChannelsResponse](#ezytel-ParseChannelsResponse) | | + + + + + + +

Top

+ +## v2/hcommon/common.proto + + + + + +### Empty + + + + + + + + + +### Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [ResponseCode](#hcommon-ResponseCode) | | | +| message | [string](#string) | | | + + + + + + + + + + +### ResponseCode + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| OK | 0 | | +| FAILED | 1 | | +| AUTH_NEED | 2 | | + + + + + + + + + +

Top

@@ -348,6 +602,21 @@ + + +### LANIPResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| ip | [string](#string) | | | + + + + + + ### LogMessage @@ -807,6 +1076,7 @@ Define the message equivalent of SetupParameters | SetSystemProxyEnabled | [SetSystemProxyEnabledRequest](#hcore-SetSystemProxyEnabledRequest) | [.hcommon.Response](#hcommon-Response) | | | LogListener | [LogRequest](#hcore-LogRequest) | [LogMessage](#hcore-LogMessage) stream | | | Close | [CloseRequest](#hcore-CloseRequest) | [.hcommon.Empty](#hcommon-Empty) | | +| GetLANIP | [.hcommon.Empty](#hcommon-Empty) | [LANIPResponse](#hcore-LANIPResponse) | | @@ -893,28 +1163,101 @@ Define the message equivalent of SetupParameters - +

Top

-## v2/hiddifyoptions/hiddify_options.proto +## v2/hello/hello.proto - + + +### HelloRequest -### DNSOptions -DNSOptions defines DNS-related configuration options. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| remote_dns_address | [string](#string) | | Remote DNS server address. | -| remote_dns_domain_strategy | [DomainStrategy](#hiddifyoptions-DomainStrategy) | | Strategy for resolving domains with remote DNS. | -| direct_dns_address | [string](#string) | | Direct DNS server address. | -| direct_dns_domain_strategy | [DomainStrategy](#hiddifyoptions-DomainStrategy) | | Strategy for resolving domains with direct DNS. | -| independent_dns_cache | [bool](#bool) | | If true, enables independent DNS caching. | -| enable_fake_dns | [bool](#bool) | | If true, enables fake DNS responses. | -| enable_dns_routing | [bool](#bool) | | If true, enables DNS routing. | +| name | [string](#string) | | | + + + + + + + + +### HelloResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| message | [string](#string) | | | + + + + + + + + + + + + + + + + +

Top

+ +## v2/hello/hello_service.proto + + + + + + + + + + + +### Hello + + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------ | ------------- | ------------| +| SayHello | [HelloRequest](#hello-HelloRequest) | [HelloResponse](#hello-HelloResponse) | | +| SayHelloStream | [HelloRequest](#hello-HelloRequest) stream | [HelloResponse](#hello-HelloResponse) stream | | + + + + + + +

Top

+ +## v2/hiddifyoptions/hiddify_options.proto + + + + + +### DNSOptions +DNSOptions defines DNS-related configuration options. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| remote_dns_address | [string](#string) | | Remote DNS server address. | +| remote_dns_domain_strategy | [DomainStrategy](#hiddifyoptions-DomainStrategy) | | Strategy for resolving domains with remote DNS. | +| direct_dns_address | [string](#string) | | Direct DNS server address. | +| direct_dns_domain_strategy | [DomainStrategy](#hiddifyoptions-DomainStrategy) | | Strategy for resolving domains with direct DNS. | +| independent_dns_cache | [bool](#bool) | | If true, enables independent DNS caching. | +| enable_fake_dns | [bool](#bool) | | If true, enables fake DNS responses. | +| enable_dns_routing | [bool](#bool) | | If true, enables DNS routing. | @@ -1171,109 +1514,6 @@ DomainStrategy defines the strategies for IP address preference when resolving d - -

Top

- -## v2/profile/profile_service.proto - - - - - -### AddProfileRequest -AddProfileRequest is the request message for adding a profile -via URL or content. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| url | [string](#string) | | The URL of the profile to add. | -| content | [string](#string) | | The profile content to add (used if 'url' is empty). | -| name | [string](#string) | | The optional name of the profile. | -| mark_as_active | [bool](#bool) | | Whether to mark the profile as active. | - - - - - - - - -### MultiProfilesResponse -MultiProfilesResponse is the response message for fetching multi profiles. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| profiles | [ProfileEntity](#profile-ProfileEntity) | repeated | A list of profile entities. | -| response_code | [hcommon.ResponseCode](#hcommon-ResponseCode) | | The response code indicating success or failure. | -| message | [string](#string) | | A message indicating the result or error, if any. | - - - - - - - - -### ProfileRequest -ProfileRequest is the request message for fetching or identifying -a profile by ID, name, or URL. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| id | [string](#string) | | The ID of the profile to fetch (Fastest and recommended). | -| name | [string](#string) | | The name of the profile to fetch (if both 'id' and 'url' are empty). | -| url | [string](#string) | | The URL of the profile to fetch (if both 'id' and 'name' are empty). | - - - - - - - - -### ProfileResponse -ProfileResponse is the response message for profile service operations. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| profile | [ProfileEntity](#profile-ProfileEntity) | | The profile entity, populated in successful operations. | -| response_code | [hcommon.ResponseCode](#hcommon-ResponseCode) | | The response code indicating success or failure. | -| message | [string](#string) | | A message indicating the result or error, if any. | - - - - - - - - - - - - - - -### ProfileService -ProfileService defines the RPC methods available for managing profiles. - -| Method Name | Request Type | Response Type | Description | -| ----------- | ------------ | ------------- | ------------| -| GetProfile | [ProfileRequest](#profile-ProfileRequest) | [ProfileResponse](#profile-ProfileResponse) | GetProfile fetches a profile by ID, name, or URL. | -| UpdateProfile | [ProfileEntity](#profile-ProfileEntity) | [ProfileResponse](#profile-ProfileResponse) | UpdateProfile updates an existing profile. | -| GetAllProfiles | [.hcommon.Empty](#hcommon-Empty) | [MultiProfilesResponse](#profile-MultiProfilesResponse) | GetAllProfiles fetches all profiles. | -| GetActiveProfile | [.hcommon.Empty](#hcommon-Empty) | [ProfileResponse](#profile-ProfileResponse) | GetActiveProfile retrieves the currently active profile. | -| SetActiveProfile | [ProfileRequest](#profile-ProfileRequest) | [.hcommon.Response](#hcommon-Response) | SetActiveProfile sets a profile as active, identified by ID, name, or URL. | -| AddProfile | [AddProfileRequest](#profile-AddProfileRequest) | [ProfileResponse](#profile-ProfileResponse) | AddProfile adds a new profile using either a URL or the raw profile content. | -| DeleteProfile | [ProfileRequest](#profile-ProfileRequest) | [.hcommon.Response](#hcommon-Response) | DeleteProfile deletes a profile identified by ID, name, or URL. | - - - - -

Top

@@ -1348,138 +1588,81 @@ SubscriptionInfo defines subscription-related information. - +

Top

-## v2/hcommon/common.proto - - - - - -### Empty - - - - - +## v2/profile/profile_service.proto - -### Response + +### AddProfileRequest +AddProfileRequest is the request message for adding a profile +via URL or content. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| code | [ResponseCode](#hcommon-ResponseCode) | | | -| message | [string](#string) | | | - - - - - - - - - - -### ResponseCode - - -| Name | Number | Description | -| ---- | ------ | ----------- | -| OK | 0 | | -| FAILED | 1 | | -| AUTH_NEED | 2 | | - - - - - - - - - - - -

Top

- -## v2/hello/hello_service.proto - - - - - - - - - - - -### Hello - - -| Method Name | Request Type | Response Type | Description | -| ----------- | ------------ | ------------- | ------------| -| SayHello | [HelloRequest](#hello-HelloRequest) | [HelloResponse](#hello-HelloResponse) | | -| SayHelloStream | [HelloRequest](#hello-HelloRequest) stream | [HelloResponse](#hello-HelloResponse) stream | | - - +| url | [string](#string) | | The URL of the profile to add. | +| content | [string](#string) | | The profile content to add (used if 'url' is empty). | +| name | [string](#string) | | The optional name of the profile. | +| mark_as_active | [bool](#bool) | | Whether to mark the profile as active. | - -

Top

-## v2/hello/hello.proto + - - -### HelloRequest - +### MultiProfilesResponse +MultiProfilesResponse is the response message for fetching multi profiles. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | | | - +| profiles | [ProfileEntity](#profile-ProfileEntity) | repeated | A list of profile entities. | +| response_code | [hcommon.ResponseCode](#hcommon-ResponseCode) | | The response code indicating success or failure. | +| message | [string](#string) | | A message indicating the result or error, if any. | - -### HelloResponse + +### ProfileRequest +ProfileRequest is the request message for fetching or identifying +a profile by ID, name, or URL. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| message | [string](#string) | | | +| id | [string](#string) | | The ID of the profile to fetch (Fastest and recommended). | +| name | [string](#string) | | The name of the profile to fetch (if both 'id' and 'url' are empty). | +| url | [string](#string) | | The URL of the profile to fetch (if both 'id' and 'name' are empty). | - - + - +### ProfileResponse +ProfileResponse is the response message for profile service operations. - +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| profile | [ProfileEntity](#profile-ProfileEntity) | | The profile entity, populated in successful operations. | +| response_code | [hcommon.ResponseCode](#hcommon-ResponseCode) | | The response code indicating success or failure. | +| message | [string](#string) | | A message indicating the result or error, if any. | - -

Top

-## extension/extension_service.proto @@ -1489,19 +1672,20 @@ SubscriptionInfo defines subscription-related information. - - -### ExtensionHostService + +### ProfileService +ProfileService defines the RPC methods available for managing profiles. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| ListExtensions | [.hcommon.Empty](#hcommon-Empty) | [ExtensionList](#extension-ExtensionList) | | -| Connect | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionResponse](#extension-ExtensionResponse) stream | | -| EditExtension | [EditExtensionRequest](#extension-EditExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | -| SubmitForm | [SendExtensionDataRequest](#extension-SendExtensionDataRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | -| Close | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | -| GetUI | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | +| GetProfile | [ProfileRequest](#profile-ProfileRequest) | [ProfileResponse](#profile-ProfileResponse) | GetProfile fetches a profile by ID, name, or URL. | +| UpdateProfile | [ProfileEntity](#profile-ProfileEntity) | [ProfileResponse](#profile-ProfileResponse) | UpdateProfile updates an existing profile. | +| GetAllProfiles | [.hcommon.Empty](#hcommon-Empty) | [MultiProfilesResponse](#profile-MultiProfilesResponse) | GetAllProfiles fetches all profiles. | +| GetActiveProfile | [.hcommon.Empty](#hcommon-Empty) | [ProfileResponse](#profile-ProfileResponse) | GetActiveProfile retrieves the currently active profile. | +| SetActiveProfile | [ProfileRequest](#profile-ProfileRequest) | [.hcommon.Response](#hcommon-Response) | SetActiveProfile sets a profile as active, identified by ID, name, or URL. | +| AddProfile | [AddProfileRequest](#profile-AddProfileRequest) | [ProfileResponse](#profile-ProfileResponse) | AddProfile adds a new profile using either a URL or the raw profile content. | +| DeleteProfile | [ProfileRequest](#profile-ProfileRequest) | [.hcommon.Response](#hcommon-Response) | DeleteProfile deletes a profile identified by ID, name, or URL. | @@ -1685,6 +1869,37 @@ SubscriptionInfo defines subscription-related information. + +

Top

+ +## extension/extension_service.proto + + + + + + + + + + + +### ExtensionHostService + + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------ | ------------- | ------------| +| ListExtensions | [.hcommon.Empty](#hcommon-Empty) | [ExtensionList](#extension-ExtensionList) | | +| Connect | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionResponse](#extension-ExtensionResponse) stream | | +| EditExtension | [EditExtensionRequest](#extension-EditExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | +| SubmitForm | [SendExtensionDataRequest](#extension-SendExtensionDataRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | +| Close | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | +| GetUI | [ExtensionRequest](#extension-ExtensionRequest) | [ExtensionActionResult](#extension-ExtensionActionResult) | | + + + + + ## Scalar Value Types | .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | diff --git a/v2/ezytel/ezytel.pb.go b/v2/ezytel/ezytel.pb.go index 5a51d3340..de3c61ac0 100644 --- a/v2/ezytel/ezytel.pb.go +++ b/v2/ezytel/ezytel.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 -// protoc v7.34.1 +// protoc-gen-go v1.34.2 +// protoc v5.28.0 // source: v2/ezytel/ezytel.proto package ezytel @@ -11,7 +11,6 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" - unsafe "unsafe" ) const ( @@ -24,7 +23,10 @@ const ( // Request the metadata card of a Telegram public channel // (name, description preview, avatar, last-post timestamp, unread badge). type ChannelInfoRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Channel id, e.g. "durov" — without "@" or "t.me/". ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // Last post id the client has already read; used to compute the @@ -35,15 +37,15 @@ type ChannelInfoRequest struct { // Set this to true to opt out and receive the legacy // "cache/.jpg" server-side file path instead. DisableInlineImages bool `protobuf:"varint,3,opt,name=disable_inline_images,json=disableInlineImages,proto3" json:"disable_inline_images,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache } func (x *ChannelInfoRequest) Reset() { *x = ChannelInfoRequest{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ChannelInfoRequest) String() string { @@ -54,7 +56,7 @@ func (*ChannelInfoRequest) ProtoMessage() {} func (x *ChannelInfoRequest) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[0] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -91,8 +93,11 @@ func (x *ChannelInfoRequest) GetDisableInlineImages() bool { } type ChannelInfo struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Plain-text preview of the most recent post, or "فایل" if it is a media post. Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` // By default this is a "data:image/jpeg;base64,…" URI ready for @@ -110,16 +115,16 @@ type ChannelInfo struct { LastPostId int64 `protobuf:"varint,7,opt,name=last_post_id,json=lastPostId,proto3" json:"last_post_id,omitempty"` // True when the channel page was reachable and parsed; false if served // from stale cache (newmsg is then forced to "OFF"). - Ok bool `protobuf:"varint,8,opt,name=ok,proto3" json:"ok,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Ok bool `protobuf:"varint,8,opt,name=ok,proto3" json:"ok,omitempty"` } func (x *ChannelInfo) Reset() { *x = ChannelInfo{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ChannelInfo) String() string { @@ -130,7 +135,7 @@ func (*ChannelInfo) ProtoMessage() {} func (x *ChannelInfo) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[1] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -203,8 +208,11 @@ func (x *ChannelInfo) GetOk() bool { // Request a slab of HTML for the channel timeline. type ChannelMessagesRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // 0 = latest page; otherwise the "before" cursor returned by Telegram // (the data-before attribute of messages_more_wrap). Before int64 `protobuf:"varint,2,opt,name=before,proto3" json:"before,omitempty"` @@ -214,15 +222,15 @@ type ChannelMessagesRequest struct { // will both carry the legacy "proxy.php?url=" placeholder // form, requiring per-image ProxyImage calls. DisableInlineImages bool `protobuf:"varint,3,opt,name=disable_inline_images,json=disableInlineImages,proto3" json:"disable_inline_images,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache } func (x *ChannelMessagesRequest) Reset() { *x = ChannelMessagesRequest{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ChannelMessagesRequest) String() string { @@ -233,7 +241,7 @@ func (*ChannelMessagesRequest) ProtoMessage() {} func (x *ChannelMessagesRequest) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[2] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -270,7 +278,10 @@ func (x *ChannelMessagesRequest) GetDisableInlineImages() bool { } type ChannelMessagesResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Pre-rendered HTML fragment ready to be injected into .main_block. // Dates have been converted to the Persian calendar. By default // and background-image:url(...) carry inline @@ -283,16 +294,16 @@ type ChannelMessagesResponse struct { // placeholder when disable_inline_images=true. ChannelAvatar string `protobuf:"bytes,2,opt,name=channel_avatar,json=channelAvatar,proto3" json:"channel_avatar,omitempty"` // Last post id seen on the page (mirrors the lastread_ cookie). - LastPostId int64 `protobuf:"varint,3,opt,name=last_post_id,json=lastPostId,proto3" json:"last_post_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LastPostId int64 `protobuf:"varint,3,opt,name=last_post_id,json=lastPostId,proto3" json:"last_post_id,omitempty"` } func (x *ChannelMessagesResponse) Reset() { *x = ChannelMessagesResponse{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ChannelMessagesResponse) String() string { @@ -303,7 +314,7 @@ func (*ChannelMessagesResponse) ProtoMessage() {} func (x *ChannelMessagesResponse) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[3] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -342,19 +353,22 @@ func (x *ChannelMessagesResponse) GetLastPostId() int64 { // Fetch a Telegram-hosted image through the translate.goog domain front // and cache it locally. Mirrors proxy.php?url=. type ProxyImageRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Hex-encoded source URL without the "https://" prefix, exactly as the // PHP version expected (bin2hex of the host+path). - HexUrl string `protobuf:"bytes,1,opt,name=hex_url,json=hexUrl,proto3" json:"hex_url,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + HexUrl string `protobuf:"bytes,1,opt,name=hex_url,json=hexUrl,proto3" json:"hex_url,omitempty"` } func (x *ProxyImageRequest) Reset() { *x = ProxyImageRequest{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ProxyImageRequest) String() string { @@ -365,7 +379,7 @@ func (*ProxyImageRequest) ProtoMessage() {} func (x *ProxyImageRequest) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[4] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -388,21 +402,24 @@ func (x *ProxyImageRequest) GetHexUrl() string { } type ProxyImageResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` // Local cache filename (md5(url) + ".jpg") for clients that prefer to // reload from disk instead of holding the bytes. - CacheName string `protobuf:"bytes,3,opt,name=cache_name,json=cacheName,proto3" json:"cache_name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + CacheName string `protobuf:"bytes,3,opt,name=cache_name,json=cacheName,proto3" json:"cache_name,omitempty"` } func (x *ProxyImageResponse) Reset() { *x = ProxyImageResponse{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ProxyImageResponse) String() string { @@ -413,7 +430,7 @@ func (*ProxyImageResponse) ProtoMessage() {} func (x *ProxyImageResponse) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[5] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -452,17 +469,20 @@ func (x *ProxyImageResponse) GetCacheName() string { // Parse the operator-supplied newline-separated channel list into the // normalised ids the other RPCs accept. type ParseChannelsRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - Raw string `protobuf:"bytes,1,opt,name=raw,proto3" json:"raw,omitempty"` - unknownFields protoimpl.UnknownFields + state protoimpl.MessageState sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Raw string `protobuf:"bytes,1,opt,name=raw,proto3" json:"raw,omitempty"` } func (x *ParseChannelsRequest) Reset() { *x = ParseChannelsRequest{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ParseChannelsRequest) String() string { @@ -473,7 +493,7 @@ func (*ParseChannelsRequest) ProtoMessage() {} func (x *ParseChannelsRequest) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[6] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -496,17 +516,20 @@ func (x *ParseChannelsRequest) GetRaw() string { } type ParseChannelsResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - ChannelIds []string `protobuf:"bytes,1,rep,name=channel_ids,json=channelIds,proto3" json:"channel_ids,omitempty"` - unknownFields protoimpl.UnknownFields + state protoimpl.MessageState sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChannelIds []string `protobuf:"bytes,1,rep,name=channel_ids,json=channelIds,proto3" json:"channel_ids,omitempty"` } func (x *ParseChannelsResponse) Reset() { *x = ParseChannelsResponse{} - mi := &file_v2_ezytel_ezytel_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if protoimpl.UnsafeEnabled { + mi := &file_v2_ezytel_ezytel_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } func (x *ParseChannelsResponse) String() string { @@ -517,7 +540,7 @@ func (*ParseChannelsResponse) ProtoMessage() {} func (x *ParseChannelsResponse) ProtoReflect() protoreflect.Message { mi := &file_v2_ezytel_ezytel_proto_msgTypes[7] - if x != nil { + if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -541,57 +564,79 @@ func (x *ParseChannelsResponse) GetChannelIds() []string { var File_v2_ezytel_ezytel_proto protoreflect.FileDescriptor -const file_v2_ezytel_ezytel_proto_rawDesc = "" + - "\n" + - "\x16v2/ezytel/ezytel.proto\x12\x06ezytel\"\x84\x01\n" + - "\x12ChannelInfoRequest\x12\x1d\n" + - "\n" + - "channel_id\x18\x01 \x01(\tR\tchannelId\x12\x1b\n" + - "\tlast_read\x18\x02 \x01(\x03R\blastRead\x122\n" + - "\x15disable_inline_images\x18\x03 \x01(\bR\x13disableInlineImages\"\xdd\x01\n" + - "\vChannelInfo\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12 \n" + - "\vdescription\x18\x02 \x01(\tR\vdescription\x12\x1f\n" + - "\vavatar_path\x18\x03 \x01(\tR\n" + - "avatarPath\x12\x12\n" + - "\x04date\x18\x04 \x01(\x03R\x04date\x12\x19\n" + - "\bdate_str\x18\x05 \x01(\tR\adateStr\x12\x16\n" + - "\x06newmsg\x18\x06 \x01(\tR\x06newmsg\x12 \n" + - "\flast_post_id\x18\a \x01(\x03R\n" + - "lastPostId\x12\x0e\n" + - "\x02ok\x18\b \x01(\bR\x02ok\"\x83\x01\n" + - "\x16ChannelMessagesRequest\x12\x1d\n" + - "\n" + - "channel_id\x18\x01 \x01(\tR\tchannelId\x12\x16\n" + - "\x06before\x18\x02 \x01(\x03R\x06before\x122\n" + - "\x15disable_inline_images\x18\x03 \x01(\bR\x13disableInlineImages\"v\n" + - "\x17ChannelMessagesResponse\x12\x12\n" + - "\x04html\x18\x01 \x01(\tR\x04html\x12%\n" + - "\x0echannel_avatar\x18\x02 \x01(\tR\rchannelAvatar\x12 \n" + - "\flast_post_id\x18\x03 \x01(\x03R\n" + - "lastPostId\",\n" + - "\x11ProxyImageRequest\x12\x17\n" + - "\ahex_url\x18\x01 \x01(\tR\x06hexUrl\"j\n" + - "\x12ProxyImageResponse\x12\x12\n" + - "\x04data\x18\x01 \x01(\fR\x04data\x12!\n" + - "\fcontent_type\x18\x02 \x01(\tR\vcontentType\x12\x1d\n" + - "\n" + - "cache_name\x18\x03 \x01(\tR\tcacheName\"(\n" + - "\x14ParseChannelsRequest\x12\x10\n" + - "\x03raw\x18\x01 \x01(\tR\x03raw\"8\n" + - "\x15ParseChannelsResponse\x12\x1f\n" + - "\vchannel_ids\x18\x01 \x03(\tR\n" + - "channelIdsBK\n" + - "\x1ecom.hiddify.core.api.v2.ezytelZ)github.com/hiddify/hiddify-core/v2/ezytelb\x06proto3" +var file_v2_ezytel_ezytel_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x76, 0x32, 0x2f, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2f, 0x65, 0x7a, 0x79, 0x74, + 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, + 0x22, 0x84, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x52, + 0x65, 0x61, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x22, 0xdd, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, + 0x0b, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x65, 0x77, 0x6d, 0x73, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, + 0x65, 0x77, 0x6d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, + 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, + 0x74, 0x50, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x83, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x22, 0x76, 0x0a, + 0x17, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x74, 0x6d, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x74, 0x6d, 0x6c, 0x12, 0x25, 0x0a, 0x0e, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x12, 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x50, + 0x6f, 0x73, 0x74, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x65, + 0x78, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x78, + 0x55, 0x72, 0x6c, 0x22, 0x6a, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x28, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0x38, 0x0a, 0x15, 0x50, 0x61, 0x72, + 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x49, 0x64, 0x73, 0x42, 0x4b, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x69, 0x64, 0x64, 0x69, + 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x65, + 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, + 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} var ( file_v2_ezytel_ezytel_proto_rawDescOnce sync.Once - file_v2_ezytel_ezytel_proto_rawDescData []byte + file_v2_ezytel_ezytel_proto_rawDescData = file_v2_ezytel_ezytel_proto_rawDesc ) func file_v2_ezytel_ezytel_proto_rawDescGZIP() []byte { file_v2_ezytel_ezytel_proto_rawDescOnce.Do(func() { - file_v2_ezytel_ezytel_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v2_ezytel_ezytel_proto_rawDesc), len(file_v2_ezytel_ezytel_proto_rawDesc))) + file_v2_ezytel_ezytel_proto_rawDescData = protoimpl.X.CompressGZIP(file_v2_ezytel_ezytel_proto_rawDescData) }) return file_v2_ezytel_ezytel_proto_rawDescData } @@ -620,11 +665,109 @@ func file_v2_ezytel_ezytel_proto_init() { if File_v2_ezytel_ezytel_proto != nil { return } + if !protoimpl.UnsafeEnabled { + file_v2_ezytel_ezytel_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*ChannelInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*ChannelInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*ChannelMessagesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*ChannelMessagesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*ProxyImageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*ProxyImageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*ParseChannelsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_ezytel_ezytel_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*ParseChannelsResponse); 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: unsafe.Slice(unsafe.StringData(file_v2_ezytel_ezytel_proto_rawDesc), len(file_v2_ezytel_ezytel_proto_rawDesc)), + RawDescriptor: file_v2_ezytel_ezytel_proto_rawDesc, NumEnums: 0, NumMessages: 8, NumExtensions: 0, @@ -635,6 +778,7 @@ func file_v2_ezytel_ezytel_proto_init() { MessageInfos: file_v2_ezytel_ezytel_proto_msgTypes, }.Build() File_v2_ezytel_ezytel_proto = out.File + file_v2_ezytel_ezytel_proto_rawDesc = nil file_v2_ezytel_ezytel_proto_goTypes = nil file_v2_ezytel_ezytel_proto_depIdxs = nil } diff --git a/v2/ezytel/ezytel_service.pb.go b/v2/ezytel/ezytel_service.pb.go index 5960393a8..d2672a5ab 100644 --- a/v2/ezytel/ezytel_service.pb.go +++ b/v2/ezytel/ezytel_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 -// protoc v7.34.1 +// protoc-gen-go v1.34.2 +// protoc v5.28.0 // source: v2/ezytel/ezytel_service.proto package ezytel @@ -10,7 +10,6 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - unsafe "unsafe" ) const ( @@ -22,16 +21,37 @@ const ( var File_v2_ezytel_ezytel_service_proto protoreflect.FileDescriptor -const file_v2_ezytel_ezytel_service_proto_rawDesc = "" + - "\n" + - "\x1ev2/ezytel/ezytel_service.proto\x12\x06ezytel\x1a\x16v2/ezytel/ezytel.proto2\xb5\x02\n" + - "\x06Ezytel\x12A\n" + - "\x0eGetChannelInfo\x12\x1a.ezytel.ChannelInfoRequest\x1a\x13.ezytel.ChannelInfo\x12U\n" + - "\x12GetChannelMessages\x12\x1e.ezytel.ChannelMessagesRequest\x1a\x1f.ezytel.ChannelMessagesResponse\x12C\n" + - "\n" + - "ProxyImage\x12\x19.ezytel.ProxyImageRequest\x1a\x1a.ezytel.ProxyImageResponse\x12L\n" + - "\rParseChannels\x12\x1c.ezytel.ParseChannelsRequest\x1a\x1d.ezytel.ParseChannelsResponseBK\n" + - "\x1ecom.hiddify.core.api.v2.ezytelZ)github.com/hiddify/hiddify-core/v2/ezytelb\x06proto3" +var file_v2_ezytel_ezytel_service_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x76, 0x32, 0x2f, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2f, 0x65, 0x7a, 0x79, 0x74, + 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x06, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x1a, 0x16, 0x76, 0x32, 0x2f, 0x65, 0x7a, 0x79, + 0x74, 0x65, 0x6c, 0x2f, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x32, 0xb5, 0x02, 0x0a, 0x06, 0x45, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, + 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x7a, 0x79, 0x74, + 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x55, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x50, 0x61, + 0x72, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x2e, 0x65, 0x7a, + 0x79, 0x74, 0x65, 0x6c, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x65, 0x7a, 0x79, 0x74, + 0x65, 0x6c, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4b, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, + 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x65, 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, + 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x7a, 0x79, 0x74, 0x65, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} var file_v2_ezytel_ezytel_service_proto_goTypes = []any{ (*ChannelInfoRequest)(nil), // 0: ezytel.ChannelInfoRequest @@ -69,7 +89,7 @@ func file_v2_ezytel_ezytel_service_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_v2_ezytel_ezytel_service_proto_rawDesc), len(file_v2_ezytel_ezytel_service_proto_rawDesc)), + RawDescriptor: file_v2_ezytel_ezytel_service_proto_rawDesc, NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -79,6 +99,7 @@ func file_v2_ezytel_ezytel_service_proto_init() { DependencyIndexes: file_v2_ezytel_ezytel_service_proto_depIdxs, }.Build() File_v2_ezytel_ezytel_service_proto = out.File + file_v2_ezytel_ezytel_service_proto_rawDesc = nil file_v2_ezytel_ezytel_service_proto_goTypes = nil file_v2_ezytel_ezytel_service_proto_depIdxs = nil } diff --git a/v2/ezytel/ezytel_service_grpc.pb.go b/v2/ezytel/ezytel_service_grpc.pb.go index 2a36b9339..eeef10e27 100644 --- a/v2/ezytel/ezytel_service_grpc.pb.go +++ b/v2/ezytel/ezytel_service_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v7.34.1 +// - protoc-gen-go-grpc v1.5.1 +// - protoc v5.28.0 // source: v2/ezytel/ezytel_service.proto package ezytel @@ -110,16 +110,16 @@ type EzytelServer interface { type UnimplementedEzytelServer struct{} func (UnimplementedEzytelServer) GetChannelInfo(context.Context, *ChannelInfoRequest) (*ChannelInfo, error) { - return nil, status.Error(codes.Unimplemented, "method GetChannelInfo not implemented") + return nil, status.Errorf(codes.Unimplemented, "method GetChannelInfo not implemented") } func (UnimplementedEzytelServer) GetChannelMessages(context.Context, *ChannelMessagesRequest) (*ChannelMessagesResponse, error) { - return nil, status.Error(codes.Unimplemented, "method GetChannelMessages not implemented") + return nil, status.Errorf(codes.Unimplemented, "method GetChannelMessages not implemented") } func (UnimplementedEzytelServer) ProxyImage(context.Context, *ProxyImageRequest) (*ProxyImageResponse, error) { - return nil, status.Error(codes.Unimplemented, "method ProxyImage not implemented") + return nil, status.Errorf(codes.Unimplemented, "method ProxyImage not implemented") } func (UnimplementedEzytelServer) ParseChannels(context.Context, *ParseChannelsRequest) (*ParseChannelsResponse, error) { - return nil, status.Error(codes.Unimplemented, "method ParseChannels not implemented") + return nil, status.Errorf(codes.Unimplemented, "method ParseChannels not implemented") } func (UnimplementedEzytelServer) mustEmbedUnimplementedEzytelServer() {} func (UnimplementedEzytelServer) testEmbeddedByValue() {} @@ -132,7 +132,7 @@ type UnsafeEzytelServer interface { } func RegisterEzytelServer(s grpc.ServiceRegistrar, srv EzytelServer) { - // If the following call panics, it indicates UnimplementedEzytelServer was + // If the following call pancis, it indicates UnimplementedEzytelServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/v2/hcore/commands.go b/v2/hcore/commands.go index 725230401..7b4f54717 100644 --- a/v2/hcore/commands.go +++ b/v2/hcore/commands.go @@ -3,13 +3,17 @@ package hcore import ( "context" "fmt" + "net" "runtime" + "strings" "time" "github.com/hiddify/hiddify-core/v2/config" "github.com/hiddify/hiddify-core/v2/db" hcommon "github.com/hiddify/hiddify-core/v2/hcommon" "github.com/sagernet/sing-box/adapter" + "github.com/wlynxg/anet" + // "github.com/sagernet/sing-box/common/conntrack" "github.com/sagernet/sing-box/protocol/group" @@ -383,3 +387,63 @@ func (h *HiddifyInstance) UrlTest(in *UrlTestRequest) (*hcommon.Response, error) Message: "", }, nil } + +func (s *CoreService) GetLANIP(ctx context.Context, req *hcommon.Empty) (*LANIPResponse, error) { + // Use anet instead of net to bypass Android 11+ SELinux restrictions + // that block direct Netlink socket binding (permission denied error). + ifaces, err := anet.Interfaces() + if err != nil { + Log(LogLevel_ERROR, LogType_CORE, "GetLANIP failed: ", err) + return &LANIPResponse{Ip: "127.0.0.1"}, nil + } + + for _, iface := range ifaces { + // Filter out interfaces that are down, loopback, or point-to-point (VPN/Tunnels) + if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 || iface.Flags&net.FlagPointToPoint != 0 { + continue + } + + // Exclude interfaces with names typical for VPNs, TAP, or TUN devices + name := strings.ToLower(iface.Name) + if strings.Contains(name, "tun") || strings.Contains(name, "tap") || + strings.Contains(name, "wintun") || strings.Contains(name, "utun") || + strings.Contains(name, "vpn") || strings.Contains(name, "ppp") { + continue + } + + // Retrieve addresses using anet to ensure compatibility on Android 11+ + addrs, err := anet.InterfaceAddrsByInterface(&iface) + if err != nil { + continue + } + + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + + if ip == nil || ip.IsLoopback() { + continue + } + + // Ensure it is a valid IPv4 address + ip4 := ip.To4() + if ip4 == nil { + continue + } + + // Verify the IP belongs to a standard private IP range (RFC 1918) + if ip4[0] == 10 || + (ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31) || + (ip4[0] == 192 && ip4[1] == 168) { + return &LANIPResponse{Ip: ip4.String()}, nil + } + } + } + // Fallback to loopback if no physical LAN interface is found + return &LANIPResponse{Ip: "127.0.0.1"}, nil +} diff --git a/v2/hcore/hcore.pb.go b/v2/hcore/hcore.pb.go index 6f38302eb..fc7b508c1 100644 --- a/v2/hcore/hcore.pb.go +++ b/v2/hcore/hcore.pb.go @@ -2096,6 +2096,53 @@ func (*StopRequest) Descriptor() ([]byte, []int) { return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{24} } +type LANIPResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` +} + +func (x *LANIPResponse) Reset() { + *x = LANIPResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_v2_hcore_hcore_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LANIPResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LANIPResponse) ProtoMessage() {} + +func (x *LANIPResponse) ProtoReflect() protoreflect.Message { + mi := &file_v2_hcore_hcore_proto_msgTypes[25] + 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 LANIPResponse.ProtoReflect.Descriptor instead. +func (*LANIPResponse) Descriptor() ([]byte, []int) { + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{25} +} + +func (x *LANIPResponse) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + var File_v2_hcore_hcore_proto protoreflect.FileDescriptor var file_v2_hcore_hcore_proto_rawDesc = []byte{ @@ -2350,54 +2397,56 @@ var file_v2_hcore_hcore_proto_rawDesc = []byte{ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x0d, 0x0a, - 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x42, 0x0a, 0x0a, - 0x43, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x2a, 0xe2, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, - 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, - 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x12, - 0x0a, 0x0e, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, - 0x54, 0x45, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x41, - 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x06, - 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x50, - 0x50, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x08, 0x12, 0x18, 0x0a, - 0x14, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, 0x41, - 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, - 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0b, 0x12, 0x18, 0x0a, 0x14, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0c, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, - 0x52, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0d, - 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, - 0x49, 0x4f, 0x4e, 0x10, 0x0e, 0x2a, 0x72, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x75, 0x70, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x47, - 0x52, 0x50, 0x43, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x47, 0x52, 0x50, 0x43, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x10, - 0x02, 0x12, 0x18, 0x0a, 0x14, 0x47, 0x52, 0x50, 0x43, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, - 0x5f, 0x49, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x47, - 0x52, 0x50, 0x43, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x49, - 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x10, 0x04, 0x2a, 0x4d, 0x0a, 0x08, 0x4c, 0x6f, 0x67, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x00, - 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x09, 0x0a, - 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x05, 0x2a, 0x2c, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x42, 0x49, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x69, - 0x64, 0x64, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, - 0x69, 0x66, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, - 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, 0x0a, 0x0d, + 0x4c, 0x41, 0x4e, 0x49, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x2a, 0x42, 0x0a, + 0x0a, 0x43, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, + 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, + 0x03, 0x2a, 0xe2, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, + 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, + 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, + 0x45, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x49, 0x43, 0x45, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, + 0x43, 0x54, 0x45, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, + 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, + 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x4f, + 0x50, 0x50, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x08, 0x12, 0x18, + 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, + 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, + 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, + 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0b, 0x12, 0x18, 0x0a, + 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0c, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x5f, 0x52, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, + 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, + 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x0e, 0x2a, 0x72, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x75, 0x70, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, + 0x47, 0x52, 0x50, 0x43, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, + 0x0f, 0x47, 0x52, 0x50, 0x43, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x47, 0x52, 0x50, 0x43, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, + 0x4c, 0x5f, 0x49, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, + 0x47, 0x52, 0x50, 0x43, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, + 0x49, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x10, 0x04, 0x2a, 0x4d, 0x0a, 0x08, 0x4c, 0x6f, + 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x09, + 0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x05, 0x2a, 0x2c, 0x0a, 0x07, 0x4c, 0x6f, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0b, + 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x42, 0x49, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x68, + 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, + 0x64, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, + 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2413,7 +2462,7 @@ func file_v2_hcore_hcore_proto_rawDescGZIP() []byte { } var file_v2_hcore_hcore_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_v2_hcore_hcore_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_v2_hcore_hcore_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_v2_hcore_hcore_proto_goTypes = []any{ (CoreStates)(0), // 0: hcore.CoreStates (MessageType)(0), // 1: hcore.MessageType @@ -2445,24 +2494,25 @@ var file_v2_hcore_hcore_proto_goTypes = []any{ (*LogMessage)(nil), // 27: hcore.LogMessage (*LogRequest)(nil), // 28: hcore.LogRequest (*StopRequest)(nil), // 29: hcore.StopRequest - (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp - (hcommon.ResponseCode)(0), // 31: hcommon.ResponseCode + (*LANIPResponse)(nil), // 30: hcore.LANIPResponse + (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp + (hcommon.ResponseCode)(0), // 32: hcommon.ResponseCode } var file_v2_hcore_hcore_proto_depIdxs = []int32{ 0, // 0: hcore.CoreInfoResponse.core_state:type_name -> hcore.CoreStates 1, // 1: hcore.CoreInfoResponse.message_type:type_name -> hcore.MessageType 2, // 2: hcore.CloseRequest.mode:type_name -> hcore.SetupMode 2, // 3: hcore.SetupRequest.mode:type_name -> hcore.SetupMode - 30, // 4: hcore.OutboundInfo.url_test_time:type_name -> google.protobuf.Timestamp + 31, // 4: hcore.OutboundInfo.url_test_time:type_name -> google.protobuf.Timestamp 11, // 5: hcore.OutboundInfo.ipinfo:type_name -> hcore.IpInfo 10, // 6: hcore.OutboundGroup.items:type_name -> hcore.OutboundInfo 12, // 7: hcore.OutboundGroupList.items:type_name -> hcore.OutboundGroup 14, // 8: hcore.WarpGenerationResponse.account:type_name -> hcore.WarpAccount 15, // 9: hcore.WarpGenerationResponse.config:type_name -> hcore.WarpWireguardConfig - 31, // 10: hcore.ParseResponse.response_code:type_name -> hcommon.ResponseCode + 32, // 10: hcore.ParseResponse.response_code:type_name -> hcommon.ResponseCode 3, // 11: hcore.LogMessage.level:type_name -> hcore.LogLevel 4, // 12: hcore.LogMessage.type:type_name -> hcore.LogType - 30, // 13: hcore.LogMessage.time:type_name -> google.protobuf.Timestamp + 31, // 13: hcore.LogMessage.time:type_name -> google.protobuf.Timestamp 3, // 14: hcore.LogRequest.level:type_name -> hcore.LogLevel 15, // [15:15] is the sub-list for method output_type 15, // [15:15] is the sub-list for method input_type @@ -2777,6 +2827,18 @@ func file_v2_hcore_hcore_proto_init() { return nil } } + file_v2_hcore_hcore_proto_msgTypes[25].Exporter = func(v any, i int) any { + switch v := v.(*LANIPResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_v2_hcore_hcore_proto_msgTypes[5].OneofWrappers = []any{} type x struct{} @@ -2785,7 +2847,7 @@ func file_v2_hcore_hcore_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_v2_hcore_hcore_proto_rawDesc, NumEnums: 5, - NumMessages: 25, + NumMessages: 26, NumExtensions: 0, NumServices: 0, }, diff --git a/v2/hcore/hcore.proto b/v2/hcore/hcore.proto index a25fa2f5a..d032a8004 100644 --- a/v2/hcore/hcore.proto +++ b/v2/hcore/hcore.proto @@ -230,6 +230,6 @@ message LogRequest { message StopRequest{ } - - - +message LANIPResponse { + string ip = 1; +} diff --git a/v2/hcore/hcore_service.pb.go b/v2/hcore/hcore_service.pb.go index e49f6d648..11d7727c5 100644 --- a/v2/hcore/hcore_service.pb.go +++ b/v2/hcore/hcore_service.pb.go @@ -28,7 +28,7 @@ var file_v2_hcore_hcore_service_proto_rawDesc = []byte{ 0x68, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x17, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc9, 0x09, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x35, 0x0a, + 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xfb, 0x09, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x13, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, @@ -105,12 +105,15 @@ var file_v2_hcore_hcore_service_proto_rawDesc = []byte{ 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x13, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x68, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x42, 0x49, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x68, 0x63, 0x6f, 0x72, - 0x65, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x69, - 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x12, 0x30, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4c, 0x41, 0x4e, 0x49, 0x50, 0x12, 0x0e, 0x2e, 0x68, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x68, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x41, 0x4e, 0x49, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x49, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, + 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x68, 0x63, + 0x6f, 0x72, 0x65, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2d, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_v2_hcore_hcore_service_proto_goTypes = []any{ @@ -133,6 +136,7 @@ var file_v2_hcore_hcore_service_proto_goTypes = []any{ (*WarpGenerationResponse)(nil), // 16: hcore.WarpGenerationResponse (*SystemProxyStatus)(nil), // 17: hcore.SystemProxyStatus (*LogMessage)(nil), // 18: hcore.LogMessage + (*LANIPResponse)(nil), // 19: hcore.LANIPResponse } var file_v2_hcore_hcore_service_proto_depIdxs = []int32{ 0, // 0: hcore.Core.Start:input_type -> hcore.StartRequest @@ -155,28 +159,30 @@ var file_v2_hcore_hcore_service_proto_depIdxs = []int32{ 8, // 17: hcore.Core.SetSystemProxyEnabled:input_type -> hcore.SetSystemProxyEnabledRequest 9, // 18: hcore.Core.LogListener:input_type -> hcore.LogRequest 10, // 19: hcore.Core.Close:input_type -> hcore.CloseRequest - 11, // 20: hcore.Core.Start:output_type -> hcore.CoreInfoResponse - 11, // 21: hcore.Core.CoreInfoListener:output_type -> hcore.CoreInfoResponse - 12, // 22: hcore.Core.OutboundsInfo:output_type -> hcore.OutboundGroupList - 12, // 23: hcore.Core.MainOutboundsInfo:output_type -> hcore.OutboundGroupList - 13, // 24: hcore.Core.GetSystemInfo:output_type -> hcore.SystemInfo - 13, // 25: hcore.Core.GetSystemInfoStream:output_type -> hcore.SystemInfo - 14, // 26: hcore.Core.Setup:output_type -> hcommon.Response - 15, // 27: hcore.Core.Parse:output_type -> hcore.ParseResponse - 11, // 28: hcore.Core.ChangeHiddifySettings:output_type -> hcore.CoreInfoResponse - 11, // 29: hcore.Core.StartService:output_type -> hcore.CoreInfoResponse - 11, // 30: hcore.Core.Stop:output_type -> hcore.CoreInfoResponse - 11, // 31: hcore.Core.Restart:output_type -> hcore.CoreInfoResponse - 14, // 32: hcore.Core.SelectOutbound:output_type -> hcommon.Response - 14, // 33: hcore.Core.UrlTest:output_type -> hcommon.Response - 14, // 34: hcore.Core.UrlTestActive:output_type -> hcommon.Response - 16, // 35: hcore.Core.GenerateWarpConfig:output_type -> hcore.WarpGenerationResponse - 17, // 36: hcore.Core.GetSystemProxyStatus:output_type -> hcore.SystemProxyStatus - 14, // 37: hcore.Core.SetSystemProxyEnabled:output_type -> hcommon.Response - 18, // 38: hcore.Core.LogListener:output_type -> hcore.LogMessage - 1, // 39: hcore.Core.Close:output_type -> hcommon.Empty - 20, // [20:40] is the sub-list for method output_type - 0, // [0:20] is the sub-list for method input_type + 1, // 20: hcore.Core.GetLANIP:input_type -> hcommon.Empty + 11, // 21: hcore.Core.Start:output_type -> hcore.CoreInfoResponse + 11, // 22: hcore.Core.CoreInfoListener:output_type -> hcore.CoreInfoResponse + 12, // 23: hcore.Core.OutboundsInfo:output_type -> hcore.OutboundGroupList + 12, // 24: hcore.Core.MainOutboundsInfo:output_type -> hcore.OutboundGroupList + 13, // 25: hcore.Core.GetSystemInfo:output_type -> hcore.SystemInfo + 13, // 26: hcore.Core.GetSystemInfoStream:output_type -> hcore.SystemInfo + 14, // 27: hcore.Core.Setup:output_type -> hcommon.Response + 15, // 28: hcore.Core.Parse:output_type -> hcore.ParseResponse + 11, // 29: hcore.Core.ChangeHiddifySettings:output_type -> hcore.CoreInfoResponse + 11, // 30: hcore.Core.StartService:output_type -> hcore.CoreInfoResponse + 11, // 31: hcore.Core.Stop:output_type -> hcore.CoreInfoResponse + 11, // 32: hcore.Core.Restart:output_type -> hcore.CoreInfoResponse + 14, // 33: hcore.Core.SelectOutbound:output_type -> hcommon.Response + 14, // 34: hcore.Core.UrlTest:output_type -> hcommon.Response + 14, // 35: hcore.Core.UrlTestActive:output_type -> hcommon.Response + 16, // 36: hcore.Core.GenerateWarpConfig:output_type -> hcore.WarpGenerationResponse + 17, // 37: hcore.Core.GetSystemProxyStatus:output_type -> hcore.SystemProxyStatus + 14, // 38: hcore.Core.SetSystemProxyEnabled:output_type -> hcommon.Response + 18, // 39: hcore.Core.LogListener:output_type -> hcore.LogMessage + 1, // 40: hcore.Core.Close:output_type -> hcommon.Empty + 19, // 41: hcore.Core.GetLANIP:output_type -> hcore.LANIPResponse + 21, // [21:42] is the sub-list for method output_type + 0, // [0:21] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/v2/hcore/hcore_service.proto b/v2/hcore/hcore_service.proto index 7b4834992..83d5426ea 100644 --- a/v2/hcore/hcore_service.proto +++ b/v2/hcore/hcore_service.proto @@ -27,7 +27,8 @@ service Core { rpc GetSystemProxyStatus (hcommon.Empty) returns (SystemProxyStatus); rpc SetSystemProxyEnabled (SetSystemProxyEnabledRequest) returns (hcommon.Response); rpc LogListener (LogRequest) returns (stream LogMessage); - rpc Close (CloseRequest) returns (hcommon.Empty); + rpc Close (CloseRequest) returns (hcommon.Empty); + rpc GetLANIP (hcommon.Empty) returns (LANIPResponse); } diff --git a/v2/hcore/hcore_service_grpc.pb.go b/v2/hcore/hcore_service_grpc.pb.go index c3d891135..c33ee9e52 100644 --- a/v2/hcore/hcore_service_grpc.pb.go +++ b/v2/hcore/hcore_service_grpc.pb.go @@ -40,6 +40,7 @@ const ( Core_SetSystemProxyEnabled_FullMethodName = "/hcore.Core/SetSystemProxyEnabled" Core_LogListener_FullMethodName = "/hcore.Core/LogListener" Core_Close_FullMethodName = "/hcore.Core/Close" + Core_GetLANIP_FullMethodName = "/hcore.Core/GetLANIP" ) // CoreClient is the client API for Core service. @@ -67,6 +68,7 @@ type CoreClient interface { SetSystemProxyEnabled(ctx context.Context, in *SetSystemProxyEnabledRequest, opts ...grpc.CallOption) (*hcommon.Response, error) LogListener(ctx context.Context, in *LogRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LogMessage], error) Close(ctx context.Context, in *CloseRequest, opts ...grpc.CallOption) (*hcommon.Empty, error) + GetLANIP(ctx context.Context, in *hcommon.Empty, opts ...grpc.CallOption) (*LANIPResponse, error) } type coreClient struct { @@ -322,6 +324,16 @@ func (c *coreClient) Close(ctx context.Context, in *CloseRequest, opts ...grpc.C return out, nil } +func (c *coreClient) GetLANIP(ctx context.Context, in *hcommon.Empty, opts ...grpc.CallOption) (*LANIPResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(LANIPResponse) + err := c.cc.Invoke(ctx, Core_GetLANIP_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // CoreServer is the server API for Core service. // All implementations must embed UnimplementedCoreServer // for forward compatibility. @@ -347,6 +359,7 @@ type CoreServer interface { SetSystemProxyEnabled(context.Context, *SetSystemProxyEnabledRequest) (*hcommon.Response, error) LogListener(*LogRequest, grpc.ServerStreamingServer[LogMessage]) error Close(context.Context, *CloseRequest) (*hcommon.Empty, error) + GetLANIP(context.Context, *hcommon.Empty) (*LANIPResponse, error) mustEmbedUnimplementedCoreServer() } @@ -417,6 +430,9 @@ func (UnimplementedCoreServer) LogListener(*LogRequest, grpc.ServerStreamingServ func (UnimplementedCoreServer) Close(context.Context, *CloseRequest) (*hcommon.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Close not implemented") } +func (UnimplementedCoreServer) GetLANIP(context.Context, *hcommon.Empty) (*LANIPResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLANIP not implemented") +} func (UnimplementedCoreServer) mustEmbedUnimplementedCoreServer() {} func (UnimplementedCoreServer) testEmbeddedByValue() {} @@ -763,6 +779,24 @@ func _Core_Close_Handler(srv interface{}, ctx context.Context, dec func(interfac return interceptor(ctx, in, info, handler) } +func _Core_GetLANIP_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(hcommon.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServer).GetLANIP(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Core_GetLANIP_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServer).GetLANIP(ctx, req.(*hcommon.Empty)) + } + return interceptor(ctx, in, info, handler) +} + // Core_ServiceDesc is the grpc.ServiceDesc for Core service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -830,6 +864,10 @@ var Core_ServiceDesc = grpc.ServiceDesc{ MethodName: "Close", Handler: _Core_Close_Handler, }, + { + MethodName: "GetLANIP", + Handler: _Core_GetLANIP_Handler, + }, }, Streams: []grpc.StreamDesc{ {