diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | bcb704366cb5e333a626c18c308c7e0448a8e69f (patch) | |
tree | f0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kppp/opener.h | |
download | tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kppp/opener.h')
-rw-r--r-- | kppp/opener.h | 147 |
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 |