@@ -168,15 +168,15 @@ static void __method_describe(struct connection_item_t *p, rtsp_handle h)
168168 case 96 : strncpy (audioRtpfmt , "MPEG4-GENERIC" , 16 - 1 ); break ;
169169 default : strncpy (audioRtpfmt , "UNKNOWN" , 16 - 1 ); break ;
170170 }
171- sprintf (audioRtp ,
171+ sprintf (audioRtp ,
172172 "\r\n"
173173 "m=audio 0 RTP/AVP %d\r\n"
174174 "a=control:track=1\r\n"
175175 "a=rtpmap:%d %s/90000\r\n" ,
176176 h -> audioPt , h -> audioPt , audioRtpfmt , h -> audioPt );
177177 }
178178
179- if (h -> isH265 &&
179+ if (h -> isH265 &&
180180 h -> sprop_vps_b64 && h -> sprop_sps_b64 && h -> sprop_sps_b16 && h -> sprop_pps_b64 ) {
181181 DASSERT (h -> sprop_vps_b64 -> result , return );
182182 DASSERT (h -> sprop_sps_b64 -> result , return );
@@ -201,7 +201,7 @@ static void __method_describe(struct connection_item_t *p, rtsp_handle h)
201201 h -> sprop_sps_b64 -> result ,
202202 h -> sprop_pps_b64 -> result ,
203203 audioRtp );
204- } else if (!h -> isH265 &&
204+ } else if (!h -> isH265 &&
205205 h -> sprop_sps_b64 && h -> sprop_sps_b16 && h -> sprop_pps_b64 ) {
206206 DASSERT (h -> sprop_sps_b64 -> result , return );
207207 DASSERT (h -> sprop_sps_b16 -> result , return );
@@ -270,7 +270,7 @@ static void __method_setup(struct connection_item_t *p, rtsp_handle h)
270270
271271static void __method_pause (struct connection_item_t * p , rtsp_handle h )
272272{
273- fprintf (p -> fp_tcp_write ,
273+ fprintf (p -> fp_tcp_write ,
274274 "RTSP/1.0 " __RESPONCE_STR_METHODNOTALLOWED "\r\n" );
275275}
276276
@@ -302,8 +302,8 @@ static void __method_play(struct connection_item_t *p, rtsp_handle h)
302302 ASSERT (__bind_rtp (p ) == SUCCESS , return );
303303 p -> trans [p -> track_id ].rtp_timestamp = (millis () * 90 ) & UINT32_MAX ;
304304 p -> trans [p -> track_id ].rtp_seq = rand_r (& h -> ctx );
305- p -> trans [p -> track_id ].rtcp_octet = 0 ;
306- p -> trans [p -> track_id ].rtcp_packet_cnt = 0 ;
305+ p -> trans [p -> track_id ].rtcp_octet = 0 ;
306+ p -> trans [p -> track_id ].rtcp_packet_cnt = 0 ;
307307 p -> trans [p -> track_id ].rtcp_tick_org = 150 ; // TODO: must be variant
308308 p -> trans [p -> track_id ].rtcp_tick = p -> trans [p -> track_id ].rtcp_tick_org ;
309309
@@ -377,7 +377,7 @@ static int __message_proc_sock(struct list_t *e, void *p)
377377 base64_encode (valid + 6 , cred , strlen (cred ));
378378 isAuthValid = !strncmp (buf + strlen (__STR_AUTH ) + 2 , valid , strlen (valid ));
379379 } else if (SCMP (__STR_CSEQ , buf )) {
380- ASSERT (tok = strtok_r (buf , ": " , & last ), goto error );
380+ ASSERT (tok = strtok_r (buf , ": " , & last ), goto error );
381381 ASSERT (tok = strtok_r (NULL , ": " , & last ), goto error );
382382 ASSERT ((con -> cseq = atoi (tok )) > 0 , goto error );
383383 con -> parser_state = __PARSER_S_CSEQ ;
@@ -392,7 +392,7 @@ static int __message_proc_sock(struct list_t *e, void *p)
392392 } else if (SCMP (__STR_TRANSPORT , buf )) {
393393 for (tok = strtok_r (buf , "; " , & last ); tok != NULL ; tok = strtok_r (NULL , "; " , & last )) {
394394 if (SCMP (__STR_CLIENTPORT , tok )) {
395- ASSERT (sscanf (tok , __STR_CLIENTPORT "=%u-%u" ,
395+ ASSERT (sscanf (tok , __STR_CLIENTPORT "=%u-%u" ,
396396 & con -> trans [con -> track_id ].client_port_rtp ,
397397 & con -> trans [con -> track_id ].client_port_rtcp ) > 0 ,
398398 goto error );
@@ -421,18 +421,21 @@ static int __message_proc_sock(struct list_t *e, void *p)
421421 case __METHOD_PAUSE : __method_pause (con , h ); break ;
422422 case __METHOD_RECORDING : __method_record (con , h ); break ;
423423 case __METHOD_TEARDOWN : __method_teardown (con , h ); break ;
424- case __METHOD_NONE :
424+ case __METHOD_NONE :
425425 /* state DISCONNECTED connections should be garbage collected immediately.
426426 but sending thread might watches the connection right now.
427427 so the connection might live at here */
428- ASSERT (con -> con_state == __CON_S_DISCONNECTED , return FAILURE );
428+ if (con -> con_state != __CON_S_DISCONNECTED ) {
429+ ERR ("unexpected empty request, forcing disconnect\n" );
430+ con -> con_state = __CON_S_DISCONNECTED ;
431+ }
429432 break ;
430433 default : ERR ("unexpected method state\n" ); return FAILURE ;
431434 }
432435 }
433436
434437 fflush (con -> fp_tcp_write );
435- }
438+ }
436439 return SUCCESS ;
437440}
438441
@@ -589,7 +592,7 @@ static inline int __bind_rtp(struct connection_item_t *con )
589592 addr .sin_port = htons (con -> trans [con -> track_id ].server_port_rtp );
590593 addr .sin_addr .s_addr = htonl (INADDR_ANY );
591594 addr .sin_family = AF_INET ;
592-
595+
593596 tmp = 1 ;
594597 setsockopt (server_fd , SOL_SOCKET , SO_REUSEADDR , & tmp , sizeof (tmp ));
595598
@@ -741,19 +744,19 @@ static void *rtspThrFxn(void *v)
741744 /* lock while tcp layer is done */
742745 rtsp_lock (rh );
743746
744- ASSERT (__accept_proc_sock (rh , server_fd , & socks ) == SUCCESS ,
747+ ASSERT (__accept_proc_sock (rh , server_fd , & socks ) == SUCCESS ,
745748 ({ rtsp_unlock (rh ); goto error ;}));
746749
747- ASSERT (list_map_inline (& rh -> con_list , __message_proc_sock , & socks ) == SUCCESS ,
750+ ASSERT (list_map_inline (& rh -> con_list , __message_proc_sock , & socks ) == SUCCESS ,
748751 ({ rtsp_unlock (rh ); goto error ;}));
749752
750- MUST (list_sweep (& rh -> con_list , __connection_is_dead ) == SUCCESS ,
753+ MUST (list_sweep (& rh -> con_list , __connection_is_dead ) == SUCCESS ,
751754 ({ rtsp_unlock (rh ); goto error ;}));
752755
753756 socks .nfds = max (server_fd , __find_fd_max (& rh -> con_list )) + 1 ;
754757
755758 rtsp_unlock (rh );
756- }
759+ }
757760 //bufpool_statistics(rh->con_pool);
758761 }
759762
@@ -833,7 +836,7 @@ rtsp_handle rtsp_create(unsigned char max_con, unsigned int port, int priority)
833836
834837 return nh ;
835838
836- error :
839+ error :
837840 rtsp_finish (nh );
838841 return NULL ;
839842}
@@ -859,4 +862,4 @@ int rtsp_tick(rtsp_handle h)
859862 return FAILURE ;}));
860863
861864 return __get_timestamp_offset (& h -> stat , & tv );
862- }
865+ }
0 commit comments