1/* PR debug/59350 */
2/* Testcase by Ryan Mansfield <rmansfield@qnx.com> */
3
4/* { dg-do compile } */
5/* { dg-options "-O -g" } */
6
7typedef union
8{
9  char b[2];
10  short NotAnInteger;
11}
12mDNSOpaque16;
13typedef mDNSOpaque16 mDNSIPPort;
14typedef struct
15{
16}
17mDNSAddr;
18typedef struct DNSQuestion_struct DNSQuestion;
19typedef struct mDNS_struct mDNS;
20typedef struct __attribute__ ((__packed__))
21{
22  mDNSOpaque16 id;
23  mDNSOpaque16 flags;
24}
25
26DNSMessageHeader;
27typedef struct __attribute__ ((__packed__))
28{
29  DNSMessageHeader h;
30}
31
32DNSMessage;
33struct DNSQuestion_struct
34{
35  DNSQuestion *next;
36  long LastQTime;
37  mDNSOpaque16 TargetQID;
38};
39struct mDNS_struct
40{
41  long timenow;
42  DNSQuestion *Questions;
43};
44extern long mDNSPlatformOneSecond;
45typedef enum
46{
47  kDNSFlag0_QR_Mask = 0x80, kDNSFlag0_QR_Query = 0x00, kDNSFlag0_QR_Response =
48    0x80, kDNSFlag0_OP_Mask = 0x78, kDNSFlag0_OP_StdQuery =
49    0x00, kDNSFlag0_OP_Iquery = 0x08, kDNSFlag0_OP_Status =
50    0x10, kDNSFlag0_OP_Unused3 = 0x18, kDNSFlag0_OP_Notify =
51    0x20, kDNSFlag0_OP_Update = 0x28, kDNSFlag0_QROP_Mask =
52    kDNSFlag0_QR_Mask | kDNSFlag0_OP_Mask, kDNSFlag0_AA = 0x04, kDNSFlag0_TC =
53    0x02, kDNSFlag0_RD = 0x01, kDNSFlag1_RA = 0x80, kDNSFlag1_Zero =
54    0x40, kDNSFlag1_AD = 0x20, kDNSFlag1_CD = 0x10, kDNSFlag1_RC_Mask =
55    0x0F, kDNSFlag1_RC_NoErr = 0x00, kDNSFlag1_RC_FormErr =
56    0x01, kDNSFlag1_RC_ServFail = 0x02, kDNSFlag1_RC_NXDomain =
57    0x03, kDNSFlag1_RC_NotImpl = 0x04, kDNSFlag1_RC_Refused =
58    0x05, kDNSFlag1_RC_YXDomain = 0x06, kDNSFlag1_RC_YXRRSet =
59    0x07, kDNSFlag1_RC_NXRRSet = 0x08, kDNSFlag1_RC_NotAuth =
60    0x09, kDNSFlag1_RC_NotZone = 0x0A
61}
62TSIG_ErrorCode;
63int uDNS_ReceiveTestQuestionResponse (mDNS * const, DNSMessage * const,
64				      const char * const,
65				      const mDNSAddr * const,
66				      const mDNSIPPort);
67void
68uDNS_ReceiveMsg (mDNS * const m, DNSMessage * const msg,
69		 const char * const end, const mDNSAddr * const srcaddr,
70		 const mDNSIPPort srcport)
71{
72  DNSQuestion *qptr;
73  char StdR = kDNSFlag0_QR_Response | kDNSFlag0_OP_StdQuery;
74  char QR_OP = (char) (msg->h.flags.b[0] & kDNSFlag0_QROP_Mask);
75  if (QR_OP == StdR)
76    {
77     if (uDNS_ReceiveTestQuestionResponse (m, msg, end, srcaddr, srcport))
78	return;
79      for (qptr = m->Questions; qptr; qptr = qptr->next)
80	if (msg->h.flags.b[0] & kDNSFlag0_TC
81	    && ((qptr->TargetQID).NotAnInteger == (msg->h.id).NotAnInteger)
82	    && m->timenow - qptr->LastQTime < (60 * mDNSPlatformOneSecond))
83	  {
84	  }
85    }
86}
87