| 
														
															@@ -43,6 +43,8 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #include "dmap_parser.h"
 
														 | 
														
														 | 
														
															 #include "dmap_parser.h"
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #include "log_util.h"
 
														 | 
														
														 | 
														
															 #include "log_util.h"
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#define RTSP_STACK_SIZE (8*1024)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 typedef struct raop_ctx_s {
 
														 | 
														
														 | 
														
															 typedef struct raop_ctx_s {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #ifdef WIN32
 
														 | 
														
														 | 
														
															 #ifdef WIN32
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	struct mdns_service *svc;
 
														 | 
														
														 | 
														
															 	struct mdns_service *svc;
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -57,6 +59,8 @@ typedef struct raop_ctx_s { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	pthread_t thread, search_thread;
 
														 | 
														
														 | 
														
															 	pthread_t thread, search_thread;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #else
 
														 | 
														
														 | 
														
															 #else
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	TaskHandle_t thread, search_thread, joiner;
 
														 | 
														
														 | 
														
															 	TaskHandle_t thread, search_thread, joiner;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	StaticTask_t *xTaskBuffer;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    StackType_t *xStack;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #endif
 
														 | 
														
														 | 
														
															 #endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	unsigned char mac[6];
 
														 | 
														
														 | 
														
															 	unsigned char mac[6];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	int latency;
 
														 | 
														
														 | 
														
															 	int latency;
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -178,8 +182,14 @@ struct raop_ctx_s *raop_create(struct in_addr host, char *name, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	pthread_create(&ctx->thread, NULL, &rtsp_thread, ctx); 
														 | 
														
														 | 
														
															 	pthread_create(&ctx->thread, NULL, &rtsp_thread, ctx); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
#else 
														 | 
														
														 | 
														
															 
#else 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	LOG_INFO("starting mDNS with %s", id); 
														 | 
														
														 | 
														
															 	LOG_INFO("starting mDNS with %s", id); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	ESP_ERROR_CHECK( mdns_service_add(id, "_raop", "_tcp", ctx->port, txt, sizeof(txt) / sizeof(mdns_txt_item_t)) ); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	xTaskCreate((TaskFunction_t) rtsp_thread, "RTSP_thread", 8*1024, ctx, ESP_TASK_PRIO_MIN + 1, &ctx->thread); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	ESP_ERROR_CHECK( mdns_service_add(id, "_raop", "_tcp", ctx->port, txt, sizeof(txt) / sizeof(mdns_txt_item_t)) );
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	/* 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	xTaskCreate((TaskFunction_t) rtsp_thread, "RTSP_thread", 8*1024, ctx, ESP_TASK_PRIO_MIN + 1, &ctx->thread);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	*/
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ctx->xTaskBuffer = (StaticTask_t*) heap_caps_malloc(sizeof(StaticTask_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ctx->xStack = (StackType_t*) malloc(RTSP_STACK_SIZE);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	ctx->thread = xTaskCreateStatic( (TaskFunction_t) rtsp_thread, "RTSP_thread", RTSP_STACK_SIZE, ctx, ESP_TASK_PRIO_MIN + 1, ctx->xStack, ctx->xTaskBuffer);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #endif 
														 | 
														
														 | 
														
															 #endif 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	return ctx; 
														 | 
														
														 | 
														
															 	return ctx; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -192,7 +202,11 @@ void raop_delete(struct raop_ctx_s *ctx) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	struct sockaddr addr; 
														 | 
														
														 | 
														
															 	struct sockaddr addr; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	socklen_t nlen = sizeof(struct sockaddr); 
														 | 
														
														 | 
														
															 	socklen_t nlen = sizeof(struct sockaddr); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if (!ctx) return; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (!ctx) return;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#if !defined WIN32
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	ctx->joiner = xTaskGetCurrentTaskHandle();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	ctx->running = false; 
														 | 
														
														 | 
														
															 	ctx->running = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -205,8 +219,9 @@ void raop_delete(struct raop_ctx_s *ctx) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #ifdef WIN32 
														 | 
														
														 | 
														
															 #ifdef WIN32 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	pthread_join(ctx->thread, NULL); 
														 | 
														
														 | 
														
															 	pthread_join(ctx->thread, NULL); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #else 
														 | 
														
														 | 
														
															 #else 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	ctx->joiner = xTaskGetCurrentTaskHandle(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	xTaskNotifyWait(0, 0, NULL, portMAX_DELAY); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	xTaskNotifyWait(0, 0, NULL, portMAX_DELAY);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	free(ctx->xStack);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	heap_caps_free(ctx->xTaskBuffer); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #endif 
														 | 
														
														 | 
														
															 #endif 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	rtp_end(ctx->rtp); 
														 | 
														
														 | 
														
															 	rtp_end(ctx->rtp); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -229,11 +244,13 @@ void raop_delete(struct raop_ctx_s *ctx) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	NFREE(ctx->rtsp.aeskey); 
														 | 
														
														 | 
														
															 	NFREE(ctx->rtsp.aeskey); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	NFREE(ctx->rtsp.aesiv);
 
														 | 
														
														 | 
														
															 	NFREE(ctx->rtsp.aesiv);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	NFREE(ctx->rtsp.fmtp);
 
														 | 
														
														 | 
														
															 	NFREE(ctx->rtsp.fmtp);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	// stop broadcasting devices
 
														 | 
														
														 | 
														
															 	// stop broadcasting devices
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #ifdef WIN32
 
														 | 
														
														 | 
														
															 #ifdef WIN32
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	mdns_service_remove(ctx->svr, ctx->svc);
 
														 | 
														
														 | 
														
															 	mdns_service_remove(ctx->svr, ctx->svc);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	mdnsd_stop(ctx->svr);
 
														 | 
														
														 | 
														
															 	mdnsd_stop(ctx->svr);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#else
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	mdns_service_remove("_raop", "_tcp");	
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #endif
 
														 | 
														
														 | 
														
															 #endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	free(ctx); 
														 | 
														
														 | 
														
															 	free(ctx); 
														 |