1/*
2 * Copyright 2003-2005, Haiku Inc.
3 * Distributed under the terms of the MIT License.
4 */
5
6#ifndef _K_PPP_OPTION_HANDLER__H
7#define _K_PPP_OPTION_HANDLER__H
8
9#include <KPPPDefs.h>
10
11#ifndef _K_PPP_INTERFACE__H
12#include <KPPPInterface.h>
13#endif
14
15class KPPPConfigurePacket;
16
17
18class KPPPOptionHandler {
19	protected:
20		// KPPPOptionHandler must be subclassed
21		KPPPOptionHandler(const char *name, uint8 type, KPPPInterface& interface,
22			driver_parameter *settings);
23
24	public:
25		virtual ~KPPPOptionHandler();
26
27		virtual status_t InitCheck() const;
28
29		//!	Returns the name of this handler.
30		const char *Name() const
31			{ return fName; }
32
33		//!	Returns the LCP item type this object can handle.
34		uint8 Type() const
35			{ return fType; }
36
37		//!	Returns the owning interface.
38		KPPPInterface& Interface() const
39			{ return fInterface; }
40		//!	Returns the handler's settings.
41		driver_parameter *Settings() const
42			{ return fSettings; }
43
44		//!	Enables or disables this handler.
45		void SetEnabled(bool enabled = true)
46			{ fEnabled = enabled; }
47		//!	Returns if the handler is enabled.
48		bool IsEnabled() const
49			{ return fEnabled; }
50
51		virtual status_t Control(uint32 op, void *data, size_t length);
52		virtual status_t StackControl(uint32 op, void *data);
53			// called by netstack (forwarded by KPPPInterface)
54
55		// we want to send a configure request or we received a reply
56		virtual status_t AddToRequest(KPPPConfigurePacket& request);
57		virtual status_t ParseNak(const KPPPConfigurePacket& nak);
58			// create next request based on these and previous values
59		virtual status_t ParseReject(const KPPPConfigurePacket& reject);
60			// create next request based on these and previous values
61		virtual status_t ParseAck(const KPPPConfigurePacket& ack);
62			// this is called for all handlers
63
64		virtual status_t ParseRequest(const KPPPConfigurePacket& request,
65			int32 index, KPPPConfigurePacket& nak, KPPPConfigurePacket& reject);
66		virtual status_t SendingAck(const KPPPConfigurePacket& ack);
67
68		virtual void Reset();
69
70	protected:
71		status_t fInitStatus;
72
73	private:
74		char *fName;
75		uint8 fType;
76		KPPPInterface& fInterface;
77		driver_parameter *fSettings;
78
79		bool fEnabled;
80};
81
82
83#endif
84