int net_send(struct connection *c) { int r; u_int32_t len, smin; c->snb = TAILQ_FIRST(&(c->send_queue)); if (c->snb->b_len != 0) { smin = c->snb->b_len - c->snb->s_off; len = MIN(NETBUF_SEND_PAYLOAD_MAX, smin); if (!c->write(c, len, &r)) return (KORE_RESULT_ERROR); if (!(c->flags & CONN_WRITE_POSSIBLE)) return (KORE_RESULT_OK); kore_debug("net_send(%p/%d/%d bytes), progress with %d", c->snb, c->snb->s_off, c->snb->b_len, r); c->snb->s_off += (size_t)r; c->snb->flags &= ~NETBUF_MUST_RESEND; } if (c->snb->s_off == c->snb->b_len || (c->snb->flags & NETBUF_FORCE_REMOVE)) { net_remove_netbuf(&(c->send_queue), c->snb); c->snb = NULL; } return (KORE_RESULT_OK); }
int net_send(struct connection *c) { int r; u_int32_t len, smin; c->snb = TAILQ_FIRST(&(c->send_queue)); if (c->snb->b_len != 0) { if (c->snb->stream != NULL && (c->snb->stream->flags & SPDY_DATAFRAME_PRELUDE)) { if (!spdy_dataframe_begin(c)) { c->snb = NULL; return (KORE_RESULT_OK); } c->snb = TAILQ_FIRST(&(c->send_queue)); } smin = c->snb->b_len - c->snb->s_off; if (c->snb->stream != NULL && c->snb->stream->frame_size > 0) { smin = MIN(smin, c->snb->stream->frame_size); } len = MIN(NETBUF_SEND_PAYLOAD_MAX, smin); if (!c->write(c, len, &r)) return (KORE_RESULT_ERROR); if (!(c->flags & CONN_WRITE_POSSIBLE)) return (KORE_RESULT_OK); kore_debug("net_send(%p/%d/%d bytes), progress with %d", c->snb, c->snb->s_off, c->snb->b_len, r); c->snb->s_off += (size_t)r; c->snb->flags &= ~NETBUF_MUST_RESEND; if (c->snb->stream != NULL) spdy_update_wsize(c, c->snb->stream, r); } if (c->snb->s_off == c->snb->b_len || (c->snb->flags & NETBUF_FORCE_REMOVE)) { net_remove_netbuf(&(c->send_queue), c->snb); c->snb = NULL; } return (KORE_RESULT_OK); }