@@ -410,29 +410,6 @@ int send_video_html(const int client_fd) {
410
410
return 1 ;
411
411
}
412
412
413
- int send_image_html (const int client_fd ) {
414
- char html [] = "<html>\n"
415
- " <head>\n"
416
- " <title>Snapshot</title>\n"
417
- " </head>\n"
418
- " <body>\n"
419
- " <center>\n"
420
- " <img src=\"image.jpg\"/>\n"
421
- " </center>\n"
422
- " </body>\n"
423
- "</html>" ;
424
- char buf [1024 ];
425
- int buf_len = sprintf (
426
- buf ,
427
- "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: "
428
- "%lu\r\nConnection: close\r\n\r\n%s" ,
429
- strlen (html ), html );
430
- buf [buf_len ++ ] = 0 ;
431
- send_to_fd (client_fd , buf , buf_len );
432
- close_socket_fd (client_fd );
433
- return 1 ;
434
- }
435
-
436
413
#define REQSIZE 512 * 1024
437
414
char response [256 ];
438
415
char * method , * payload , * prot , * request , * query , * uri ;
@@ -616,16 +593,12 @@ void *server_thread(void *vargp) {
616
593
break ;
617
594
}
618
595
619
- if (equals (uri , "/image.html" ) &&
620
- app_config .jpeg_enable ) {
621
- send_image_html (client_fd );
622
- continue ;
623
- }
624
596
if (equals (uri , "/mjpeg.html" ) &&
625
597
app_config .mjpeg_enable ) {
626
598
send_mjpeg_html (client_fd );
627
599
continue ;
628
600
}
601
+
629
602
if (equals (uri , "/video.html" ) &&
630
603
app_config .mp4_enable ) {
631
604
send_video_html (client_fd );
@@ -768,19 +741,64 @@ void *server_thread(void *vargp) {
768
741
size_t stacksize ;
769
742
pthread_attr_getstacksize (& thread_attr , & stacksize );
770
743
size_t new_stacksize = 16 * 1024 ;
771
- if (pthread_attr_setstacksize (& thread_attr , new_stacksize )) {
772
- printf ("[jpeg] Can't set stack size %ld\n" , new_stacksize );
773
- }
744
+ if (pthread_attr_setstacksize (& thread_attr , new_stacksize ))
745
+ HAL_DANGER ("jpeg" , "Can't set stack size %zu\n" , new_stacksize );
774
746
pthread_create (
775
747
& thread_id , & thread_attr , send_jpeg_thread , (void * )& task );
776
- if (pthread_attr_setstacksize (& thread_attr , stacksize )) {
777
- printf ("[jpeg] Can't set stack size %ld\n" , stacksize );
778
- }
748
+ if (pthread_attr_setstacksize (& thread_attr , stacksize ))
749
+ HAL_DANGER ("jpeg" , "Can't set stack size %zu\n" , stacksize );
779
750
pthread_attr_destroy (& thread_attr );
780
751
}
781
752
continue ;
782
753
}
783
754
755
+ if (app_config .audio_enable && equals (uri , "/api/audio" )) {
756
+ int respLen ;
757
+ if (equals (method , "GET" )) {
758
+ if (!empty (query )) {
759
+ char * remain ;
760
+ while (query ) {
761
+ char * value = split (& query , "&" );
762
+ if (!value || !* value ) continue ;
763
+ unescape_uri (value );
764
+ char * key = split (& value , "=" );
765
+ if (!key || !* key || !value || !* value ) continue ;
766
+ if (equals (key , "bitrate" )) {
767
+ short result = strtol (value , & remain , 10 );
768
+ if (remain != value )
769
+ app_config .audio_bitrate = result ;
770
+ } else if (equals (key , "srate" )) {
771
+ short result = strtol (value , & remain , 10 );
772
+ if (remain != value )
773
+ app_config .audio_srate = result ;
774
+ }
775
+ }
776
+ }
777
+
778
+ disable_audio ();
779
+ enable_audio ();
780
+
781
+ respLen = sprintf (response ,
782
+ "HTTP/1.1 200 OK\r\n" \
783
+ "Content-Type: application/json;charset=UTF-8\r\n" \
784
+ "Connection: close\r\n" \
785
+ "\r\n" \
786
+ "{\"bitrate\":%d,\"srate\":%d}" ,
787
+ app_config .audio_bitrate , app_config .audio_srate );
788
+ } else {
789
+ respLen = sprintf (response ,
790
+ "HTTP/1.1 400 Bad Request\r\n" \
791
+ "Content-Type: text/plain\r\n" \
792
+ "Connection: close\r\n" \
793
+ "\r\n" \
794
+ "The server has no handler to the request.\r\n" \
795
+ );
796
+ }
797
+ send_to_fd (client_fd , response , respLen );
798
+ close_socket_fd (client_fd );
799
+ continue ;
800
+ }
801
+
784
802
if (app_config .jpeg_enable && equals (uri , "/api/jpeg" )) {
785
803
int respLen ;
786
804
if (equals (method , "GET" )) {
@@ -925,9 +943,9 @@ void *server_thread(void *vargp) {
925
943
if (remain != value )
926
944
app_config .mp4_bitrate = result ;
927
945
} else if (equals (key , "h265" )) {
928
- if (equals (value , "true" ) || equals (value , "1" ))
946
+ if (equals_case (value , "true" ) || equals (value , "1" ))
929
947
app_config .mp4_codecH265 = 1 ;
930
- else if (equals (value , "false" ) || equals (value , "0" ))
948
+ else if (equals_case (value , "false" ) || equals (value , "0" ))
931
949
app_config .mp4_codecH265 = 0 ;
932
950
} else if (equals (key , "mode" )) {
933
951
if (equals_case (value , "CBR" ))
@@ -1005,9 +1023,9 @@ void *server_thread(void *vargp) {
1005
1023
char * key = split (& value , "=" );
1006
1024
if (!key || !* key || !value || !* value ) continue ;
1007
1025
if (equals (key , "active" )) {
1008
- if (equals_case (value , "true" ) || equals_case (value , "1" ))
1026
+ if (equals_case (value , "true" ) || equals (value , "1" ))
1009
1027
set_night_mode (1 );
1010
- else if (equals_case (value , "false" ) || equals_case (value , "0" ))
1028
+ else if (equals_case (value , "false" ) || equals (value , "0" ))
1011
1029
set_night_mode (0 );
1012
1030
}
1013
1031
}
0 commit comments