Add uOLED-96-G1 C Sample Code.
[frickel.git] / projects / geeknamensschilder_c / hardware / libraries / Ethernet / Server.cpp
blobd17a5d3cb0f38e49c1ee00171077bc90ddd4622f
1 extern "C" {
2 #include "types.h"
3 #include "w5100.h"
4 #include "socket.h"
5 #include "string.h"
8 #include "Ethernet.h"
9 #include "Client.h"
10 #include "Server.h"
12 Server::Server(uint16_t port)
14 _port = port;
17 void Server::begin()
19 for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
20 Client client(sock);
21 if (client.status() == SOCK_CLOSED) {
22 socket(sock, Sn_MR_TCP, _port, 0);
23 listen(sock);
24 EthernetClass::_server_port[sock] = _port;
25 break;
30 void Server::accept()
32 int listening = 0;
34 for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
35 Client client(sock);
37 if (EthernetClass::_server_port[sock] == _port) {
38 if (client.status() == SOCK_LISTEN) {
39 listening = 1;
40 } else if (client.status() == SOCK_CLOSE_WAIT && !client.available()) {
41 client.stop();
46 if (!listening) {
47 begin();
51 Client Server::available()
53 accept();
55 for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
56 Client client(sock);
57 if (EthernetClass::_server_port[sock] == _port &&
58 client.status() == SOCK_ESTABLISHED) {
59 if (client.available()) {
60 // XXX: don't always pick the lowest numbered socket.
61 return client;
66 return Client(255);
69 void Server::write(uint8_t b)
71 write(&b, 1);
74 void Server::write(const char *str)
76 write((const uint8_t *)str, strlen(str));
79 void Server::write(const uint8_t *buffer, size_t size)
81 accept();
83 for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
84 Client client(sock);
86 if (EthernetClass::_server_port[sock] == _port &&
87 client.status() == SOCK_ESTABLISHED) {
88 client.write(buffer, size);