• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 示例服务器开发指导
2<!--Kit: Basic Services Kit-->
3<!--Subsystem: Update-->
4<!--Owner: @RainyDay_005; @huangsiping3-->
5<!--Designer: @zhangzhengxue; @jackd320-->
6<!--Tester: @mamba-ting-->
7<!--Adviser: @zhang_yixin13-->
8
9## 开发步骤
10
111. 生成SSL证书
12
13	生成serverKey.pemserverCert.cer两个文件,用于示例服务器的SSL协议通信。
14
15	```
16	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"
17	```
18
19
20
212. 修改bundle.json
22
23	在build字段新增一个sub_component。
24
25	```
26	"sub_component": [
27		"//base/update/updateservice/server_sample:testserver",
28		...
29	],
30	```
31
323. 建立代码目录
33
34	进入到update_updateservice目录下,执行以下命令,建立代码目录。
35
36	```
37	mkdir server_sample                            // 建立示例服务器server_sample目录
38	touch server_sample/BUILD.gn                   // 创建BUILD.gn编译文件
39	mkdir server_sample/include                    // 建立示例服务器头文件include目录
40	touch server_process.h                         // 创建server_process.h头文件
41	mkdir server_sample/src                        // 建立示例服务器c/c++文件src目录
42	touch server_sample/src/server_process.c       // 创建server_process.c文件
43	touch server_sample/src/main.cpp               // 创建main.cpp文件
44	```
45
464. 编写编译文件BUILD.gn
47
48	文件BUILD.gn一共编译两个ohos组件,一个是ohos_shared_library库文件libserver_process.z.so,另一个是ohos_executable可执行文件testserver。
49
50	```
51	import("//build/ohos.gni")
52
53	ohos_shared_library("server_process") {
54		sources = [
55			"//base/update/updateservice/server_sample/src/server_process.c",
56		]
57
58		include_dirs = [
59			"//base/update/updateservice/server_sample/include",
60			"//third_party/openssl/include",
61		]
62
63		deps = [
64			"//base/update/updater/services/log:libupdaterlog",
65			"//third_party/bounds_checking_function:libsec_static",
66			"//third_party/openssl:crypto_source",
67			"//third_party/openssl:ssl_source",
68			"//utils/native/base:utils",
69		]
70
71		part_name = "update_service"
72	}
73
74	ohos_executable("testserver") {
75		sources = [
76			"//base/update/updateservice/server_sample/src/main.cpp",
77		]
78
79		include_dirs = [
80			"//base/update/updateservice/server_sample/include",
81		]
82
83		deps = [
84			"//base/update/updateservice/server_sample:server_process",
85		]
86
87		part_name = "update_service"
88	}
89	```
90
915. 编写头文件server_process.h
92
93	文件server_process.h声明了示例服务器的接口。
94
95	```c++
96	#ifndef __SERVER_PROCESS_H__
97	#define __SERVER_PROCESS_H__
98
99	/*
100	Init函数:用于创建socket环境,并预设置一些属性
101	*/
102	int Init();
103
104	/*
105	SetParam函数:所有插件参数设置的统一接口
106	*/
107	int SetParam(const char *key, const char *value);
108
109	/*
110	GetParam函数:所有插件参数获取的统一接口
111	*/
112	int GetParam(const char *key, char *value);
113
114	/*
115	ReverseSetParamCallback函数:回调
116	*/
117	int ReverseSetParamCallback(int(*setParam)(const char *key, const char *value));
118
119	/*
120	Open函数:用于服务打开的接口
121	*/
122	int Open();
123
124	/*
125	MainLoop函数:每隔100ms调用一次
126	*/
127	int MainLoop();
128
129	/*
130	Close函数,用于关闭服务并释放资源
131	*/
132	int Close();
133
134	#endif //__SERVER_PROCESS_H__
135	```
136
1376. 编写server_process.cmain.cpp
138
139	文件server_process.c主要声明了服务器的返回报文格式respondContent,main.cpp可参考普通SSL协议的服务器编写,注意包含相关头文件,同时加载serverKey.pemserverCert.cer两个证书。
140
141	```c
142	#include "server_process.h"
143
144	#include <netinet/in.h>
145	#include <sys/types.h>
146	#include <sys/socket.h>
147	#include <arpa/inet.h>
148	#include <unistd.h>
149	#include <stdlib.h>
150	#include <string.h>
151	#include <stdio.h>
152
153	#include "openssl/err.h"
154	#include "openssl/ssl.h"
155
156	#define SERVER_PEM "/data/sdcard/serverKey.pem"  //使用绝对路径
157	#define SERVER_CER "/data/sdcard/serverCert.cer" //使用绝对路径
158
159	#define LOG_PRINT(fmt, ...) printf("[ServerProcess][%s:%d] " fmt "\n", __func__, __LINE__, ##__VA_ARGS__)
160	#define DO_CHECK(cond, log, ...) \
161		if (!(cond)) {\
162			LOG_PRINT(log);\
163			__VA_ARGS__;\
164			return -1;\
165		}
166
167	// 请参考server_process.h的接口予以实现,注意服务器返回的内容格式。
168	respondContent = "{"
169		"\"searchStatus\": 0,"
170		"\"errMsg\": \"success\","
171		"\"checkResults\": [{"
172			"\"versionName\": \"sampleVersionName\","
173			"\"versionCode\": \"sampleVersionCode\","
174			"\"verifyInfo\": \"sampleVerifyInfoSha256Value\","
175			"\"size\": 1234567,"
176			"\"packageType\": 1,"
177			"\"descriptPackageId\": \"abcdefg1234567ABCDEFG\","
178		"}],"
179		"\"descriptInfo\": [{"
180			"\"descriptionType\": 0,"
181			"\"content\": \"This package message is used for sampleContent\""
182		"}]"
183	"}";
184	```
185
1867. 编译输出产物
187
188	编译输出目录会新增testserver和libserver_process.z.so两个文件。
189
1908. 升级包制作
191
192	参考[update_packaging_tools仓](https://gitee.com/openharmony/update_packaging_tools)制作升级包。
193
1949. 启动搜包服务器
195
196	建议在开发板上新建一个纯英文路径,然后将testserver、libserver_process.z.soserverCert.cerserverKey.pem放到同一个目录下,进入该目录,执行以下启动命令即可启动搜包服务器。
197
198	```
199	./testserver ./libserver_process.z.so &
200	```
201
202