From b1d0e97c284cf3d44b4f6db4e5d7b9c2ec4e1d43 Mon Sep 17 00:00:00 2001 From: Ken McDonell Date: Tue, 14 Nov 2017 15:13:32 +1100 Subject: [PATCH] libpcp: hide internal details for platform-independent socket services --- qa/src/clienttimeout.c | 1 + qa/src/proc_test.c | 1 + qa/src/xlog.c | 1 + src/include/pcp/impl.h | 80 ------------------------------ src/include/pcp/libpcp.h | 83 ++++++++++++++++++++++++++++++++ src/libpcp_pmda/src/root.c | 1 + src/libpcp_trace/src/pdu.c | 1 + src/libpcp_trace/src/trace.c | 1 + src/libpcp_web/src/http_client.c | 1 + src/pmdas/cisco/cisco.h | 1 + src/pmhostname/pmhostname.c | 1 + src/pmie/src/stomp.c | 1 + src/telnet-probe/telnet-probe.c | 1 + 13 files changed, 94 insertions(+), 80 deletions(-) diff --git a/qa/src/clienttimeout.c b/qa/src/clienttimeout.c index 0af46c7e52..23e5fef50c 100644 --- a/qa/src/clienttimeout.c +++ b/qa/src/clienttimeout.c @@ -6,6 +6,7 @@ #include #include +#include "libpcp.h" int main(int argc, char *argv[]) diff --git a/qa/src/proc_test.c b/qa/src/proc_test.c index e7e23937be..8e5bd5f191 100644 --- a/qa/src/proc_test.c +++ b/qa/src/proc_test.c @@ -58,6 +58,7 @@ #include #include #include +#include "libpcp.h" #ifdef HAVE_PROCFS #ifdef IS_NETBSD diff --git a/qa/src/xlog.c b/qa/src/xlog.c index 4bf81b919f..5a78849082 100644 --- a/qa/src/xlog.c +++ b/qa/src/xlog.c @@ -9,6 +9,7 @@ #include #include #include +#include "libpcp.h" static int vflag; static int numpmid; diff --git a/src/include/pcp/impl.h b/src/include/pcp/impl.h index 96f6f43aa1..6685ca1ba5 100644 --- a/src/include/pcp/impl.h +++ b/src/include/pcp/impl.h @@ -240,88 +240,8 @@ PCP_CALL extern int __pmGetDomainLabels(int, const char *, pmLabelSet **); PCP_CALL extern void __pmDumpLabelSet(FILE *, const pmLabelSet *); PCP_CALL extern void __pmDumpLabelSets(FILE *, const pmLabelSet *, int); -typedef fd_set __pmFdSet; -typedef struct __pmSockAddr __pmSockAddr; -typedef struct __pmHostEnt __pmHostEnt; - -PCP_CALL extern int __pmCreateSocket(void); -PCP_CALL extern int __pmCreateIPv6Socket(void); -PCP_CALL extern int __pmCreateUnixSocket(void); -PCP_CALL extern void __pmCloseSocket(int); - -PCP_CALL extern int __pmSetSockOpt(int, int, int, const void *, __pmSockLen); -PCP_CALL extern int __pmGetSockOpt(int, int, int, void *, __pmSockLen *); -PCP_CALL extern int __pmConnect(int, void *, __pmSockLen); -PCP_CALL extern int __pmBind(int, void *, __pmSockLen); -PCP_CALL extern int __pmListen(int, int); -PCP_CALL extern int __pmAccept(int, void *, __pmSockLen *); -PCP_CALL extern ssize_t __pmWrite(int, const void *, size_t); -PCP_CALL extern ssize_t __pmRead(int, void *, size_t); -PCP_CALL extern ssize_t __pmSend(int, const void *, size_t, int); -PCP_CALL extern ssize_t __pmRecv(int, void *, size_t, int); -PCP_CALL extern int __pmConnectTo(int, const __pmSockAddr *, int); -PCP_CALL extern int __pmConnectCheckError(int); -PCP_CALL extern int __pmConnectRestoreFlags(int, int); -PCP_CALL extern int __pmSocketClosed(void); -PCP_CALL extern int __pmGetFileStatusFlags(int); -PCP_CALL extern int __pmSetFileStatusFlags(int, int); -PCP_CALL extern int __pmGetFileDescriptorFlags(int); -PCP_CALL extern int __pmSetFileDescriptorFlags(int, int); - -PCP_CALL extern int __pmFD(int); -PCP_CALL extern void __pmFD_CLR(int, __pmFdSet *); -PCP_CALL extern int __pmFD_ISSET(int, __pmFdSet *); -PCP_CALL extern void __pmFD_SET(int, __pmFdSet *); -PCP_CALL extern void __pmFD_ZERO(__pmFdSet *); -PCP_CALL extern void __pmFD_COPY(__pmFdSet *, const __pmFdSet *); -PCP_CALL extern int __pmSelectRead(int, __pmFdSet *, struct timeval *); -PCP_CALL extern int __pmSelectWrite(int, __pmFdSet *, struct timeval *); - -PCP_CALL extern __pmSockAddr *__pmSockAddrAlloc(void); -PCP_CALL extern void __pmSockAddrFree(__pmSockAddr *); -PCP_CALL extern size_t __pmSockAddrSize(void); -PCP_CALL extern void __pmSockAddrInit(__pmSockAddr *, int, int, int); -PCP_CALL extern int __pmSockAddrCompare(const __pmSockAddr *, const __pmSockAddr *); -PCP_CALL extern __pmSockAddr *__pmSockAddrDup(const __pmSockAddr *); -PCP_CALL extern __pmSockAddr *__pmSockAddrMask(__pmSockAddr *, const __pmSockAddr *); -PCP_CALL extern void __pmSockAddrSetFamily(__pmSockAddr *, int); -PCP_CALL extern int __pmSockAddrGetFamily(const __pmSockAddr *); -PCP_CALL extern void __pmSockAddrSetPort(__pmSockAddr *, int); -PCP_CALL extern int __pmSockAddrGetPort(const __pmSockAddr *); -PCP_CALL extern void __pmSockAddrSetScope(__pmSockAddr *, int); -PCP_CALL extern void __pmSockAddrSetPath(__pmSockAddr *, const char *); -PCP_CALL extern int __pmSockAddrIsLoopBack(const __pmSockAddr *); -PCP_CALL extern int __pmSockAddrIsInet(const __pmSockAddr *); -PCP_CALL extern int __pmSockAddrIsIPv6(const __pmSockAddr *); -PCP_CALL extern int __pmSockAddrIsUnix(const __pmSockAddr *); -PCP_CALL extern char * __pmSockAddrToString(const __pmSockAddr *); -PCP_CALL extern __pmSockAddr *__pmStringToSockAddr(const char *); -PCP_CALL extern __pmSockAddr *__pmLoopBackAddress(int); -PCP_CALL extern __pmSockAddr *__pmSockAddrFirstSubnetAddr(const __pmSockAddr *, int); -PCP_CALL extern __pmSockAddr *__pmSockAddrNextSubnetAddr(__pmSockAddr *, int); - -PCP_CALL extern __pmHostEnt * __pmHostEntAlloc(void); -PCP_CALL extern void __pmHostEntFree(__pmHostEnt *); -PCP_CALL extern __pmSockAddr *__pmHostEntGetSockAddr(const __pmHostEnt *, void **); -PCP_CALL extern char * __pmHostEntGetName(__pmHostEnt *); - -PCP_CALL extern __pmHostEnt * __pmGetAddrInfo(const char *); -PCP_CALL extern char * __pmGetNameInfo(__pmSockAddr *); - -/* - * Dump the current context (source details + instance profile), - * for a particular instance domain. - * If indom == PM_INDOM_NULL, then print all instance domains - */ -PCP_CALL extern void __pmDumpContext(FILE *, int, pmInDom); - PCP_CALL extern void __pmIgnoreSignalPIPE(void); -PCP_CALL extern double __pmConnectTimeout(void); -PCP_CALL extern int __pmSetConnectTimeout(double); -PCP_CALL extern double __pmRequestTimeout(void); -PCP_CALL extern int __pmSetRequestTimeout(double); - /* * no mem today, my love has gone away .... */ diff --git a/src/include/pcp/libpcp.h b/src/include/pcp/libpcp.h index f0aeac248c..cf492013b6 100644 --- a/src/include/pcp/libpcp.h +++ b/src/include/pcp/libpcp.h @@ -24,6 +24,13 @@ #ifndef PCP_LIBPCP_H #define PCP_LIBPCP_H +/* + * TODO + * demote names from pm... to __pm... for + * - pmHostSpec + * - pmTimeZone + */ + #ifdef __cplusplus extern "C" { #endif @@ -417,6 +424,69 @@ PCP_CALL extern void __pmOverrideLastFd(int); PCP_CALL extern void __pmPrintIPC(void); PCP_CALL extern void __pmResetIPC(int); +/* platform independent socket services */ +typedef fd_set __pmFdSet; +typedef struct __pmSockAddr __pmSockAddr; +typedef struct __pmHostEnt __pmHostEnt; +PCP_CALL extern int __pmCreateSocket(void); +PCP_CALL extern int __pmCreateIPv6Socket(void); +PCP_CALL extern int __pmCreateUnixSocket(void); +PCP_CALL extern int __pmBind(int, void *, __pmSockLen); +PCP_CALL extern int __pmListen(int, int); +PCP_CALL extern int __pmConnect(int, void *, __pmSockLen); +PCP_CALL extern int __pmAccept(int, void *, __pmSockLen *); +PCP_CALL extern void __pmCloseSocket(int); +PCP_CALL extern int __pmSetSockOpt(int, int, int, const void *, __pmSockLen); +PCP_CALL extern int __pmGetSockOpt(int, int, int, void *, __pmSockLen *); +PCP_CALL extern ssize_t __pmWrite(int, const void *, size_t); +PCP_CALL extern ssize_t __pmRead(int, void *, size_t); +PCP_CALL extern ssize_t __pmSend(int, const void *, size_t, int); +PCP_CALL extern ssize_t __pmRecv(int, void *, size_t, int); +PCP_CALL extern int __pmConnectTo(int, const __pmSockAddr *, int); +PCP_CALL extern int __pmConnectCheckError(int); +PCP_CALL extern int __pmConnectRestoreFlags(int, int); +PCP_CALL extern int __pmSocketClosed(void); +PCP_CALL extern int __pmGetFileStatusFlags(int); +PCP_CALL extern int __pmSetFileStatusFlags(int, int); +PCP_CALL extern int __pmGetFileDescriptorFlags(int); +PCP_CALL extern int __pmSetFileDescriptorFlags(int, int); +PCP_CALL extern int __pmFD(int); +PCP_CALL extern void __pmFD_CLR(int, __pmFdSet *); +PCP_CALL extern int __pmFD_ISSET(int, __pmFdSet *); +PCP_CALL extern void __pmFD_SET(int, __pmFdSet *); +PCP_CALL extern void __pmFD_ZERO(__pmFdSet *); +PCP_CALL extern void __pmFD_COPY(__pmFdSet *, const __pmFdSet *); +PCP_CALL extern int __pmSelectRead(int, __pmFdSet *, struct timeval *); +PCP_CALL extern int __pmSelectWrite(int, __pmFdSet *, struct timeval *); +PCP_CALL extern __pmSockAddr *__pmSockAddrAlloc(void); +PCP_CALL extern void __pmSockAddrFree(__pmSockAddr *); +PCP_CALL extern size_t __pmSockAddrSize(void); +PCP_CALL extern void __pmSockAddrInit(__pmSockAddr *, int, int, int); +PCP_CALL extern int __pmSockAddrCompare(const __pmSockAddr *, const __pmSockAddr *); +PCP_CALL extern __pmSockAddr *__pmSockAddrDup(const __pmSockAddr *); +PCP_CALL extern __pmSockAddr *__pmSockAddrMask(__pmSockAddr *, const __pmSockAddr *); +PCP_CALL extern void __pmSockAddrSetFamily(__pmSockAddr *, int); +PCP_CALL extern int __pmSockAddrGetFamily(const __pmSockAddr *); +PCP_CALL extern void __pmSockAddrSetPort(__pmSockAddr *, int); +PCP_CALL extern int __pmSockAddrGetPort(const __pmSockAddr *); +PCP_CALL extern void __pmSockAddrSetScope(__pmSockAddr *, int); +PCP_CALL extern void __pmSockAddrSetPath(__pmSockAddr *, const char *); +PCP_CALL extern int __pmSockAddrIsLoopBack(const __pmSockAddr *); +PCP_CALL extern int __pmSockAddrIsInet(const __pmSockAddr *); +PCP_CALL extern int __pmSockAddrIsIPv6(const __pmSockAddr *); +PCP_CALL extern int __pmSockAddrIsUnix(const __pmSockAddr *); +PCP_CALL extern char * __pmSockAddrToString(const __pmSockAddr *); +PCP_CALL extern char * __pmGetNameInfo(__pmSockAddr *); +PCP_CALL extern __pmSockAddr *__pmStringToSockAddr(const char *); +PCP_CALL extern __pmSockAddr *__pmLoopBackAddress(int); +PCP_CALL extern __pmSockAddr *__pmSockAddrFirstSubnetAddr(const __pmSockAddr *, int); +PCP_CALL extern __pmSockAddr *__pmSockAddrNextSubnetAddr(__pmSockAddr *, int); +PCP_CALL extern __pmSockAddr *__pmHostEntGetSockAddr(const __pmHostEnt *, void **); +PCP_CALL extern __pmHostEnt * __pmHostEntAlloc(void); +PCP_CALL extern __pmHostEnt * __pmGetAddrInfo(const char *); +PCP_CALL extern void __pmHostEntFree(__pmHostEnt *); +PCP_CALL extern char * __pmHostEntGetName(__pmHostEnt *); + /* Hashed Data Structures for the Processing of Logs and Archives */ typedef struct __pmHashNode { struct __pmHashNode *next; @@ -752,6 +822,13 @@ PCP_CALL extern __pmContext *__pmHandleToPtr(int); /* Like __pmHandleToPtr(pmWhichContext()), but with no locking */ PCP_CALL __pmContext *__pmCurrentContext(void); +/* + * Dump the current context (source details + instance profile), + * for a particular instance domain. + * If indom == PM_INDOM_NULL, then print all instance domains + */ +PCP_CALL extern void __pmDumpContext(FILE *, int, pmInDom); + /* pmFetch helper routines, hooks for derivations and local contexts */ PCP_CALL extern int __pmPrepareFetch(__pmContext *, int, const pmID *, pmID **); PCP_CALL extern int __pmFinishResult(__pmContext *, int, pmResult **); @@ -1178,6 +1255,12 @@ PCP_CALL extern void __pmSecureServerShutdown(void); PCP_CALL extern int __pmSecureServerHandshake(int, int, __pmHashCtl *); PCP_CALL extern int __pmSecureClientHandshake(int, int, const char *, __pmHashCtl *); +/* PDU or connection timeouts */ +PCP_CALL extern double __pmConnectTimeout(void); +PCP_CALL extern int __pmSetConnectTimeout(double); +PCP_CALL extern double __pmRequestTimeout(void); +PCP_CALL extern int __pmSetRequestTimeout(double); + #ifdef __cplusplus } #endif diff --git a/src/libpcp_pmda/src/root.c b/src/libpcp_pmda/src/root.c index 2ab3088f04..ded482cf5a 100644 --- a/src/libpcp_pmda/src/root.c +++ b/src/libpcp_pmda/src/root.c @@ -16,6 +16,7 @@ #include "pmapi.h" #include "impl.h" +#include "libpcp.h" #include "pmda.h" #include "pmdaroot.h" #ifdef HAVE_SCHED_H diff --git a/src/libpcp_trace/src/pdu.c b/src/libpcp_trace/src/pdu.c index ffad633c0c..3b0d88da3b 100644 --- a/src/libpcp_trace/src/pdu.c +++ b/src/libpcp_trace/src/pdu.c @@ -16,6 +16,7 @@ #include #include "pmapi.h" #include "impl.h" +#include "libpcp.h" #include "trace.h" #include "trace_dev.h" diff --git a/src/libpcp_trace/src/trace.c b/src/libpcp_trace/src/trace.c index 793147c793..5e9695541b 100644 --- a/src/libpcp_trace/src/trace.c +++ b/src/libpcp_trace/src/trace.c @@ -18,6 +18,7 @@ #include #include "pmapi.h" #include "impl.h" +#include "libpcp.h" #if defined(HAVE_PTHREAD_H) #include diff --git a/src/libpcp_web/src/http_client.c b/src/libpcp_web/src/http_client.c index 8b5806bcbc..8c2f58bd1c 100644 --- a/src/libpcp_web/src/http_client.c +++ b/src/libpcp_web/src/http_client.c @@ -15,6 +15,7 @@ #include #include "pmapi.h" #include "impl.h" +#include "libpcp.h" #include "pmhttp.h" #include "http_client.h" #include "http_parser.h" diff --git a/src/pmdas/cisco/cisco.h b/src/pmdas/cisco/cisco.h index acf14bc1f6..c5afb6f1ab 100644 --- a/src/pmdas/cisco/cisco.h +++ b/src/pmdas/cisco/cisco.h @@ -24,6 +24,7 @@ #include "pmapi.h" #include "impl.h" +#include "libpcp.h" #include "pmda.h" #include "domain.h" diff --git a/src/pmhostname/pmhostname.c b/src/pmhostname/pmhostname.c index bfe9cf03e4..1f47ccebfc 100644 --- a/src/pmhostname/pmhostname.c +++ b/src/pmhostname/pmhostname.c @@ -15,6 +15,7 @@ #include "pmapi.h" #include "impl.h" +#include "libpcp.h" static pmLongOptions longopts[] = { PMAPI_OPTIONS_HEADER("Options"), diff --git a/src/pmie/src/stomp.c b/src/pmie/src/stomp.c index da5b597fe0..136f079339 100644 --- a/src/pmie/src/stomp.c +++ b/src/pmie/src/stomp.c @@ -15,6 +15,7 @@ #include #include "pmapi.h" #include "impl.h" +#include "libpcp.h" static int stomp_connect(const char *hostname, int port); static void stomp_disconnect(void); diff --git a/src/telnet-probe/telnet-probe.c b/src/telnet-probe/telnet-probe.c index 07d7a99766..655fd41d10 100644 --- a/src/telnet-probe/telnet-probe.c +++ b/src/telnet-probe/telnet-probe.c @@ -13,6 +13,7 @@ #include "pmapi.h" #include "impl.h" +#include "libpcp.h" int main(int argc, char *argv[])