talk_loco_client/client/
booking.rs1use futures_lite::{AsyncRead, AsyncWrite};
2use futures_loco_protocol::{loco_protocol::command::Method, LocoClient};
3use serde::{Deserialize, Serialize};
4
5use crate::RequestResult;
6
7use super::request_simple;
8
9#[derive(Debug)]
10pub struct BookingClient<T>(LocoClient<T>);
11
12impl<T> BookingClient<T> {
13 pub const fn new(client: LocoClient<T>) -> Self {
14 Self(client)
15 }
16
17 pub fn into_inner(self) -> LocoClient<T> {
18 self.0
19 }
20}
21
22impl<T: AsyncRead + AsyncWrite + Unpin> BookingClient<T> {
23 pub async fn get_conf(&mut self, req: &GetConfReq<'_>) -> RequestResult<GetConfRes> {
24 request_simple(&mut self.0, Method::new("GETCONF").unwrap(), req).await
25 }
26}
27
28#[derive(Debug, Clone, Serialize)]
30pub struct GetConfReq<'a> {
31 #[serde(rename = "MCCMNC")]
33 pub mccmnc: &'a str,
34
35 pub os: &'a str,
37
38 pub model: &'a str,
40}
41
42#[derive(Debug, Clone, Deserialize)]
44pub struct GetConfRes {
45 pub revision: i32,
47
48 #[serde(rename = "3g")]
50 pub cellular: ConnectionData,
51
52 pub wifi: ConnectionData,
54
55 pub ticket: HostData,
57
58 pub trailer: Trailer,
60
61 #[serde(rename = "trailer.h")]
63 pub trailer_high: TrailerHigh,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct ConnectionData {
69 #[serde(rename = "bgKeepItv")]
71 pub background_keep_interval: i32,
72
73 #[serde(rename = "bgReconnItv")]
75 pub background_reconnect_interval: i32,
76
77 #[serde(rename = "bgPingItv")]
79 pub background_interval: i32,
80
81 #[serde(rename = "fgPingItv")]
83 pub ping_interval: i32,
84
85 #[serde(rename = "reqTimeout")]
87 pub request_timeout: i32,
88
89 #[serde(rename = "encType")]
91 pub encrypt_type: i32,
92
93 #[serde(rename = "connTimeout")]
95 pub connection_timeout: i32,
96
97 #[serde(rename = "recvHeaderTimeout")]
99 pub receive_header_timeout: i32,
100
101 #[serde(rename = "inSegTimeout")]
103 pub in_seg_timeout: i32,
104
105 #[serde(rename = "outSegTimeout")]
107 pub out_seg_timeout: i32,
108
109 #[serde(rename = "blockSendBufSize")]
111 pub block_send_buffer_size: i32,
112
113 pub ports: Vec<i32>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct HostData {
120 pub ssl: Vec<String>,
122
123 pub v2sl: Vec<String>,
125
126 pub lsl: Vec<String>,
128
129 pub lsl6: Vec<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct Trailer {
136 #[serde(rename = "tokenExpireTime")]
137 pub token_expire_time: i32,
138
139 pub resolution: i32,
140
141 #[serde(rename = "resolutionHD")]
142 pub resolution_hd: i32,
143
144 #[serde(rename = "compRatio")]
145 pub compress_ratio: i8,
146
147 #[serde(rename = "compRatioHD")]
148 pub compress_ratio_hd: i8,
149
150 #[serde(rename = "downMode")]
151 pub down_mode: i8,
152
153 #[serde(rename = "concurrentDownLimit")]
155 pub concurrent_down_limit: i16,
156
157 #[serde(rename = "concurrentUpLimit")]
159 pub concurrent_up_limit: i16,
160
161 #[serde(rename = "maxRelaySize")]
162 pub max_relay_size: i32,
163
164 #[serde(rename = "downCheckSize")]
165 pub down_check_size: i32,
166
167 #[serde(rename = "upMaxSize")]
169 pub up_max_size: i32,
170
171 #[serde(rename = "videoUpMaxSize")]
172 pub video_up_max_size: i32,
173
174 #[serde(rename = "vCodec")]
175 pub video_codec: i8,
176
177 #[serde(rename = "vFps")]
178 pub video_fps: i16,
179
180 #[serde(rename = "aCodec")]
181 pub audio_codec: i8,
182
183 #[serde(rename = "contentExpireTime")]
185 pub content_expire_time: i32,
186
187 #[serde(rename = "vResolution")]
188 pub video_resolution: i32,
189
190 #[serde(rename = "vBitrate")]
191 pub video_bitrate: i32,
192
193 #[serde(rename = "aFrequency")]
194 pub audio_frequency: i32,
195}
196
197#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct TrailerHigh {
200 #[serde(rename = "vResolution")]
201 pub video_resolution: i32,
202
203 #[serde(rename = "vBitrate")]
204 pub video_bitrate: i32,
205
206 #[serde(rename = "aFrequency")]
207 pub audio_frequency: i32,
208}