分布式通信子系统

    • 服务发布:服务发布后周边的设备可以发现并使用服务。
    • 数据传输:根据服务的名称和设备ID建立一个会话,就可以实现服务间的传输功能。
    • 安全:提供通信数据的加密能力。

    开发者通过使用项目的API实现设备间高速安全的通信,不用关心通信细节管理,进而实现业务开发的跨平台能力。

    softbus_lite源代码目录结构如下图所示:

    表1 softbus_lite源代码目录结构

    • 语言限制:C语言。
    • 组网环境:必须确保设备在同一个局域网中。
    1. 设备发现

    用户使用发现功能时,需要保证发现端设备与被发现端设备在同一个局域网内,并且互相能收到对方以下流程的报文。

    (1) 发现端设备,发起discover请求后,使用coap协议在局域网内发送广播。报文如下:

    (2)被发现端设备使用PublishService接口发布服务,接收端收到广播后,发送coap协议单播给发现端。报文格式如下:

    分布式通信子系统 - 图1

    被发现端接口使用示例如下:

    1. 传输

    软总线提供统一的基于Session的传输功能,业务可以通过sessionId收发数据或获取其相关基本属性。当前本项目只实现被动接收Session连接的功能,业务可根据自身需要及Session自身属性判断是否接受此Session,如不接受,可以主动拒绝此连接。本项目暂未提供打开Session的相关能力。

    传输主要代码示例如下:

    1. const char *g_pkgName = "BUSINESS_NAME";
    2. const char *g_sessionName = "SESSION_NAME";
    3. struct ISessionListener * g_sessionCallback= NULL;
    4. // 回调实现:接收对方通过SendBytes发送的数据,此示例实现是接收到对端发送的数据后回复固定消息
    5. void OnBytesReceivedTest(int sessionId, const void* data, unsigned int dataLen)
    6. {
    7. printf("OnBytesReceivedTest\n");
    8. printf("Recv Data: %s\n", (char *)data);
    9. printf("Recv Data dataLen: %d\n", dataLen);
    10. char *testSendData = "Hello World, Hello!";
    11. SendBytes(sessionId, testSendData, strlen(testSendData));
    12. return;
    13. // 回调实现:用于处理会话关闭后的相关业务操作,如释放当前会话相关的业务资源,会话无需业务主动释放
    14. void OnSessionClosedEventTest(int sessionId)
    15. {
    16. printf("Close session successfully, sessionId=%d\n", sessionId);
    17. }
    18. int OnSessionOpenedEventTest(int sessionId)
    19. {
    20. if (strcmp(GetPeerSessionName(sessionId), SESSION_NAME) != 0) {
    21. printf("Reject the session which name is different from mine, sessionId=%d\n", sessionId);
    22. return -1;
    23. }
    24. printf("Open session successfully, sessionId=%d\n", sessionId);
    25. return 0;
    26. }
    27. // 向SoftBus注册业务会话服务及其回调
    28. int StartSessionServer()
    29. {
    30. if (g_sessionCallback != NULL) {
    31. g_sessionCallback = (struct ISessionListener*)malloc(sizeof(struct ISessionListener));
    32. }
    33. if (g_sessionCallback == NULL) {
    34. printf("Failed to malloc g_sessionCallback!\n");
    35. }
    36. g_sessionCallback->onBytesReceived = OnBytesReceivedTest;
    37. g_sessionCallback->onSessionClosed = OnSessionClosedEventTest;
    38. int ret = CreateSessionServer(g_pkgName, g_sessionName, g_sessionCallback);
    39. if (ret < 0) {
    40. printf("Failed to create session server!\n");
    41. free(g_sessionCallback);
    42. g_sessionCallback = NULL;
    43. }
    44. return ret;
    45. }
    46. // 从SoftBus中删除业务会话服务及其回调
    47. void StopSessionServer()
    48. {
    49. int ret = RemoveSessionServer(g_pkgName, g_sessionName);
    50. if (ret < 0) {
    51. printf("Failed to remove session server!\n");
    52. return;
    53. }
    54. if (g_sessionCallback != NULL) {
    55. free(g_sessionCallback);
    56. g_sessionCallback = NULL;
    57. }

    communication_frameworks_wifi_lite

    communication_frameworks_ipc_lite

    communication_hals_wifi_lite

    communication_interfaces_kits_ipc_lite

    communication_interfaces_kits_softbuskit_lite

    communication_services_softbus_lite