sample-server-guidelines.md 5.8 KB
Newer Older
W
wangqi 已提交
1 2 3 4
# 示例服务器开发指导

## 场景介绍

W
wangqi 已提交
5
示例服务器解决了升级服务的实际应用场景测试中缺乏相应搜包服务器提供查询升级包、获取升级包下载url等问题,支持测试升级服务和二次开发功能验证,为升级服务的应用场景提供尽可能完善的端到端环境搭建。开发者能够基于此指导快速开发一个简易的搜包服务器用于升级服务应用场景测试。
W
wangqi 已提交
6 7 8

## 开发步骤

W
wangqi 已提交
9
1. 生成SSL证书
W
wangqi 已提交
10

W
wangqi 已提交
11
	生成serverKey.pem和serverCert.cer两个文件,用于示例服务器的SSL协议通信。
W
wangqi 已提交
12

W
wangqi 已提交
13 14 15
	```bash
	openssl req -newkey rsa:2048 -nodes -keyout serverKey.pem -x509 -days 365 -out serverCert.cer -subj "/C=CN/ST=GD/L=GZ/O=abc/OU=defg/CN=hijk/emailAddress=test.com"
	```
W
wangqi 已提交
16 17 18



W
wangqi 已提交
19
2. 修改bundle.json
W
wangqi 已提交
20

W
wangqi 已提交
21
	在build字段的sub_component字段中开始位置新增一行。
W
wangqi 已提交
22

W
wangqi 已提交
23 24 25 26 27 28
	```cmake
	"sub_component": [
		"//base/update/updateservice/server_sample:testserver",
		...
	],
	```
W
wangqi 已提交
29

W
wangqi 已提交
30
3. 下载代码仓
W
wangqi 已提交
31

W
wangqi 已提交
32
	repo方式下载OpenHarmony全仓
W
wangqi 已提交
33

W
wangqi 已提交
34 35 36 37 38
	```bash
	repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
	repo sync -c
	repo forall -c 'git lfs pull'
	```
W
wangqi 已提交
39

W
wangqi 已提交
40
	git clone方式下载本代码仓
W
wangqi 已提交
41

W
wangqi 已提交
42 43 44
	```bash
	git clone https://gitee.com/openharmony/update_updateservice.git -b master
	```
W
wangqi 已提交
45 46 47



W
wangqi 已提交
48
4. 建立代码目录
W
wangqi 已提交
49

W
wangqi 已提交
50
	进入到update_updateservice目录下,执行以下命令,建立代码目录。
W
wangqi 已提交
51

W
wangqi 已提交
52 53 54 55 56 57 58 59 60
	```bash
	mkdir server_sample                            // 建立示例服务器server_sample目录
	touch server_sample/BUILD.gn                 // 创建BUILD.gn编译文件
	mkdir server_sample/include                     // 建立示例服务器头文件include目录
	touch server_process.h                        // 创建server_process.h头文件
	mkdir server_sample/src                        // 建立示例服务器c/c++文件src目录
	touch server_sample/src/server_process.c      // 创建server_process.c文件
	touch server_sample/src/main.cpp             // 创建main.cpp文件
	```
W
wangqi 已提交
61

W
wangqi 已提交
62
5. 编译文件BUILD.gn编写
W
wangqi 已提交
63

W
wangqi 已提交
64
	文件BUILD.gn一共编译两个ohos组件,一个是ohos_shared_library库文件libserver_process.z.so,另一个是ohos_executable可执行文件testserver。
W
wangqi 已提交
65

W
wangqi 已提交
66 67
	```cmake
	import("//build/ohos.gni")
W
wangqi 已提交
68

W
wangqi 已提交
69 70
	ohos_shared_library("server_process") {
		sources = [
W
wangqi 已提交
71
			"//base/update/updateservice/server_sample/src/server_process.c",
W
wangqi 已提交
72
		]
W
wangqi 已提交
73

W
wangqi 已提交
74 75 76 77
		include_dirs = [
			"//base/update/updateservice/server_sample/include",
			"//third_party/openssl/include",
		]
W
wangqi 已提交
78

W
wangqi 已提交
79 80 81 82 83 84 85
		deps = [
			"//base/update/updater/services/log:libupdaterlog",
			"//third_party/bounds_checking_function:libsec_static",
			"//third_party/openssl:crypto_source",
			"//third_party/openssl:ssl_source",
			"//utils/native/base:utils",
		]
W
wangqi 已提交
86

W
wangqi 已提交
87 88
		part_name = "update_service"
	}
W
wangqi 已提交
89

W
wangqi 已提交
90
	ohos_executable("testserver") {
W
wangqi 已提交
91
		sources = [
W
wangqi 已提交
92 93
			"//base/update/updateservice/server_sample/src/main.cpp",
		]
W
wangqi 已提交
94

W
wangqi 已提交
95 96 97
		include_dirs = [
			"//base/update/updateservice/server_sample/include",
		]
W
wangqi 已提交
98

W
wangqi 已提交
99 100 101
		deps = [
			"//base/update/updateservice/server_sample:server_process",
		]
W
wangqi 已提交
102

W
wangqi 已提交
103 104 105
		part_name = "update_service"
	}
	```
W
wangqi 已提交
106

W
wangqi 已提交
107
6. 头文件server_process.h编写
W
wangqi 已提交
108

W
wangqi 已提交
109
	文件server_process.h声明了示例服务器的接口。
W
wangqi 已提交
110

W
wangqi 已提交
111 112 113
	```c++
	#ifndef __SERVER_PROCESS_H__
	#define __SERVER_PROCESS_H__
W
wangqi 已提交
114

W
wangqi 已提交
115 116 117 118
	/*
	Init函数:用于创建socket环境,并预设置一些属性
	*/
	int Init();
W
wangqi 已提交
119

W
wangqi 已提交
120 121 122 123
	/*
	SetParam函数:所有插件参数设置的统一接口
	*/
	int SetParam(const char *key, const char *value);
W
wangqi 已提交
124

W
wangqi 已提交
125 126 127 128
	/*
	GetParam函数:所有插件参数获取的统一接口
	*/
	int GetParam(const char *key, char *value);
W
wangqi 已提交
129

W
wangqi 已提交
130 131 132 133
	/*
	ReverseSetParamCallback函数:回调
	*/
	int ReverseSetParamCallback(int(*setParam)(const char *key, const char *value));
W
wangqi 已提交
134

W
wangqi 已提交
135 136 137 138
	/*
	Open函数:用于服务打开的接口
	*/
	int Open();
W
wangqi 已提交
139

W
wangqi 已提交
140 141 142 143
	/*
	MainLoop函数:每隔100ms调用一次
	*/
	int MainLoop();
W
wangqi 已提交
144

W
wangqi 已提交
145 146 147 148
	/*
	Close函数,用于关闭服务并释放资源
	*/
	int Close();
W
wangqi 已提交
149

W
wangqi 已提交
150 151
	#endif //__SERVER_PROCESS_H__
	```
W
wangqi 已提交
152

W
wangqi 已提交
153
7. server_process.c、main.cpp编写
W
wangqi 已提交
154

W
wangqi 已提交
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
	文件server_process.c主要声明了服务器的返回报文格式respondContent,main.cpp可参考普通SSL协议的服务器编写,注意包含相关头文件,同时加载serverKey.pem和serverCert.cer两个证书。

	```c
	#include "server_process.h"

	#include <netinet/in.h>
	#include <sys/types.h>
	#include <sys/socket.h>
	#include <arpa/inet.h>
	#include <unistd.h>
	#include <stdlib.h>
	#include <string.h>
	#include <stdio.h>

	#include "openssl/err.h"
	#include "openssl/ssl.h"

	#define SERVER_PEM "/data/sdcard/serverKey.pem"  //使用绝对路径
	#define SERVER_CER "/data/sdcard/serverCert.cer" //使用绝对路径

	#define LOG_PRINT(fmt, ...) printf("[ServerProcess][%s:%d] " fmt "\n", __func__, __LINE__, ##__VA_ARGS__)
	#define DO_CHECK(cond, log, ...) \
		if (!(cond)) {\
			LOG_PRINT(log);\
			__VA_ARGS__;\
			return -1;\
		}

	// 请参考server_process.h的接口予以实现,注意服务器返回的内容格式。
	respondContent = "{"
		"\"searchStatus\": 0,"
		"\"errMsg\": \"success\","
		"\"checkResults\": [{"
			"\"versionName\": \"sampleVersionName\","
			"\"versionCode\": \"sampleVersionCode\","
			"\"verifyInfo\": \"sampleVerifyInfoSha256Value\","
			"\"size\": 1234567,"
			"\"packageType\": 1,"
			"\"descriptPackageId\": \"update.bin\","
		"}],"
		"\"descriptInfo\": [{"
			"\"descriptPackageId\": \"update.bin\","
			"\"content\": \"This package message is used for sampleContent\""
		"}]"
W
wangqi 已提交
199
	"}";
W
wangqi 已提交
200
	```
W
wangqi 已提交
201

W
wangqi 已提交
202
8. 编译输出产物
W
wangqi 已提交
203

W
wangqi 已提交
204
	编译输出目录会新增testserver和libserver_process.z.so两个文件。
W
wangqi 已提交
205

W
wangqi 已提交
206
9. 升级包制作
W
wangqi 已提交
207

W
wangqi 已提交
208
	[参考OpenHarmony的update_packaging_tools仓制作升级包。](https://gitee.com/openharmony/update_packaging_tools)
W
wangqi 已提交
209

W
wangqi 已提交
210 211
10. 启动搜包服务器

W
wangqi 已提交
212
	建议在开发板上新建一个纯英文路径,然后将testserver、libserver_process.z.so、serverCert.cer和serverKey.pem放到同一个目录下,进入该目录,执行以下启动命令即可启动搜包服务器。
W
wangqi 已提交
213

W
wangqi 已提交
214 215 216
	```bash
	./testserver ./libserver_process.z.so &
	```
W
wangqi 已提交
217