*
*/
int
-http_extra_send(http_connection_t *hc, const void *data, size_t data_len)
+http_extra_send(http_connection_t *hc, const void *data,
+ size_t data_len, int may_discard)
{
uint8_t *b = malloc(data_len);
memcpy(b, data, data_len);
- return http_extra_send_prealloc(hc, b, data_len);
+ return http_extra_send_prealloc(hc, b, data_len, may_discard);
}
/**
*
*/
int
-http_extra_send_prealloc(http_connection_t *hc, const void *data, size_t data_len)
+http_extra_send_prealloc(http_connection_t *hc, const void *data,
+ size_t data_len, int may_discard)
{
if (data == NULL) return 0;
pthread_mutex_lock(&hc->hc_extra_lock);
- if (hc->hc_extra.hq_size <= 1024*1024) {
+ if (!may_discard || hc->hc_extra.hq_size <= 1024*1024) {
atomic_add(&hc->hc_extra_chunks, 1);
htsbuf_append_prealloc(&hc->hc_extra, data, data_len);
} else {
int http_extra_flush_partial(http_connection_t *hc);
-int http_extra_send(http_connection_t *hc, const void *data, size_t data_len);
+int http_extra_send(http_connection_t *hc, const void *data,
+ size_t data_len, int may_discard);
-int http_extra_send_prealloc(http_connection_t *hc, const void *data, size_t data_len);
+int http_extra_send_prealloc(http_connection_t *hc, const void *data,
+ size_t data_len, int may_discard);
static inline void http_send_begin(http_connection_t *hc)
{
}
static int
-satip_rtp_tcp_data(satip_rtp_session_t *rtp, uint8_t stream, uint8_t *data, size_t data_len)
+satip_rtp_tcp_data(satip_rtp_session_t *rtp, uint8_t stream,
+ uint8_t *data, size_t data_len, int may_discard)
{
assert(data_len <= 0xffff);
data[0] = '$';
data[1] = stream;
data[2] = (data_len - 4) >> 8;
data[3] = (data_len - 4) & 0xff;
- return http_extra_send_prealloc(rtp->hc, data, data_len);
+ return http_extra_send_prealloc(rtp->hc, data, data_len, may_discard);
}
static inline int
int r = 0;
if (v->iov_len)
- r = satip_rtp_tcp_data(rtp, 0, v->iov_base, v->iov_len);
+ r = satip_rtp_tcp_data(rtp, 0, v->iov_base, v->iov_len, 1);
else
free(v->iov_base);
v->iov_base = NULL;
msg1 = malloc(len);
if (msg1) {
memcpy(msg1, msg, len);
- err = satip_rtp_tcp_data(rtp, 1, msg1, len);
+ err = satip_rtp_tcp_data(rtp, 1, msg1, len, 0);
r = err ? -1 : 0;
} else {
r = -1;