@@ -38,33 +38,41 @@ extern "C" {
38
38
#include " cbuf.h"
39
39
#include " include/ClientContext.h"
40
40
41
- WiFiServer::WiFiServer (uint16_t port)
41
+ WiFiServer::WiFiServer (IPAddress addr, uint16_t port)
42
+ : _port(port)
43
+ , _addr(addr)
44
+ , _pcb(nullptr )
45
+ , _unclaimed(nullptr )
46
+ , _discarded(nullptr )
42
47
{
43
- _port = port;
44
- _pcb = 0 ;
45
- _unclaimed = 0 ;
46
- _discarded = 0 ;
47
48
}
48
49
49
- void WiFiServer::begin ()
50
+ WiFiServer::WiFiServer (uint16_t port)
51
+ : _port(port)
52
+ , _addr((uint32_t ) IPADDR_ANY)
53
+ , _pcb(nullptr )
54
+ , _unclaimed(nullptr )
55
+ , _discarded(nullptr )
50
56
{
51
- err_t err;
57
+ }
52
58
59
+ void WiFiServer::begin () {
60
+ err_t err;
53
61
tcp_pcb* pcb = tcp_new ();
54
62
if (!pcb)
55
63
return ;
56
64
57
- err = tcp_bind (pcb, INADDR_ANY, _port);
65
+ ip_addr_t local_addr;
66
+ local_addr.addr = (uint32_t ) _addr;
67
+ err = tcp_bind (pcb, &local_addr, _port);
58
68
59
- if (err != ERR_OK)
60
- {
69
+ if (err != ERR_OK) {
61
70
tcp_close (pcb);
62
71
return ;
63
72
}
64
73
65
74
tcp_pcb* listen_pcb = tcp_listen (pcb);
66
- if (!listen_pcb)
67
- {
75
+ if (!listen_pcb) {
68
76
tcp_close (pcb);
69
77
return ;
70
78
}
@@ -73,59 +81,59 @@ void WiFiServer::begin()
73
81
tcp_arg (listen_pcb, (void *) this );
74
82
}
75
83
76
- void WiFiServer::setNoDelay (bool nodelay){
77
- if (!_pcb) return ;
78
- if (nodelay) tcp_nagle_disable (_pcb);
79
- else tcp_nagle_enable (_pcb);
80
- }
84
+ void WiFiServer::setNoDelay (bool nodelay) {
85
+ if (!_pcb)
86
+ return ;
81
87
82
- bool WiFiServer::getNoDelay (){
83
- if (!_pcb) return false ;
84
- return tcp_nagle_disabled (_pcb);
88
+ if (nodelay)
89
+ tcp_nagle_disable (_pcb);
90
+ else
91
+ tcp_nagle_enable (_pcb);
85
92
}
86
93
87
- bool WiFiServer::hasClient (){
88
- if (_unclaimed) return true ;
89
- return false ;
94
+ bool WiFiServer::getNoDelay () {
95
+ if (!_pcb)
96
+ return false ;
97
+ return tcp_nagle_disabled (_pcb);
90
98
}
91
99
92
- WiFiClient WiFiServer::available (byte* status)
93
- {
100
+ bool WiFiServer::hasClient () {
94
101
if (_unclaimed)
95
- {
102
+ return true ;
103
+ return false ;
104
+ }
105
+
106
+ WiFiClient WiFiServer::available (byte* status) {
107
+ if (_unclaimed) {
96
108
WiFiClient result (_unclaimed);
97
109
_unclaimed = _unclaimed->next ();
98
110
DEBUGV (" WS:av\r\n " );
99
111
return result;
100
112
}
101
113
102
114
optimistic_yield (1000 );
103
-
104
115
return WiFiClient ();
105
116
}
106
117
107
- uint8_t WiFiServer::status () {
118
+ uint8_t WiFiServer::status () {
108
119
if (!_pcb)
109
120
return CLOSED;
110
121
return _pcb->state ;
111
122
}
112
123
113
124
114
- size_t WiFiServer::write (uint8_t b)
115
- {
125
+ size_t WiFiServer::write (uint8_t b) {
116
126
return write (&b, 1 );
117
127
}
118
128
119
- size_t WiFiServer::write (const uint8_t *buffer, size_t size)
120
- {
129
+ size_t WiFiServer::write (const uint8_t *buffer, size_t size) {
121
130
// write to all clients
122
131
// not implemented
123
132
return 0 ;
124
133
}
125
134
126
135
template <typename T>
127
- T* slist_append_tail (T* head, T* item)
128
- {
136
+ T* slist_append_tail (T* head, T* item) {
129
137
if (!head)
130
138
return item;
131
139
T* last = head;
@@ -135,29 +143,23 @@ T* slist_append_tail(T* head, T* item)
135
143
return head;
136
144
}
137
145
138
- int8_t WiFiServer::_accept (tcp_pcb* apcb, int8_t err)
139
- {
146
+ int8_t WiFiServer::_accept (tcp_pcb* apcb, int8_t err) {
140
147
DEBUGV (" WS:ac\r\n " );
141
148
ClientContext* client = new ClientContext (apcb, &WiFiServer::_s_discard, this );
142
149
_unclaimed = slist_append_tail (_unclaimed, client);
143
150
tcp_accepted (_pcb);
144
- // printf("WiFiServer::_accept\r\n");
145
151
return ERR_OK;
146
152
}
147
153
148
- void WiFiServer::_discard (ClientContext* client)
149
- {
154
+ void WiFiServer::_discard (ClientContext* client) {
150
155
// _discarded = slist_append_tail(_discarded, client);
151
156
DEBUGV (" WS:dis\r\n " );
152
- // printf("WiFiServer::_discard\r\n");
153
157
}
154
158
155
- int8_t WiFiServer::_s_accept (void *arg, tcp_pcb* newpcb, int8_t err)
156
- {
159
+ int8_t WiFiServer::_s_accept (void *arg, tcp_pcb* newpcb, int8_t err) {
157
160
return reinterpret_cast <WiFiServer*>(arg)->_accept (newpcb, err);
158
161
}
159
162
160
- void WiFiServer::_s_discard (void * server, ClientContext* ctx)
161
- {
163
+ void WiFiServer::_s_discard (void * server, ClientContext* ctx) {
162
164
reinterpret_cast <WiFiServer*>(server)->_discard (ctx);
163
165
}
0 commit comments