28
28
#include " OnboardNetworkStack.h"
29
29
#include " Kernel.h"
30
30
#include " PlatformMutex.h"
31
+ #include " SingletonPtr.h"
31
32
32
33
#define CLASS_IN 1
33
34
@@ -115,10 +116,10 @@ static uint16_t dns_message_id = 1;
115
116
static int dns_unique_id = 1 ;
116
117
static DNS_QUERY *dns_query_queue[DNS_QUERY_QUEUE_SIZE];
117
118
// Protects cache shared between blocking and asynchronous calls
118
- static PlatformMutex dns_cache_mutex;
119
+ static SingletonPtr< PlatformMutex> dns_cache_mutex;
119
120
// Protects from several threads running asynchronous DNS
120
- static PlatformMutex dns_mutex;
121
- static call_in_callback_cb_t dns_call_in = 0 ;
121
+ static SingletonPtr< PlatformMutex> dns_mutex;
122
+ static SingletonPtr< call_in_callback_cb_t > dns_call_in;
122
123
static bool dns_timer_running = false ;
123
124
124
125
// DNS server configuration
@@ -315,7 +316,7 @@ static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_
315
316
return ;
316
317
}
317
318
318
- dns_cache_mutex. lock ();
319
+ dns_cache_mutex-> lock ();
319
320
320
321
int index = -1 ;
321
322
uint64_t accessed = UINT64_MAX;
@@ -332,7 +333,7 @@ static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_
332
333
}
333
334
334
335
if (index < 0 ) {
335
- dns_cache_mutex. unlock ();
336
+ dns_cache_mutex-> unlock ();
336
337
return ;
337
338
}
338
339
@@ -352,14 +353,14 @@ static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_
352
353
dns_cache[index]->accessed = ms_count;
353
354
}
354
355
355
- dns_cache_mutex. unlock ();
356
+ dns_cache_mutex-> unlock ();
356
357
}
357
358
358
359
static nsapi_error_t nsapi_dns_cache_find (const char *host, nsapi_version_t version, nsapi_addr_t *address)
359
360
{
360
361
nsapi_error_t ret_val = NSAPI_ERROR_NO_ADDRESS;
361
362
362
- dns_cache_mutex. lock ();
363
+ dns_cache_mutex-> lock ();
363
364
364
365
for (int i = 0 ; i < MBED_CONF_NSAPI_DNS_CACHE_SIZE; i++) {
365
366
if (dns_cache[i]) {
@@ -380,7 +381,7 @@ static nsapi_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t vers
380
381
}
381
382
}
382
383
383
- dns_cache_mutex. unlock ();
384
+ dns_cache_mutex-> unlock ();
384
385
385
386
return ret_val;
386
387
}
@@ -578,13 +579,13 @@ nsapi_value_or_error_t nsapi_dns_query_async(NetworkStack *stack, const char *ho
578
579
579
580
void nsapi_dns_call_in_set (call_in_callback_cb_t callback)
580
581
{
581
- dns_call_in = callback;
582
+ * dns_call_in. get () = callback;
582
583
}
583
584
584
585
nsapi_error_t nsapi_dns_call_in (call_in_callback_cb_t cb, int delay, mbed::Callback<void ()> func)
585
586
{
586
- if (dns_call_in) {
587
- dns_call_in (delay, func);
587
+ if (* dns_call_in. get () ) {
588
+ dns_call_in-> call (delay, func);
588
589
} else {
589
590
return cb (delay, func);
590
591
}
@@ -595,7 +596,7 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
595
596
NetworkStack::hostbyname_cb_t callback, nsapi_size_t addr_count,
596
597
call_in_callback_cb_t call_in_cb, nsapi_version_t version)
597
598
{
598
- dns_mutex. lock ();
599
+ dns_mutex-> lock ();
599
600
600
601
if (!stack) {
601
602
return NSAPI_ERROR_PARAMETER;
@@ -604,14 +605,14 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
604
605
// check for valid host name
605
606
int host_len = host ? strlen (host) : 0 ;
606
607
if (host_len > DNS_HOST_NAME_MAX_LEN || host_len == 0 ) {
607
- dns_mutex. unlock ();
608
+ dns_mutex-> unlock ();
608
609
return NSAPI_ERROR_PARAMETER;
609
610
}
610
611
611
612
nsapi_addr address;
612
613
if (nsapi_dns_cache_find (host, version, &address) == NSAPI_ERROR_OK) {
613
614
SocketAddress addr (address);
614
- dns_mutex. unlock ();
615
+ dns_mutex-> unlock ();
615
616
callback (NSAPI_ERROR_OK, &addr);
616
617
return NSAPI_ERROR_OK;
617
618
}
@@ -626,21 +627,21 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
626
627
}
627
628
628
629
if (index < 0 ) {
629
- dns_mutex. unlock ();
630
+ dns_mutex-> unlock ();
630
631
return NSAPI_ERROR_NO_MEMORY;
631
632
}
632
633
633
634
DNS_QUERY *query = new (std::nothrow) DNS_QUERY;
634
635
635
636
if (!query) {
636
- dns_mutex. unlock ();
637
+ dns_mutex-> unlock ();
637
638
return NSAPI_ERROR_NO_MEMORY;
638
639
}
639
640
640
641
query->host = new (std::nothrow) char [host_len + 1 ];
641
642
if (!query->host ) {
642
643
delete query;
643
- dns_mutex. unlock ();
644
+ dns_mutex-> unlock ();
644
645
return NSAPI_ERROR_NO_MEMORY;
645
646
}
646
647
strcpy (query->host , host);
@@ -689,7 +690,7 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
689
690
if (nsapi_dns_call_in (query->call_in_cb , DNS_TIMER_TIMEOUT, mbed::callback (nsapi_dns_query_async_timeout)) != NSAPI_ERROR_OK) {
690
691
delete query->host ;
691
692
delete query;
692
- dns_mutex. unlock ();
693
+ dns_mutex-> unlock ();
693
694
return NSAPI_ERROR_NO_MEMORY;
694
695
}
695
696
dns_timer_running = true ;
@@ -698,7 +699,7 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
698
699
// Initiates query
699
700
nsapi_dns_query_async_initiate_next ();
700
701
701
- dns_mutex. unlock ();
702
+ dns_mutex-> unlock ();
702
703
703
704
return query->unique_id ;
704
705
}
@@ -732,7 +733,7 @@ static void nsapi_dns_query_async_initiate_next(void)
732
733
733
734
static void nsapi_dns_query_async_timeout (void )
734
735
{
735
- dns_mutex. lock ();
736
+ dns_mutex-> lock ();
736
737
737
738
DNS_QUERY *query = NULL ;
738
739
@@ -779,12 +780,12 @@ static void nsapi_dns_query_async_timeout(void)
779
780
dns_timer_running = false ;
780
781
}
781
782
782
- dns_mutex. unlock ();
783
+ dns_mutex-> unlock ();
783
784
}
784
785
785
786
nsapi_error_t nsapi_dns_query_async_cancel (int id)
786
787
{
787
- dns_mutex. lock ();
788
+ dns_mutex-> lock ();
788
789
789
790
DNS_QUERY *query = NULL ;
790
791
@@ -796,7 +797,7 @@ nsapi_error_t nsapi_dns_query_async_cancel(int id)
796
797
}
797
798
798
799
if (!query || query->state == DNS_CANCELLED) {
799
- dns_mutex. unlock ();
800
+ dns_mutex-> unlock ();
800
801
return NSAPI_ERROR_PARAMETER;
801
802
}
802
803
@@ -805,14 +806,14 @@ nsapi_error_t nsapi_dns_query_async_cancel(int id)
805
806
// Do not call callback
806
807
query->callback = 0 ;
807
808
808
- dns_mutex. unlock ();
809
+ dns_mutex-> unlock ();
809
810
810
811
return NSAPI_ERROR_OK;
811
812
}
812
813
813
814
static void nsapi_dns_query_async_create (void *ptr)
814
815
{
815
- dns_mutex. lock ();
816
+ dns_mutex-> lock ();
816
817
817
818
int unique_id = reinterpret_cast <int >(ptr);
818
819
@@ -827,7 +828,7 @@ static void nsapi_dns_query_async_create(void *ptr)
827
828
828
829
if (!query || query->state == DNS_CANCELLED) {
829
830
// Cancel has been called
830
- dns_mutex. unlock ();
831
+ dns_mutex-> unlock ();
831
832
return ;
832
833
}
833
834
@@ -871,7 +872,7 @@ static void nsapi_dns_query_async_create(void *ptr)
871
872
query->socket = socket;
872
873
}
873
874
874
- dns_mutex. unlock ();
875
+ dns_mutex-> unlock ();
875
876
876
877
nsapi_dns_query_async_send (reinterpret_cast <void *>(query->unique_id ));
877
878
@@ -926,7 +927,7 @@ static void nsapi_dns_query_async_resp(DNS_QUERY *query, nsapi_error_t status, S
926
927
nsapi_dns_query_async_delete (query->unique_id );
927
928
nsapi_dns_query_async_initiate_next ();
928
929
929
- dns_mutex. unlock ();
930
+ dns_mutex-> unlock ();
930
931
931
932
if (callback) {
932
933
callback (status, address);
@@ -935,7 +936,7 @@ static void nsapi_dns_query_async_resp(DNS_QUERY *query, nsapi_error_t status, S
935
936
936
937
static void nsapi_dns_query_async_send (void *ptr)
937
938
{
938
- dns_mutex. lock ();
939
+ dns_mutex-> lock ();
939
940
940
941
int unique_id = reinterpret_cast <int >(ptr);
941
942
@@ -950,7 +951,7 @@ static void nsapi_dns_query_async_send(void *ptr)
950
951
951
952
if (!query || query->state != DNS_INITIATED) {
952
953
// Cancel has been called
953
- dns_mutex. unlock ();
954
+ dns_mutex-> unlock ();
954
955
return ;
955
956
}
956
957
@@ -1004,7 +1005,7 @@ static void nsapi_dns_query_async_send(void *ptr)
1004
1005
1005
1006
query->socket_timeout = MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME;
1006
1007
1007
- dns_mutex. unlock ();
1008
+ dns_mutex-> unlock ();
1008
1009
}
1009
1010
1010
1011
static void nsapi_dns_query_async_socket_callback (void *ptr)
@@ -1020,7 +1021,7 @@ static void nsapi_dns_query_async_socket_callback_handle(NetworkStack *stack)
1020
1021
{
1021
1022
UDPSocket *socket = NULL ;
1022
1023
1023
- dns_mutex. lock ();
1024
+ dns_mutex-> lock ();
1024
1025
1025
1026
for (int i = 0 ; i < DNS_QUERY_QUEUE_SIZE; i++) {
1026
1027
if (dns_query_queue[i] && dns_query_queue[i]->stack == stack) {
@@ -1033,7 +1034,7 @@ static void nsapi_dns_query_async_socket_callback_handle(NetworkStack *stack)
1033
1034
// create network packet
1034
1035
uint8_t *packet = (uint8_t *)malloc (DNS_BUFFER_SIZE);
1035
1036
if (!packet) {
1036
- dns_mutex. unlock ();
1037
+ dns_mutex-> unlock ();
1037
1038
return ;
1038
1039
}
1039
1040
@@ -1085,12 +1086,12 @@ static void nsapi_dns_query_async_socket_callback_handle(NetworkStack *stack)
1085
1086
free (packet);
1086
1087
}
1087
1088
1088
- dns_mutex. unlock ();
1089
+ dns_mutex-> unlock ();
1089
1090
}
1090
1091
1091
1092
static void nsapi_dns_query_async_response (void *ptr)
1092
1093
{
1093
- dns_mutex. lock ();
1094
+ dns_mutex-> lock ();
1094
1095
1095
1096
int unique_id = reinterpret_cast <int >(ptr);
1096
1097
@@ -1126,6 +1127,6 @@ static void nsapi_dns_query_async_response(void *ptr)
1126
1127
nsapi_dns_query_async_resp (query, status, addresses);
1127
1128
delete[] addresses;
1128
1129
} else {
1129
- dns_mutex. unlock ();
1130
+ dns_mutex-> unlock ();
1130
1131
}
1131
1132
}
0 commit comments