summaryrefslogtreecommitdiffstats
path: root/kppp/opener.h
diff options
context:
space:
mode:
Diffstat (limited to 'kppp/opener.h')
-rw-r--r--kppp/opener.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/kppp/opener.h b/kppp/opener.h
new file mode 100644
index 00000000..812ec9ba
--- /dev/null
+++ b/kppp/opener.h
@@ -0,0 +1,147 @@
+#ifndef _FILEOPENER_H_
+#define _FILEOPENER_H_
+
+#define DEVNULL "/dev/null"
+
+// workaround for bug in glibc on RedHat 5.0 and Debian 2.1
+#if defined(__GLIBC__) && (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0 && defined(__linux__))
+# define MY_SCM_RIGHTS 1
+#else
+# define MY_SCM_RIGHTS SCM_RIGHTS
+#endif
+
+// ### add by bhughes - FreeBSD defines 'BSD' in sys/param.h
+#include <sys/param.h>
+
+#if defined(BSD) || defined(__svr4__)
+# define IOV_BASE_CAST (char *)
+#else
+# define IOV_BASE_CAST (void *)
+#endif
+
+const char *pppdPath();
+
+class Opener {
+
+public:
+ Opener(int);
+ ~Opener();
+
+ enum { OpenDevice = 1,
+ OpenLock, RemoveLock,
+ OpenResolv,
+ OpenSysLog,
+ SetSecret, RemoveSecret,
+ SetHostname,
+ ExecPPPDaemon, KillPPPDaemon,
+ PPPDExitStatus,
+ Stop };
+ enum Auth { PAP = 1, CHAP };
+ enum { MaxPathLen = 30, MaxStrLen = 40, MaxArgs = 100 };
+
+private:
+ enum { Original=0x100, New=0x200, Old=0x400 } Version;
+ void mainLoop();
+ int sendFD(int ttyfd, struct ResponseHeader *response);
+ int sendResponse(struct ResponseHeader *response);
+ const char *deviceByIndex(int idx);
+ bool createAuthFile(Auth method, char *username, char *password);
+ bool removeAuthFile(Auth method);
+ const char* authFile(Auth method, int version = Original);
+ bool execpppd(const char *arguments);
+ bool killpppd()const;
+ void parseargs(char* buf, char** args);
+
+ int socket;
+ int ttyfd;
+ char lockfile[MaxPathLen+1];
+};
+
+
+struct RequestHeader {
+ int type;
+ int len;
+ // int id; // TODO: Use a transmission id and check whether
+ // response matches request
+};
+
+struct ResponseHeader {
+ int status; /* 0 or errno */
+ // int id;
+};
+
+struct OpenModemRequest {
+ struct RequestHeader header;
+ int deviceNum;
+};
+
+struct RemoveLockRequest {
+ struct RequestHeader header;
+};
+
+struct OpenLockRequest {
+ struct RequestHeader header;
+ int deviceNum;
+ int flags;
+};
+
+struct OpenResolvRequest {
+ struct RequestHeader header;
+ int flags;
+};
+
+struct OpenLogRequest {
+ struct RequestHeader header;
+};
+
+struct SetSecretRequest {
+ struct RequestHeader header;
+ Opener::Auth method; // PAP or CHAP
+ char username[Opener::MaxStrLen+1];
+ char password[Opener::MaxStrLen+1];
+};
+
+struct RemoveSecretRequest {
+ struct RequestHeader header;
+ Opener::Auth method; // PAP or CHAP
+};
+
+struct SetHostnameRequest {
+ struct RequestHeader header;
+ char name[Opener::MaxStrLen+1];
+};
+
+struct ExecDaemonRequest {
+ struct RequestHeader header;
+ char arguments[MAX_CMDLEN+1];
+};
+
+struct KillDaemonRequest {
+ struct RequestHeader header;
+};
+
+struct PPPDExitStatusRequest {
+ struct RequestHeader header;
+};
+
+struct StopRequest {
+ struct RequestHeader header;
+};
+
+union AllRequests {
+ struct RequestHeader header;
+ struct OpenModemRequest modem;
+ struct OpenLockRequest lock;
+ struct RemoveLockRequest unlock;
+ struct OpenResolvRequest resolv;
+ struct SetSecretRequest secret;
+ struct RemoveSecretRequest remove;
+ struct SetHostnameRequest host;
+ struct OpenLogRequest log;
+ struct ExecDaemonRequest daemon;
+ struct ExecDaemonRequest kill;
+ struct PPPDExitStatusRequest status;
+ struct StopRequest stop;
+};
+
+#endif