Beispiel #1
0
static ssize_t data_feed_recv_callback(spdylay_session *session,
                                       uint8_t* data, size_t len, int flags,
                                       void *user_data)
{
  data_feed *df = ((my_user_data*)user_data)->df;
  size_t avail = df->datalimit - df->datamark;
  size_t wlen = spdylay_min(avail, len);
  memcpy(data, df->datamark, wlen);
  df->datamark += wlen;
  return wlen;
}
Beispiel #2
0
void spdylay_buffer_reader_advance(spdylay_buffer_reader *reader,
                                   size_t amount)
{
  while(amount) {
    size_t remlen, skiplen;
    remlen = reader->buffer->capacity - reader->offset;
    skiplen = spdylay_min(remlen, amount);
    amount -= skiplen;
    reader->offset += skiplen;
    if(reader->buffer->capacity == reader->offset) {
      reader->current = reader->current->next;
      reader->offset = 0;
    }
  }
}
Beispiel #3
0
int spdylay_submit_window_update(spdylay_session *session, int32_t stream_id,
                                 int32_t delta_window_size)
{
    spdylay_stream *stream;
    if(delta_window_size <= 0) {
        return SPDYLAY_ERR_INVALID_ARGUMENT;
    }
    stream = spdylay_session_get_stream(session, stream_id);
    if(stream) {
        stream->recv_window_size -= spdylay_min(delta_window_size,
                                                stream->recv_window_size);
        return spdylay_session_add_window_update(session, stream_id,
                delta_window_size);
    } else {
        return SPDYLAY_ERR_STREAM_CLOSED;
    }
}
Beispiel #4
0
void spdylay_buffer_reader_data(spdylay_buffer_reader *reader,
                                uint8_t *out, size_t len)
{
  while(len) {
    size_t remlen, readlen;
    remlen = reader->buffer->capacity - reader->offset;
    readlen = spdylay_min(remlen, len);
    memcpy(out, reader->current->data + reader->offset, readlen);
    out += readlen;
    len -= readlen;
    reader->offset += readlen;
    if(reader->buffer->capacity == reader->offset) {
      reader->current = reader->current->next;
      reader->offset = 0;
    }
  }
}
Beispiel #5
0
int spdylay_buffer_write(spdylay_buffer *buffer, const uint8_t *data,
                          size_t len)
{
  int rv;
  while(len) {
    size_t writelen;
    if(spdylay_buffer_avail(buffer) == 0) {
      if((rv = spdylay_buffer_alloc(buffer)) != 0) {
        return rv;
      }
    }
    writelen = spdylay_min(spdylay_buffer_avail(buffer), len);
    memcpy(spdylay_buffer_get(buffer), data, writelen);
    data += writelen;
    len -= writelen;
    spdylay_buffer_advance(buffer, writelen);
  }
  return 0;
}
Beispiel #6
0
int spdylay_buffer_reader_count(spdylay_buffer_reader *reader,
                                size_t len, uint8_t c)
{
  int res = 0;
  while(len) {
    size_t remlen, readlen, i;
    uint8_t *p;
    remlen = reader->buffer->capacity - reader->offset;
    readlen = spdylay_min(remlen, len);
    p = reader->current->data + reader->offset;
    for(i = 0; i < readlen; ++i) {
      if(p[i] == c) {
        ++res;
      }
    }
    len -= readlen;
    reader->offset += readlen;
    if(reader->buffer->capacity == reader->offset) {
      reader->current = reader->current->next;
      reader->offset = 0;
    }
  }
  return res;
}