Пример #1
0
EthernetClient EthernetServer::available()
{
	if (new_clients.empty()) {
		return EthernetClient();
	} else {
		int sock = new_clients.front();
		new_clients.pop_front();
		return EthernetClient(sock);
	}
}
Пример #2
0
AtMegaWebServer::AtMegaWebServer(PathHandler handlers[],
			     const char** headers)
  : handlers_(handlers),
    server_(EthernetServer(80)),
    path_(NULL),
    request_type_(UNKNOWN_REQUEST),
    client_(EthernetClient(255))
     {
  if (headers) initHeaders(headers);
  }
Пример #3
0
//  This function blocks until we get a client connected.
//   It will timeout after 50ms and return a blank client.
//   If it succeeds it will return an EthernetClient.
EthernetClient EthernetServer::available()
{
	fd_set sock_set;
	FD_ZERO(&sock_set);
	FD_SET(m_sock, &sock_set);
	struct timeval timeout;
	timeout.tv_sec = 0;
	timeout.tv_usec = 50 * 1000; // 50ms

	select(m_sock + 1, &sock_set, NULL, NULL, &timeout);
	if (FD_ISSET(m_sock, &sock_set))
	{
		int client_sock = 0;
		struct sockaddr_in cli_addr;
		unsigned int clilen = sizeof(cli_addr);
		if ((client_sock = accept(m_sock, (struct sockaddr *) &cli_addr, &clilen)) <= 0)
			return EthernetClient(0);
		return EthernetClient(client_sock);
	}
	return EthernetClient(0);
}
EthernetClient EthernetServer::available()
{
	accept();
	for (uint8_t i=0; i < MAX_SOCK_NUM; i++) {
		if (server_port[i] == _port) {
			uint8_t stat = socketStatus(i);
			if (stat == SnSR::ESTABLISHED || stat == SnSR::CLOSE_WAIT) {
				if (socketRecvAvailable(i) > 0) {
					EthernetClient client(i);
					return client;
				}
			}
		}
	}
	return EthernetClient();
}
Пример #5
0
EthernetClient EthernetServer::available()
{
  accept();

  for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
    EthernetClient client(sock);
    if (EthernetClass::_server_port[sock] == _port &&
        (client.status() == SnSR::ESTABLISHED ||
         client.status() == SnSR::CLOSE_WAIT)) {
      if (client.available()) {
        // XXX: don't always pick the lowest numbered socket.
        return client;
      }
    }
  }

  return EthernetClient(MAX_SOCK_NUM);
}
Пример #6
0
TinyWebServer::TinyWebServer(PathHandler handlers[],
			     const char** headers)
  : handlers_(handlers),
    server_(EthernetServer(8000)),
    path_(NULL),
    request_type_(UNKNOWN_REQUEST),
    client_(EthernetClient(255)) {
  if (headers) {
    int size = 0;
    for (int i = 0; headers[i]; i++) {
      size++;
    }
    headers_ = (HeaderValue*)malloc_check(sizeof(HeaderValue) * (size + 1));
    if (headers_) {
      for (int i = 0; i < size; i++) {
        headers_[i].header = headers[i];
        headers_[i].value = NULL;
      }
      headers_[size].header = NULL;
    }
  }
}
	#endif
	static bool clientsConnected[MY_GATEWAY_MAX_CLIENTS];
#endif

#if defined(MY_USE_UDP)
	EthernetUDP _ethernetServer;
#else
	EthernetServer _ethernetServer(_ethernetGatewayPort);
#endif


#if defined(MY_GATEWAY_ESP8266)
	static EthernetClient clients[MY_GATEWAY_MAX_CLIENTS];
	static inputBuffer inputString[MY_GATEWAY_MAX_CLIENTS];
#else
	static EthernetClient client = EthernetClient();
	static inputBuffer inputString;
#endif


#ifndef MY_IP_ADDRESS
	void gatewayTransportRenewIP();
#endif

// On W5100 boards with SPI_EN exposed we can use the real SPI bus together with radio
// (if we enable it during usage)
#ifdef MY_W5100_SPI_EN
	void _w5100_spi_en(bool enable)
	{
	  if (enable)
	  {