Exemplo n.º 1
0
ssize_t kr_send(int fd, const void *buf, size_t len) {
  struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) fd;
  int ret = mg_lwip_tcp_write(cs->nc, buf, len);
  DBG(("%p mg_lwip_tcp_write %u = %d", cs->nc, len, ret));
  if (ret == 0) ret = KR_IO_WOULDBLOCK;
  return ret;
}
Exemplo n.º 2
0
time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
  int n = 0;
  time_t now = time(NULL);
  struct mg_connection *nc, *tmp;
  (void) timeout_ms;
  DBG(("begin poll, now=%u, hf=%u, sf lwm=%u", (unsigned int) now,
       system_get_free_heap_size(), 0U));
  for (nc = mgr->active_connections; nc != NULL; nc = tmp) {
    tmp = nc->next;
    n++;
    if (nc->flags & MG_F_CLOSE_IMMEDIATELY) {
      mg_close_conn(nc);
      continue;
    }
    mg_if_poll(nc, now);
    if (nc->send_mbuf.len == 0 && (nc->flags & MG_F_SEND_AND_CLOSE)) {
      mg_close_conn(nc);
      continue;
    }
    if (!(nc->flags & (MG_F_CONNECTING | MG_F_UDP))) {
      if (nc->send_mbuf.len > 0) mg_lwip_tcp_write(nc);
    }
  }
  DBG(("end poll, %d conns", n));
  return now;
}
Exemplo n.º 3
0
int ssl_socket_send(void *ctx, const unsigned char *buf, size_t len) {
  struct mg_connection *nc = (struct mg_connection *) ctx;
  struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock;
  int ret = mg_lwip_tcp_write(cs->nc, buf, len);
  if (ret == 0) ret = MBEDTLS_ERR_SSL_WANT_WRITE;
  LOG(LL_DEBUG, ("%p %d -> %d", nc, len, ret));
  return ret;
}
Exemplo n.º 4
0
ssize_t kr_send(int fd, const void *buf, size_t len, int flags) {
  struct mg_connection *nc = (struct mg_connection *) fd;
  int ret = mg_lwip_tcp_write(nc, buf, len);
  (void) flags;
  DBG(("mg_lwip_tcp_write %u = %d", len, ret));
  if (ret <= 0) {
    errno = (ret == 0 ? EWOULDBLOCK : EIO);
    ret = -1;
  }
  return ret;
}
Exemplo n.º 5
0
ssize_t kr_send(int fd, const void *buf, size_t len, int flags) {
  struct mg_connection *nc = (struct mg_connection *) fd;
  struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock;
  int ret = mg_lwip_tcp_write(cs->pcb.tcp, buf, len);
  DBG(("mg_lwip_tcp_write %u = %d", len, ret));
  if (ret <= 0) {
    errno = ret == 0 ? EWOULDBLOCK : EIO;
    ret = -1;
  }
  return ret;
}
Exemplo n.º 6
0
static void mg_lwip_send_more(struct mg_connection *nc) {
  struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock;
  if (nc->sock == INVALID_SOCKET || cs->pcb.tcp == NULL) {
    DBG(("%p invalid socket", nc));
    return;
  }
  int num_written = mg_lwip_tcp_write(nc, nc->send_mbuf.buf, nc->send_mbuf.len);
  DBG(("%p mg_lwip_tcp_write %u = %d", nc, nc->send_mbuf.len, num_written));
  if (num_written == 0) return;
  if (num_written < 0) {
    mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc);
  }
  mbuf_remove(&nc->send_mbuf, num_written);
  mbuf_trim(&nc->send_mbuf);
}
Exemplo n.º 7
0
static void mg_lwip_send_more(struct mg_connection *nc) {
  struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock;
  if (nc->sock == INVALID_SOCKET || cs->pcb.tcp == NULL) {
    DBG(("%p invalid socket", nc));
    return;
  }
  struct tcp_pcb *tpcb = cs->pcb.tcp;
  int num_written =
      mg_lwip_tcp_write(tpcb, nc->send_mbuf.buf, nc->send_mbuf.len);
  DBG(("%p mg_lwip_tcp_write %u = %d", nc, nc->send_mbuf.len, num_written));
  if (num_written == 0) return;
  if (num_written < 0) {
    system_os_post(MG_TASK_PRIORITY, MG_SIG_CLOSE_CONN, (uint32_t) nc);
  }
  mbuf_remove(&nc->send_mbuf, num_written);
  mbuf_trim(&nc->send_mbuf);
}