xref: /haiku/src/add-ons/kernel/network/ppp/shared/libkernelppp/headers/KPPPConfigurePacket.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2003-2004, Haiku Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _K_PPP_CONFIGURE_PACKET__H
7 #define _K_PPP_CONFIGURE_PACKET__H
8 
9 #include <TemplateList.h>
10 #include <net_buffer.h>
11 
12 //!	An abstract configure item.
13 typedef struct ppp_configure_item {
14 	uint8 type;
15 		//!< Item's type.
16 	uint8 length;
17 		//!< Item length (including appended data, if any).
18 	uint8 data[0];
19 		//!< Additional data may be appended to this structure.
20 } ppp_configure_item;
21 
22 
23 class KPPPConfigurePacket {
24 	private:
25 		// copies are not allowed!
26 		KPPPConfigurePacket(const KPPPConfigurePacket& copy);
27 		KPPPConfigurePacket& operator= (const KPPPConfigurePacket& copy);
28 
29 	public:
30 		KPPPConfigurePacket(uint8 code);
31 		KPPPConfigurePacket(net_buffer *packet);
32 		~KPPPConfigurePacket();
33 
34 		bool SetCode(uint8 code);
35 		//!	Returns this packet's code value.
36 		uint8 Code() const
37 			{ return fCode; }
38 
39 		//!	Sets the packet's (unique) ID. Use KPPPLCP::NextID() to get a unique ID.
40 		void SetID(uint8 id)
41 			{ fID = id; }
42 		//!	Returns this packet's ID.
43 		uint8 ID() const
44 			{ return fID; }
45 
46 		bool AddItem(const ppp_configure_item *item, int32 index = -1);
47 		bool RemoveItem(ppp_configure_item *item);
48 		//!	Returns number of items in this packet.
49 		int32 CountItems() const
50 			{ return fItems.CountItems(); }
51 		ppp_configure_item *ItemAt(int32 index) const;
52 		ppp_configure_item *ItemWithType(uint8 type) const;
53 
54 		net_buffer *ToNetBuffer(uint32 MRU);
55 			// the user is responsible for freeing the net_buffer
56 
57 	private:
58 		uint8 fCode, fID;
59 		TemplateList<ppp_configure_item*> fItems;
60 };
61 
62 
63 #endif
64