hilink_open_socket_adapter.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
  3. * Description: 系统适配层网络Socket接口(需设备厂商实现)
  4. */
  5. #ifndef HILINK_OPEN_SOCKET_ADAPTER_H
  6. #define HILINK_OPEN_SOCKET_ADAPTER_H
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #define MAX_IP_LEN 40
  11. /* udp读取数据参数结构体 */
  12. typedef struct {
  13. int fd; /* UDP通讯套接字 */
  14. unsigned char *buf; /* 存放数据的缓冲 */
  15. unsigned short len; /* 要读取的长度 */
  16. char *remoteIp; /* 远端ip */
  17. unsigned short remoteIpLen; /* 远端ip长度 */
  18. unsigned short *remotePort; /* 远端端口 */
  19. } UdpRecvParam;
  20. /*
  21. * 获取远端主机名
  22. * 参数hostName 远端主机名称, url
  23. * 参数ipList 存放远端主机IP地址列表的数组
  24. * 参数num 存放远端主机IP地址列表的数组的大小
  25. * 返回0 成功, 其他 失败
  26. * 注意Contiki OS下该接口为异步获取, 失败后需再次获取
  27. */
  28. int HILINK_GetHostByName(const char *hostName, char ipList[][MAX_IP_LEN], int num);
  29. /*
  30. * 创建UDP通讯套接字
  31. * 参数localPort UDP通信端口号
  32. * 返回值: 返回值小于0 创建失败, 大于等于0 UDP套接字fd
  33. */
  34. int HILINK_CreateUdp(unsigned short localPort);
  35. /*
  36. * 关闭UDP通讯套接字
  37. * 输入参数int fd UDP通讯套接字
  38. */
  39. void HILINK_RemoveUdp(int fd);
  40. /*
  41. * 用于UDP发送数据
  42. * 参数fd UDP通讯套接字
  43. * 参数buf 发送的数据
  44. * 参数len 数据长度
  45. * 参数remoteIp 目的IP
  46. * 参数remotePort 目的端口
  47. * 返回值小于0 发送失败, 大于等于0 实际发送的字节数
  48. */
  49. int HILINK_SendUdp(int fd, const unsigned char *buf, unsigned short len, const char *remoteIp,
  50. unsigned short remotePort);
  51. /*
  52. * UDP读取数据
  53. * 参数udpRecvParam udp读取数据参数结构体
  54. */
  55. int HILINK_RecvUdp(UdpRecvParam *udpRecvParam);
  56. /*
  57. * 建立TCP连接
  58. * 参数dst 目的IP
  59. * 参数port 目的端口
  60. * 返回值小于0 连接失败, 大于等于0 TCP套接字
  61. */
  62. int HILINK_ConnectTcp(const char *dst, unsigned short port);
  63. /*
  64. * TCP连接状态获取
  65. * 参数fd TCP套接字
  66. * 返回0 连接正常; 非0 连接失败, 具体参见 hilink_socket_error_t定义
  67. */
  68. int HILINK_GetTcpState(int fd);
  69. /*
  70. * 断开TCP连接
  71. * 参数fd TCP套接字
  72. * 输入参数 int fd TCP 套接字
  73. */
  74. void HILINK_DisconnectTcp(int fd);
  75. /*
  76. * TCP发送数据
  77. * 参数fd TCP通讯套接字
  78. * 参数buf 发送的数据
  79. * 参数len 数据长度
  80. * 返回值小于0 发送失败, 大于等于0 实际发送的字节数
  81. */
  82. int HILINK_SendTcp(int fd, const unsigned char *buf, unsigned short len);
  83. /*
  84. * 用于TCP读取数据
  85. * 参数fd TCP通讯套接字
  86. * 参数buf 存放数据的缓冲
  87. * 参数len 要读取的长度
  88. * 返回值小于0 读取失败, 大于等于0 实际读取的字节数
  89. */
  90. int HILINK_RecvTcp(int fd, unsigned char *buf, unsigned short len);
  91. /*
  92. * 短整形主机字节序转网络字节序
  93. * 参数hs 主机字节序
  94. * 返回网络字节序数字
  95. */
  96. unsigned short HILINK_Htons(unsigned short hs);
  97. /*
  98. * 短整形网络字节序转主机字节序
  99. * 参数ns 网络字节序
  100. * 返回主机字节序数字
  101. */
  102. unsigned short HILINK_Ntohs(unsigned short ns);
  103. /*
  104. * 获取TCP发送缓冲区剩余缓冲长度
  105. * 参数fd TCP通讯套接字
  106. * 参数taskType 0表示多任务系统,m2m运行于独立的task中;1表示单任务系统,m2m和其他任务运行在同个task中
  107. * 参数bufLeft 发送缓冲区剩余缓冲长度
  108. * 参数dataMax 数据payload的最大长度
  109. * 返回0表示成功,返回其他表示失败
  110. */
  111. int HILINK_GetLeftTcpSendbuf(int fd, int *taskType, unsigned int *bufLeft, unsigned int *dataMax);
  112. /*
  113. * 移除多余信道
  114. * 参数fd UDP通讯套接字
  115. * 返回0表示成功,返回其他表示失败
  116. */
  117. int HILINK_DeleteMultiGroupUdp(int fd);
  118. /*
  119. * 获取网络操作失败时的错误码errno
  120. * 参数fd
  121. */
  122. int HILINK_GetNetWorkError(int fd);
  123. /*
  124. * 获取socket状态
  125. * 参数fd TCP套接字
  126. * 参数flag TCP状态,包括1可读状态;2可写状态;4异常状态
  127. * 参数usec 状态检测等待时间,即此函数需要在该时间限制内返回,单位微秒
  128. * 返回0表示成功,返回其他表示失败
  129. */
  130. int HILINK_GetSocketState(int fd, unsigned int flag, unsigned int usec);
  131. #ifdef __cplusplus
  132. }
  133. #endif
  134. #endif