netserver.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef __NETSERVER_H
  2. #define __NETSERVER_H
  3. #include "ns_types.h"
  4. #ifdef RT_USING_SAL
  5. #include <sys/socket.h>
  6. #else
  7. #include <lwip/sockets.h>
  8. #endif
  9. #define NS_USE_SSL (1 << 0)
  10. #define NS_RESET_FLAG (1 << 1)
  11. #define NS_SHUTDOWN_FLAG (1 << 2)
  12. #define NS_SSL_VERIFY_PEER (1 << 5)
  13. #define NS_SSL_FORCE_PEER_CERT (1 << 6) // if no peer cert , handshake fails
  14. typedef struct _netserver_mgr netserver_mgr_t;
  15. /**
  16. * netserver session struct
  17. * */
  18. typedef struct _ns_session {
  19. int socket;
  20. struct sockaddr_in cliaddr;
  21. uint32_t tick_timeout;
  22. uint32_t flag;
  23. struct _ns_session *next;
  24. void *user_data;
  25. #if NS_ENABLE_SSL
  26. void *ssl_if_data;
  27. #else
  28. void *unused_data; /* To keep the size of the structure the same */
  29. #endif
  30. } ns_session_t;
  31. /**
  32. * netserver callback
  33. * */
  34. typedef struct _netserver_cb {
  35. void (*netserver_reset_cb)(netserver_mgr_t *mgr);
  36. void (*session_create_cb)(ns_session_t *session);
  37. void (*session_close_cb)(ns_session_t *session);
  38. int (*session_accept_cb)(ns_session_t *session);
  39. int (*session_poll_cb)(ns_session_t *session);
  40. int (*data_readable_cb)(ns_session_t *session, void *data, int sz);
  41. #if NS_ENABLE_SSL
  42. int (*ssl_handshake_cb)(ns_session_t *session, void *cert_data, int cert_size);
  43. #endif
  44. } netserver_cb_t;
  45. typedef struct _thread_attrs {
  46. uint32_t stack_size;
  47. uint8_t priority;
  48. uint32_t tick;
  49. } thread_attrs_t;
  50. /**
  51. * netserver options
  52. */
  53. typedef struct _netserver_opt {
  54. uint16_t listen_port; // server listen port
  55. uint32_t data_pkg_max_size; // max size of data package
  56. uint32_t max_conns; // max connections
  57. uint32_t session_timeout; // session timeout
  58. netserver_cb_t callback; // callback functions
  59. thread_attrs_t thread_attrs; // server thread attrs
  60. #if NS_ENABLE_SSL
  61. const char *server_key;
  62. const char *server_cert;
  63. const char *ca_cert;
  64. const char *server_key_buffer;
  65. const char *server_cert_buffer;
  66. const char *ca_cert_buffer;
  67. #endif
  68. } netserver_opt_t;
  69. /**
  70. * netserver manager
  71. */
  72. typedef struct _netserver_mgr {
  73. ns_session_t *listener; // listen session
  74. ns_session_t *conns; // session list
  75. uint8_t *data_buff; // data buffer
  76. netserver_opt_t opts; // options
  77. uint32_t flag; // status flag
  78. } netserver_mgr_t;
  79. /**
  80. * API definition
  81. */
  82. netserver_mgr_t *netserver_create(netserver_opt_t *opts, uint32_t flag);
  83. int netserver_start(netserver_mgr_t *mgr);
  84. int netserver_mgr_free(netserver_mgr_t *mgr);
  85. void netserver_set_session_timeout(netserver_mgr_t *mgr, uint32_t ms);
  86. void netserver_session_close(ns_session_t *ns);
  87. int netserver_read(ns_session_t *ns, void *data, int sz);
  88. int netserver_write(ns_session_t *ns, void *data, int sz);
  89. void netserver_restart(netserver_mgr_t *mgr);
  90. #endif /* __NETSERVER_H */