/* dnssd_sock_t, ipc_msg_hdr and request_op_t are from dnssd_ipc.h */
-# define dnssd_InvalidSocket -1
-# define dnssd_SocketValid(s) ((s) >= 0)
+#define dnssd_InvalidSocket -1
+#define dnssd_SocketValid(s) ((s) >= 0)
typedef int dnssd_sock_t;
typedef struct
{
- uint32_t op; // request_op_t or reply_op_t
+ uint32_t op; // request_op_t or reply_op_t
} ipc_msg_hdr;
typedef enum
{
- request_op_none = 0, // No request yet received on this connection
- connection_request = 1, // connected socket via DNSServiceConnect()
- reg_record_request, // reg/remove record only valid for connected sockets
- remove_record_request,
- enumeration_request,
- reg_service_request,
- browse_request,
- resolve_request,
- query_request,
- reconfirm_record_request,
- add_record_request,
- update_record_request,
- setdomain_request, // Up to here is in Tiger and B4W 1.0.3
- getproperty_request, // New in B4W 1.0.4
- port_mapping_request, // New in Leopard and B4W 2.0
- addrinfo_request,
- send_bpf, // New in SL
- getpid_request,
- release_request,
- connection_delegate_request,
-
- cancel_request = 63
+ request_op_none = 0, // No request yet received on this connection
+ connection_request = 1, // connected socket via DNSServiceConnect()
+ reg_record_request, // reg/remove record only valid for connected sockets
+ remove_record_request,
+ enumeration_request,
+ reg_service_request,
+ browse_request,
+ resolve_request,
+ query_request,
+ reconfirm_record_request,
+ add_record_request,
+ update_record_request,
+ setdomain_request, // Up to here is in Tiger and B4W 1.0.3
+ getproperty_request, // New in B4W 1.0.4
+ port_mapping_request, // New in Leopard and B4W 2.0
+ addrinfo_request,
+ send_bpf, // New in SL
+ getpid_request,
+ release_request,
+ connection_delegate_request,
+
+ cancel_request = 63
} request_op_t;
typedef struct _DNSServiceRef_t DNSServiceOp;
typedef struct
{
- ipc_msg_hdr ipc_hdr;
- DNSServiceFlags cb_flags;
- uint32_t cb_interface;
- DNSServiceErrorType cb_err;
+ ipc_msg_hdr ipc_hdr;
+ DNSServiceFlags cb_flags;
+ uint32_t cb_interface;
+ DNSServiceErrorType cb_err;
} CallbackHeader;
// client stub callback to process message from server and deliver results to client application
/* The virtual #_DNSServiceRef_t structure for unittest */
struct _DNSServiceRef_t
{
- dnssd_sock_t sockfd; // Connected socket between client and daemon
- dnssd_sock_t validator; // Used to detect memory corruption, double disposals, etc.
- uint32_t op; // request_op_t or reply_op_t
- ProcessReplyFn ProcessReply; // Function pointer to the code to handle received messages
- void *AppCallback; // Client callback function and context
- void *AppContext;
- DNSRecord *rec;
+ dnssd_sock_t sockfd; // Connected socket between client and daemon
+ dnssd_sock_t validator; // Used to detect memory corruption, double disposals, etc.
+ uint32_t op; // request_op_t or reply_op_t
+ ProcessReplyFn ProcessReply; // Function pointer to the code to handle received messages
+ void *AppCallback; // Client callback function and context
+ void *AppContext;
+ DNSRecord *rec;
};
/* The virtual #_DNSRecordRef_t structure for unittest */
struct _DNSRecordRef_t
{
- DNSRecord *recnext;
+ DNSRecord *recnext;
DNSServiceOp *sdr;
};
static ipc_msg_hdr *create_hdr(uint32_t op, size_t *len, char **data_start, int SeparateReturnSocket, DNSServiceOp *ref)
{
- char *msg = NULL;
- ipc_msg_hdr *hdr;
+ char *msg = NULL;
+ ipc_msg_hdr *hdr;
- *len += sizeof(ipc_msg_hdr);
+ *len += sizeof(ipc_msg_hdr);
- // Write message to buffer
- msg = malloc(*len);
+ // Write message to buffer
+ msg = malloc(*len);
- memset(msg, 0, *len);
- hdr = (ipc_msg_hdr *)msg;
- hdr->op = op;
- *data_start = msg + sizeof(ipc_msg_hdr);
+ memset(msg, 0, *len);
+ hdr = (ipc_msg_hdr *)msg;
+ hdr->op = op;
+ *data_start = msg + sizeof(ipc_msg_hdr);
- return hdr;
+ return hdr;
}
static void FreeDNSRecords(DNSServiceOp *sdRef)
{
- DNSRecord *rec = sdRef->rec;
- while (rec)
- {
- DNSRecord *next = rec->recnext;
- free(rec);
- rec = next;
- }
+ DNSRecord *rec = sdRef->rec;
+ while (rec)
+ {
+ DNSRecord *next = rec->recnext;
+ free(rec);
+ rec = next;
+ }
}
static void FreeDNSServiceOp(DNSServiceOp *x)
{
- // We don't use our DNSServiceRefValid macro here because if we're cleaning up after a socket() call failed
- // then sockfd could legitimately contain a failing value (e.g. dnssd_InvalidSocket)
- x->sockfd = dnssd_InvalidSocket;
- x->validator = 0xDDDDDDDD;
- x->op = request_op_none;
- x->AppCallback = NULL;
- FreeDNSRecords(x);
+ // We don't use our DNSServiceRefValid macro here because if we're cleaning up after a socket() call failed
+ // then sockfd could legitimately contain a failing value (e.g. dnssd_InvalidSocket)
+ x->sockfd = dnssd_InvalidSocket;
+ x->validator = 0xDDDDDDDD;
+ x->op = request_op_none;
+ x->AppCallback = NULL;
+ FreeDNSRecords(x);
free(x);
}
// Return a connected service ref (deallocate with DNSServiceRefDeallocate)
static DNSServiceErrorType ConnectToServer(DNSServiceRef *ref, DNSServiceFlags flags, uint32_t op, ProcessReplyFn ProcessReply, void *AppCallback, void *AppContext)
{
- DNSServiceOp *sdr;
+ DNSServiceOp *sdr;
- if (!ref)
- return kDNSServiceErr_BadParam;
+ if (!ref)
+ return kDNSServiceErr_BadParam;
- sdr = malloc(sizeof(DNSServiceOp));
- sdr->sockfd = dnssd_InvalidSocket;
- sdr->validator = sdr->sockfd ^ ValidatorBits;
- sdr->op = op;
- sdr->AppCallback = AppCallback;
- sdr->AppContext = AppContext;
- sdr->rec = NULL;
+ sdr = malloc(sizeof(DNSServiceOp));
+ sdr->sockfd = dnssd_InvalidSocket;
+ sdr->validator = sdr->sockfd ^ ValidatorBits;
+ sdr->op = op;
+ sdr->AppCallback = AppCallback;
+ sdr->AppContext = AppContext;
+ sdr->rec = NULL;
*ref = NULL;
sdr->sockfd = MOCK_DNSSD_SOCK_FD;
sdr->validator = sdr->sockfd ^ ValidatorBits;
- *ref = sdr;
- return kDNSServiceErr_NoError;
+ *ref = sdr;
+ return kDNSServiceErr_NoError;
}
#define TIZEN_DNSSD_MOCK_SERVICE "TizenDnssdMock"
static DNSServiceErrorType deliver_request(ipc_msg_hdr *hdr, DNSServiceOp *sdr)
{
if (!DNSServiceRefValid(sdr))
- return kDNSServiceErr_BadReference;
+ return kDNSServiceErr_BadReference;
- free(hdr);
+ if (hdr)
+ free(hdr);
return kDNSServiceErr_NoError;
}
API dnssd_sock_t DNSServiceRefSockFD(DNSServiceRef sdRef)
{
- if (!sdRef)
- return dnssd_InvalidSocket;
+ if (!sdRef)
+ return dnssd_InvalidSocket;
- if (!DNSServiceRefValid(sdRef))
- return dnssd_InvalidSocket;
+ if (!DNSServiceRefValid(sdRef))
+ return dnssd_InvalidSocket;
- return sdRef->sockfd;
+ return sdRef->sockfd;
}
return kDNSServiceErr_BadReference;
/* original flow:
- * Read reply header
- * check header validity
- * read body
- * call sdRef->ProcessReply(sdRef, &cbh, ptr, data + cbh.ipc_hdr.datalen);
- */
+ * Read reply header
+ * check header validity
+ * read body
+ * call sdRef->ProcessReply(sdRef, &cbh, ptr, data + cbh.ipc_hdr.datalen);
+ */
if (sdRef->op == reg_service_request)
__nsd_mock_dnssd_process_result_reg_service_request(sdRef);
else if (sdRef->op == browse_request)
else if (sdRef->op == addrinfo_request)
__nsd_mock_dnssd_process_result_addrinfo_request(sdRef);
- return kDNSServiceErr_NoError;
+ return kDNSServiceErr_NoError;
}
API void DNSServiceRefDeallocate(DNSServiceRef sdRef)
{
if (!sdRef)
- return;
+ return;
if (!DNSServiceRefValid(sdRef))
- return;
+ return;
FreeDNSServiceOp(sdRef);
}
uint32_t ttl
)
{
- ipc_msg_hdr *hdr;
- size_t len = 0;
- char *ptr;
- DNSRecordRef rref;
- DNSRecord **p;
+ ipc_msg_hdr *hdr;
+ size_t len = 0;
+ char *ptr;
+ DNSRecordRef rref;
+ DNSRecord **p;
if (!sdRef || !RecordRef || (!rdata && rdlen))
return kDNSServiceErr_BadParam;
if (!DNSServiceRefValid(sdRef))
return kDNSServiceErr_BadReference;
- *RecordRef = NULL;
+ *RecordRef = NULL;
- hdr = create_hdr(add_record_request, &len, &ptr, 0, sdRef);
+ hdr = create_hdr(add_record_request, &len, &ptr, 0, sdRef);
- rref = malloc(sizeof(DNSRecord));
- rref->sdr = sdRef;
- rref->recnext = NULL;
+ rref = malloc(sizeof(DNSRecord));
+ rref->sdr = sdRef;
+ rref->recnext = NULL;
- *RecordRef = rref;
+ *RecordRef = rref;
- p = &(sdRef)->rec;
- while (*p) p = &(*p)->recnext;
- *p = rref;
+ p = &(sdRef)->rec;
+ while (*p) p = &(*p)->recnext;
+ *p = rref;
return deliver_request(hdr, sdRef);;
}
uint32_t ttl
)
{
- (void)sdRef; // Unused
- (void)RecordRef; // Unused
- (void)flags; // Unused
- (void)rdlen; // Unused
- (void)rdata; // Unused
- (void)ttl; // Unused
- return kDNSServiceErr_NoError;
+ (void)sdRef; // Unused
+ (void)RecordRef; // Unused
+ (void)flags; // Unused
+ (void)rdlen; // Unused
+ (void)rdata; // Unused
+ (void)ttl; // Unused
+ return kDNSServiceErr_NoError;
}
API DNSServiceErrorType DNSServiceRemoveRecord