1 /* 2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited 3 */ 4 5 #ifndef IOT_EXPORT_HTTP2_STREAM_H 6 #define IOT_EXPORT_HTTP2_STREAM_H 7 8 #include "linkkit/infra/infra_types.h" 9 #include "linkkit/infra/infra_defs.h" 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 #define IOT_HTTP2_RES_OVERTIME_MS (10000) 16 #define IOT_HTTP2_KEEP_ALIVE_CNT (2) 17 #define IOT_HTTP2_KEEP_ALIVE_TIME (30 * 1000) /* in seconds */ 18 19 #define MAKE_HEADER(NAME, VALUE) \ 20 { \ 21 (char *)NAME, (char *)VALUE, sizeof(NAME) - 1, sizeof(VALUE) - 1 \ 22 } 23 24 #define MAKE_HEADER_CS(NAME, VALUE) \ 25 { \ 26 (char *)NAME, (char *)VALUE, strlen(NAME), strlen(VALUE) \ 27 } 28 29 typedef struct { 30 char *product_key; 31 char *device_name; 32 char *device_secret; 33 char *url; 34 int port; 35 } device_conn_info_t; 36 37 typedef struct http2_header_struct { 38 char *name; /* header name */ 39 char *value; /* the value of name */ 40 int namelen; /* the length of header name */ 41 int valuelen; /* the length of value */ 42 } http2_header; 43 44 typedef struct { 45 http2_header *nva; 46 int num; 47 } header_ext_info_t; 48 49 typedef enum { 50 STREAM_TYPE_DOWNLOAD, 51 STREAM_TYPE_UPLOAD, 52 STREAM_TYPE_AUXILIARY, 53 STREAM_TYPE_NUM 54 } stream_type_t; 55 56 typedef void (*on_stream_header_callback)(uint32_t stream_id, char *channel_id, 57 int cat, const uint8_t *name, 58 uint32_t namelen, 59 const uint8_t *value, 60 uint32_t valuelen, uint8_t flags, 61 void *user_data); 62 63 typedef void (*on_stream_chunk_recv_callback)(uint32_t stream_id, 64 char *channel_id, 65 const uint8_t *data, uint32_t len, 66 uint8_t flags, void *user_data); 67 68 typedef void (*on_stream_close_callback)(uint32_t stream_id, char *channel_id, 69 uint32_t error_code, void *user_data); 70 71 typedef void (*on_stream_frame_send_callback)(uint32_t stream_id, 72 char *channel_id, int type, 73 uint8_t flags, void *user_data); 74 75 typedef void (*on_stream_frame_recv_callback)(uint32_t stream_id, 76 char *channel_id, int type, 77 uint8_t flags, void *user_data); 78 79 typedef void (*on_reconnect_callback)(); 80 typedef void (*on_disconnect_callback)(); 81 82 typedef struct { 83 on_stream_header_callback on_stream_header_cb; 84 on_stream_chunk_recv_callback on_stream_chunk_recv_cb; 85 on_stream_close_callback on_stream_close_cb; 86 on_stream_frame_send_callback on_stream_frame_send_cb; 87 on_stream_frame_recv_callback on_stream_frame_recv_cb; 88 on_reconnect_callback on_reconnect_cb; 89 on_disconnect_callback on_disconnect_cb; 90 } http2_stream_cb_t; 91 92 typedef struct { 93 char *stream; /* point to stream data buffer */ 94 uint32_t stream_len; /* file content length */ 95 uint32_t send_len; /* data had sent length */ 96 uint32_t packet_len; /* one packet length */ 97 const char *identify; /* path string to identify a stream service */ 98 int h2_stream_id; /* stream identifier which is a field in HTTP2 frame */ 99 char * 100 channel_id; /* string return by server to identify a specific stream 101 channel, different from stream identifier which is a field 102 in HTTP2 frame */ 103 void *user_data; /* user data brought in at stream open */ 104 } stream_data_info_t; 105 106 void *IOT_HTTP2_Connect(device_conn_info_t *conn_info, 107 http2_stream_cb_t *user_cb); 108 int IOT_HTTP2_Stream_Open(void *handle, stream_data_info_t *info, 109 header_ext_info_t *header); 110 int IOT_HTTP2_Stream_Send(void *handle, stream_data_info_t *info, 111 header_ext_info_t *header); 112 int IOT_HTTP2_Stream_Query(void *handle, stream_data_info_t *info, 113 header_ext_info_t *header); 114 int IOT_HTTP2_Stream_Close(void *handle, stream_data_info_t *info); 115 int IOT_HTTP2_Stream_Send_Message(void *handle, const char *identify, 116 char *channel_id, char *data, 117 uint32_t data_len, header_ext_info_t *header); 118 int IOT_HTTP2_Disconnect(void *handle); 119 120 #ifdef __cplusplus 121 } 122 #endif 123 124 #endif /* IOT_EXPORT_FILE_UPLOADER_H */ 125