* the fifo is small (under 16K) we set the threshold to it's size, meaning
* a notification will be given when the fifo empties.
*/
+ ts = session_get_from_handle (hc->h_tc_session_handle);
thresh = clib_min (svm_fifo_size (ts->tx_fifo), HTTP_FIFO_THRESH);
svm_fifo_set_deq_thresh (ts->tx_fifo, thresh);
"Expires: %U GMT\r\n"
"Server: VPP Static\r\n"
"Content-Type: %s\r\n"
- "Content-Length: %d\r\n\r\n";
+ "Content-Length: %lu\r\n\r\n";
static u32
send_data (http_conn_t *hc, u8 *data, u32 length, u32 offset)
typedef struct http_msg_data_
{
http_msg_data_type_t type;
- u32 len;
+ u64 len;
u8 data[0];
} http_msg_data_t;
{
svm_fifo_t *src;
svm_fifo_seg_t *segs;
- u32 len;
- u32 offset;
+ u64 len;
+ u64 offset;
} http_buffer_fifo_t;
STATIC_ASSERT (sizeof (http_buffer_fifo_t) <= HTTP_BUFFER_DATA_SZ, "buf data");
static void
-buf_fifo_init (http_buffer_t *hb, void *data, u32 len)
+buf_fifo_init (http_buffer_t *hb, void *data, u64 len)
{
svm_fifo_t *f = (svm_fifo_t *) data;
http_buffer_fifo_t *bf;
u32 _n_segs = 5;
int len;
- max_len = clib_max (bf->len - bf->offset, max_len);
+ max_len = clib_min (bf->len - bf->offset, (u64) max_len);
vec_validate (bf->segs, _n_segs);
return bf->segs;
}
-static int
+static u32
buf_fifo_drain (http_buffer_t *hb, u32 len)
{
http_buffer_fifo_t *bf = (http_buffer_fifo_t *) &hb->data;
STATIC_ASSERT (sizeof (http_buffer_ptr_t) <= HTTP_BUFFER_DATA_SZ, "buf data");
static void
-buf_ptr_init (http_buffer_t *hb, void *data, u32 len)
+buf_ptr_init (http_buffer_t *hb, void *data, u64 len)
{
svm_fifo_t *f = (svm_fifo_t *) data;
http_buffer_ptr_t *bf;
return &bf->segs[1];
}
-static int
+static u32
buf_ptr_drain (http_buffer_t *hb, u32 len)
{
http_buffer_ptr_t *bf = (http_buffer_ptr_t *) &hb->data;
void
http_buffer_init (http_buffer_t *hb, http_buffer_type_t type, svm_fifo_t *f,
- u32 data_len)
+ u64 data_len)
{
hb->vft = &buf_vfts[type];
hb->vft->init (hb, f, data_len);
#include <svm/svm_fifo.h>
-#define HTTP_BUFFER_DATA_SZ 24
+#define HTTP_BUFFER_DATA_SZ 32
typedef enum http_buffer_type_
{
struct http_buffer_vft_
{
- void (*init) (http_buffer_t *, void *data, u32 len);
+ void (*init) (http_buffer_t *, void *data, u64 len);
void (*free) (http_buffer_t *);
svm_fifo_seg_t *(*get_segs) (http_buffer_t *, u32 max_len, u32 *n_segs);
- int (*drain) (http_buffer_t *, u32 len);
+ u32 (*drain) (http_buffer_t *, u32 len);
u8 (*is_drained) (http_buffer_t *);
};
void http_buffer_init (http_buffer_t *hb, http_buffer_type_t type,
- svm_fifo_t *f, u32 data_len);
+ svm_fifo_t *f, u64 data_len);
static inline void
http_buffer_free (http_buffer_t *hb)
return hb->vft->get_segs (hb, max_len, n_segs);
}
-static inline int
+static inline u32
http_buffer_drain (http_buffer_t *hb, u32 len)
{
return hb->vft->drain (hb, len);