NIMSDK-AOS  10.10.13
ServerAddresses.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk;
2 
3 import android.util.Pair;
4 import androidx.annotation.Keep;
5 import androidx.annotation.Nullable;
6 import com.netease.nimlib.push.net.lbs.IPVersion;
7 import com.netease.nimlib.push.packet.asymmetric.AsymmetricType;
8 import com.netease.nimlib.push.packet.symmetry.SymmetryType;
9 import com.netease.nimlib.util.CollectionUtil;
10 import java.io.Serializable;
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Set;
16 import org.json.JSONException;
17 import org.json.JSONObject;
18 
19 /**
20  * 云信私有化服务器配置项
21  */
22 @SuppressWarnings("java:S1104")
23 public class ServerAddresses implements Serializable {
24  public static final String KEY_MODULE = "KEY_MODULE";
25  public static final String KEY_PUBLIC_KEY_VERSION = "KEY_PUBLIC_KEY_VERSION";
26  public static final String KEY_LBS = "KEY_LBS";
27  public static final String KEY_LBS_BACKUP = "KEY_LBS_BACKUP";
28  public static final String KEY_CHATROOM_LBS = "KEY_CHATROOM_LBS";
29  public static final String KEY_CHATROOM_LINK = "KEY_CHATROOM_LINK";
30  public static final String KEY_DEFAULT_LINK = "KEY_DEFAULT_LINK";
31  public static final String KEY_DEFAULT_LINK_BACKUP = "KEY_DEFAULT_LINK_BACKUP";
32  public static final String KEY_NOS_UPLOAD_LBS = "KEY_NOS_UPLOAD_LBS";
33  public static final String KEY_IM_NOS_UPLOAD_LBS = "KEY_IM_NOS_UPLOAD_LBS";
34  public static final String KEY_NOS_UPLOAD_DEFAULT_LINK = "KEY_NOS_UPLOAD_DEFAULT_LINK";
35  public static final String KEY_NOS_UPLOAD = "KEY_NOS_UPLOAD";
36  public static final String KEY_NOS_SUPPORT_HTTPS = "KEY_NOS_SUPPORT_HTTPS";
37  public static final String KEY_NOS_DOWNLOAD_URL_FORMAT = "KEY_NOS_DOWNLOAD_URL_FORMAT";
38  public static final String KEY_NOS_DOWNLOAD = "KEY_NOS_DOWNLOAD";
39  public static final String KEY_NOS_ACCESS = "KEY_NOS_ACCESS";
40  public static final String KEY_NT_SERVER_ADDRESS = "KEY_NT_SERVER_ADDRESS";
41  public static final String KEY_BD_SERVER_ADDRESS = "KEY_BD_SERVER_ADDRESS";
42  public static final String KEY_TEST = "KEY_TEST";
43  public static final String KEY_DEDICATED_CLUSTE_FLAG = "KEY_DEDICATED_CLUSTE_FLAG";
44  public static final String KEY_NEGO_KEY_NECA = "KEY_NEGO_KEY_NECA";
45  public static final String KEY_NEGO_KEY_ENCA_KEY_VERSION = "KEY_NEGO_KEY_ENCA_KEY_VERSION";
46  public static final String KEY_NEGO_KEY_ENCA_KEY_PARTA = "KEY_NEGO_KEY_ENCA_KEY_PARTA";
47  public static final String KEY_NEGO_KEY_ENCA_KEY_PARTB = "KEY_NEGO_KEY_ENCA_KEY_PARTB";
48  public static final String KEY_COMM_ENCA = "KEY_COMM_ENCA";
49  public static final String KEY_LINK_IPV6 = "KEY_LINK_IPV6";
50  public static final String KEY_IP_PROTOCOL_VERSION = "KEY_IP_PROTOCOL_VERSION";
51  public static final String KEY_PROBE_IPV4_URL = "KEY_PROBE_IPV4_URL";
52  public static final String KEY_PROBE_IPV6_URL = "KEY_PROBE_IPV6_URL";
53  public static final String KEY_HANDSHAKE_TYPE = "KEY_HANDSHAKE_TYPE";
54  public static final String KEY_NOS_CDN_ENABLE = "KEY_NOS_CDN_ENABLE";
55  public static final String KEY_NOS_DOWNLOAD_SET = "KEY_NOS_DOWNLOAD_SET";
56  public static final String KEY_COMPASS_DATA_ENDPOINT = "KEY_COMPASS_DATA_ENDPOINT";
57 
58  /**
59  * 连接云信服务器加密数据通道的公钥参数1 rsaModulus
60  */
61  public String module;
62 
63  /**
64  * 连接云信服务器加密数据通道的公钥的版本号(默认0)
65  */
66  public int publicKeyVersion = 0;
67 
68  /**
69  * IM LBS服务器地址,通过它获取IM link 地址信息
70  * 填http/https地址
71  *
72  * @see ServerAddresses#lbsBackup
73  */
74  public String lbs;
75 
76  /**
77  * 备用IM LBS服务器地址,通过它获取IM link 地址信息
78  * 填http/https地址
79  *
80  * @see ServerAddresses#lbs
81  */
82  public List<String> lbsBackup;
83 
84  /**
85  * ChatRoom LBS服务器地址,通过它获取ChatRoom link 地址信息
86  * 填http/https地址
87  *
88  */
89  public List<String> chatRoomLbsList;
90 
91  /**
92  * ChatRoom 默认link地址,当ChatRoom LBS不可用时先连接该地址
93  * 填"IP/Host:PORT"
94  */
95  public List<String> chatRoomLinkList;
96 
97  /**
98  * IM 默认的link服务器地址,当IM LBS不可用时先连接该地址
99  * 填"IP/Host:PORT"
100  */
101  public String defaultLink;
102 
103  /**
104  * IM 默认的link服务器地址不可用时,连接这些地址
105  * 填"IP/Host:PORT"
106  */
107  public List<String> defaultLinkBackup;
108 
109  /**
110  * NOS上传LBS服务器地址
111  * 填http/https地址
112  */
113  public String nosUploadLbs;
114 
115  /**
116  * IM NOS LBS服务器地址,通过它获取NOS上传地址
117  * 填http/https地址
118  */
119  public String imNOSUploadLBS;
120 
121  /**
122  * NOS上传默认的link服务器地址,当NOS LBS不可用时先连接该地址
123  * 填http/https地址
124  */
125  public String nosUploadDefaultLink;
126 
127  /**
128  * NOS上传服务器主机地址(仅nosSupportHttps=true时有效,用作https上传时的域名校验及http header host字段填充)
129  * 填host地址
130  */
131  public String nosUpload;
132 
133  /**
134  * NOS上传是否需要支持https。SDK 3.2版本后默认支持https,同时需要配置 nosUpload!
135  */
136  public boolean nosSupportHttps = true;
137 
138  /**
139  * [4.6.0版本新增] NOS下载地址拼接模板,用于拼接最终得到的下载地址。
140  * 默认是 {bucket}.nosdn.127.net/{object},SDK 上传资源后生成的下载地址为 https://bucket.nosdn.127.net/object
141  */
142  public String nosDownloadUrlFormat;
143 
144  /**
145  * NOS下载地址的host,用于拼接最终获得的文件URL地址,也支持该host替换成下载加速域名/地址 nosAccess.
146  * 填host地址, 默认是 nos.netease.com
147  */
148  public String nosDownload;
149 
150  /**
151  * NOS下载加速域名/地址,用于替换NOS下载url中的 nosDownload。
152  * 提供两种方式:
153  * 1) [4.4.0+开始支持]模板方式:填写云信规定的两种模板:{bucket}.nosdn.127.net/{object} 或者 nosdn.127.net/{bucket}/{object},其中 {bucket} 和 {object} 作为标识符,必须填写。域名部分可以替换为您申请的加速域名。
154  * 2) [所有版本支持]非模板方式:填写用于加速的 http/https地址,例如:http://111.222.111.22:9090
155  */
156  public String nosAccess;
157 
158  /**
159  * 云信运行时异常统计服务器地址
160  */
161  public String ntServerAddress;
162 
163  /**
164  * 云信数据统计服务器地址
165  */
166  public String bdServerAddress;
167 
168  /**
169  * 是否是测试服
170  */
171  public boolean test = false;
172 
173  /**
174  * 是否为专属集群{1(是), 0(否)}
175  */
177 
178  /**
179  * "交换密钥"协议加密算法 {1(RSA),2(SM2)}, def:1(RSA) 非对称加密
180  */
181  public AsymmetricType negoKeyNeca = AsymmetricType.RSA;
182 
183  /**
184  * "交换密钥"协议加密算法密钥版本 version 自定义时则必填
185  */
187 
188  /**
189  * "交换密钥"协议加密算法密钥 part A 自定义时则必填 BigNumHex string 不含0x RSA: module, SM2: X
190  */
191  public String negoKeyEncaKeyParta;
192 
193  /**
194  * "交换密钥"协议加密算法密钥 part B 自定义时则必填 BigNumHex string 不含0x RSA: EXP, SM2: Y
195  */
196  public String negoKeyEncaKeyPartb;
197 
198  /**
199  * 通信加密算法 {1(RC4), 2(AES128), 4(SM4)}
200  * 默认: 1(RC4) 对称加密
201  */
202  public SymmetryType commEnca = SymmetryType.RC4;
203 
204  /**
205  * ipv6的缺省连接地址
206  */
207  public String linkIpv6;
208 
209  /**
210  * IP协议版本{0(IPV4), 1(IPV6), 2(Auto, SDK测试后自行选择, 存在性能损耗)}。
211  * 默认: 0(IPV4) 非对称加密
212  */
213  public IPVersion ipProtocolVersion = IPVersion.IPV4;
214 
215  /**
216  * 探测ipv4地址类型使用的url, IPProtVersion == 2或3 时生效
217  */
218  public String probeIpv4Url;
219 
220  /**
221  * 探测ipv6地址类型使用的url, IPProtVersion == 2或3 时生效
222  */
223  public String probeIpv6Url;
224 
225  /**
226  * 握手协议选择字段
227  */
228  public NimHandshakeType handshakeType = NimHandshakeType.V1;
229 
230  /**
231  * 是否优先使用Cdn域名进行NOS下载
232  */
233  public boolean nosCdnEnable = true;
234 
235  /**
236  * 每个元素为使用过的NOS下载地址的特征以及桶名是否在host中组成的{@link Pair}对象
237  * 如new Pair("nim.nos.netease.com", true), new Pair("nos.netease.com/nim", false)等
238  */
239  public Set<String> nosDownloadSet;
240 
241  /**
242  * 数据上报端点
243  */
244  public String compassDataEndpoint;
245  /**
246  * abTest请求地址
247  */
248  @Keep
249  private String abTestRequestUrl;
250 
251  public String getABTestRequestUrl() {
252  return abTestRequestUrl;
253  }
254 
255 
256  public JSONObject toJson() {
257  JSONObject object = new JSONObject();
258  try {
259  object.putOpt(KEY_MODULE, module);
260  object.putOpt(KEY_PUBLIC_KEY_VERSION, publicKeyVersion);
261  object.putOpt(KEY_LBS, lbs);
262  object.putOpt(KEY_LBS_BACKUP, CollectionUtil.toString(lbsBackup, ";"));
263  object.putOpt(KEY_CHATROOM_LBS, CollectionUtil.toString(chatRoomLbsList, ";"));
264  object.putOpt(KEY_CHATROOM_LINK, CollectionUtil.toString(chatRoomLinkList, ";"));
265  object.putOpt(KEY_DEFAULT_LINK, defaultLink);
266  object.putOpt(KEY_DEFAULT_LINK_BACKUP, CollectionUtil.toString(defaultLinkBackup, ";"));
267  object.putOpt(KEY_NOS_UPLOAD_LBS, nosUploadLbs);
268  object.putOpt(KEY_IM_NOS_UPLOAD_LBS, imNOSUploadLBS);
269  object.putOpt(KEY_NOS_UPLOAD_DEFAULT_LINK, nosUploadDefaultLink);
270  object.putOpt(KEY_NOS_UPLOAD, nosUpload);
271  object.putOpt(KEY_NOS_SUPPORT_HTTPS, nosSupportHttps);
272  object.putOpt(KEY_NOS_DOWNLOAD_URL_FORMAT, nosDownloadUrlFormat);
273  object.putOpt(KEY_NOS_DOWNLOAD, nosDownload);
274  object.putOpt(KEY_NOS_ACCESS, nosAccess);
275  object.putOpt(KEY_NT_SERVER_ADDRESS, ntServerAddress);
276  object.putOpt(KEY_BD_SERVER_ADDRESS, bdServerAddress);
277  object.putOpt(KEY_TEST, test);
278  object.putOpt(KEY_DEDICATED_CLUSTE_FLAG, dedicatedClusteFlag);
279  object.putOpt(KEY_NEGO_KEY_NECA, negoKeyNeca == null ? AsymmetricType.RSA.getValue(): negoKeyNeca.getValue());
280  object.putOpt(KEY_NEGO_KEY_ENCA_KEY_VERSION, negoKeyEncaKeyVersion);
281  object.putOpt(KEY_NEGO_KEY_ENCA_KEY_PARTA, negoKeyEncaKeyParta);
282  object.putOpt(KEY_NEGO_KEY_ENCA_KEY_PARTB, negoKeyEncaKeyPartb);
283  object.putOpt(KEY_COMM_ENCA, commEnca == null ? SymmetryType.RC4.getValue() : commEnca.getValue());
284  object.putOpt(KEY_LINK_IPV6, linkIpv6);
285  object.putOpt(KEY_IP_PROTOCOL_VERSION, ipProtocolVersion == null ? IPVersion.IPV4.getValue() :ipProtocolVersion.getValue());
286  object.putOpt(KEY_PROBE_IPV4_URL, probeIpv4Url);
287  object.putOpt(KEY_PROBE_IPV6_URL, probeIpv6Url);
288  object.putOpt(KEY_HANDSHAKE_TYPE, handshakeType == null ? NimHandshakeType.V1.getValue() : handshakeType.getValue());
289  object.putOpt(KEY_NOS_CDN_ENABLE, nosCdnEnable);
290  object.putOpt(KEY_NOS_DOWNLOAD_SET, CollectionUtil.toString(nosDownloadSet, ";"));
291  object.putOpt(KEY_COMPASS_DATA_ENDPOINT, compassDataEndpoint);
292  } catch (JSONException e) {
293  e.printStackTrace();
294  }
295  return object;
296  }
297 
298  public static ServerAddresses fromJson(@Nullable JSONObject object) {
299  if (object == null) {
300  return null;
301  }
302  ServerAddresses serverAddresses = new ServerAddresses();
303 
304  serverAddresses.module = object.optString(KEY_MODULE);
305  serverAddresses.publicKeyVersion = object.optInt(KEY_PUBLIC_KEY_VERSION);
306  serverAddresses.lbs = object.optString(KEY_LBS);
307  serverAddresses.lbsBackup = new ArrayList<>(Arrays.asList(object.optString(KEY_LBS_BACKUP).split(";")));
308  serverAddresses.chatRoomLbsList = new ArrayList<>(Arrays.asList(object.optString(KEY_CHATROOM_LBS).split(";")));
309  serverAddresses.chatRoomLinkList = new ArrayList<>(Arrays.asList(object.optString(KEY_CHATROOM_LINK).split(";")));
310  serverAddresses.defaultLink = object.optString(KEY_DEFAULT_LINK);
311  serverAddresses.defaultLinkBackup = new ArrayList<>(Arrays.asList(object.optString(KEY_DEFAULT_LINK_BACKUP).split(";")));
312  serverAddresses.nosUploadLbs = object.optString(KEY_NOS_UPLOAD_LBS);
313  serverAddresses.imNOSUploadLBS = object.optString(KEY_IM_NOS_UPLOAD_LBS);
314  serverAddresses.nosUploadDefaultLink = object.optString(KEY_NOS_UPLOAD_DEFAULT_LINK);
315  serverAddresses.nosUpload = object.optString(KEY_NOS_UPLOAD);
316  serverAddresses.nosSupportHttps = object.optBoolean(KEY_NOS_SUPPORT_HTTPS);
317  serverAddresses.nosDownloadUrlFormat = object.optString(KEY_NOS_DOWNLOAD_URL_FORMAT);
318  serverAddresses.nosDownload = object.optString(KEY_NOS_DOWNLOAD);
319  serverAddresses.nosAccess = object.optString(KEY_NOS_ACCESS);
320  serverAddresses.ntServerAddress = object.optString(KEY_NT_SERVER_ADDRESS);
321  serverAddresses.bdServerAddress = object.optString(KEY_BD_SERVER_ADDRESS);
322  serverAddresses.test = object.optBoolean(KEY_TEST);
323  serverAddresses.dedicatedClusteFlag = object.optInt(KEY_DEDICATED_CLUSTE_FLAG);
324  serverAddresses.negoKeyNeca = AsymmetricType.value(object.optInt(KEY_NEGO_KEY_NECA));
325  serverAddresses.negoKeyEncaKeyVersion = object.optInt(KEY_NEGO_KEY_ENCA_KEY_VERSION);
326  serverAddresses.negoKeyEncaKeyParta = object.optString(KEY_NEGO_KEY_ENCA_KEY_PARTA);
327  serverAddresses.negoKeyEncaKeyPartb = object.optString(KEY_NEGO_KEY_ENCA_KEY_PARTB);
328  serverAddresses.commEnca = SymmetryType.value(object.optInt(KEY_COMM_ENCA));
329  serverAddresses.linkIpv6 = object.optString(KEY_LINK_IPV6);
330  serverAddresses.ipProtocolVersion = IPVersion.value(object.optInt(KEY_IP_PROTOCOL_VERSION));
331  serverAddresses.probeIpv4Url = object.optString(KEY_PROBE_IPV4_URL);
332  serverAddresses.probeIpv6Url = object.optString(KEY_PROBE_IPV6_URL);
333  serverAddresses.handshakeType = NimHandshakeType.value(object.optInt(KEY_HANDSHAKE_TYPE));
334  serverAddresses.nosCdnEnable = object.optBoolean(KEY_NOS_CDN_ENABLE);
335  serverAddresses.nosDownloadSet = new HashSet<>(Arrays.asList(object.optString(KEY_NOS_DOWNLOAD_SET).split(";")));
336  serverAddresses.compassDataEndpoint = object.optString(KEY_COMPASS_DATA_ENDPOINT);
337  return serverAddresses;
338  }
339 
340 }
int negoKeyEncaKeyVersion
"交换密钥"协议加密算法密钥版本 version 自定义时则必填
String ntServerAddress
云信运行时异常统计服务器地址
List< String > chatRoomLinkList
ChatRoom 默认link地址,当ChatRoom LBS不可用时先连接该地址 填"IP/Host:PORT".
NimHandshakeType handshakeType
握手协议选择字段
String nosDownloadUrlFormat
[4.6.0版本新增] NOS下载地址拼接模板,用于拼接最终得到的下载地址。 默认是 {bucket}.nosdn.127.net/{object},SDK 上传资源后生成的下载地址为 https://bucket.nosdn.127.net/object
String negoKeyEncaKeyPartb
"交换密钥"协议加密算法密钥 part B 自定义时则必填 BigNumHex string 不含0x RSA: EXP, SM2: Y
String lbs
IM LBS服务器地址,通过它获取IM link 地址信息 填http/https地址
int dedicatedClusteFlag
是否为专属集群{1(是), 0(否)}
String nosDownload
NOS下载地址的host,用于拼接最终获得的文件URL地址,也支持该host替换成下载加速域名/地址 nosAccess...
IPVersion ipProtocolVersion
IP协议版本{0(IPV4), 1(IPV6), 2(Auto, SDK测试后自行选择, 存在性能损耗)}。 默认: 0(IPV4) 非对称加密 ...
static ServerAddresses fromJson(@Nullable JSONObject object)
Set< String > nosDownloadSet
每个元素为使用过的NOS下载地址的特征以及桶名是否在host中组成的Pair对象 如new Pair("nim.nos.netease.com", true), new Pair("nos.netease.com/nim", false)等
AsymmetricType negoKeyNeca
"交换密钥"协议加密算法 {1(RSA),2(SM2)}, def:1(RSA) 非对称加密
String nosAccess
NOS下载加速域名/地址,用于替换NOS下载url中的 nosDownload。 提供两种方式: 1) [4.4.0+开始支持]模板方式:填写云信规定的两种模板:{bucket}.nosdn.127.net/{object} 或者 nosdn.127.net/{bucket}/{object},其中 {bucket} 和 {object} 作为标识符,必须填写。域名部分可以替换为您申请的加速域名。 2) [所有版本支持]非模板方式:填写用于加速的 http/https地址,例如:http://111.222.111.22:9090.
String module
连接云信服务器加密数据通道的公钥参数1 rsaModulus
String nosUploadDefaultLink
NOS上传默认的link服务器地址,当NOS LBS不可用时先连接该地址 填http/https地址
boolean nosCdnEnable
是否优先使用Cdn域名进行NOS下载
String compassDataEndpoint
数据上报端点
String probeIpv6Url
探测ipv6地址类型使用的url, IPProtVersion == 2或3 时生效
String probeIpv4Url
探测ipv4地址类型使用的url, IPProtVersion == 2或3 时生效
SymmetryType commEnca
通信加密算法 {1(RC4), 2(AES128), 4(SM4)} 默认: 1(RC4) 对称加密
String negoKeyEncaKeyParta
"交换密钥"协议加密算法密钥 part A 自定义时则必填 BigNumHex string 不含0x RSA: module, SM2: X
String nosUpload
NOS上传服务器主机地址(仅nosSupportHttps=true时有效,用作https上传时的域名校验及http header host字段...
List< String > defaultLinkBackup
IM 默认的link服务器地址不可用时,连接这些地址 填"IP/Host:PORT".
String nosUploadLbs
NOS上传LBS服务器地址 填http/https地址
云信私有化服务器配置项
String bdServerAddress
云信数据统计服务器地址
String linkIpv6
ipv6的缺省连接地址
int publicKeyVersion
连接云信服务器加密数据通道的公钥的版本号(默认0)
String imNOSUploadLBS
IM NOS LBS服务器地址,通过它获取NOS上传地址 填http/https地址
String defaultLink
IM 默认的link服务器地址,当IM LBS不可用时先连接该地址 填"IP/Host:PORT".
List< String > chatRoomLbsList
ChatRoom LBS服务器地址,通过它获取ChatRoom link 地址信息 填http/https地址
List< String > lbsBackup
备用IM LBS服务器地址,通过它获取IM link 地址信息 填http/https地址
boolean nosSupportHttps
NOS上传是否需要支持https。SDK 3.2版本后默认支持https,同时需要配置 nosUpload!