Advertisement
tomkiewicz

Untitled

Aug 12th, 2021
1,644
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 33.22 KB | None | 0 0
  1. diff --git a/Android.bp b/Android.bp
  2. index b5ffd42..70f91af 100644
  3. --- a/Android.bp
  4. +++ b/Android.bp
  5. @@ -75,7 +75,9 @@ cc_binary {
  6.      defaults: ["mdnsresponder_default_cflags"],
  7.      host_supported: true,
  8.      srcs: [
  9. +        "mDNSCore/anonymous.c",
  10.          "mDNSCore/mDNS.c",
  11. +        "mDNSCore/CryptoAlg.c",
  12.          "mDNSCore/DNSDigest.c",
  13.          "mDNSCore/uDNS.c",
  14.          "mDNSCore/DNSCommon.c",
  15. @@ -124,6 +126,7 @@ cc_binary {
  16.                  "-DUNICODE",
  17.                  "-D_UNICODE",
  18.                  "-D_LEGACY_NAT_TRAVERSAL",
  19. +                "-D_CRT_RAND_S=",
  20.                  "-Wno-empty-body",
  21.              ],
  22.  
  23. @@ -136,6 +139,7 @@ cc_binary {
  24.              ],
  25.  
  26.              srcs: [
  27. +                "mDNSWindows/Poll.c",
  28.                  "mDNSWindows/SystemService/main.c",
  29.                  "mDNSWindows/SystemService/Service.c",
  30.                  "mDNSWindows/SystemService/EventLog.mc",
  31. @@ -180,7 +184,7 @@ cc_library {
  32.                  "-D_WINDOWS",
  33.                  "-D_USERDLL",
  34.                  "-D_MDNS_DEBUGMSGS=0",
  35. -                "-D_SSIZE_T",
  36. +                "-D_SSIZE_T=",
  37.                  "-DNOT_HAVE_SA_LENGTH",
  38.                  "-Wno-unknown-pragmas",
  39.                  "-Wno-overflow",
  40. diff --git a/Clients/dns-sd.c b/Clients/dns-sd.c
  41. index 5260b3f..aa5c367 100644
  42. --- a/Clients/dns-sd.c
  43. +++ b/Clients/dns-sd.c
  44. @@ -2279,9 +2279,11 @@ Fail:
  45.  #define STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s) # s
  46.  #define STRINGIFY(s) STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s)
  47.  
  48. +#ifndef __ANDROID__
  49.  // NOT static -- otherwise the compiler may optimize it out
  50.  // The "@(#) " pattern is a special prefix the "what" command looks for
  51.  const char VersionString_SCCS[] = "@(#) dns-sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
  52. +#endif
  53.  
  54.  #if _BUILDING_XCODE_PROJECT_
  55.  // If the process crashes, then this string will be magically included in the automatically-generated crash log
  56. diff --git a/mDNSCore/DNSDigest.c b/mDNSCore/DNSDigest.c
  57. index 57a4012..383a32d 100644
  58. --- a/mDNSCore/DNSDigest.c
  59. +++ b/mDNSCore/DNSDigest.c
  60. @@ -182,6 +182,7 @@ mDNSlocal mDNSu32 NToH32(mDNSu8 * bytes)
  61.  //from CommonDigest.h
  62.  
  63.  
  64. +#ifndef HAVE_MD5
  65.  
  66.  // from openssl/md5.h
  67.  
  68. @@ -1120,6 +1121,7 @@ void md5_block_data_order (MD5_CTX *c, const void *data_, int num)
  69.  }
  70.  #endif
  71.  
  72. +#endif  // !HAVE_MD5
  73.  
  74.  // ***************************************************************************
  75.  #if COMPILER_LIKES_PRAGMA_MARK
  76. diff --git a/mDNSCore/mDNS.c b/mDNSCore/mDNS.c
  77. old mode 100755
  78. new mode 100644
  79. index 8deada2..d887d08
  80. --- a/mDNSCore/mDNS.c
  81. +++ b/mDNSCore/mDNS.c
  82. @@ -5535,7 +5535,6 @@ mDNSexport mDNSs32 mDNS_Execute(mDNS *const m)
  83.              }
  84.          }
  85.          m->NewLocalRecords = head;
  86. -        debugf("mDNS_Execute: Setting NewLocalRecords to %s", (head ? ARDisplayString(m, head) : "NULL"));
  87.  
  88.          if (i >= 1000) LogMsg("mDNS_Execute: m->NewLocalRecords exceeded loop limit");
  89.  
  90. @@ -15307,6 +15306,9 @@ mDNSexport void mDNS_StartExit(mDNS *const m)
  91.      for (rr = m->DuplicateRecords; rr; rr = rr->next)
  92.          LogMsg("mDNS_StartExit: Should not still have Duplicate Records remaining: %02X %s", rr->resrec.RecordType, ARDisplayString(m, rr));
  93.  
  94. +    // Send responses to flush any pending deregistrations
  95. +    SendResponses(m);
  96. +
  97.      // If any deregistering records remain, send their deregistration announcements before we exit
  98.      if (m->mDNSPlatformStatus != mStatus_NoError) DiscardDeregistrations(m);
  99.  
  100. diff --git a/mDNSCore/mDNSEmbeddedAPI.h b/mDNSCore/mDNSEmbeddedAPI.h
  101. old mode 100755
  102. new mode 100644
  103. index 511aa3b..4d0e42a
  104. --- a/mDNSCore/mDNSEmbeddedAPI.h
  105. +++ b/mDNSCore/mDNSEmbeddedAPI.h
  106. @@ -54,6 +54,17 @@
  107.  #ifndef __mDNSEmbeddedAPI_h
  108.  #define __mDNSEmbeddedAPI_h
  109.  
  110. +/* MinGW thinks "#define interface struct" is a cute way to do ObjC
  111. + * compatibility. Everything is terrible.
  112. + */
  113. +#ifdef _WIN32
  114. +#ifndef interface
  115. +#warning "MinGW no longer does weird things with 'interface'. "\
  116. +         "You can remove this code."
  117. +#endif /* ! interface */
  118. +#undef interface
  119. +#endif /* _WIN32 */
  120. +
  121.  #if defined(EFI32) || defined(EFI64) || defined(EFIX64)
  122.  // EFI doesn't have stdarg.h unless it's building with GCC.
  123.  #include "Tiano.h"
  124. @@ -3153,9 +3164,9 @@ extern mStatus  mDNSPlatformSendUDP(const mDNS *const m, const void *const msg,
  125.  extern void     mDNSPlatformLock        (const mDNS *const m);
  126.  extern void     mDNSPlatformUnlock      (const mDNS *const m);
  127.  
  128. -extern void     mDNSPlatformStrCopy     (      void *dst, const void *src);
  129. -extern mDNSu32  mDNSPlatformStrLCopy    (      void *dst, const void *src, mDNSu32 len);
  130. -extern mDNSu32  mDNSPlatformStrLen      (                 const void *src);
  131. +mDNSexport void     mDNSPlatformStrCopy     (      void *dst, const void *src);
  132. +mDNSexport mDNSu32  mDNSPlatformStrLCopy    (      void *dst, const void *src, mDNSu32 len);
  133. +mDNSexport mDNSu32  mDNSPlatformStrLen      (                 const void *src);
  134.  extern void     mDNSPlatformMemCopy     (      void *dst, const void *src, mDNSu32 len);
  135.  extern mDNSBool mDNSPlatformMemSame     (const void *dst, const void *src, mDNSu32 len);
  136.  extern int      mDNSPlatformMemCmp      (const void *dst, const void *src, mDNSu32 len);
  137. diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
  138. index 295e842..46f0dff 100644
  139. --- a/mDNSPosix/PosixDaemon.c
  140. +++ b/mDNSPosix/PosixDaemon.c
  141. @@ -38,6 +38,10 @@
  142.  #include <pwd.h>
  143.  #include <sys/types.h>
  144.  
  145. +#ifdef __ANDROID__
  146. +#include "cutils/sockets.h"
  147. +#endif
  148. +
  149.  #if __APPLE__
  150.  #undef daemon
  151.  extern int daemon(int, int);
  152. @@ -49,6 +53,10 @@ extern int daemon(int, int);
  153.  #include "uds_daemon.h"
  154.  #include "PlatformCommon.h"
  155.  
  156. +#ifndef MDNS_USERNAME
  157. +#define MDNS_USERNAME "nobody"
  158. +#endif
  159. +
  160.  #define CONFIG_FILE "/etc/mdnsd.conf"
  161.  static domainname DynDNSZone;                // Default wide-area zone for service registration
  162.  static domainname DynDNSHostname;
  163. @@ -107,6 +115,7 @@ mDNSlocal void ParseCmdLinArgs(int argc, char **argv)
  164.          else printf("Usage: %s [-debug]\n", argv[0]);
  165.      }
  166.  
  167. +#ifndef __ANDROID__
  168.      if (!mDNS_DebugMode)
  169.      {
  170.          int result = daemon(0, 0);
  171. @@ -116,6 +125,7 @@ mDNSlocal void ParseCmdLinArgs(int argc, char **argv)
  172.          exit(-1);
  173.  #endif
  174.      }
  175. +#endif // !__ANDROID__
  176.  }
  177.  
  178.  mDNSlocal void DumpStateLog()
  179. @@ -180,18 +190,33 @@ int main(int argc, char **argv)
  180.                      mDNS_StatusCallback, mDNS_Init_NoInitCallbackContext);
  181.  
  182.      if (mStatus_NoError == err)
  183. +#ifdef __ANDROID__
  184. +    {
  185. +        dnssd_sock_t s[1];
  186. +        char *socketname = strrchr(MDNS_UDS_SERVERPATH, '/');
  187. +        if (socketname)
  188. +        {
  189. +            socketname++; // skip '/'
  190. +            s[0] = android_get_control_socket(socketname);
  191. +            err = udsserver_init(s, 1);
  192. +        } else {
  193. +            err = udsserver_init(mDNSNULL, 0);
  194. +        }
  195. +    }
  196. +#else
  197.          err = udsserver_init(mDNSNULL, 0);
  198. +#endif // __ANDROID__
  199.  
  200.      Reconfigure(&mDNSStorage);
  201.  
  202.      // Now that we're finished with anything privileged, switch over to running as "nobody"
  203.      if (mStatus_NoError == err)
  204.      {
  205. -        const struct passwd *pw = getpwnam("nobody");
  206. +        const struct passwd *pw = getpwnam(MDNS_USERNAME);
  207.          if (pw != NULL)
  208.              setuid(pw->pw_uid);
  209.          else
  210. -            LogMsg("WARNING: mdnsd continuing as root because user \"nobody\" does not exist");
  211. +            LogMsg("WARNING: mdnsd continuing as root because user \"%s\" does not exist", MDNS_USERNAME);
  212.      }
  213.  
  214.      if (mStatus_NoError == err)
  215. diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
  216. old mode 100755
  217. new mode 100644
  218. index 0e10bd5..94ee12a
  219. --- a/mDNSPosix/mDNSPosix.c
  220. +++ b/mDNSPosix/mDNSPosix.c
  221. @@ -29,7 +29,9 @@
  222.  #include <errno.h>
  223.  #include <string.h>
  224.  #include <unistd.h>
  225. -#include <syslog.h>
  226. +#ifndef __ANDROID__
  227. +  #include <syslog.h>
  228. +#endif
  229.  #include <stdarg.h>
  230.  #include <fcntl.h>
  231.  #include <sys/types.h>
  232. @@ -54,6 +56,11 @@
  233.  #include "GenLinkedList.h"
  234.  #include "dnsproxy.h"
  235.  
  236. +// Disallow SO_REUSEPORT on Android because we use >3.9 kernel headers to build binaries targeted to 3.4.x.
  237. +#ifdef __ANDROID__
  238. +#undef SO_REUSEPORT
  239. +#endif
  240. +
  241.  // ***************************************************************************
  242.  // Structures
  243.  
  244. @@ -466,7 +473,12 @@ mDNSexport void mDNSPlatformDynDNSHostNameStatusChanged(const domainname *const
  245.  mDNSlocal void GetUserSpecifiedRFC1034ComputerName(domainlabel *const namelabel)
  246.  {
  247.      int len = 0;
  248. +#ifndef __ANDROID__
  249.      gethostname((char *)(&namelabel->c[1]), MAX_DOMAIN_LABEL);
  250. +#else
  251. +    // use an appropriate default label rather than the linux default of 'localhost'
  252. +    strncpy(&namelabel->c[1], "Android", MAX_DOMAIN_LABEL);
  253. +#endif
  254.      while (len < MAX_DOMAIN_LABEL && namelabel->c[len+1] && namelabel->c[len+1] != '.') len++;
  255.      namelabel->c[0] = len;
  256.  }
  257. @@ -989,7 +1001,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
  258.                      if (firstLoopback == NULL)
  259.                          firstLoopback = i;
  260.                  }
  261. -                else
  262. +                else if (i->ifi_flags & (IFF_MULTICAST | IFF_BROADCAST))  // http://b/25669326
  263.                  {
  264.                      if (SetupOneInterface(m, i->ifi_addr, i->ifi_netmask, i->ifi_name, i->ifi_index) == 0)
  265.                          if (i->ifi_addr->sa_family == AF_INET)
  266. diff --git a/mDNSPosix/mDNSPosix.h b/mDNSPosix/mDNSPosix.h
  267. old mode 100755
  268. new mode 100644
  269. index ca60d80..bac6b88
  270. --- a/mDNSPosix/mDNSPosix.h
  271. +++ b/mDNSPosix/mDNSPosix.h
  272. @@ -20,6 +20,9 @@
  273.  
  274.  #include <signal.h>
  275.  #include <sys/time.h>
  276. +#ifdef __ANDROID__
  277. +#include <sys/select.h>
  278. +#endif
  279.  
  280.  #ifdef  __cplusplus
  281.  extern "C" {
  282. diff --git a/mDNSPosix/mDNSUNP.c b/mDNSPosix/mDNSUNP.c
  283. old mode 100755
  284. new mode 100644
  285. index e00ddd6..8a575a6
  286. --- a/mDNSPosix/mDNSUNP.c
  287. +++ b/mDNSPosix/mDNSUNP.c
  288. @@ -131,7 +131,7 @@ struct ifi_info *get_ifi_info_linuxv6(int doaliases)
  289.                  if (doaliases == 0)
  290.                      continue;   /* already processed this interface */
  291.              }
  292. -            memcpy(lastname, ifname, IFNAMSIZ);
  293. +            strncpy(lastname, ifname, IFNAMSIZ);
  294.              ifi = (struct ifi_info*)calloc(1, sizeof(struct ifi_info));
  295.              if (ifi == NULL) {
  296.                  goto gotError;
  297. @@ -169,13 +169,13 @@ struct ifi_info *get_ifi_info_linuxv6(int doaliases)
  298.              inet_pton(AF_INET6, ipv6addr, &((struct sockaddr_in6 *)ifi->ifi_netmask)->sin6_addr);
  299.  
  300.              /* Add interface name */
  301. -            memcpy(ifi->ifi_name, ifname, IFI_NAME);
  302. +            strncpy(ifi->ifi_name, ifname, IFI_NAME);
  303.  
  304.              /* Add interface index */
  305.              ifi->ifi_index = index;
  306.  
  307.              /* Add interface flags*/
  308. -            memcpy(ifr.ifr_name, ifname, IFNAMSIZ);
  309. +            strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
  310.              if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0) {
  311.                  if (errno == EADDRNOTAVAIL) {
  312.                      /*
  313. @@ -302,7 +302,7 @@ struct ifi_info *get_ifi_info(int family, int doaliases)
  314.                  continue;   /* already processed this interface */
  315.              myflags = IFI_ALIAS;
  316.          }
  317. -        memcpy(lastname, ifr->ifr_name, IFNAMSIZ);
  318. +        strncpy(lastname, ifr->ifr_name, IFNAMSIZ);
  319.  
  320.          ifrcopy = *ifr;
  321.          if (ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy) < 0) {
  322. diff --git a/mDNSPosix/mDNSUNP.h b/mDNSPosix/mDNSUNP.h
  323. old mode 100755
  324. new mode 100644
  325. index 2b36ceb..41a2802
  326. --- a/mDNSPosix/mDNSUNP.h
  327. +++ b/mDNSPosix/mDNSUNP.h
  328. @@ -44,13 +44,13 @@ extern "C" {
  329.  typedef unsigned int socklen_t;
  330.  #endif
  331.  
  332. -#if !defined(_SS_MAXSIZE)
  333. +#if !defined(_SS_MAXSIZE) && !defined(__ANDROID__)
  334.  #if HAVE_IPV6
  335.  #define sockaddr_storage sockaddr_in6
  336.  #else
  337.  #define sockaddr_storage sockaddr
  338.  #endif // HAVE_IPV6
  339. -#endif // !defined(_SS_MAXSIZE)
  340. +#endif // !defined(_SS_MAXSIZE) && !defined(__ANDROID__)
  341.  
  342.  #ifndef NOT_HAVE_SA_LEN
  343.  #define GET_SA_LEN(X) (sizeof(struct sockaddr) > ((struct sockaddr*)&(X))->sa_len ? \
  344. diff --git a/mDNSShared/PlatformCommon.c b/mDNSShared/PlatformCommon.c
  345. index 49c8fd1..58e4ff9 100644
  346. --- a/mDNSShared/PlatformCommon.c
  347. +++ b/mDNSShared/PlatformCommon.c
  348. @@ -31,6 +31,10 @@
  349.  #include "DNSCommon.h"
  350.  #include "PlatformCommon.h"
  351.  
  352. +#ifdef __ANDROID__
  353. +#include <android/log.h>
  354. +#endif
  355. +
  356.  #ifdef NOT_HAVE_SOCKLEN_T
  357.  typedef unsigned int socklen_t;
  358.  #endif
  359. @@ -147,8 +151,12 @@ badf:
  360.  #if MDNS_DEBUGMSGS
  361.  mDNSexport void mDNSPlatformWriteDebugMsg(const char *msg)
  362.  {
  363. +#ifdef __ANDROID__
  364. +    __android_log_print(ANDROID_LOG_DEBUG, "mdns", "%s", msg);
  365. +#else
  366.      fprintf(stderr,"%s\n", msg);
  367.      fflush(stderr);
  368. +#endif
  369.  }
  370.  #endif
  371.  
  372. @@ -207,8 +215,24 @@ mDNSexport void mDNSPlatformWriteLogMsg(const char *ident, const char *buffer, m
  373.          {
  374.  #if APPLE_OSX_mDNSResponder
  375.              mDNSPlatformLogToFile(syslog_level, buffer);
  376. +#else
  377. +#ifdef __ANDROID__
  378. +            switch (loglevel)
  379. +            {
  380. +            case MDNS_LOG_DEBUG:     syslog_level = ANDROID_LOG_DEBUG;  break;
  381. +#if MDNS_DEBUGMSGS > 0
  382. +            case MDNS_LOG_OPERATION: syslog_level = ANDROID_LOG_WARN;   break;
  383. +            case MDNS_LOG_SPS:       syslog_level = ANDROID_LOG_DEBUG;  break;
  384. +            case MDNS_LOG_INFO:      syslog_level = ANDROID_LOG_INFO;   break;
  385. +            default:                 syslog_level = ANDROID_LOG_ERROR;  break;
  386. +#else
  387. +            default:        return;
  388. +#endif
  389. +            }
  390. +            __android_log_print(syslog_level, "mdns", "%s", buffer);
  391.  #else
  392.              syslog(syslog_level, "%s", buffer);
  393. +#endif
  394.  #endif
  395.          }
  396.      }
  397. diff --git a/mDNSShared/dns_sd.h b/mDNSShared/dns_sd.h
  398. index a1f5a57..49d0905 100644
  399. --- a/mDNSShared/dns_sd.h
  400. +++ b/mDNSShared/dns_sd.h
  401. @@ -2051,6 +2051,25 @@ DNSServiceErrorType DNSSD_API DNSServiceReconfirmRecord
  402.  );
  403.  
  404.  
  405. +typedef void (DNSSD_API *DNSHostnameChangedReply)
  406. +(
  407. +    DNSServiceRef                    sdRef,
  408. +    DNSServiceFlags                  flags,
  409. +    DNSServiceErrorType              errorCode,
  410. +    const char                       *hostname,
  411. +    void                             *context
  412. +);
  413. +
  414. +DNSSD_EXPORT
  415. +DNSServiceErrorType DNSSD_API DNSSetHostname
  416. +(
  417. +    DNSServiceRef                    *sdRef,
  418. +    DNSServiceFlags                  flags,
  419. +    const char                       *hostname,
  420. +    DNSHostnameChangedReply          callBack,
  421. +    void                             *context
  422. +);
  423. +
  424.  /*********************************************************************************************
  425.  *
  426.  *  NAT Port Mapping
  427. diff --git a/mDNSShared/dnssd_clientlib.c b/mDNSShared/dnssd_clientlib.c
  428. index 2a1f5ed..4ee24a6 100644
  429. --- a/mDNSShared/dnssd_clientlib.c
  430. +++ b/mDNSShared/dnssd_clientlib.c
  431. @@ -367,4 +367,6 @@ DNSServiceErrorType DNSSD_API TXTRecordGetItemAtIndex
  432.  
  433.  // NOT static -- otherwise the compiler may optimize it out
  434.  // The "@(#) " pattern is a special prefix the "what" command looks for
  435. +#ifndef __ANDROID__
  436.  const char VersionString_SCCS_libdnssd[] DNSSD_USED = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
  437. +#endif
  438. diff --git a/mDNSShared/dnssd_clientshim.c b/mDNSShared/dnssd_clientshim.c
  439. index c0a309d..2c3b4a9 100644
  440. --- a/mDNSShared/dnssd_clientshim.c
  441. +++ b/mDNSShared/dnssd_clientshim.c
  442. @@ -68,6 +71,14 @@ typedef struct
  443.      DNSQuestion q;
  444.  } mDNS_DirectOP_Browse;
  445.  
  446. +typedef struct
  447. +{
  448. +    mDNS_DirectOP_Dispose        *disposefn;
  449. +    DNSServiceRef                aQuery;
  450. +    DNSServiceGetAddrInfoReply   callback;
  451. +    void                         *context;
  452. +} mDNS_DirectOP_GetAddrInfo;
  453. +
  454.  typedef struct
  455.  {
  456.      mDNS_DirectOP_Dispose  *disposefn;
  457. @@ -188,6 +199,10 @@ mDNSlocal void RegCallback(mDNS *const m, ServiceRecordSet *const sr, mStatus re
  458.      else if (result == mStatus_NameConflict)
  459.      {
  460.          if (x->autoname) mDNS_RenameAndReregisterService(m, sr, mDNSNULL);
  461. +        else if (x->autorename) {
  462. +            IncrementLabelSuffix(&x->name, mDNStrue);
  463. +            mDNS_RenameAndReregisterService(m, &x->s, &x->name);
  464. +        }
  465.          else if (x->callback)
  466.              x->callback((DNSServiceRef)x, 0, result, namestr, typestr, domstr, x->context);
  467.      }
  468. @@ -253,7 +268,7 @@ DNSServiceErrorType DNSServiceRegister
  469.      x->callback  = callback;
  470.      x->context   = context;
  471.      x->autoname = (!name[0]);
  472. -    x->autorename = mDNSfalse;
  473. +    x->autorename = !(flags & kDNSServiceFlagsNoAutoRename);
  474.      x->name = n;
  475.      x->host = h;
  476.  
  477. @@ -674,7 +689,7 @@ DNSServiceErrorType DNSServiceQueryRecord
  478.      x->q.ExpectUnique        = mDNSfalse;
  479.      x->q.ForceMCast          = (flags & kDNSServiceFlagsForceMulticast) != 0;
  480.      x->q.ReturnIntermed      = (flags & kDNSServiceFlagsReturnIntermediates) != 0;
  481. -    x->q.SuppressUnsable     = (flags & kDNSServiceFlagsSuppressUnusable) != 0;
  482. +    x->q.SuppressUnusable    = (flags & kDNSServiceFlagsSuppressUnusable) != 0;
  483.      x->q.SearchListIndex     = 0;
  484.      x->q.AppendSearchDomains = 0;
  485.      x->q.RetryWithSearchDomains = mDNSfalse;
  486. diff --git a/mDNSShared/dnssd_clientstub.c b/mDNSShared/dnssd_clientstub.c
  487. index e8600cb..faa0b10 100644
  488. --- a/mDNSShared/dnssd_clientstub.c
  489. +++ b/mDNSShared/dnssd_clientstub.c
  490. @@ -80,7 +80,12 @@ static void syslog( int priority, const char * message, ...)
  491.  }
  492.  #else
  493.  
  494. +#ifndef __ANDROID__
  495.      #include <sys/fcntl.h>      // For O_RDWR etc.
  496. +#else
  497. +    #include <fcntl.h>
  498. +    #define LOG_TAG "libmdns"
  499. +#endif  // !__ANDROID__
  500.      #include <sys/time.h>
  501.      #include <sys/socket.h>
  502.      #include <syslog.h>
  503. @@ -936,6 +941,9 @@ static void CallbackWithError(DNSServiceRef sdRef, DNSServiceErrorType error)
  504.          case enumeration_request:
  505.              if (sdr->AppCallback) ((DNSServiceDomainEnumReply) sdr->AppCallback)(sdr, 0, 0, error, NULL,                   sdr->AppContext);
  506.              break;
  507. +        case sethost_request:
  508. +            if (sdr->AppCallback) ((DNSServiceSetHostReply)    sdr->AppCallback)(sdr, 0,    error, NULL,                   sdr->AppContext);
  509. +            break;
  510.          case connection_request:
  511.          case connection_delegate_request:
  512.              // This means Register Record, walk the list of DNSRecords to do the callback
  513. @@ -1584,6 +1592,56 @@ DNSServiceErrorType DNSSD_API DNSServiceBrowse
  514.      return err;
  515.  }
  516.  
  517. +static void handle_hostname_changed_response(
  518. +    DNSServiceOp         *const sdr,
  519. +    const CallbackHeader *const cbh,
  520. +    const char           *data,
  521. +    const char           *const end)
  522. +{
  523. +    char replyHostname[256];
  524. +    get_string(&data, end, replyHostname, sizeof(replyHostname));
  525. +    if (!data) syslog(LOG_WARNING,
  526. +        "dnssd_clientstub handle_hostname_changed_response: error reading result from daemon");
  527. +    else ((DNSHostnameChangedReply)sdr->AppCallback)(
  528. +        sdr, cbh->cb_flags, cbh->cb_err, replyHostname, sdr->AppContext);
  529. +}
  530. +
  531. +DNSServiceErrorType DNSSD_API DNSSetHostname
  532. +(
  533. +    DNSServiceRef           *sdRef,
  534. +    DNSServiceFlags         flags,
  535. +    const char              *hostname,
  536. +    DNSHostnameChangedReply callBack,
  537. +    void                    *context
  538. +)
  539. +{
  540. +    char *ptr;
  541. +    size_t len;
  542. +    ipc_msg_hdr *hdr;
  543. +    DNSServiceErrorType err = ConnectToServer(sdRef, flags, sethost_request,
  544. +        handle_hostname_changed_response, callBack, context);
  545. +    if (err) return err;
  546. +    len = sizeof(flags);
  547. +    len += strlen(hostname) + 1;
  548. +    hdr = create_hdr(sethost_request, &len, &ptr,
  549. +        (*sdRef)->primary ? 1 : 0, *sdRef);
  550. +    if (!hdr)
  551. +    {
  552. +        DNSServiceRefDeallocate(*sdRef);
  553. +        *sdRef = NULL;
  554. +        return kDNSServiceErr_NoMemory;
  555. +    }
  556. +    put_flags(flags, &ptr);
  557. +    put_string(hostname, &ptr);
  558. +    err = deliver_request(hdr, *sdRef);
  559. +    if (err)
  560. +    {
  561. +        DNSServiceRefDeallocate(*sdRef);
  562. +        *sdRef = NULL;
  563. +    }
  564. +    return err;
  565. +}
  566. +
  567.  DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain)
  568.  {
  569.      DNSServiceErrorType err;
  570. diff --git a/mDNSShared/dnssd_ipc.h b/mDNSShared/dnssd_ipc.h
  571. index 96466a9..50015f9 100644
  572. --- a/mDNSShared/dnssd_ipc.h
  573. +++ b/mDNSShared/dnssd_ipc.h
  574. @@ -52,12 +52,17 @@ extern char *win32_strerror(int inErrorCode);
  575.  #else
  576.  #   include <sys/types.h>
  577.  #   include <unistd.h>
  578. +#ifdef __ANDROID__
  579. +#  include <sys/socket.h>
  580. +#endif  // __ANDROID__
  581.  #   include <sys/un.h>
  582.  #   include <string.h>
  583.  #   include <stdio.h>
  584.  #   include <stdlib.h>
  585.  #   include <sys/stat.h>
  586. +#ifndef __ANDROID__
  587.  #   include <sys/socket.h>
  588. +#endif
  589.  #   include <netinet/in.h>
  590.  #   include <arpa/inet.h>
  591.  #   define dnssd_InvalidSocket  -1
  592. @@ -137,6 +142,7 @@ typedef enum
  593.      getpid_request,
  594.      release_request,
  595.      connection_delegate_request,
  596. +    sethost_request,
  597.  
  598.      cancel_request = 63
  599.  } request_op_t;
  600. @@ -151,7 +157,8 @@ typedef enum
  601.      reg_record_reply_op,    // Up to here is in Tiger and B4W 1.0.3
  602.      getproperty_reply_op,   // New in B4W 1.0.4
  603.      port_mapping_reply_op,  // New in Leopard and B4W 2.0
  604. -    addrinfo_reply_op
  605. +    addrinfo_reply_op,
  606. +    sethost_reply,
  607.  } reply_op_t;
  608.  
  609.  #if defined(_WIN64)
  610. diff --git a/mDNSShared/mDNSDebug.c b/mDNSShared/mDNSDebug.c
  611. index dfe77a1..665dbef 100644
  612. --- a/mDNSShared/mDNSDebug.c
  613. +++ b/mDNSShared/mDNSDebug.c
  614. @@ -35,7 +35,7 @@ mDNSexport int mDNS_PacketLoggingEnabled = 0;
  615.  mDNSexport int mDNS_McastLoggingEnabled  = 0;
  616.  mDNSexport int mDNS_McastTracingEnabled  = 0;
  617.  
  618. -#if MDNS_DEBUGMSGS
  619. +#if MDNS_DEBUGMSGS && !defined(__ANDROID__)
  620.  mDNSexport int mDNS_DebugMode = mDNStrue;
  621.  #else
  622.  mDNSexport int mDNS_DebugMode = mDNSfalse;
  623. diff --git a/mDNSShared/uds_daemon.c b/mDNSShared/uds_daemon.c
  624. index d1fbc7f..72da095 100644
  625. --- a/mDNSShared/uds_daemon.c
  626. +++ b/mDNSShared/uds_daemon.c
  627. @@ -36,6 +36,10 @@
  628.  #include "uds_daemon.h"
  629.  #include "dns_sd_internal.h"
  630.  
  631. +#ifdef __ANDROID__
  632. +#include "cutils/sockets.h"
  633. +#endif
  634. +
  635.  // Normally we append search domains only for queries with a single label that are not
  636.  // fully qualified. This can be overridden to apply search domains for queries (that are
  637.  // not fully qualified) with any number of labels e.g., moon, moon.cs, moon.cs.be, etc.
  638. @@ -2506,6 +2510,29 @@ mDNSlocal void AutomaticBrowseDomainChange(mDNS *const m, DNSQuestion *q, const
  639.      else RmvAutoBrowseDomain(0, &answer->rdata->u.name);
  640.  }
  641.  
  642. +mDNSlocal mStatus handle_sethost_request(request_state *request)
  643. +{
  644. +    get_flags(&request->msgptr, request->msgend);
  645. +    char hostName[MAX_DOMAIN_LABEL];
  646. +    int len = 0;
  647. +    if (get_string(&request->msgptr, request->msgend, hostName,
  648. +        MAX_DOMAIN_LABEL) < 0) return (mStatus_BadParamErr);
  649. +    LogOperation("%3d: DNSSetHostname(%X, %d, nonstr ) START",
  650. +        request->sd, request->flags);
  651. +    // if we start using this as a callback for notification when the
  652. +    // hostname changes we may need to cleanup from it
  653. +    //  request->terminate = sethost_termination_callback;
  654. +    if(hostName[0] == 0) return mStatus_BadParamErr;
  655. +        while (len < MAX_DOMAIN_LABEL && hostName[len+1]
  656. +            && hostName[len+1] != '.') len++;
  657. +    strncpy(&(mDNSStorage.nicelabel.c[1]), hostName, len);
  658. +    mDNSStorage.nicelabel.c[0] = len;
  659. +    strncpy(&(mDNSStorage.hostlabel.c[1]), hostName, len);
  660. +    mDNSStorage.hostlabel.c[0] = len;
  661. +    mDNS_SetFQDN(&mDNSStorage);
  662. +    return mStatus_NoError;
  663. +}
  664. +
  665.  mDNSlocal mStatus handle_browse_request(request_state *request)
  666.  {
  667.      char regtype[MAX_ESCAPED_DOMAIN_NAME], domain[MAX_ESCAPED_DOMAIN_NAME];
  668. @@ -4823,6 +4850,7 @@ mDNSlocal mStatus handle_client_request(request_state *req)
  669.          case remove_record_request:        err = handle_removerecord_request(req);  break;
  670.          case cancel_request:                     handle_cancel_request      (req);  break;
  671.          case release_request:              err = handle_release_request     (req);  break;
  672. +        case sethost_request:              err = handle_sethost_request     (req);  break;
  673.          default: LogMsg("request_callback: %3d:ERROR: Unsupported UDS req:%d PID[%d][%s]",
  674.                          req->sd, req->hdr.op, req->process_id, req->pid_name);
  675.              err = mStatus_BadParamErr;
  676. @@ -4885,6 +4913,7 @@ mDNSlocal void request_callback(int fd, short filter, void *info)
  677.              case send_bpf:                 // Same as cancel_request below
  678.              case cancel_request:           min_size = 0;                                                                           break;
  679.              case release_request:          min_size += sizeof(mDNSu32) + 3 /* type, type, domain */;                               break;
  680. +            case sethost_request:          min_size = sizeof(mDNSu32) + 1 /* hostname */;                                          break;
  681.              default: LogMsg("request_callback: ERROR: validate_message - unsupported req type: %d PID[%d][%s]",
  682.                              req->hdr.op, req->process_id, req->pid_name);
  683.                       min_size = -1;                                                                                                break;
  684. diff --git a/mDNSShared/uds_daemon.h b/mDNSShared/uds_daemon.h
  685. index dc7d9ac..c60604b 100644
  686. --- a/mDNSShared/uds_daemon.h
  687. +++ b/mDNSShared/uds_daemon.h
  688. @@ -78,9 +78,14 @@ typedef struct browser_t
  689.  } browser_t;
  690.  
  691.  #ifdef _WIN32
  692. +#ifdef __MINGW32__
  693. +typedef int pid_t;
  694. +typedef int socklen_t;
  695. +#else
  696.  typedef unsigned int pid_t;
  697.  typedef unsigned int socklen_t;
  698.  #endif
  699. +#endif
  700.  
  701.  #if (!defined(MAXCOMLEN))
  702.  #define MAXCOMLEN 16
  703. diff --git a/mDNSWindows/Poll.c b/mDNSWindows/Poll.c
  704. old mode 100755
  705. new mode 100644
  706. index 9adc632..e8b08da
  707. --- a/mDNSWindows/Poll.c
  708. +++ b/mDNSWindows/Poll.c
  709. @@ -113,7 +113,7 @@ ShiftDown( void * arr, size_t arraySize, size_t itemSize, int index )
  710.  
  711.  #define    DEBUG_NAME  "[mDNSWin32] "
  712.  #define gMDNSRecord mDNSStorage
  713. -mDNSlocal Poll gPoll = { mDNSfalse, NULL };
  714. +mDNSlocal Poll gPoll = {};
  715.  
  716.  #define LogErr( err, FUNC ) LogMsg( "%s:%d - %s failed: %d\n", __FUNCTION__, __LINE__, FUNC, err );
  717.  
  718. diff --git a/mDNSWindows/SystemService/Service.c b/mDNSWindows/SystemService/Service.c
  719. index 1dea5c7..e6c889a 100644
  720. --- a/mDNSWindows/SystemService/Service.c
  721. +++ b/mDNSWindows/SystemService/Service.c
  722. @@ -29,7 +29,7 @@
  723.  #include   "uds_daemon.h"
  724.  #include   "GenLinkedList.h"
  725.  #include   "Service.h"
  726. -#include   "EventLog.h"
  727. +#include   "mDNSWindows/SystemService/EventLog.h"
  728.  
  729.  #include   "Resource.h"
  730.  
  731. @@ -2048,7 +2048,7 @@ udsSupportAddFDToEventLoop( SocketRef fd, udsEventCallback callback, void *conte
  732.         mDNSPlatformMemZero( sock, sizeof( TCPSocket ) );
  733.  
  734.         sock->fd                = (SOCKET) fd;
  735. -       sock->userCallback      = callback;
  736. +       sock->userCallback      = (void*) callback;
  737.         sock->userContext       = context;
  738.         sock->m                 = &gMDNSRecord;
  739.  
  740. @@ -2127,9 +2127,8 @@ udsSupportRemoveFDFromEventLoop( SocketRef fd, void *platform_data)       // Note: Th
  741.  }
  742.  
  743.  
  744. -mDNSexport void RecordUpdatedNiceLabel(mDNS *const m, mDNSs32 delay)
  745. +mDNSexport void RecordUpdatedNiceLabel(mDNSs32 delay)
  746.     {
  747. -   (void)m;
  748.     (void)delay;
  749.     // No-op, for now
  750.     }
  751. diff --git a/mDNSWindows/mDNSWin32.c b/mDNSWindows/mDNSWin32.c
  752. old mode 100755
  753. new mode 100644
  754. index fa07af0..7904baf
  755. --- a/mDNSWindows/mDNSWin32.c
  756. +++ b/mDNSWindows/mDNSWin32.c
  757. @@ -972,12 +972,14 @@ mDNSexport mDNSu32    mDNSPlatformInterfaceIndexfromInterfaceID( mDNS * const inMDN
  758.  TCPSocket *
  759.  mDNSPlatformTCPSocket
  760.     (
  761. -   mDNS            * const m,
  762.     TCPSocketFlags      flags,
  763.     mDNSIPPort          *   port,
  764.     mDNSBool            useBackgroundTrafficClass
  765.     )
  766.  {
  767. +#if 1
  768. +   return NULL;
  769. +#else
  770.     TCPSocket *     sock    = NULL;
  771.     u_long              on      = 1;  // "on" for setsockopt
  772.     struct sockaddr_in  saddr;
  773. @@ -1042,6 +1044,7 @@ exit:
  774.     }
  775.  
  776.     return sock;
  777. +#endif
  778.  }
  779.  
  780.  //===========================================================================================================================
  781. @@ -1074,7 +1077,7 @@ mDNSPlatformTCPConnect
  782.  
  783.     // Setup connection data object
  784.  
  785. -   sock->userCallback  = inCallback;
  786. +   sock->userCallback  = (void*) inCallback;
  787.     sock->userContext   = inContext;
  788.  
  789.     mDNSPlatformMemZero(&saddr, sizeof(saddr));
  790. @@ -1269,8 +1272,11 @@ exit:
  791.  // mDNSPlatformUDPSocket
  792.  //===========================================================================================================================
  793.  
  794. -mDNSexport UDPSocket* mDNSPlatformUDPSocket(mDNS *const m, const mDNSIPPort requestedport)
  795. +mDNSexport UDPSocket* mDNSPlatformUDPSocket(const mDNSIPPort requestedport)
  796.  {
  797. +#if 1
  798. +   return NULL;
  799. +#else
  800.     UDPSocket*  sock    = NULL;
  801.     mDNSIPPort  port    = requestedport;
  802.     mStatus     err     = mStatus_NoError;
  803. @@ -1340,6 +1346,7 @@ exit:
  804.     }
  805.  
  806.     return sock;
  807. +#endif
  808.  }
  809.    
  810.  //===========================================================================================================================
  811. @@ -1464,15 +1471,13 @@ exit:
  812.     return( err );
  813.  }
  814.  
  815. -mDNSexport void mDNSPlatformUpdateProxyList(mDNS *const m, const mDNSInterfaceID InterfaceID)
  816. +mDNSexport void mDNSPlatformUpdateProxyList(const mDNSInterfaceID InterfaceID)
  817.     {
  818. -   DEBUG_UNUSED( m );
  819.     DEBUG_UNUSED( InterfaceID );
  820.     }
  821.  
  822. -mDNSexport void mDNSPlatformSetAllowSleep(mDNS *const m, mDNSBool allowSleep, const char *reason)
  823. +mDNSexport void mDNSPlatformSetAllowSleep(mDNSBool allowSleep, const char *reason)
  824.     {
  825. -   DEBUG_UNUSED( m );
  826.     DEBUG_UNUSED( allowSleep );
  827.     DEBUG_UNUSED( reason );
  828.     }
  829. @@ -1481,8 +1486,9 @@ mDNSexport void mDNSPlatformSetAllowSleep(mDNS *const m, mDNSBool allowSleep, co
  830.  // mDNSPlatformSendRawPacket
  831.  //===========================================================================================================================
  832.  
  833. -mDNSexport void mDNSPlatformSendWakeupPacket(mDNS *const m, mDNSInterfaceID InterfaceID, char *ethaddr, char *ipaddr, int iteration)
  834. +mDNSexport void mDNSPlatformSendWakeupPacket(mDNSInterfaceID InterfaceID, char *ethaddr, char *ipaddr, int iteration)
  835.  {
  836. +#if 0
  837.     unsigned char           mac[ 6 ];
  838.     unsigned char           buf[ 102 ];
  839.     char                    hex[ 3 ] = { 0 };
  840. @@ -1534,6 +1540,7 @@ mDNSexport void mDNSPlatformSendWakeupPacket(mDNS *const m, mDNSInterfaceID Inte
  841.  exit:
  842.  
  843.     return;
  844. +#endif
  845.  }
  846.  
  847.  mDNSexport mDNSBool mDNSPlatformValidRecordForInterface(const AuthRecord *rr, mDNSInterfaceID InterfaceID)
  848. @@ -1566,9 +1573,8 @@ mDNSexport void mDNSPlatformFormatTime(unsigned long te, mDNSu8 *buf, int bufsiz
  849.     if (bufsize) buf[0] = 0;
  850.     }
  851.  
  852. -mDNSexport void mDNSPlatformSetLocalAddressCacheEntry(mDNS *const m, const mDNSAddr *const tpa, const mDNSEthAddr *const tha, mDNSInterfaceID InterfaceID)
  853. +mDNSexport void mDNSPlatformSetLocalAddressCacheEntry(const mDNSAddr *const tpa, const mDNSEthAddr *const tha, mDNSInterfaceID InterfaceID)
  854.     {
  855. -   DEBUG_UNUSED( m );
  856.     DEBUG_UNUSED( tpa );
  857.     DEBUG_UNUSED( tha );
  858.     DEBUG_UNUSED( InterfaceID );
  859. @@ -1650,11 +1656,13 @@ mDNSPlatformTLSTearDownCerts(void)
  860.  mDNSlocal void SetDNSServers( mDNS *const m );
  861.  mDNSlocal void SetSearchDomainList( void );
  862.  
  863. -mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNS *const m, mDNSBool setservers, mDNSBool setsearch, domainname *const fqdn, DNameListElem **regDomains, DNameListElem **browseDomains, mDNSBool ackConfig)
  864. +mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNSBool setservers, mDNSBool setsearch, domainname *const fqdn, DNameListElem **regDomains, DNameListElem **browseDomains, mDNSBool ackConfig)
  865.  {
  866.     (void) ackConfig;
  867.  
  868. +#if 0
  869.     if (setservers) SetDNSServers(m);
  870. +#endif
  871.     if (setsearch) SetSearchDomainList();
  872.    
  873.     if ( fqdn )
  874. @@ -1974,9 +1982,7 @@ SetDomainFromDHCP( void )
  875.  
  876.     for ( pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next )
  877.     {
  878. -       if ( pAdapter->IpAddressList.IpAddress.String &&
  879. -            pAdapter->IpAddressList.IpAddress.String[0] &&
  880. -            pAdapter->GatewayList.IpAddress.String &&
  881. +       if ( pAdapter->IpAddressList.IpAddress.String[0] &&
  882.              pAdapter->GatewayList.IpAddress.String[0] &&
  883.              ( !index || ( pAdapter->Index == index ) ) )
  884.         {
  885. @@ -2033,8 +2039,11 @@ exit:
  886.  //===========================================================================================================================
  887.  
  888.  mDNSexport mStatus
  889. -mDNSPlatformGetPrimaryInterface( mDNS * const m, mDNSAddr * v4, mDNSAddr * v6, mDNSAddr * router )
  890. +mDNSPlatformGetPrimaryInterface( mDNSAddr * v4, mDNSAddr * v6, mDNSAddr * router )
  891.  {
  892. +#if 1
  893. +   return mStatus_UnknownErr;
  894. +#else
  895.     IP_ADAPTER_INFO *   pAdapterInfo;
  896.     IP_ADAPTER_INFO *   pAdapter;
  897.     DWORD               bufLen;
  898. @@ -2098,6 +2107,7 @@ exit:
  899.     }
  900.  
  901.     return err;
  902. +#endif
  903.  }
  904.  
  905.  mDNSexport void mDNSPlatformSendKeepalive(mDNSAddr *sadd, mDNSAddr *dadd, mDNSIPPort *lport, mDNSIPPort *rport, mDNSu32 seq, mDNSu32 ack, mDNSu16 win)
  906. @@ -2111,9 +2121,8 @@ mDNSexport void mDNSPlatformSendKeepalive(mDNSAddr *sadd, mDNSAddr *dadd, mDNSIP
  907.     (void) win;     // Unused
  908.  }
  909.  
  910. -mDNSexport mStatus mDNSPlatformGetRemoteMacAddr(mDNS *const m, mDNSAddr *raddr)
  911. +mDNSexport mStatus mDNSPlatformGetRemoteMacAddr(mDNSAddr *raddr)
  912.  {
  913. -   (void) m;       // Unused
  914.     (void) raddr;   // Unused
  915.  
  916.     return mStatus_UnsupportedErr;
  917. @@ -2140,9 +2149,8 @@ mDNSexport mStatus mDNSPlatformStoreOwnerOptRecord(char *ifname, DNSMessage *msg
  918.     return mStatus_UnsupportedErr;
  919.  }
  920.  
  921. -mDNSexport mStatus mDNSPlatformRetrieveTCPInfo(mDNS *const m, mDNSAddr *laddr, mDNSIPPort *lport, mDNSAddr *raddr, mDNSIPPort *rport, mDNSTCPInfo *mti)
  922. +mDNSexport mStatus mDNSPlatformRetrieveTCPInfo(mDNSAddr *laddr, mDNSIPPort *lport, mDNSAddr *raddr, mDNSIPPort *rport, mDNSTCPInfo *mti)
  923.  {
  924. -   (void) m;       // Unused
  925.     (void) laddr;   // Unused
  926.     (void) raddr;   // Unused
  927.     (void) lport;   // Unused
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement