提交 d7f2f107 编写于 作者: X xujie

Fix review issue

Change-Id: Ic1a79c0dce515e4154cbbb91fead7bbebd50eb80
Signed-off-by: Nxujie <xujie223@huawei.com>
上级 d463145c
......@@ -11,7 +11,7 @@ VPN即虚拟专网(VPN-Virtual Private Network)在公用网络上建立专
## 接口说明
完整的JS API说明以及实例代码请参考:[vpn链接](../reference/apis/js-apis-net-vpn.md)
完整的JS API说明以及实例代码请参考:[VPN API参考](../reference/apis/js-apis-net-vpn.md)
| 类型 | 接口 | 功能说明 |
| ---- | ---- | ---- |
......@@ -29,8 +29,10 @@ VPN即虚拟专网(VPN-Virtual Private Network)在公用网络上建立专
本示例通过 Native C++ 的方式开发应用程序,Native C++ 可参考: [简易Native C++ 示例(ArkTS)(API9)](https://gitee.com/openharmony/codelabs/tree/master/NativeAPI/NativeTemplateDemo)
示例程序主要包含两个部分:js功能代码和C++功能代码
### js 相关的代码
## VPN示例源码(js部分)
主要功能:实现业务逻辑,如:创建隧道、建立VPN网络、保护VPN网络、销毁VPN网络
```js
import hilog from '@ohos.hilog';
......@@ -135,7 +137,8 @@ struct Index {
}
```
### C++ 相关的代码
## VPN示例源码(c++部分)
主要功能:具体业务的底层实现,如:UDP隧道Client端的实现、虚拟网卡读写数据的实现
```c++
#include "napi/native_api.h"
......@@ -184,6 +187,7 @@ static bool threadRunF = false;
static std::thread threadt1;
static std::thread threadt2;
//获取对应字符串数据, 用于获取udp server 的IP地址
static constexpr const int MAX_STRING_LENGTH = 1024;
std::string GetStringFromValueUtf8(napi_env env, napi_value value) {
std::string result;
......@@ -232,6 +236,7 @@ void HandleTcpReceived(FdInfo fdInfo) {
continue;
}
// 接收到udp server的数据,写入到虚拟网卡中
NETMANAGER_VPN_LOGD("from [%{public}s:%{public}d] data: %{public}s, len: %{public}d",
inet_ntoa(fdInfo.serverAddr.sin_addr), ntohs(fdInfo.serverAddr.sin_port), buffer, length);
int ret = write(fdInfo.tunFd, buffer, length);
......@@ -252,6 +257,7 @@ static napi_value UdpConnect(napi_env env, napi_callback_info info) {
NETMANAGER_VPN_LOGI("ip: %{public}s port: %{public}d", ipAddr.c_str(), port);
// 建立udp隧道
int32_t sockFd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockFd == -1) {
NETMANAGER_VPN_LOGE("socket() error");
......@@ -287,6 +293,7 @@ static napi_value StartVpn(napi_env env, napi_callback_info info) {
threadt2.join();
}
// 启动两个线程, 一个处理读取虚拟网卡的数据,另一个接收服务端的数据
threadRunF = true;
std::thread tt1(HandleReadTunfd, fdInfo);
std::thread tt2(HandleTcpReceived, fdInfo);
......@@ -313,6 +320,7 @@ static napi_value StopVpn(napi_env env, napi_callback_info info) {
tunnelFd = 0;
}
// 停止两个线程
if (threadRunF) {
threadRunF = false;
threadt1.join();
......
......@@ -11,9 +11,9 @@ VPN管理模块,支持VPN的启动和停止功能。
import vpn from '@ohos.net.vpn';
```
## vpn.createVpnConnection<sup>10+</sup>
## vpn.createVpnConnection
function createVpnConnection(context: AbilityContext): VpnConnection;
createVpnConnection(context: AbilityContext): VpnConnection
创建一个VPN连接对象。
......@@ -23,7 +23,13 @@ function createVpnConnection(context: AbilityContext): VpnConnection;
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ |
| context | AbilityContext | 是 | 指定context |
| context | [AbilityContext](js-apis-inner-application-uiAbilityContext.md#uiabilitycontext) | 是 | 指定context |
**返回值:**
| 类型 | 说明 |
| :--------------------------------- | :---------------------- |
| [VpnConnection](#vpnconnection) | 返回一个VPN连接对象。 |
**错误码:**
......@@ -34,17 +40,6 @@ function createVpnConnection(context: AbilityContext): VpnConnection;
| 401 | Parameter error. |
**示例:**
FA模型示例:
```js
import featureAbility from '@ohos.ability.featureAbility';
let context = featureAbility.getContext();
VpnConnection = vpn.createVpnConnection(context);
console.info("vpn onInit: " + JSON.stringify(VpnConnection));
```
Stage模型示例:
```ts
......@@ -60,9 +55,13 @@ VpnConnection = vpn.createVpnConnection(context);
console.info("vpn onInit: " + JSON.stringify(VpnConnection));
```
## VpnConnection.setUp<sup>10+</sup>
## VpnConnection
VPN连接对象。在调用VpnConnection的方法前,需要先通过[vpn.createVpnConnection](#vpncreatevpnconnection)创建VPN连接对象。
### setUp
setUp(config: VpnConfig, callback: AsyncCallback\<number\>): void;
setUp(config: VpnConfig, callback: AsyncCallback\<number\>): void
使用config创建一个vpn网络,使用callback方式作为异步方法。
......@@ -76,7 +75,7 @@ setUp(config: VpnConfig, callback: AsyncCallback\<number\>): void;
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ |
| config | [VpnConfig](#vpnconfig10) | 是 | 指定VPN网络的配置信息。 |
| config | [VpnConfig](#vpnconfig) | 是 | 指定VPN网络的配置信息。 |
| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功启动VPN网络时,返回虚拟网卡的文件描述符fd, error为undefined,否则为错误对象。 |
**错误码:**
......@@ -119,9 +118,9 @@ setUp(config: VpnConfig, callback: AsyncCallback\<number\>): void;
})
```
## VpnConnection.setUp<sup>10+</sup>
### setUp
setUp(config: VpnConfig): Promise\<number\>;
setUp(config: VpnConfig): Promise\<number\>
使用config创建一个vpn网络,使用Promise方式作为异步方法。
......@@ -135,7 +134,7 @@ setUp(config: VpnConfig): Promise\<number\>;
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ |
| config | [VpnConfig](#vpnconfig10) | 是 | 指定VPN网络的配置信息。 |
| config | [VpnConfig](#vpnconfig) | 是 | 指定VPN网络的配置信息。 |
**返回值:**
......@@ -184,9 +183,9 @@ setUp(config: VpnConfig): Promise\<number\>;
})
```
## VpnConnection.protect<sup>10+</sup>
### protect
protect(socketFd: number, callback: AsyncCallback\<void\>): void;
protect(socketFd: number, callback: AsyncCallback\<void\>): void
保护套接字不受VPN连接影响,通过该套接字发送的数据将直接基于物理网络收发,因此其流量不会通过VPN转发,使用callback方式作为异步方法。
......@@ -200,7 +199,7 @@ protect(socketFd: number, callback: AsyncCallback\<void\>): void;
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ |
| socketFd | number | 是 | 指定保护的socketfd。 |
| socketFd | number | 是 | 指定保护的socketfd, 该文件描述符通过[getSocketFd](js-apis-socket.md#getsocketfd10)获取。 |
| callback | AsyncCallback\<void\> | 是 | 回调函数,成功时,error为undefined,失败返回错误码错误信息。 |
**错误码:**
......@@ -242,9 +241,9 @@ protect(socketFd: number, callback: AsyncCallback\<void\>): void;
})
```
## VpnConnection.protect<sup>10+</sup>
### protect
protect(socketFd: number): Promise\<void\>;
protect(socketFd: number): Promise\<void\>
保护套接字不受VPN连接影响,通过该套接字发送的数据将直接基于物理网络收发,因此其流量不会通过VPN转发, 使用Promise方式作为异步方法。
......@@ -258,7 +257,7 @@ protect(socketFd: number): Promise\<void\>;
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ |
| socketFd | number | 是 | 指定保护的socketfd。 |
| socketFd | number | 是 | 指定保护的socketfd, 该文件描述符通过[getSocketFd](js-apis-socket.md#getsocketfd10-1)获取。 |
**返回值:**
......@@ -307,9 +306,9 @@ protect(socketFd: number): Promise\<void\>;
})
```
## VpnConnection.destroy<sup>10+</sup>
### destroy
destroy(callback: AsyncCallback\<void\>): void;
destroy(callback: AsyncCallback\<void\>): void
销毁启动的VPN网络,使用callback方式作为异步方法。
......@@ -345,9 +344,9 @@ destroy(callback: AsyncCallback\<void\>): void;
})
```
## VpnConnection.destroy<sup>10+</sup>
### destroy
destroy(): Promise\<void\>;
destroy(): Promise\<void\>
销毁启动的VPN网络,使用Promise方式作为异步方法。
......@@ -384,7 +383,7 @@ destroy(): Promise\<void\>;
});
```
## VpnConfig<sup>10+</sup>
## VpnConfig
VPN配置参数。
......@@ -394,8 +393,8 @@ VPN配置参数。
| 名称 | 类型 | 必填 | 说明 |
| ------- | ------ | -- |------------------------------ |
| addresses | Array\<LinkAddress\> | 是 | VPN虚拟网卡的IP地址。 |
| routes | Array\<RouteInfo\> | 否 | VPN虚拟网卡的路由信息。 |
| addresses | Array\<[LinkAddress](js-apis-net-connection.md#linkaddress8)\> | 是 | VPN虚拟网卡的IP地址。 |
| routes | Array\<[RouteInfo](js-apis-net-connection.md#routeinfo8)\> | 否 | VPN虚拟网卡的路由信息。 |
| dnsAddresses | Array\<string\> | 否 | DNS服务器地址信息。 |
| searchDomains | Array\<string\> | 否 | DNS的搜索域列表。 |
| mtu | number | 否 | 最大传输单元MTU值(单位:字节)。 |
......
......@@ -1250,7 +1250,7 @@ getSocketFd(callback: AsyncCallback\<number\>): void
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------ | ---- | ---------- |
| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功获取fd时,返回tcpsocket的fd。 |
| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 |
**示例:**
......@@ -1290,7 +1290,7 @@ getSocketFd(): Promise\<number\>
| 类型 | 说明 |
| :----------------------------------------------- | :----------------------------------------- |
| Promise\<number\> | 以Promise形式返回获取TCPSocket的文件描述符。 |
| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
**示例:**
......
......@@ -12,15 +12,15 @@ VPN creation denied, please check the user type.
**错误描述**
VPN创建拒绝,请检测当前用户的类型。
拒绝创建VPN,请检测当前用户的类型。
**可能原因**
用户的type不匹配, GUEST用户不能调用setUp接口。
登录系统的用户类型不匹配, GUEST用户不能调用setUp接口。
**处理步骤**
检查当前用户的类型。
检查当前登录系统用户的类型。
## 2203002 VPN已存在
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册