| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/local_discovery/service_discovery_client_mac.h" | 5 #include "chrome/browser/local_discovery/service_discovery_client_mac.h" |
| 6 | 6 |
| 7 #import <arpa/inet.h> | 7 #import <arpa/inet.h> |
| 8 #import <Foundation/Foundation.h> | 8 #import <Foundation/Foundation.h> |
| 9 #import <net/if_dl.h> | 9 #import <net/if_dl.h> |
| 10 #include <stddef.h> |
| 11 #include <stdint.h> |
| 10 | 12 |
| 11 #include "base/debug/dump_without_crashing.h" | 13 #include "base/debug/dump_without_crashing.h" |
| 12 #include "base/memory/singleton.h" | 14 #include "base/memory/singleton.h" |
| 13 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 14 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 15 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 16 #include "base/threading/thread.h" | 18 #include "base/threading/thread.h" |
| 17 #include "net/base/ip_address_number.h" | 19 #include "net/base/ip_address_number.h" |
| 18 #include "net/base/ip_endpoint.h" | 20 #include "net/base/ip_endpoint.h" |
| 19 | 21 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 void ParseTxtRecord(NSData* record, std::vector<std::string>* output) { | 95 void ParseTxtRecord(NSData* record, std::vector<std::string>* output) { |
| 94 if (record == nil || [record length] <= 1) | 96 if (record == nil || [record length] <= 1) |
| 95 return; | 97 return; |
| 96 | 98 |
| 97 VLOG(1) << "ParseTxtRecord: " << [record length]; | 99 VLOG(1) << "ParseTxtRecord: " << [record length]; |
| 98 | 100 |
| 99 const char* record_bytes = reinterpret_cast<const char*>([record bytes]); | 101 const char* record_bytes = reinterpret_cast<const char*>([record bytes]); |
| 100 const char* const record_end = record_bytes + [record length]; | 102 const char* const record_end = record_bytes + [record length]; |
| 101 // TODO(justinlin): More strict bounds checking. | 103 // TODO(justinlin): More strict bounds checking. |
| 102 while (record_bytes < record_end) { | 104 while (record_bytes < record_end) { |
| 103 uint8 size = *record_bytes++; | 105 uint8_t size = *record_bytes++; |
| 104 if (size <= 0) | 106 if (size <= 0) |
| 105 continue; | 107 continue; |
| 106 | 108 |
| 107 if (record_bytes + size <= record_end) { | 109 if (record_bytes + size <= record_end) { |
| 108 VLOG(1) << "TxtRecord: " | 110 VLOG(1) << "TxtRecord: " |
| 109 << std::string(record_bytes, static_cast<size_t>(size)); | 111 << std::string(record_bytes, static_cast<size_t>(size)); |
| 110 output->push_back( | 112 output->push_back( |
| 111 [[[NSString alloc] initWithBytes:record_bytes | 113 [[[NSString alloc] initWithBytes:record_bytes |
| 112 length:size | 114 length:size |
| 113 encoding:NSUTF8StringEncoding] UTF8String]); | 115 encoding:NSUTF8StringEncoding] UTF8String]); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 container_->OnResolveUpdate(local_discovery::ServiceResolver::STATUS_SUCCESS); | 483 container_->OnResolveUpdate(local_discovery::ServiceResolver::STATUS_SUCCESS); |
| 482 } | 484 } |
| 483 | 485 |
| 484 - (void)netService:(NSNetService *)sender | 486 - (void)netService:(NSNetService *)sender |
| 485 didNotResolve:(NSDictionary *)errorDict { | 487 didNotResolve:(NSDictionary *)errorDict { |
| 486 container_->OnResolveUpdate( | 488 container_->OnResolveUpdate( |
| 487 local_discovery::ServiceResolver::STATUS_REQUEST_TIMEOUT); | 489 local_discovery::ServiceResolver::STATUS_REQUEST_TIMEOUT); |
| 488 } | 490 } |
| 489 | 491 |
| 490 @end | 492 @end |
| OLD | NEW |