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{
{