@@ -51,6 +51,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
51
51
// nginx also set to 512
52
52
#define SERVER_LISTEN_BACKLOG 512
53
53
54
+ // sleep in ms for udp recv packet.
55
+ #define SRS_UDP_PACKET_RECV_CYCLE_INTERVAL_MS 0
56
+
57
+ // set the max packet size.
58
+ #define SRS_UDP_MAX_PACKET_SIZE 65535
59
+
54
60
// system interval in ms,
55
61
// all resolution times should be times togother,
56
62
// for example, system-interval is x=1s(1000ms),
@@ -222,6 +228,8 @@ int SrsListener::cycle()
222
228
223
229
SrsUdpListener::SrsUdpListener (SrsServer* server, SrsListenerType type) : SrsListener(server, type)
224
230
{
231
+ nb_buf = SRS_UDP_MAX_PACKET_SIZE;
232
+ buf = new char [nb_buf];
225
233
}
226
234
227
235
SrsUdpListener::~SrsUdpListener ()
@@ -294,6 +302,27 @@ int SrsUdpListener::cycle()
294
302
// we just assert here for unknown stream caster.
295
303
srs_assert (_type == SrsListenerMpegTsOverUdp);
296
304
305
+ for (;;) {
306
+ // TODO: FIXME: support ipv6, @see man 7 ipv6
307
+ sockaddr_in from;
308
+ int nb_from = sizeof (sockaddr_in);
309
+ int nread = 0 ;
310
+
311
+ if ((nread = st_recvfrom (stfd, buf, nb_buf, (sockaddr*)&from, &nb_from, ST_UTIME_NO_TIMEOUT)) <= 0 ) {
312
+ srs_warn (" ignore recv udp packet failed, nread=%d" , nread);
313
+ continue ;
314
+ }
315
+
316
+ if ((ret = _server->on_udp_packet (_type, &from, buf, nread)) != ERROR_SUCCESS) {
317
+ srs_warn (" handle udp packet failed. ret=%d" , ret);
318
+ continue ;
319
+ }
320
+
321
+ if (SRS_UDP_PACKET_RECV_CYCLE_INTERVAL_MS > 0 ) {
322
+ st_usleep (SRS_UDP_PACKET_RECV_CYCLE_INTERVAL_MS * 1000 );
323
+ }
324
+ }
325
+
297
326
// TODO: FIXME: recv udp packet.
298
327
st_sleep (1 );
299
328
@@ -1112,6 +1141,19 @@ int SrsServer::accept_client(SrsListenerType type, st_netfd_t client_stfd)
1112
1141
return ret;
1113
1142
}
1114
1143
1144
+ int SrsServer::on_udp_packet (SrsListenerType type, sockaddr_in* from, char * buf, int nb_buf)
1145
+ {
1146
+ int ret = ERROR_SUCCESS;
1147
+
1148
+ std::string peer_ip = inet_ntoa (from->sin_addr );
1149
+ int peer_port = ntohs (from->sin_port );
1150
+
1151
+ // TODO: FIXME: implements it.
1152
+ srs_warn (" udp: drop %s:%d packet %d bytes" , peer_ip.c_str (), peer_port, nb_buf);
1153
+
1154
+ return ret;
1155
+ }
1156
+
1115
1157
int SrsServer::on_reload_listen ()
1116
1158
{
1117
1159
return listen ();
0 commit comments